h, theta, d = transform.hough_line(outlines)
for acum, angle, dist in zip(*transform.hough_line_peaks(h, theta, d)):
y0 = (dist - 0 * np.cos(angle)) / np.sin(angle)
y1 = (dist - outlines.shape[1] * np.cos(angle)) / np.sin(angle)
x0 = ...
x1 = ...
rr,cc,_ = draw.line_aa(x0,y0,x1,y1)
我想要的是轮廓形状范围之间的 x0
和 x1
值,即 640,640 (2D)。我想将 y0
和 y1
缩放到我的 outline.shape
的大小。
最佳答案
您使用该公式计算的 y0, y1
坐标对应于直线与图像边缘相交的位置。这就是它包含 0
和 outlines.shape[1]
的原因。
y0
对应于直线与第 0 列相交的行,因此 0 * cos(angle)
。
y1
对应于直线与图像最后一列相交的行,即它的宽度(即 outlines.shape[1]
)
因此您可以从(0, y0)
到(width, y1)
画一条线来强调检测到的线。使用,例如 outlines[line(0, y0, width-1, y1] = 1
。注意我放 width - 1
因为索引从 0 和 开始width
超出范围。在您的公式中不是这种情况,因为它是从 dist
This tutorial很好地说明了它是如何工作的以及如何将发现的线条添加到您的图像中(在第一部分)。用您选择的图像替换没有灵感的 X 形图像,您将看到线条。理想情况下,您的图像应该是二值化的并且没有太多点,因此请尝试通过边缘检测器 (Canny) 或骨架化程序。
关于python - 如何使用 skimage 获取 hough 线峰的 extream x,y 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42435039/