I have 1 code about 8 mask sobel as follows. Please help me.
Code:
#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int sobel1[3][3]={{1,2,1},{0,0,0},{-1,-2,-1}};
int sobel2[3][3]={{2,1,0},{1,0,-1},{0,-1,-2}};
int sobel3[3][3]={{1,0,-1},{2,0,-2},{1,0,-1}};
int sobel4[3][3]={{0,-1,-2},{1,0,-1},{2,1,0}};
int sobel5[3][3]={{-1,-2,-1},{0,0,0},{1,2,1}};
int sobel6[3][3]={{-2,-1,0},{-1,0,1},{0,1,2}};
int sobel7[3][3]={{-1,0,1},{-2,0,2},{-1,0,1}};
int sobel8[3][3]={{0,1,2},{-1,0,1},{-2,-1,0}};
IplImage *img,*grayImg,*imgSobel1,*imgSobel2,*imgSobel3,*imgSobel4,*imgSobel5,*imgSobel6,*imgSobel7,*imgSobel8;
void mask(IplImage *grayImg,IplImage *resultImg,int mask[3][3]){
int rows=grayImg->height;
int cols=grayImg->width;
int step=grayImg->widthStep;
int dx[]={-1,-1,-1,0,0,0,1,1,1};
int dy[]={-1,0,1,-1,0,1,-1,0,1};
uchar * grayData=(uchar *)grayImg->imageData;
uchar * resultData=(uchar *)resultImg->imageData;
int i,j,k;
// My question Is why i isn't equal 0 ~> equal 1
for(i=1;i<rows-1;i++)
for(j=1;j<cols-1;j++){
resultData[i*step+j]=0;
for(k=0;k<9;k++)
// My question: You explain help me significance of line this code
resultData[i*step+j]+=mask[1+dx[k]][1+dy[k]]*grayData[(i+dx[k])*step+j+dy[k]];
}
}
int _tmain(int argc, _TCHAR* argv[])
{
img=cvLoadImage("../../test.jpg");
grayImg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
imgSobel1=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
imgSobel2=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
imgSobel3=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
imgSobel4=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
imgSobel5=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
imgSobel6=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
imgSobel7=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
imgSobel8=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvCvtColor(img,grayImg,CV_BGR2GRAY);
mask(grayImg,imgSobel1,sobel1);
mask(grayImg,imgSobel2,sobel2);
mask(grayImg,imgSobel3,sobel3);
mask(grayImg,imgSobel4,sobel4);
mask(grayImg,imgSobel5,sobel5);
mask(grayImg,imgSobel6,sobel6);
mask(grayImg,imgSobel7,sobel7);
mask(grayImg,imgSobel8,sobel8);
cvNamedWindow("Orginal Image",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Gray Image",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Sobel 1",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Sobel 2",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Sobel 3",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Sobel 4",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Sobel 5",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Sobel 6",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Sobel 7",CV_WINDOW_AUTOSIZE);
cvNamedWindow("Sobel 8",CV_WINDOW_AUTOSIZE);
cvShowImage("Orginal Image",img);
cvShowImage("Gray Image",grayImg);
cvShowImage("Sobel 1",imgSobel1);
cvShowImage("Sobel 2",imgSobel2);
cvShowImage("Sobel 3",imgSobel3);
cvShowImage("Sobel 4",imgSobel4);
cvShowImage("Sobel 5",imgSobel5);
cvShowImage("Sobel 6",imgSobel6);
cvShowImage("Sobel 7",imgSobel7);
cvShowImage("Sobel 8",imgSobel8);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&img);
cvReleaseImage(&grayImg);
cvReleaseImage(&imgSobel1);
cvReleaseImage(&imgSobel2);
cvReleaseImage(&imgSobel3);
cvReleaseImage(&imgSobel4);
cvReleaseImage(&imgSobel5);
cvReleaseImage(&imgSobel6);
cvReleaseImage(&imgSobel7);
cvReleaseImage(&imgSobel8);
return 0;
}