halcon视觉第三讲 霍夫直线


霍夫变换

定义:

霍夫变换是图像处理中从图像中识别几何形状的基本方法之一.几何形状包括圆,椭圆,直线等等.

直线方程:

直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距;

霍夫变换原理:

设图像上的直线是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, ‘矩形’)
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)

#程序执行结果


文章作者: zhouhui
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zhouhui !
  目录