我的应用程序遇到了非常奇怪的问题,该应用程序旨在将 Sobel 过滤器应用于图像。
问题是每次我的图像都会增加并移动一点。乘数取决于图片大小。
这是一个示例:
初始图像
添加过滤器后
为简单起见,我现在只研究一种颜色和一把斧头。
这是 Sobel 滤波器的代码:
///sobel code
int SY[3][3] = {{ 1, 2, 1},
{ 0, 0, 0},
{-1, -2, -1}};
int sobY,sobX,sobI,sobJ;
long sumX,sumY;
int SUM;
for(sobX = 0;sobX<=(x-1);sobX++)
{
for(sobY = 0;sobY<=(y-1);sobY++)
{
sumY = 0;
sumX = 0;
if(sobY==0||sobY==(y-1))
{
SUM = 0;
} else if(sobX==0||sobX==(x-1))
{
SUM = 0;
} else
{
///Y gradient
for(sobI=-1;sobI<=1;sobI++)
{
for(sobJ=-1;sobJ<=1;sobJ++)
{
sumY = sumY + (int)(red[sobX+sobI][sobY+sobJ] * SY[sobI+1][sobJ+1]);
}
}
SUM = abs(sumX) + abs(sumY);
}
if(SUM>255)
SUM = 255;
if(SUM<0)
SUM = 0;
outputRed[sobX][sobY] = 255 - SUM;
}
}
可以在此处找到简化代码以及示例图像:https ://db.tt/szpEMZ3f
我已经测试了没有过滤器的读取和保存,所以这个片段:
outputRed[sobX][sobY] = 255 - SUM;
看起来像那样
outputRed[sobX][sobY] = red[sobX][sobY];
这可以正常工作。
有人可以告诉我这段代码有什么问题吗?