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

时间:2014-01-08 19:52:51

标签: c image-processing ppm

我的应用程序存在一个非常奇怪的问题,即将Sobel滤镜应用于图像。

问题是,每次我的图像成倍增加并移动一点。乘法数取决于图片大小。

这是一个示例:

初始图片

initial image

添加filtr后

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

这是正常的。

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

1 个答案:

答案 0 :(得分:0)

SY的维度为[3][3],但您的值正在初始化为[2][14]。这是经典的未定义行为。