Halcon图像的 BLOB 分析处理基础&图像分割相关算子&区域集合运算及变换&形态学处理初级&特征提取

814 阅读7分钟

图像分割介绍,先定位一个大的特征->内部特征->分割****

灰度直方图:如下图所示

image.png 阈 值 分 割:

** threshold** 全局固定阈值分割

算子:threshold(Image : Region : MinGrayMaxGray : )

      示例:threshold (GrayImage, Regions, 141, 214)

                 GrayImage(输入对象):输入灰度图像

Regions(输出区域):输出挑选的区域

141(输入控制参数最小值):输入下限值

214(输入控制参数最大值):输入上限值

 

binary_threshold 自动全局阈值分割

        算子:binary_threshold(Image : Region : MethodLightDark : UsedThreshold)

示例:binary_threshold (Image, Region1, 'max_separability', 'dark', UsedThreshold)

Image(输入对象):输入灰度图像

Region1(输出区域):输出分割后的区域

'max_separability'(输入控制参数分割方法):包含’max_separability’:最大限度的可分性, ‘smooth_histo’:直方图平滑

'dark'(输入控制参数颜色):表示暗

UsedThreshold(输出参数阈值 ):输出自动阈值或者设置的阈值的值 

 

mean_image+dyn_threshold 局部动态阈值分割

算子:mean_image(Image:ImageMean:MaskWidth,MaskHeight:)

示例:mean_image (GrayImage, ImageMean, 13, 13)

GrayImage(输入对象):输入灰度图像

ImageMean(输出对象):输出均值滤波后图像

13(输入控制参数):输入宽数值

13(输入控制参数):输入高数值

算子:dyn_threshold(OrigImageThresholdImage : RegionDynThresh : OffsetLightDark : )

示例:dyn_threshold (GrayImage, ImageMean, RegionDynThresh, 10, 'light')

GrayImage(输入对象):输入灰度图像

ImageMean(输对象):输入灰度图像

RegionDynThresh(输出对象):输出区域

10(输入控制参数):差值控制数值 数值越大筛选的区域越少

'light'(输入控制类型):灰暗

4.3区域集合运算及变换

****集合运算

       ****将多个区域连接为一个区域:union1

              算子:union1(Region : RegionUnion : : )

              示例:union1 (ConnectedRegions, RegionUnion)

                     ConnectedRegions(输入对象):输入多个区域

RegionUnion(输出对象):输出一个整体的区域

 

       ****将两个区域连接为一个区域:union2

算子:union2( Region1 , **Region2 **: **RegionUnion **: : )

示例:union2 (ObjectSelected1, ObjectSelected2, RegionUnion1)

ObjectSelected1(输入对象):输入第一个区域对象

ObjectSelected2(输入对象):输入第二个区域对象

RegionUnion1(输出对象):输出合并的区域对象

 

 

两个区域相减:difference

算子:difference(RegionSub : RegionDifference : : )

示例:difference (RegionUnion, ObjectSelected1, RegionDifference)

RegionUnion(输入对象):输入大的区域对象

ObjectSelected1(输入对象):输入小的区域对象

RegionDifference(输出对象):输出大的区域减去小的区域对象的区域

 

两个区域的交集:intersection

算子:

intersection(Region1Region2 : RegionIntersection : : )

示例:intersection (Rectangle, Rectangle1, RegionIntersection)

Rectangle(输入对象):输入第一个区域对象

Rectangle1(输入对象):输入第二个区域对象

              RegionIntersection(输出对象):输出两个区域相交的区域对象

 

**      ** 区域变换

       ****断开不相连的区域:connection

              算子:connection(Region : ConnectedRegions : : )

              示例:connection (Region1, ConnectedRegions)

                     Region1(输入对象):输入一个连成一块的对象

ConnectedRegions(输出对象):输出断开不相连的各个区域

 

****区域填充:fill_up

              算子:fill_up(Region : RegionFillUp : : )

              示例:fill_up (Region, RegionFillUp)

                     Region(输入对象):输入需要填充的对象

                     RegionFillUp(输出对象):输出填充好的区域对象

              抠图:reduce_domain

****算子:reduce_domain(ImageRegion : ImageReduced : : )

示例:reduce_domain (GrayImage, RegionFillUp, ImageReduced)

GrayImage(输入对象):输入灰度图对象

RegionFillUp(输入对象):输入二值化区域

ImageReduced(输出对象):输出灰度图图像

 

              区域变换为矩形或者是圆 内接或者是外接 参数控制shape_tran

              算子:shape_trans(Region : RegionTrans : Type : )

              示例:shape_trans (ObjectSelected1, RegionTrans, 'rectangle1')

                     ObjectSelected1(输入对象):输入一个区域对象

                     RegionTrans(输出对象):输出变换后的区域对象

'rectangle1'(输入控制参数):输入需要变换成什么类型 内接外接矩形 内接外接圆等等

 

              求取区域骨架:skeleton

              算子:skeleton(Region : Skeleton : : )

              示例:skeleton (RegionTrans, Skeleton)

                     RegionTrans(输入对象):输入一个区域对象

Skeleton(输出对象):输出这个区域的骨架  骨架是由单个像素连接起来的

 

              对多个区域进行排序:sort_region

算子:sort_region(Regions : SortedRegions : SortModeOrderRowOrCol : )

              示例:sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')

                     SelectedRegions(输入对象):输入多个区域

                     SortedRegions(输出对象):输出排序后的多个区域

                     'first_point'(输入控制参数类型):排序模式

                     'true'(输入控制参数顺序):是否是按顺序

 'column'(输入控制参数方向):low是从上到下 column是从左到右排序 方向选择

 

              对多个队形进行数数:count_obj

              算子:count_obj(Objects : : : Number)

              示例:count_obj (SortedRegions, Number)

                     SortedRegions(输入对象):输入多个区域对象

Number(输出控制参数):输出区域的个数

4.4形态学处理初级。(fin.hdev,dyn_threshold.hdev,hull.hdev,rim.hdev)

开运算opening 以输入的参数形成的区域为基准,对目标区域进行模拟放置,能将参数形成的区域填满的保留,填不满开掉去除 先腐蚀后膨胀 作用 祛杂点

扩展链接:blog.csdn.net/qq_31671139…

              算子:opening_rectangle1(Region : RegionOpening : WidthHeight:)

示例:opening_rectangle1 (ObjectSelected1, RegionOpening, 33, 33)

ObjectSelected1(输入对象):输入区域对象

RegionOpening(输出对象):输出开运算后的区域对象

33(输入控制参数1):形成区域矩形的宽

33(输入控制参数2):形成区域矩形的高

 

 

闭运算closing 以输入的参数形成的区域为基准,对目标区域进行模拟放置,能将参数形成的区域填不满的保留,能填满去除 先膨胀后腐蚀 作用 保留目标区域

算子:closing_rectangle1(Region : RegionClosing :Width,Height:)

示例:closing_rectangle1 (ObjectSelected1, RegionClosing, 33, 33)

ObjectSelected1(输入对象):输入区域对象

RegionClosing(输出对象):输出闭运算后的区域对象

33(输入控制参数1):形成区域矩形的宽

33(输入控制参数2):形成区域矩形的高

 

****膨胀dilation 对区域进行向外放大

              算子:dilation_rectangle1(Region :RegionDilation :WidthHeight:)

示例:dilation_rectangle1 (ObjectSelected1, RegionDilation, 33, 33)

ObjectSelected1(输入对象):输入区域对象

RegionDilation(输出对象):输出膨胀后的区域对象

33(输入控制参数1):输入膨胀区域的宽

33(输入控制参数2):输入膨胀区域的高

 

              腐蚀erosion 对区域进行向内缩小****

算子:erosion_rectangle1(Region:RegionErosion : WidthHeight : )

示例:erosion_rectangle1 (ObjectSelected1, RegionErosion, 33, 33)

ObjectSelected1(输入对象):输入区域对象

RegionErosion(输出对象):输出腐蚀后的区域对象

33(输入控制参数1):输入腐蚀区域的宽

33(输入控制参数2):输入腐蚀区域的高

 

              边缘提取boundary 适用于边界 灰度值差异大的图像

              算子:boundary(Region : RegionBorder : BoundaryType : )

示例:boundary (SortedRegions, RegionBorder, 'inner')

SortedRegions(输入对象):输入区域对象

RegionBorder(输出对象):输出边缘区域

'inner'(输入控制参数):输入提取类型 向内还是向外

4.5特征提取

              测量区域中心点area_center

              算子:area_center(Regions : : : AreaRowColumn)

示例:area_center (ObjectSelected1, Area, Row, Column)

ObjectSelected1(输入对象):输入需要测量的区域

Area(输出参数1):输出面积

Row(输出参数2):输出中心点的行坐标

Column(输出参数3):输出中心点的列坐标

 

              筛选目标区域select_shape

算子:select_shape(Regions : SelectedRegions : FeaturesOperationMinMax : )

示例:select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 201841, 990793)

ConnectedRegions(输入对象):输入多个区域对象

SelectedRegions(输出对象):输出筛选后的目标区域

'area'(输入模式类型):按面积筛选

'and'(输入条件):条件与

201841(输入控制参数下限值):筛选面积的最小值

990793(输入控制参数上线值):筛选面积的最大值

 

****测量目标区域的半径或是矩形的对角坐标inner_

              算子:inner_circle(Regions : : : RowColumnRadius)

示例:inner_circle (ObjectSelected1, Row1, Column1, Radius)

ObjectSelected1(输入对象):输入需要测量的区域对象

Row1(输出参数1):输出区域中心的行坐标

Column1(输出参数2):输出区域中心的列坐标

Radius(输出参数3):输出区域半径

 

****测量矩形的长宽smallest_,

算子:smallest_rectangle1(Regions : : : Row1Column1Row2Column2)

示例:smallest_rectangle1 (ObjectSelected1, Row12, Column12, Row21, Column21)

ObjectSelected1(输入对象):输入一个区域对象

Row12(输出参数1):输出区域左上角的点行坐标

Column12(输出参数2):输出区域左上角的点列坐标

Row21(输出参数3):输出区域右下角的点行坐标

Column21(输出参数4):输出区域右下角的点列坐标

 

测量矩形的角度orientation_ region

算子:orientation_region(Regions : : : Phi)

示例:orientation_region (ObjectSelected1, Phi)

ObjectSelected1(输入对象):输入一个区域对象

Phi(输入对象):输出该区域相比于水平线的角度