Halcon 根据霍夫变换在图像中寻找直线

一 霍夫变换

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)

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Halcon的霍夫直线检测是一种图像处理算法,可以用来检测图像直线。它基于霍夫变换和阈值操作,通过寻找图像直线特征来实现直线检测。具体步骤如下: 1. 首先,使用read_image函数读取图像,并使用get_image_size函数获取图像的宽度和高度信息。 2. 使用dev_open_window函数打开一个窗口来显示图像。 3. 使用rectangle1_domain函数指定一个矩形区域,限定直线检测的范围。 4. 使用sobel_amp函数对图像进行边缘检测,得到边缘幅值。 5. 使用dev_set_color函数设置绘制对象的颜色。 6. 使用threshold函数对边缘图像进行阈值操作,得到二值化的边缘图像。 7. 使用hough_lines函数进行霍夫变换,检测图像直线,得到直线的角度和距离信息。 8. 使用dev_set_color函数设置绘制对象的颜色。 9. 使用gen_region_hline函数将检测到的直线转化为区域,方便后续处理。 10. 使用dev_display函数显示图像和检测到的直线区域。 11. 最后使用stop函数停止程序的执行。 以上是Halcon霍夫直线检测的基本步骤。具体的参数设置和处理细节可以根据实际情况进行调整。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [halcon霍夫直线检测](https://blog.csdn.net/weixin_43491924/article/details/95973856)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [【Halcon】霍夫直线检测hough_lines](https://blog.csdn.net/Taily_Duan/article/details/51306128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值