如何使用skimage获取霍夫线峰值的极端x,y坐标

3
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)

我需要的是在我的轮廓形状范围内,即640,640(2D),x0x1的值。而且我想把y0y1缩放到我的outline.shape的大小。请保留HTML标记。

请问您能否详细说明一下您的情况? - Jeru Luke
好的。假设您有一个正方形边界图像。通过霍夫变换,您可以得到直线。现在,通过我在网上找到的公式,我可以获得这些直线的y坐标。http://scikit-image.org/docs/dev/auto_examples/edges/plot_line_hough_transform.html 现在,这些线条边界没有限制。没有限制意味着该点可能小于0。 我想要的是通过某个方程式,我可以获得x坐标以及ys,并且在0到640的范围内。 - Imran Salam
1个回答

1
你用公式计算出来的y0, y1坐标对应于直线与图像边缘相交的位置。所以它包括0outlines.shape[1]y0对应于直线与第一列相交的行,因此为0 * cos(angle)y1对应于直线与图像最后一列即宽度(即outlines.shape[1])相交的行。
因此,您可以从(0, y0)(width, y1)绘制一条线以突出检测到的线。例如使用outlines[line(0, y0, width-1, y1)] = 1。请注意,我放置了width - 1,因为索引从0开始,而width超出了范围。但在您的公式中不是这种情况,因为它从dist中减去了。
这篇教程对如何添加发现的线条到你的图像(第一部分)讲解得非常清楚,有助于理解其工作原理。将枯燥无味的X形图像替换为你自己选择的图像,你就能看到这些线条了。最好将你的图像进行二值化处理,并且点数不要太多,可以尝试通过边缘检测器(Canny)或骨架化过程来处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接