4 General convolution for 2d decoupled filters
5 end effects are acounted for by increasing
6 scaling the result with the sum of used coefficients
8 coeff: (float array) coefficients for filter
9 len: length of filter.. number of coefficients
10 note that this has to be an odd number
11 (since the filter is even);
15 i_conv(i_img *im,float *coeff,int len) {
22 mm_log((1,"i_conv(im* 0x%x,coeff 0x%x,len %d)\n",im,coeff,len));
24 i_img_empty_ch(&timg,im->xsize,im->ysize,im->channels);
29 for(l=0;l<im->ysize;l++) {
30 for(i=0;i<im->xsize;i++) {
32 for(ch=0;ch<im->channels;ch++) res[ch]=0;
34 if (i_gpix(im,i+c-center,l,&rcolor)!=-1) {
35 for(ch=0;ch<im->channels;ch++)
36 res[ch]+=(float)(rcolor.channel[ch])*coeff[c];
39 for(ch=0;ch<im->channels;ch++) {
40 double temp = res[ch]/pc;
42 temp < 0 ? 0 : temp > 255 ? 255 : (unsigned char)temp;
44 i_ppix(&timg,i,l,&rcolor);
48 for(l=0;l<im->xsize;l++)
50 for(i=0;i<im->ysize;i++)
53 for(ch=0;ch<im->channels;ch++) res[ch]=0;
55 if (i_gpix(&timg,l,i+c-center,&rcolor)!=-1)
57 for(ch=0;ch<im->channels;ch++)
58 res[ch]+=(float)(rcolor.channel[ch])*coeff[c];
61 for(ch=0;ch<im->channels;ch++) {
62 double temp = res[ch]/pc;
64 temp < 0 ? 0 : temp > 255 ? 255 : (unsigned char)temp;
66 i_ppix(im,l,i,&rcolor);