【问题标题】:Approximate polygons from image (map)图像(地图)中的近似多边形
【发布时间】:2015-12-01 15:53:51
【问题描述】:

所以我有这张地图:

我已经进行了一些过滤,现在我得到了以下图像:

最后,我想找到图像中每个多边形的坐标,但是使用 find_contours 函数并没有给我很好的结果,如下图所示。

在左侧,您可以看到找到的所有等高线(多边形)(每个都用一种颜色),而在右侧,它是找到的多边形示例(这显然是错误的)。

拥有黑白图像,如何找到其中每个多边形的坐标?

【问题讨论】:

  • 那么相邻的多边形会共享​​>边界上的点吗?
  • 分享积分不是绝对必要的。如果它们足够接近就可以了
  • 我知道您没有使用 OpenCV(但可能某些功能在某些 python 包中实现。)看看here。可以使用分水岭找到所有封闭区域,然后可以分别找到每个区域的等高线。
  • @Ivan:你能展示一下你使用的算法吗?我下载了你的黑白图片,边界漏了。这可能是您的问题的一部分。
  • @FrankM 那是真正的问题。获得黑白图像后,我进行了二进制膨胀,线条正确闭合,因此轮廓查找算法给出了正确的结果。

标签: python numpy image-processing scipy scikit-image


【解决方案1】:

所以当我下载图像时,我得到了一个非常不连贯的图像。所以我所做的就是扩张它。

import numpy as np
from skimage import io, measure, morphology

img = io.imread('img.png', as_grey=True)
img = morphology.binary_dilation(img, selem=np.ones((5,5)))

然后我所做的就是用黑色反转白线,用这个将区域反转为白色

img_inverted = np.invert(img)

一旦你有了倒置的图像,标记它以便于处理。

img_inverted_labeled = measure.label(img_inverted)
n_lbls = np.unique(img_inverted_labeled)[1:]

现在附加每个部分的多边形。

pols = []
for i in n_lbls:
  img_part = (img_inverted_labeled == i)
  pols.append(measure.find_contours(img_part, level=0)[0])

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2021-12-09
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多