首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sobel图像处理

Sobel图像处理
EN

Stack Overflow用户
提问于 2015-10-21 00:08:23
回答 1查看 42关注 0票数 0

我的算法输出是错误的。我尝试了许多解决方案,但都没有结果。查看我的结果。SourceImage

I'm sorry Lena

代码语言:javascript
复制
for (int x = 1; x < fimage.Bitmap.Width - 1; x++)
{
    for (int y = 1; y < fimage.Bitmap.Height - 1; y++)
    {
        double sumX = 0, sumY = 0, sum = 0;

        for ( int i = -1; i <= 1; i++ )
        {
            for ( int j = -1; j <= 1; j++ )
            {
                sumX += fimage[y + i, x + j].R * kernel1[i + 1, j + 1];
                sumY += fimage[y + i, x + j].R * kernel2[i + 1, j + 1];
            }
        }

        sum = Math.Sqrt(sumX * sumX + sumY * sumY);
        sum = sum > 255 ? 255 : sum < 0 ? 0 : sum;
        fimage[x, y] = Color.FromArgb((byte)sum, (byte)sum, (byte)sum);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-10-21 00:33:26

有两件事是可疑的:

代码语言:javascript
复制
    for ( int j = -1; j <= 1; j++ )
    {
        sumX += fimage[y + i, x + j].R * kernel1[i + 1, j + 1];
        sumY += fimage[y + i, x + j].R * kernel2[i + 1, j + 1];
    }

你在这里只考虑图像的红色部分,为什么?另一件主要的事情是在迭代的同时改变输入图片:

代码语言:javascript
复制
                sum = Math.Sqrt(sumX * sumX + sumY * sumY);
                sum = sum > 255 ? 255 : sum < 0 ? 0 : sum;
                fimage[x, y] = Color.FromArgb((byte)sum, (byte)sum, (byte)sum);

您应该将该值保存到不同的输出图像中(使用源图像中的尺寸创建new Bitmap(fimage.Width, fimage.Height) )。这可以解释你的图片中奇怪的对角对称,那里基本上是另一边的对称副本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33241537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档