如何使用 skimage 获取 hough 线峰的 extream x,y 坐标
How to get extream x,y coordinates for hough line peaks with skimage
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) 或骨架化程序。
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) 或骨架化程序。