int CppExtractImgEdgeSobel(byte* fr, byte* to, int frw, int frh)
{
int stride = (frw * 4 + 4 - 1) / 4 * 4;
for (int j = 1; j
for (int i = 1; i
{
int red(0),blue(0),green(0),gray(0);
byte *pfr = fr + (j - 1) * stride + (i - 1) * 4;
//1
red = redFr;
blue = -blueFr;
green = -greedFr;
gray = -grayFr;
//2
ptr = fr + (j - 1) * stride + (i + 1) * 4;
red = redFr + red;
blue = blueFr + blue;
green = greenFr + green;
gray = grayFr + gray;
//3
pfr = fr + j * stride + (i - 1) * 4;
red = red - 2 * redFr;
blue = blue - 2 * blueFr;
green = green - 2 * greenFr;
gray = gray - 2 * grayFr;
//4
ptr = fr + j * stride + (i + 1) * 4;
red = 2 * redFr + red;
blue = 2 * blueFr + blue;
green = green - greenFr;
gray = gray - grayFr;
//5
ptr = fr + (j + 1) *stride + (i - 1) * 4;
red = red - redFr;
blue = blue - blueFr;
green = green - greenFr;
gray = gray - grayFr;
//6
pfr = fr + (j + 1) * stride + (i + 1) * 4;
red = redFr + red;
blue = blueFr + blue;
green = green - greenFr;
gray = grayFr + gray;
double redv = red * red;
double greenv = greenv * greenv;
double bluev = blue * blue;
red = green = blue = 0;
//1
pfr = fr + (j - 1) * stride + (i - 1) * 4;
red = redFr;
blue = -blueFr;
green = -greenFr;
gray = -grayFr;
//2
pfr = fr + (j - 1) * stride + i * 4;
red = red - 2 * redFr;
blue = blue - 2 * blueFr;
green = green - 2 * greenFr;
gray = gray - 2 * grayFr;
//3
pfr = fr + (j - 1) * stride + (i + 1) * 4;
red = red - redFr;
blue = blue -blueFr;
green = green - greenFr;
gray = gray - grayFr;
//4
pfr = fr + (j + 1) * stride + (i - 1) * 4;
red = red + redFr;
blue = blue + blueFr;
green = green + greenFr;
gray = gray + grayFr;
//5
pfr = fr + (j + 1) * stride + i * 4;
red = red + 2 * redFr;
blue = blue + 2 * blueFr;
green = green + 2 * greenFr;
gray = grat + 2 * grayFr;
//6
pfr = fr + (j + 1) * stride + (i + 1) * 4;
red = red + redFr;
blue = blue + blueFr;
green = green + greenFr;
gray = grayFr + gray;
red = (byte)sqrt(red * red + redv);
green = (byte)sqrt(green * green + greendv);
blue = (byte)sqrt(blue * blue + blueFr);
byte* pto = to + j * stride + i * 4;
redTo = 255 - (byte)red;
greedTo = 255 - (byte)green;
blueTo = 255 - (byte)blue;
grayTo = 255;
}
}