다음은 그레이 스케일 이미지에서 수행되는 내 sobel 필터 함수입니다. 분명히 나는 모든 검정색 이미지를 얻고 있기 때문에 정확한 계산을 수행하지 않을 것입니다. 나는 이미 프로젝트를 시작했지만 그 결과가 옳지 않다는 것이 내게 성가시다. 코드가 일부 개선을 사용할 수 있지만C++에서 sobel 필터 함수를 실행할 때 내가 뭘 잘못하고 있니?
int sobelH[3][3] = { -1, 0, 1,
-2, 0, 2,
-1, 0, 1 },
sobelV[3][3] = { 1, 2, 1,
0, 0, 0,
-1, -2, -1 };
//variable declaration
int mag;
int pix_x, pix_y = 0;
int img_x, img_y;
for (img_x = 0; img_x < img->x; img_x++)
{
for (img_y = 0; img_y < img->y; img_y++)
{
pix_x = 0;
pix_y = 0;
//calculating the X and Y convolutions
for (int i = -1; i <= 1; i++)
{
for (int j = -1; j <= 1; j++)
{
pix_x += (img->data[img_y * img->x + img_x].red + img->data[img_y * img->x + img_x].green + img->data[img_y * img->x + img_x].blue) * sobelH[1 + i][1 + j];
pix_y += (img->data[img_y * img->x + img_x].red + img->data[img_y * img->x + img_x].green + img->data[img_y * img->x + img_x].blue) * sobelV[1 + i][1 + j];
}
}
//Gradient magnitude
mag = sqrt((pix_x * pix_x) + (pix_y * pix_y));
if (mag > RGB_COMPONENT_COLOR)
mag = 255;
if (mag < 0)
mag = 0;
//Setting the new pixel value
img->data[img_y * img->x + img_x].red = mag;
img->data[img_y * img->x + img_x].green = mag;
img->data[img_y * img->x + img_x].blue = mag;
}
}
이것이 문제를 해결하는지 모르겠지만'pix_x'와'pix_y'는 부호가 없지만 음의 값을 산출 할 수있는 계산을 사용하십시오. (; img_x < img-> X, img_x = 0 img_x ++)이 => 수정 – vu1p3n0x
그것은 문제가 해결되지 않고 도움이 vu1p3n0x – Allie
PLZ @ 감사 – flamelite