diff --git a/test/good/image_filters.ept b/test/good/image_filters.ept new file mode 100644 index 0000000..e156eb0 --- /dev/null +++ b/test/good/image_filters.ept @@ -0,0 +1,58 @@ +(* 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 >> (t :int^n^m; i,j :int; x :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; i :int; line : int^m) returns (r :int^m) +let + r = mapi<> (kernel_1_1<>) () (line) +tel + +fun convol_1 <> (t:int^n^m) returns (r :int^n^m) +let + r = mapi<> (convol_h<>) () (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,j :int; x :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_1_h<> (t:int^n^m; i :int; line : int^m) returns (r :int^m) +let + r = mapi<> (kernel_1_1<>) () (line) +tel + +fun convol_1<>(t:int^n^m) returns (r :int^n^m) +let + r = mapi<> (convol_h<>) () (t) +tel + + +fun pip_line<> (line1 :int^m1; line2 :int^m2) returns (r :int^m1) +let + r = line1[0 .. y-1] @ line2 @ line1[y+m2 .. m1-1] +tel + +fun pip<> (t1 :int^n1^m1; t2 :int^n2^m2) returns (r :int^n1^m1) +let + t12 = map2<> (pip_line<>) (t1[x..x+n2-1], t2); + r = t1[0 .. x-1] @ t12 @ t1[x+n2 .. n1-1]; +tel