微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

图像-检测低对比度边缘

如何解决图像-检测低对比度边缘

我有一幅对比度变化高低的图片

enter image description here

我需要检测上图中的边缘。我需要二进制图像。我可以使用Sobel运算符和阈值轻松检测出黑色和“深色”蓝色边缘。

但是,“浅”蓝色和“浅”黄色之间的边缘是有问题的。

我首先从每个通道的中值滤波器具有平滑图像的角度开始消除噪声。

我已经尝试检测边缘的东西:

  • Sobel运算符
  • Canny运算符
  • 拉普拉斯
  • 灰度,RGB,HSV,LUV色彩空间(具有多通道空间,在每个通道中检测边缘,然后将它们组合在一起以创建一个最终的边缘图像)
  • 使用伽玛校正对RGB图像进行预处理(预处理的问题是图像压缩。源图像是JPG,如果使用预处理,边缘检测通常以JPG宏块引起的可见网格结尾。)

到目前为止,在RGB上使用Sobel效果最好,但低对比度线也是低对比度。

enter image description here

进一步的阈值移除该部分。我认为所有处于某些灰色值下的东西都处于边缘。如果我使用像250这样的高阈值值,则低对比度边缘的结果会更好,但其余边缘会被破坏。我也不喜欢低对比度边缘的缝隙。

enter image description here

因此,如果我进一步更改阈值并说除白色以外的所有边缘,那么到处都是边缘。

enter image description here

您是否还有其他想法如何结合低对比度和高对比度边缘检测,以使边缘尽可能没有间隙,并且也不会在整个位置出现?

注意:为进行测试,我主要使用OpenCV,而OpenCV中不可用的东西,我自己编程

解决方法

IMO这几乎是不可能的,如果您想要一个自动化的解决方案,那根本不可能。

在这里,我通过将每个像素分配给代表蓝色和黄色的两种颜色中最接近的颜色,在RGB空间中使用了二值化。 (我选择了孤立的像素,但选择一个区域的平均值会更好。)

enter image description here

也许k均值分类器可以实现这一目标?


更新

k-means分类器可以提供5种类别。

enter image description here

,

请向Yves表示所有敬意,并提出可能的解决方案。我在玩这个游戏的过程中玩得很开心,感觉就像共享一些实际的代码,以备将来参考之用。我只是在Terminal中使用了 ImageMagick ,但是您可以使用Wand在Python中完成相同的操作。

因此,要获得5种颜色的K均值聚类分割,您可以执行以下操作:

magick edge.png -kmeans 5 result.png

enter image description here

如果要在下面显示检测到的颜色样本,可以执行以下操作:

magick edge.png \( +clone -kmeans 5 -unique-colors -scale "%[width]x20\!" \) -background none -smush +10 result.png

enter image description here

关键字:Python,ImageMagick,魔杖,图像处理,分割,k均值,聚类,样本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。