一 霍夫变换
1 定义
霍夫变换是图像处理中从图像中识别几何形状的基本方法之一.几何形状包括圆,椭圆,直线等等.
2 直线方程
直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距;
3 霍夫变换原理:
设图像上的直线是y=x, 我们先取上面的三个点:A(0,0), B(1,1), C(2,2)。可以求出,过A点的直线的参数要满足方程b=0, 过B点的直线的参数要满足方程1=k+b, 过C点的直线的参数要满足方程2=2k+b, 这三个方程就对应着参数平面上的三条直线,而这三条直线会相交于一点(k=1,b=0)。 同理,原图像上直线y=x上的其它点(如(3,3),(4,4)等) 对应参数平面上的直线也会通过点(k=1,b=0)。
当直线与x轴垂直,直角的正切值无穷大,故此直线不存在斜率,所以实际应用中,是采用参数方程p=xcos(θ)+ysin(θ)。这样,图像平面上的一个点就对应到参数p—θ平面上的一条曲线上。
hough_lines(RegionIn : : AngleResolution, Threshold, AngleGap, DistGap :Angle, Dist)
RegionIn:二值化边缘图像
AngleResolution:角度的步进,步进大小为AngleResolution/1
Threshold:要寻找的直线的阈值
AngleGap:定义Hough图像中的点的邻域范围,从而确定局部最大值。
DistGap:定义Hough图像中的点的邻域范围,从而确定局部最大值。
Angle:找到的直线的角度
Dist:找到的直线到圆点的距离
read_image(Image,'D:/Halcon_Study/矩形.png')
get_image_size(Image,Width,Height)
dev_open_window(0,0,Width,Height,'black',WindowHandle)
*剪切指定矩形的图像
rectangle1_domain(Image,ImageReduced,76,120.938,464.875,966.813)
* 寻找图像中矩形的边缘
sobel_amp(ImageReduced,EdgeAmplitude,'thin_sum_abs',3)
*设置输出对象
dev_set_color('red')
*对上面获取的边缘图像进行阈值操作
threshold(EdgeAmplitude,Region,10,255)
* 对阈值后的区域进行连通处理
connection(Region,ConnectedRegions)
*根据面积过滤出图像中外矩形区域
select_shape(ConnectedRegions,SelectedRegions,'area','and',2500,99999)
* 霍夫变换来寻找区域中的直线
hough_lines(SelectedRegions,4,50,5,5,Angle,Dist)
* 设置输出对象的颜色
dev_set_color('blue')
* 将直线转换为区域
gen_region_hline(Regions,Angle,Dist)
* 根据方向特征来过滤想要的直线
select_shape(Regions,SelectedRegions1,'orientation','and',1.5,1.6)
select_shape(Regions,SelectedRegions2,'orientation','and',0,0.1)
* 显示图像和结果直线
dev_display(Image)
dev_display(SelectedRegions1)
dev_display(SelectedRegions2)