有人可以解释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]
角度数组显示我错了。该参数只接受整数,我不确定它是什么......
答案 0 :(得分:1)
我认为函数hough_line_peaks()
本身没有任何问题。
min_angle
和min_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.50088496
(200
表示已为累加器的此分区分配了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]
(适用于所有d
,e
,f
,例如d != e
和e != f
)与参数min_angle = X
和min_distance = 0
累加器中最强的峰位于料仓angle_param = a
和dist_param = d
。
搜索第二个峰值将通过丢弃累加器中的这个bin以及位于多个二进制位<= X
的二进制位来执行(旁注:它可能是{{} 1}}但这并没有改变这里的推理)角度&#34;方向&#34;并且在距离&#34;方向&#34;上的多个箱X/2
处。来自&#34;峰值&#34;箱中。
只有这一点。因此,在您的案例中找到的其他峰位于一个bin中,其距离参数与找到的任何其他峰值不同。因此没有理由丢弃它们。
累加器只是一个二维的箱子表,一个方向代表角度,另一个方向代表距离。