gpt4 book ai didi

c - Sobel 过滤后的奇怪(倍增)PPM 图像

转载 作者:行者123 更新时间:2023-11-30 17:41:46 26 4
gpt4 key购买 nike

我的应用程序遇到了非常奇怪的问题,该应用程序旨在将 Sobel 滤镜应用于图像。

问题是每次我的图像都会被放大并移动一点。乘法次数取决于图片大小。

这是一个示例:

初始图像

initial image

添加过滤器后

out picture

为了简单起见,我现在只使用一种颜色和一把斧头。

这是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];

这可以正常工作。

有人可以告诉我这段代码有什么问题吗?

最佳答案

您的 SY 尺寸为 [3][3],但您将初始化值最大为 [2][14]。这是典型的未定义行为。

关于c - Sobel 过滤后的奇怪(倍增)PPM 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com