【发布时间】:2019-03-25 14:33:10
【问题描述】:
我正在尝试自己实现一个 Sobel 过滤器。
我得到的结果和这个很像(灰色):
但不是这样(黑白渐变):
我曾尝试使用阈值,但感觉不对:
有没有什么方法可以把灰度变成黑白渐变结果?
以下是我在 C# 中过滤图像的步骤:
- 从文件转换位图(已经是灰度)
-
使用 Sobel 核对每个像素进行卷积(例如水平)
私有静态浮点[][] Sobel3x3Kernel_Horizontal() {return new float[][] { new float[]{ 1, 2, 1}, new float[]{ 0, 0, 0 }, new float[]{ -1, -2, -1} }; } 重新映射所有值,让它们落在0~255的范围内(否则会出现负值或大于255的值,不能用来做Bitmap.SetPixel(int x, int y,颜色颜色)
输出位图结果(灰度)
【问题讨论】:
-
将所有负值设置为零
-
感谢您的回答!但是在执行(第 3 步)“重新映射”步骤之前,卷积后获得的像素值在 -565 ~ 616 范围内。我可以将所有负值设置为零,但是对于大于0 获得渐变的黑白结果?
-
只有一个,如果其他像
if (pixel > 255) { pixel = 255; } else if(pixel < 0) { pixel = 0; } -
再次感谢...不幸的是,我照你说的做了drive.google.com/file/d/1oMk9CDLlwWJOvUkD8SctLR7azFq3aqUf/… 但是结果仍然保持不变(灰度)...drive.google.com/file/d/1vNxaAvGURFWo4gISfvNs7sDBpAjQ_PN3/… 这行代码有问题吗第一张照片? c = Color.FromArgb(255, value, value, value);
标签: c# image-processing sobel