工控编程吧

标题: halcon hough霍夫变换相关函数介绍 [打印本页]

作者: qq263946146    时间: 2019-5-27 12:43
标题: halcon hough霍夫变换相关函数介绍
hough_circles(RegionIn : RegionOut : Radius, Percent, Mode : )
通过对具有特定半径的圆进行霍夫变换来检测区域内的圆的中心。
RegionIn 输入参数,用于检测圆的二值边缘图像。
RegionOut输出参数,检测得到的可能的圆心位置,单个圆检测的结果区域可能为3~4个像素区域,
不一定为单像素,
这些圆的中心在边缘图像中所占的百分比Percent。
RegionOut == Radius * Percent * Mode.


Radius输入参数,要在图像中搜索的圆的半径。
Percent输入参数,表示必须出现在边缘图像RegionIn 区域内的(理想)圆的百分比(近似地)。
预先会知道像素半径值Radius。Percentage为待检测圆的完整度,对于完整的圆90%大概便可。


Mode输入参数,该方法定义了问题圆的位置:

0 -半径等于集合像素的外边界。

1 -半径等于圆线像素的中心。

2 - 0和1(有点模糊,但与稍微不同的圆圈设置相比更可靠,需要比0或1单独多50%的处理能力)。
取值,1 <= Mode <= 3。


1.hough_lines(RegionIn : : AngleResolution, Threshold, AngleGap, DistGap : Angle, Dist)
hough_lines允许在一个区域中选择线型结构,
这样就不需要将线的各个点连接起来。
该过程基于霍夫变换。
这些线以HNF返回,即通过它们的法向量的方向和长度。


参数AngleResolution定义了角的精确程度。它等于1 /AngleResolution的解析度。
参数Threshold决定了一条线的假设至少要在原始区域的多少个点上得到支持,才能被输出。
参数AngleGap和DistGap定义了Hough图像中点的邻域,以确定局部最大值。
这些线以HNF返回。


2.hough_line_trans(Region : HoughImage : AngleResolution : )
hough_line_trans计算Region的霍夫变换。
从而将直线法向量的角度和长度分别记录在参数空间(Hough-或累加器空间)中。
这意味着参数化是根据HNF执行的。

结果被注册到一个新生成的Int2-Image (HoughImage)中,
其中x轴等于法向量与x轴的夹角(在原始图像中),
y轴等于直线到原点的距离。

角范围从-90到180度,分辨率为1 / AngleResolution,
这意味着一个像素在方向上相当于1 / AngleResolution ,
HoughImage宽270 * AngleResolution + 1像素。
HoughImage的高度对应于输入区域外接矩形的右下角到原点的距离。


结果图像中的极大值等价于原图像中直线的参数值。


3.hough_line_trans_dir(ImageDir : HoughImage : DirectionUncertainty, AngleResolution : )
hough_line_trans_dir为ImageDir域中传递的那些区域中的线计算霍夫变换。
为此,将线的法向量的角度和长度注册到参数空间中(所谓的Hough或累加器空间)。


与hough_line_trans相反,ImageDir中的边缘方向(例如,由sobel_dir或edges_image返回)也被考虑在内。
这使得计算效率更高,并降低了霍夫空间中的噪声。


参数DirectionUncertainty描述了线中各个点的边缘方向允许变化的程度。
例如,当DirectionUncertainty= 10时,一条水平线(即,边缘方向= 0度)
可以包含边缘方向在-10度到+10度之间的点。
DirectionUncertainty越高,计算时间越长。


对于 DirectionUncertainty = 180 ,
hough_line_trans_dir显示了与hough_line_trans相同的行为,即,忽略边缘方向。
DirectionUncertainty至少应与ImageDir中存储的边缘方向的步长相同。
最小步长为2度(由图像类型“direction”定义)。


结果存储在一个新生成的UINT2-Image (HoughImage)中,
其中x轴(即,列)表示原始图像的法向量与x轴的夹角,
与y轴(即,行)表示直线到原点的距离。


角范围从-90到180度,存储分辨率1 / AngleResolution,
这意味着一个像素在x等于1 / AngleResolution度
,HoughImage宽度为270 * AngleResolution + 1像素。
HoughImage的高度对应于输入区域外接矩形的右下角到原点的距离。


4.hough_line_trans(Region : HoughImage : AngleResolution : )
hough_line_trans计算Region 的霍夫变换。
从而将直线法向量的角度和长度分别记录在参数空间(Hough-或累加器空间)中。
这意味着参数化是根据HNF执行的。


结果被注册到一个新生成的Int2-Image (HoughImage)中,
其中x轴等于法向量与x轴的夹角(在原始图像中),
y轴等于直线到原点的距离。
角范围从-90到180度,分辨率为1 / AngleResolution,
这意味着一个像素在方向上相当于1 / AngleResolution ,
HoughImage宽270 * AngleResolution + 1像素。
HoughImage的高度对应于输入区域外接矩形的右下角到原点的距离。


5.select_matching_lines(RegionIn : RegionLines : AngleIn, DistIn, LineWidth, Thresh : AngleOut, DistOut)
在算子select_matching_lines的帮助下,
可以从HNF中可用的一组行中选择最适合某个区域的行;
区域本身也作为参数(RegionIn)传输。
线的宽度可以由参数LineWidth表示。
选定的线将以HNF形式在RegionLines 返回。


循环中迭代地选择行:
首先,从输入行集中选择与输入区域重叠最大的行。
然后,这一行将被转入输出集,在确定重叠的后续步骤中,
不考虑属于这一行的所有点。
当该区域的最大重叠值和线条低于某个阈值(Thresh)时,将留下循环。
选定的线将以HNF形式在RegionLines 返回。


6.hough_circle_trans(Region : HoughImage : Radius : )
hough_circle_trans计算Region 中具有一定半径Radius 的圆的霍夫变换。
因此,将参数空间中所有可能的圆的中心
(分别为Hough空间和accumulator空间)累积到图像空间中的每个点。
由输入区域的许多点支持的圆假设,从而在输出图像(HoughImage)中显示圆中心的区域生成最大值。
在图像空间中,圆的中心可以通过减去半径从这些极大值的坐标中推导出来。
如果传输的半径大于一个,所有的霍夫图像都会根据最大半径进行移位。


例程
read_image (Image, 'fabrik')
rectangle1_domain (Image, ImageReduced, 230, 180, 330, 280)
sobel_amp (ImageReduced, EdgeAmplitude, 'thin_sum_abs', 3)
threshold (EdgeAmplitude, Region, 10, 255)
hough_lines (Region, 4, 50, 5, 5, Angle, Dist)
gen_region_hline (Regions, Angle, Dist)
hough_line_trans (Regions, HoughImage, 2)


sobel_dir(Image,Amp,Dir,'sum_abs',3)
hough_line_trans_dir (Dir, HoughImage1, 2, 4)
hough_line_trans (Dir, HoughImage2, 4)
select_matching_lines (Dir, RegionLines, -1.5707963,-1.5707963, 2, 10, AngleOut, DistOut)
hough_circle_trans (RegionLines, HoughImage3, 12)
hough_circles (HoughImage1, RegionOut, 12, 60, 0)
[halcon]1[/halcon]






欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4