implement 33 box filter by using C programming languageSolut
implement 3*3 box filter by using C# programming language??
Solution
I have created a function box_filter for 3*3 filter.Use this fuction in any c code for 3*3 image filter.
public int[] box_filter(
int[] pix,int width, int height, float[] krnl) {
int[] temp = new int[width*height] ;
float denom = 0.0f ;
float red, green, blue ;
int ired, igreen, iblue, index_off, rgb ;
int[] indi = {
-(width + 1), -width, -(width - 1),
-1, 0, +1,
width - 1, width, width + 1
} ;
for (int i=0;i<krnl.length;i++)
denom += krnl[i] ;
if (denom==0.0f) denom = 1.0f ;
for (int i=1;i<height-1;i++) {
for (int j=1;j<width-1;j++) {
red = green = blue = 0.0f ;
index_off = (i*width)+j ;
for (int k=0;k<krnl.length;k++) {
rgb = pix[index_off+indi[k]] ;
red += ((rgb & 0xff0000)>>16)*krnl[k] ;
green += ((rgb & 0xff00)>>8)*krnl[k] ;
blue += (rgb & 0xff)*krnl[k] ;
}
ired = (int)(red / denom) ;
igreen = (int)(green / denom) ;
iblue = (int)(blue / denom) ;
if (ired>0xff) ired = 0xff ;
else if (ired<0) ired = 0 ;
if (igreen>0xff) igreen = 0xff ;
else if (igreen<0) igreen = 0 ;
if (iblue>0xff) iblue = 0xff ;
else if (iblue<0) iblue = 0 ;
temp[index_off] = 0xff000000 | ((ired<<16) & 0xff0000) |
((igreen<<8) & 0xff00) | (iblue & 0xff) ;
}
}
return temp ;
}
