【问题标题】:Image - detect low contrast edge图像 - 检测低对比度边缘
【发布时间】: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


【解决方案1】:

如果您想要一个自动化的解决方案,这几乎是不可能的,如果完全可行的话。

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

也许 k-means 分类器可以做到这一点?


更新:

这是一个 k-means 分类器可以给出的,有 5 个类。

【讨论】:

  • 谢谢。我使用了 pngQuant 库 (link) 中的量化并将图像划分为图块 - 每个图块具有不同的量化,因此边框清晰可见。
【解决方案2】:

感谢 Yves 提出可能的解决方案。我在试验这个过程中获得了一些乐趣,并且想分享一些实际的代码,以供我自己将来参考。我刚刚在终端中使用了 ImageMagick,但是您可以在 Python 中使用 Wand 执行相同的操作。

因此,要获得 5 种颜色的 K-means 聚类分割,您可以这样做:

magick edge.png -kmeans 5 result.png

如果您想要下方检测到的颜色样本,您可以这样做:

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

关键字:Python、ImageMagick、魔杖、图像处理、分割、k-means、聚类、样本。

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 2020-10-11
    • 2015-04-24
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    相关资源
    最近更新 更多