关于 hough_line 和 hough_line_peaks 的代码解释

code explanation about hough_line and hough_line_peaks

我能够找到这个 link: 然后我只使用了允许计算角度的代码部分:

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_reel 的代码吗?因为我不明白怎么会有多个角度,这些多个角度是在图像中的什么线和其他物体之间形成的?将不胜感激。

您的图像有两条线,我将它们称为 line aline b。每条线都有角度。这些线之间的角度将是 angle of line a - angle of line b.

当您的代码遍历 hough_line_peaks 时,它实际上是在遍历每一行的数据。每条线都有一个距离和一个角度。

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

如果您的图像中有两条线,您最终会得到一个包含两个值的角度列表。这两个值将是线条相对于图像边缘的角度。要找到相互参照的线条的角度,请减去这些值。

这是一个示例图片:

直线的角度是:[1.3075343725834614, 0.48264691605429766]。这是以弧度为单位的,因此使用代码将它们转换为度数:angle = [a*180/np.pi for a in angle]。角度为 [74.91620111731844, 27.65363128491619]。这似乎很合理,一个是45度多一点,一个是少一点。直线之间的角度是 max(angles) - min(angles) 或 47.262 度。

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