Numpy 沿路径采样阵列

Numpy 沿路径采样阵列,numpy,matplotlib,scipy,Numpy,Matplotlib,Scipy,我有一个二进制图像: 作为0和1值的numpy数组 我想沿着路径每10个像素对其进行采样,如: 我知道如何通过切片阵列对正交对象进行采样,但我不知道如何处理不规则形状,并获得均匀分布的“点集”。您可以使用OpenCV通过findContours查找路径。这是演示代码,x&y是路径上像素的坐标 import numpy as np import cv2 import pylab as pl img = cv2.imread("img.png") img = cv2.cvtColor(img,

我有一个二进制图像:

作为0和1值的numpy数组

我想沿着路径每10个像素对其进行采样,如:


我知道如何通过切片阵列对正交对象进行采样,但我不知道如何处理不规则形状,并获得均匀分布的“点集”。

您可以使用OpenCV通过
findContours
查找路径。这是演示代码,
x
&
y
是路径上像素的坐标

import numpy as np
import cv2
import pylab as pl
img = cv2.imread("img.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,img = cv2.threshold(img,127,255,0)
r = cv2.findContours(255-img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
c = r[0][0]
x, y = cc[::10, 0, 0], cc[::10, 0, 1]
pl.figure(figsize=(10, 10))
pl.imshow(img, cmap="gray", interpolation="nearest")
pl.plot(cc[::10, 0, 0], cc[::10, 0, 1], "o")
以下是输出:


我只是从路径上每隔10点选择一个点,所以附近两个点之间的距离不一样。但是,您可以使用一些插值方法将路径转换为平滑曲线,然后找到等距点。

您需要首先对路径进行参数化。如果这是唯一的方法,那就太麻烦了,因为上面的图像太简单了。汉克斯,效果很好!我尝试使用ndimage标签/查找对象函数,然后通过三角测量,但从未实现。