【发布时间】:2020-12-16 07:39:31
【问题描述】:
我有一张带有高对比度和低对比度过渡的图片。
我需要检测上图中的边缘。我需要二进制图像。我可以使用 Sobel 算子和阈值轻松检测黑色和“深”蓝色边缘。
但是,“浅”蓝色和“浅”黄色之间的边缘是有问题的。
我从平滑图像开始,每个通道使用中值滤波器来去除噪声。
我已经尝试过检测边缘:
- Sobel 算子
- Canny 算子
- 拉普拉斯
- 灰度、RGB、HSV、LUV 颜色空间(使用多通道空间,在每个通道中检测边缘,然后组合在一起以创建最终的边缘图像)
- 使用伽马校正预处理 RGB 图像(预处理的问题是图像压缩。源图像是 JPG,如果我使用预处理边缘检测通常以 JPG 宏块引起的可见网格结束。)
到目前为止,RGB 上的 Sobel 效果最好,但低对比度线也是低对比度的。
进一步阈值化删除这部分。我认为边缘所有处于某个灰度值之下的东西。如果我使用像 250 这样的高阈值,低对比度边缘的结果会更好,但剩余的边缘会被破坏。我也不喜欢低对比度边缘的间隙。
所以,如果我进一步更改阈值并说除白色之外的所有内容都是边缘,那么我到处都有边缘。
您是否有其他想法如何结合低对比度和高对比度边缘检测,以使边缘尽可能没有间隙,也不会到处都是?
注意:对于测试,我主要使用 OpenCV,而 OpenCV 中没有的东西,我自己编程
【问题讨论】:
-
你对你要找的线路还有其他的了解吗?例如。它总是平行于其他边缘吗?总是相似的距离?两边的颜色总是黄色和蓝色吗?
-
是的,这条线大部分与其他边缘平行,并且在单个图像中距离可以被认为是相似的。外部颜色总是黄色(它是背景),但其他颜色可以不同。
-
我尝试在 HSV 中使用黄色信息,但在 H 通道中两种颜色无法区分。 S 更好,但仍与仅 V 非常相似(仅与输入图像的灰度非常相似)。
-
这是压缩图,有没有更好的原图?
-
@YvesDaoust 很遗憾,原始数据丢失了,因为数据被保存为 70% 质量的 JPG(这是一个相当大的问题,因为某些操作会导致可见的 JPG 宏块)。
标签: image-processing edge-detection