【发布时间】:2014-01-27 02:51:00
【问题描述】:
我的应用程序遇到了非常奇怪的问题,该应用程序旨在将 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];
这可以正常工作。
谁能告诉我这段代码有什么问题?
【问题讨论】:
标签: c image-processing ppm