48 lines
1.5 KiB
Text
48 lines
1.5 KiB
Text
![]() |
(* 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 <<n,m,k,kl,kt,kr,kb :int>> (t:int^n^m; line : int^m; i :int) returns (r :int^m)
|
||
|
let
|
||
|
r = mapi<<m>> (kernel_1<<n,m,k,kl,kt,kr,kb>>)(<t,i>) (line)
|
||
|
tel
|
||
|
|
||
|
fun convol_1 <<n,m,k,kl,kt,kr,kb :int>> (t:int^n^m) returns (r :int^n^m)
|
||
|
let
|
||
|
r = mapi<<n>> ( convol_1_h<<n,m,k,kl,kt,kr,kb>> ) (<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 <<n,m,ktt,klt,kt,ktr,kll,kl,k,kr,krr,kbl,kb,krb,kbb :int>> (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<<n,m,ktt,klt,kt,ktr,kll,kl,k,kr,krr,kbl,kb,krb,kbb :int>> (t:int^n^m; line : int^m; i :int) returns (r :int^m)
|
||
|
let
|
||
|
r = mapi<<m>> (kernel_2<<n,m,ktt,klt,kt,ktr,kll,kl,k,kr,krr,kbl,kb,krb,kbb>>) (<t,i>) (line)
|
||
|
tel
|
||
|
|
||
|
fun convol_2<<n,m,ktt,klt,kt,ktr,kll,kl,k,kr,krr,kbl,kb,krb,kbb :int>>(t:int^n^m) returns (r :int^n^m)
|
||
|
let
|
||
|
r = mapi<<n>> (convol_2_h<<n,m,ktt,klt,kt,ktr,kll,kl,k,kr,krr,kbl,kb,krb,kbb>>) (<t>) (t)
|
||
|
tel
|
||
|
|