c言語でソーベルフィルタが作りたい
c言語で画像処理のソーベルのフィルタが作りたいのですが、どうにもうまく動きません。おかしい点をご指摘していただけないでしょうか。一次元配列で作りたいです。
/*wiは読み込んだ画素値、woは書き出す画素値、m1,m2はフィルタ係数、widthは画像の幅、heightは画像の高さ*/
void sobel(unsigned char wi[], unsigned char wo[], char m1[],char m2[],int width, int height){
int i,j,k,l,z;
unsigned char *w;
unsigned char *wo2;
w = (char*)malloc(sizeof(char)*(MW*MH));
wo2 = (char*)malloc(sizeof(char)*(MW*MH));
/*フィルタの適用*/
for(i=width+1; i<width*height; i++)
wo[i]=wi[i-1-width]*m1[0]+wi[i-width]*m1[1]+wi[i+1-width]*m1[2]+wi[i-1]*m1[3]+wi[i]*m1[4]+wi[i+1]*m1[5]+wi[i-1+width]*m1[6]+wi[i+width]*m1[7]+wi[i+1+width]*m1[8];
for(j=width+1; j<width*height; j++)
wo2[j]=wi[j-1-width]*m2[0]+wi[j-width]*m2[1]+wi[j+1-width]*m2[2]+wi[j-1]*m2[3]+wi[j]*m2[4]+wi[j+1]*m2[5]+wi[j-1+width]*m2[6]+wi[j+width]*m2[7]+wi[j+1+width]*m2[8];
for(k=width+1; k<width*height; k++)
wo[k] = (unsigned char)sqrt(wo[k]*wo[k]+wo2[k]*wo2[k]);
/*画素値を0から255に*/
for(l=width+1; l<width*height; l++){
if((unsigned char)wo[l] < 0)
w[l] = 0;
else if((unsigned char)wo[l] > 255)
w[l] = 255;
else
w[l] = wo[l];
}
for(z=width+1; z<width*height; z++)
wo[z] = w[z];
free(w);
free(wo2);
}
よろしくお願いしますm(_ _)m