hough_line_peaks()中min_distance和min_angle的含义是什么?

时间:2017-08-20 13:58:54

标签: 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]

角度数组显示我错了。该参数只接受整数,我不确定它是什么......

1 个答案:

答案 0 :(得分:1)

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

min_anglemin_distance定义了已经找到的峰周围的区域,其中没有找到其他峰值(即,您认为从另一个峰值关闭的峰值实际上是一个唯一的峰值)

在霍夫变换的累加器中,2维是:角度和距离。你基本上用一个整数来设置累加器中的二进制数,这些二进制数必须在已经找到的峰值周围被忽略。

通过将min_distance设置为0,您只能避免获得具有完全相同的距离参数且角度参数差小于20 * angle_resolution ~= 20 * 0.1 = .2的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.50088496200表示已为累加器的此分区分配了200个像素)
  • 将峰值箱[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 = Xmin_distance = 0

不一致

累加器中最强的峰位于料仓angle_param = adist_param = d

搜索第二个峰值将通过丢弃累加器中的这个bin以及位于多个二进制位<= X的二进制位来执行(旁注:它可能是{{} 1}}但这并没有改变这里的推理)角度&#34;方向&#34;并且在距离&#34;方向&#34;上的多个箱X/2处。来自&#34;峰值&#34;箱中。

只有这一点。因此,在您的案例中找到的其他峰位于一个bin中,其距离参数与找到的任何其他峰值不同。因此没有理由丢弃它们。

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