(* Deal with matrix of size n*m, apply coeff : kt kl k kr kb centered on [>i<][>j<]. *) fun kernel_1 << n,m,k,kl,kt,kr,kb :int>> (t :int^n^m; i,x,j :int) returns (r :int) let r = k*t[>i<][>j<] + kl*t[>i<][>j-1<] + kt*t[>i-1<][>j<] + kr*t[>i<][>j+1<] + kb*t[>i+1<][>j<] tel fun convol_1_h <> (t:int^n^m; line : int^m; i :int) returns (r :int^m) let r = mapi<> (kernel_1<>)<(t,i)> (line) tel fun convol_1 <> (t:int^n^m) returns (r :int^n^m) let r = mapi<> ( convol_1_h<> ) <(t)> (t) tel (* Deal with matrix of size n*m, apply coeff : ktt klt kt ktr kll kl k kr krr kbl kb krb kbb centered on [>i<][>j<]. *) fun kernel_2 <> (t :int^n^m; i,x,j :int) returns (r :int) let r = ktt*t[>i-2<][>j<]+ klt*t[>i-1<][>j-1<]+ kt*t[>i-1<][>j<]+ ktr*t[>i-1<][>j+1<]+ kll*t[>i<][>j-2<]+ kl*t[>i<][>j-1<]+ k*t[>i<][>j<]+ kr*t[>i<][>j+1<]+ krr*t[>i<][>j+2<]+ kbl*t[>i+1<][>j-1<]+ kb*t[>i+1<][>j<]+ krb*t[>i+1<][>j+1<]+ kbb*t[>i+2<][>j<]; tel fun convol_2_h<> (t:int^n^m; line : int^m; i :int) returns (r :int^m) let r = mapi<> (kernel_2<>) <(t,i)> (line) tel fun convol_2<>(t:int^n^m) returns (r :int^n^m) let r = mapi<> (convol_2_h<>) <(t)> (t) tel