Python 关于hough_线和hough_线峰值的代码说明

Python 关于hough_线和hough_线峰值的代码说明,python,image,numpy,scikit-image,hough-transform,Python,Image,Numpy,Scikit Image,Hough Transform,我找到了这个链接:然后我只取了允许计算角度的代码部分: import numpy as np from skimage.transform import (hough_line, hough_line_peaks, probabilistic_hough_line) from pylab import imread, gray, mean import matplotlib.pyplot as plt image = imread('D:\\Pictures\\PyTestPics\\oo.t

我找到了这个链接:然后我只取了允许计算角度的代码部分:

import numpy as np
from skimage.transform import (hough_line, hough_line_peaks, probabilistic_hough_line)
from pylab import imread, gray, mean
import matplotlib.pyplot as plt

image = imread('D:\\Pictures\\PyTestPics\\oo.tiff')
image = np.mean(image, axis=2)

h, theta, d = hough_line(image)

angle = []
dist = []
for _, a, d in zip(*hough_line_peaks(h, theta, d)):
    angle.append(a)
    dist.append(d)

angle = [a*180/np.pi for a in angle]
angle_reel = np.max(angle) - np.min(angle)

print(angle_reel)

有人能给我解释一下for循环和angle_卷筒的代码吗?因为我不明白为什么会有多个角度,这些多个角度是在图像中的哪条线和其他物体之间形成的?非常感谢。

您的图像有两行,我将它们称为a行和b行。这些线中的每一条都有一个角度。这些线之间的角度将是
线a的角度-线b的角度。

当您的代码在中的
hough_行\u peaks
中迭代时,它实际上是在迭代每行的数据。每条线都有一个距离和一个角度

for _, a, d in zip(*hough_line_peaks(h, theta, d)):
    angle.append(a)
    dist.append(d)
如果图像中有两条线,则最终将得到一个具有两个值的角度列表。这两个值将是线相对于图像边缘的角度。要查找线之间相互参照的角度,请减去这些值

下面是一个示例图像:

线条的角度为:
[1.307534725834614,0.48264691605429766]
。这是以弧度为单位的,所以它们被转换成度,代码是:
angle=[a*180/np.pi表示in角]
。角度的度数为
[74.9162011731844,27.653631284919]
。这似乎很合理,一个略高于45度,一个略低于45度。线之间的角度为
max(angles)-min(angles)
或47.262度

此图显示了在图像上绘制的角度:


为了确保我理解正确,每条线都有一个角度,该角度形成于x轴和连接原点与最近点的线之间,然后我将其从弧度转换为度,当我从最大角度减去最小角度时,我得到了两条线之间的相同角度?@Daniel_Kamel我相信你已经正确地理解了我。我在答案的底部添加了另一个图像。新图像包括角度。谢谢你,我真的很感激,你值得我投你一票。谢谢@丹尼尔·卡梅尔。如果这回答了您的问题,请单击复选标记接受我的答案。