欢迎光临散文网 会员登陆 & 注册

【Halcon学习笔记】04.图像分割

2022-06-10 20:08 作者:Ryou2  | 我要投稿

1.概述

        图像分割是指将图像中具有特殊意义的不同区域划分开来,这些区域是互不相交的,每一个区域满足灰度、纹理、彩色等特征的某种相似性准则。图像分割是图像分析过程中最重要的步骤之一。常用的图像分割方法有阈值分割、边缘检测、区域分割、霍夫变换等。

        本节介绍较为常用的阈值分割、边缘检测相关算子。


2.阈值分割

2.1 概述

        阈值可理解为一个指定的像素灰度值的 范围,假设阈值为0-255灰度值,阈值处理就是将图像中的像素灰度值与该阈值进行比较, 落在该范围内的像素称为前景,其余的像素称为背景。一般会用黑白两色表示前景和背景, 这样图像就变成了只有黑和白两种颜色的二值图像,同时作为前景被分割出来的部分以 region的形式输出。

2.2 算子

2.2.1 threshold(Image, Region, MinGray, MaxGray) 

        固定阈值分割。适用于环境稳定,目标与背景存在明显的灰度差的场合。 

threshold (Image, Region, 0, 200)

2.2.2 binary_threshold(Image, Region, Method, LightDark, UsedThreshold)

        自动全局阈值分割,主要对灰度直方图存在两个波峰图像的自动阈值分割。

binary_threshold (Image, Region, 'smooth_histo', 'light', UsedThreshold)

2.2.3 dyn_threshold(OrigImage, ThresholdImage, RegionDynThresh, Offset, LightDark) 

        局部阈值分割,当前背景之间差异明显时,可以设定全局阈值进行threshold,但很多情况下由于背景不均一,目标体经常表现为比背景局部亮一些或暗一些,无法确定全局阈值操作,需要通过其邻域找到一个合适的阈值进行分割这时就要用到局部阈值分割了。

dyn_threshold (Image, ImageMean, Region, 15, 'not_equal')

2.2.4 var_threshold(Image, Region, MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark)

        均值和标准偏差局部阈值分割,能够较好的分开目标和背景,对不适合的参数设置不敏感。MaskWidth、 MaskHeight是用于滤波平滑的掩膜单元;StdDevScale是标准差乘数因子(简称标准差因子);AbsThreshold是设定的绝对阈值;LightDark有4个值可选,’light’、’dark’、’equal’、’not_equal’。

    var_threshold (Image, Region, 15, 15, 1.0, 40, 'dark')

2.2.5. auto_threshold(Image : Regions : Sigma : )

        根据直方图确定阈值自动全局阈值分割,运行原理,第一,计算灰度直方图。第二,高斯平滑后从直方图提取最小值。第三,根据提取的最小值进行阈值分割。sigma越大提取区域越少。

auto_threshold (Image, Region, 4)


3. 边缘检测

3.1 概述

        图像的边缘是图像的基本特征,边缘上的点是指图像周围像素灰度产生变化的像素点,即灰度值导数较大的区域。

        边缘检测基本步骤包括:平滑滤波>>>锐化滤波>>>边缘判定>>>边缘连接。

3.2 算子

3.2.1 roberts(Image, ImageRoberts, FilterType)

        利用局部差分算子寻找边缘,其特点是边缘定位较准,但容易丢失部分边缘,同时由于图像没有经过平滑处理,因此不具有抑制噪声的能力。该算子对具有陡峭边缘且含噪声少的图像处理效果较好。

roberts (Image, ImageRoberts, 'gradient_sum')

3.2.2 sobel_amp(Image, EdgeAmplitude, FilterType, Size)

        根据当前像素点的八个领域点的灰度加权进行计算的算法,利用在边缘点处达到极值这一现象进行边缘检测。因此,Sobel算子对噪声具有平滑作用,可提供较为精确的边缘信息,但是正是由于局部平均的影响,Sobel算子同时也会检测出许多伪边缘,且边缘定位精度不高。

sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)

3.2.3 prewitt_amp(Image, ImageEdgeAmp)

        利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。对比其他边缘检测算子,Perwitt算子对边缘的定位精度不如Roberts算子,实现方法与Sobel算子类似,但是实现的功能差距很大,Sobel算子对边缘检测的准确性更优于Prewitt算子。

prewitt_amp (Image, ImageEdgeAmp)

3.2.4 edges_sub_pix(Image, Edges, Filter, Alpha, Low, High) 

        在提取边缘时,根据提取的边缘是像素还是亚像素,可将边缘提取分为像素边缘提取和亚像素边缘提取。edges_sub_pix()算子使用递归实现的滤波器( Deriche、Lanser、Shen、Canny) 提出的传统实现的“高斯导数”滤波器检测阶梯边缘。

edges_sub_pix (Image, Edges, 'canny', 1, 20, 20)

by Ryou2-


【Halcon学习笔记】04.图像分割的评论 (共 条)

分享到微博请遵守国家法律