Halcon图像分割-区域提取

提示:文章参考了网络上其他作者的文章,以及相关书籍,如有侵权,请联系作者。

文章目录

  • 前言
  • 一、regiongrowing算子
  • 二、regiongrowing_mean 算子
  • 参考文献


前言

       如果想要获得具有相似灰度的相连区域,可以使用区域生长法寻找相邻的符合条件的像素。区域生长法的基本思想是,在图像上选定一个“种子”像素或“种子”区域,然后从“种子”的邻域像素开始搜索,将灰度或者颜色相近的像素附加在“种子”上,最终将代表同一物体的像素全部归属于同一“种子”区域,达到将目标物体分割出来的目的。
       注意:区域生长法的算法执行速度非常快,适用于对检测速度要求高的情况。


一、regiongrowing算子

       Halcon 中的 regiongrowing 算子实现了区域生长的功能,它能将灰度相近的相邻像素合并为同一区域。regiongrowing 算子的原型如下:
       regiongrowing(Image : Regions : Row, Column, Tolerance, MinSize:)
       其中各参数的含义如下。
       1)、参数1:Image为输入的单通道图像。
       2)、参数2:Regions为输出的一组区域。
       3)、参数3和4:Row、Column分别为矩形区域的宽和高,需要是奇数,以便计算中心点坐标。默认为1,1,也可以选择其他奇数。
       4)、参数5:Tolerance为灰度差值的分割标准。如果另一个点的灰度与种子区域的灰度差值小于Tolerance,则认为它们可以合并为同一区域。这个值默认为6.0。
       5)、参数6:MinSize,表示输出区域的最小像素数,默认为100。
       其工作步骤如下。
       1)、设定一个尺寸为Row*Column的卷积核,以及一个作为分界依据的像素灰度差值 Tolerance。
       2)、使用上述指定尺寸的卷积核在原图上进行扫描,并计算卷积核内矩形图像的中心点灰度与邻域矩形图像的中心点灰度差。如果差值小于Tolerance,则将这两个矩形区域合并为同一个。
       卷积核默认为1*1,一般长宽都为奇数。如果大于1*1,需要先对图像进行平滑处理,平滑的卷积核大小至少为Row*Colum,这是为了使矩形中心更突出。如果图像上的噪点比较多并且卷积核比较小,也可以省略平滑这一步骤,以减少误判。
       3)、对合并后的区域进行判断,如果该区域包含的像素数大于设定的MineSize,则输出结果区域。举例如下:

*导入图像
read_image (Image, 'data/village')
*对原图进行均值处理,选用5*5的滤波器
mean_image(Image,Mean,5,5)
*使用regiongrowing 算子寻找颜色相似的邻域
regiongrowing (Mean, Regions, 1,1,3.0,100)
*对提取区域进行形态学处理,使区域更加平滑和完整
closing_circle (Regions, RegionClosing, 3.5)

       使用regiongrowing 算子进行区域分割的效果如下图所示。
Halcon图像分割-区域提取_第1张图片
       上面左图为输入的原始图像(该图像来自网络新闻),右图为使用regiongrowing 算子进行区域生长后分割出的区域。由上图可以看出,颜色相近的邻域被合并成了同一区域,并以同一种颜色显示。分割的效果与滤波器的方法、尺寸有关,也与regiongrowing算子的参数有关,可根据实际需要进行调节。

二、regiongrowing_mean 算子

       regiongrowing_mean 算子的作用与regiongrowing算子类似,也是使用区域生长法进行分割,不同的是,regiongrowing_mean 算子的输入需要是灰度均值图像。regiongrowing_mean算子的原型如下:
       regiongrowing_mean(Image : Regions : startRow, startColumn,Tolerance,MinSize:)
       其中各参数的含义如下。
       1)、参数1:Image为输入的单通道图像。
       2)、参数2:Regions为输出的一组区域。
       3)、参数3和4:startRow、startColumn分别为起始生长点的坐标。
       4)、参数5:Tolerance为灰度差值的分割标准。如果另一个点的灰度与种子区域的灰度差值小于Tolerance,则认为它们可以合并为同一区域。这个值默认为5.0。
       5)、参数6:MinSize为输出区域的最小像素数,默认为100。
       该算子指明了开始进行区域生长算法的点(x,y)的坐标,并以指定的点为中心,不断搜索其邻域,寻找符合设定条件的区域。这里的条件有两种,一是区域边缘的灰度值与当前均值图中对应的灰度值的差小于Tolerance参数的值:二是区域包含的像素数应大于MinSize参数的值。举例如下:

*读取图像
read_image (Image, 'data/village')
*对原图进行均值处理,选用circle类型的中值滤波器
median_image (Image, ImageMedian, 'circle', 2, 'mirrored')
*使用regiongrowing 算子寻找颜色相似的邻域
regiongrowing (ImageMedian, Regions, 1, 1, 3, 500)
*对图像进行粗略的区域分割,提取满足条件的各个独立区域
shape_trans (Regions, Centers, 'inner_center')
connection (Centers, SingleCenters)
*计算出初步提取的区域的中心点坐标
area_center (SingleCenters, Area, Row, Column)
*以均值灰度图像为输入,进行区域生长计算,计算的起始坐标为上一步的各区域中心
regiongrowing_mean (ImageMedian, RegionsMean,Row, Column,25,100)

       这样满足参数条件的相似邻域就合并成了一个区域,提取的效果如下图所示。
       下面左图为输入的原始图像(该图像原始图来自网络新闻),右图为使用regiongrowing_mean算子进行区域生长后分割出的区域。可以看出,与上面regiongrowing算子分割出来的区域相比,regiongrowing_mean分割出的区域单个面积更大,更多的小面积区域被大的邻近区域合并,边界也更加清晰。可以根据实际需要调节所用的参数,以便更理想地分割出目标物体。
Halcon图像分割-区域提取_第2张图片

参考文献

1、Halcon机器视觉算法原理与编程实战/杨青编著.北京大学出版社

你可能感兴趣的:(Halcon,视觉检测,图像处理)