scikit-image - hough_line_peaks() 中的 min_distance 和 min_angle 是什么意思?

标签 scikit-image

有人可以解释一下 min_distance 和 min_angle 可选参数吗?

http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.hough_line_peaks

对于 min_angle=n,我认为它会检查下一个角度的线是否至少优于我的 theta 数组中的 n 元素才能被接受。

import numpy as np
from skimage.transform import hough_line,hough_line_peaks

iden = np.identity(200)
hspace, angles, dists = hough_line(iden,theta=np.linspace(-np.pi/2,np.pi/2,1800)) # 0.1 degree resolution
hspace, angles, dists = hough_line_peaks(hspace, angles, dists,min_distance=0,min_angle=20) # 2 degree minimum before accepting as new line?  
print(hspace, angles*180/np.pi, dists)

输出:[200 126 124] [-44.9749861 -45.27515286 -44.67481934] [ 0.50088496 -0.50088496 1.50265487]

角度数组表明我的做法是错误的。该参数仅接受整数,我不确定它可能是什么......

最佳答案

我认为 hough_line_peaks() 函数没有任何问题本身。

min_anglemin_distance在已找到的峰周围定义一个区域,其中找不到其他峰(即,您认为与另一个峰接近的峰实际上是单个唯一峰)

在霍夫变换的累加器中,两个维度是:角度和距离。您基本上可以通过整数设置累加器中必须在已找到的峰值周围忽略的箱数。

通过设置min_distance设置为 0,您只是避免获得 2 个具有完全相同的距离参数且角度参数差异小于 20 * angle_resolution ~= 20 * 0.1 = .2 的峰值。 。返回的 3 个峰值都不具有相同的距离参数,因此,您设置的条件将得到遵守。

另外,请注意,您的角度分辨率并不完全是 0.1度,除非 np.linspace 中的第三个参数是 1801 。就是这样np.linspace行为,你给它总分。 hough_line_peaks只是将返回的向量作为输入参数。您还可以使用 np.arange它允许您传递 step作为一个论点。

编辑

返回的角度数组的单位是度?!?。我期望输入为弧度...这些值应该对应于 np.linspace(-np.pi/2, np.pi/2, 1800) 的一些值.

编辑结束

基本上,它是这样工作的:

  • 查找累加器中的最高值 -> 200, -44.9749861, 0.50088496 ( 200 表示已将 200 个像素分配给累加器的此 bin)
  • 设置累加器中峰值 bin 周围的 bin [bin - min_dist: bin + min_dist, bin - min_angle:bin + min_angle]0
  • 查找累加器中的第二大值,依此类推。

编辑2:

为什么结果是accumulator_value = [200 126 124] , angle_params = [a b c]dist_params = [d e f] (对于所有 def 例如 d != ee != f )与参数 min_angle = X 不不一致和min_distance = 0

累加器中最强的峰值位于 bin angle_param = a 处。和dist_param = d .

将通过丢弃累加器中的该 bin 以及位于多个 bin <= X 的 bin 来搜索第二个峰值。 (旁注:它可能是 X/2 但这不会改变这里的推理)在角度“方向”和多个 bin <= 0 上。距离“峰值”箱的“方向”。

仅此而已。因此,在您的情况中找到的其他峰值位于距离参数与找到的任何其他峰值不同的箱中。因此没有理由丢弃它们。

累加器只是一个二维的容器表,一个方向代表角度,另一个方向代表距离。

关于scikit-image - hough_line_peaks() 中的 min_distance 和 min_angle 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782927/

相关文章:

python - 从栅格图像中提取街道网络

python - Skimage图路由到多个目的地

python - 测量灰度图像的平滑度

python-3.x - 在Python3中彼此创建 mask 或边界

python - 是否可以在python中使用opencv提取彩色背景区域内的文本?

python - 将 bool numpy 数组转换为枕头图像

python - Imread 返回 4 个维度,而预期返回 3 个维度。为什么?

opencv - 查找图像中对象的面积和颜色

python - 本地二进制模式中的意外行为 - python skimage

python - 图像的反转旋转