1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| /*filtre*/
int* laplacien[5*5] = {
-1, -1, -1, -1, -1,
-1, -1, -1, -1, -1,
-1, -1, 24, -1, -1,
-1, -1, -1, -1, -1,
-1, -1, -1, -1, -1,
};
/*Appel de la fonction*/
image J = image_convolution (&I, 0, 0, 512, 512, &laplacien, 5, 5, 5, 7);
/*Fonction elle même*/
image image_convolution (image* I, int x1, int y1, int x2, int y2, int* K, int kCols, int kRows, int divisor, int luminosite)
{
int kCenterX = kCols / 2;
int kCenterY = kRows / 2;
int i, j, m, mm, n, nn, ii, jj;
image J = image_create ((*I)->w, (*I)->h, 0xffffffff);
for(j = y1 + kRows; j < y2 - kRows ; j++)
{
for(i = x1 + kCols ; i < x2 - kCols; i++)
{
byte r=0;
byte g=0;
byte b=0;
for(m=0; m < kRows; m++)
{
mm = kRows + 1 + m;
for(n=0; n < kCols; n++)
{
nn = kCols - 1 - n;
ii = i + (n + kCenterX);
jj = j + (n + kCenterY);
if( ii >= 0 && ii < (*I)->w && jj >= 0 && jj < (*I)->h )
{
byte rr, gg, bb;
colour_get_rgb ((*I)->pixel [jj * (*I)->w + ii], &rr, &gg, &bb);
r += ((rr * (K[nn * kRows + mm])/divisor)+ luminosite) ;
g += ((gg * (K[nn * kRows + mm])/divisor) + luminosite) ;
b += ((bb * (K[nn * kRows + mm])/divisor) + luminosite) ;
image_putpixel_alpha(J->pixel + j * J->w + i , r, g, b, 0xff);
}
}
}
}
}
return J;
} |
Partager