I tried to modify the SobelFilter example to average filter, or filter with coefficients fixed by user.
The function SobelTex, in SobelFilter_kernel.cu, uses a 3x3 matrix.
If I want to use a 5x5 matrix, I have to change the blockDim of the call from 384 to 128, otherwise it is not functional… External Image
If I want to use a 7x7 matrix, I have to change the blockDim to 64.
Why ? What element affect the blockDim for wich it’s functional ?
Here my functions :
5x5 :
SobelTex:
unsigned char pix[25];
int cpt = 0;
unsigned char *pSobel =
(unsigned char *) (((char *) pSobelOriginal)+blockIdx.x*Pitch);
for ( int i = threadIdx.x; i < w; i += blockDim.x )
{
for (int j = -2; j <= 2; j++)
for (int k = -2; k <= 2; k++)
{
p[cpt] = tex2D( tex, (float) i-k, (float) blockIdx.x-j );
cpt++;
}
pSobel[i] = ComputeSobel5(p);
cpt = 0;
}
ComputeSobel:
float Sum = p[0]*mat5[0] + p[1]*mat5[1] + p[2]*mat5[2] + p[3]*mat5[3] + p[4]*mat5[4] +
p[5]*mat5[5] + p[6]*mat5[6] + p[7]*mat5[7] + p[8]*mat5[8] + p[9]*mat5[9] +
p[10]*mat5[10] + p[11]*mat5[11] + p[12]*mat5[12] + p[13]*mat5[13] + p[14]*mat5[14] +
p[15]*mat5[15] + p[16]*mat5[16] + p[17]*mat5[17] + p[18]*mat5[18] + p[19]*mat5[19] +
p[20]*mat5[20] + p[21]*mat5[21] + p[22]*mat5[22] + p[23]*mat5[23] + p[24]*mat5[24];
Sum = Sum/25.0f;
return ((short)Sum);
mat5 table contains coefficients. It’s the same thing for 7x7 matrix.
Thanks for reply External Image