HALCON学习笔记(七)——数学形态在图像处理中的应用

本文详细介绍了数学形态学在图像处理中的应用,包括二值图像的基本形态学运算如腐蚀、膨胀、开闭运算,以及它们在边界提取、孔洞填充、骨架提取和Blob分析中的具体应用。同时,还探讨了灰度图像的形态学处理,如灰度腐蚀、膨胀和开闭运算等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

形态学即数学形态学,是分析几何形状和结构的数学方法,是建立在集合代数的基础上用集合论方法定量描述目标几何结构的学科

数学形态学预备知识

1.集合与元素

2.集合与集合的关系(并交补差)

3.平移与反射

4.结构元素(用来处理图像的较小的图像)

二值图像的基本形态学运算

1.腐蚀

腐蚀可以消除图像边界点,是边界向内部收缩的过程。

对区域进行腐蚀,膨胀操作时需要使用结构元素,生产的区域可以作为结构元素,这样得到的结构元素本身就是区域

结构元素:

  • gen_circle
  • gen_rectangle1
  • gen_rectangle2
  • gen_ellipse
  • gen_region_pologon

腐蚀相关算子

使用圆形结构元素对区域进行腐蚀操作:

erosion_circle(region要进行腐蚀操作的区域:regionerosion腐蚀后获得的区域:radius圆形结构元素的半径:)

使用矩形结构元素对区域进行腐蚀操作:

erosion_rectangle(region要进行腐蚀操作的区域:regionerosion腐蚀后获得的区域:width,height矩形结构元素的宽高:)

使用生成的结构元素对区域进行腐蚀操作:(一般选择结构元素中心为参考点)

erosion1(region要进行腐蚀操作的区域,structelement生成的结构元素:regionerosion腐蚀后获得的区域:iterations迭代次数,即腐蚀的次数

使用生成的结构元素对区域进行腐蚀操作(可设置参考点位置):

erosion2(region要进行腐蚀操作的区域,structelement生成的结构元素:reigonerosion腐蚀后获得的区域:row,column设置参考点位置,即原点位置,iterations迭代次数,即腐蚀的次数

实例:

dev_close_window ()
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Region, 100, 255)
connection (Region, ConnectedRegions)
dev_set_color ('black')
*使用半径为1的圆形结构腐蚀得到区域
erosion_circle (ConnectedRegions, RegionErosion, 1)
*使用长宽均为1的矩形结构元素腐蚀得到区域
erosion_rectangle1 (ConnectedRegions, RegionErosion1,1, 1)
gen_circle (Circle,50, 50, 1)
*使用生成的圆形结构元素腐蚀得到区域
erosion1 (ConnectedRegions, Circle, RegionErosion2, 1)
erosion2 (ConnectedRegions, Circle, RegionErosion3, 0, 0, 1)

2.膨胀

膨胀是腐蚀运算的对偶运算

膨胀相关算子

使用圆形结构元素对区域进行膨胀操作:

dilation_circle(region要进行膨胀操作的区域:regiondilataion膨胀后获得的区域:radius圆形结构元素半径:)

使用矩形结构元素对区域进行膨胀操作:

dilation_rectangle(region要进行膨胀操作的区域:regiondilation膨胀后获得的区域:width,height矩形元素宽高

使用生成的结构元素对区域进行膨胀操作:

dilation1(region要进行膨胀操作的区域,structelemnt生成的结构元素:regiondilation膨胀后获得的区域:iterations迭代次数

使用生成的结构元素对区域进行膨胀操作(可设置参考点):

dilation2(region要进行膨胀操作的区域,structelement生成的结构元素:regiondilation膨胀后获得的区域:row,column设置参考点位置,一般为原点,iterations迭代次数即膨胀次数

实例:

dev_close_window ()
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Region, 100, 255)
connection (Region, ConnectedRegions)
dev_set_color ('black')
*使用半径为3的圆形结构膨胀得到区域
dilation_circle (ConnectedRegions, RegionDilation, 3)
*使用长宽均为3的矩形结构元素膨胀得到区域
dilation_rectangle1 (ConnectedRegions, RegionDilation1, 3, 3)
gen_circle (Circle,50, 50, 3)
*使用生成的圆形结构元素膨胀得到区域
erosion1 (ConnectedRegions, Circle, RegionErosion2, 1)
erosion2 (ConnectedRegions, Circle, RegionErosion3, 0, 0, 1)

3.开,闭运算

开闭运算都是由腐蚀膨胀复合而成。

开运算是先腐蚀后膨胀;使图像轮廓变光滑,还能使狭窄的连接断开及消除毛刺

闭运算是先膨胀后腐蚀;开运算的对偶运算,通常会弥合较窄的间断和细长的沟壑,还能消除小的孔洞及填充轮廓线的断裂

开闭运算相关算子

使用生成的结构元素对区域进行开运算操作:

opening(region要进行开运算操作的区域,structelement生成的结构元素:regionopening开运算后获得的区域::)

使用圆形结构元素对区域进行开运算操作:

opening_circle(region要进行开运算的区域:regionopening开运算后的区域:radius圆形结构元素的半径

使用矩形结构元素对区域进行开运算操作:

opening_rectangle(region要进行开运算的操作:regionopening开运算后获得的区域:width,height矩形结构元素的宽和高:)

使用生成的结构元素对区域进行闭运算操作:

closing(region要进行闭运算操作的区域,structelement生成的结构元素:regionclosing闭运算后的区域::)

使用圆形结构元素对图像进行闭运算操作:

closing_circle(region要进行闭运算操作的区域:regionclosing闭运算后的区域:radius圆形结构元素的半径

使用矩形结构元素对区域进行闭运算操作:

closing_rectangle(region要进行闭运算的操作:regionopening闭运算后获得的区域:width,height矩形结构元素的宽和高:)

实例:

dev_close_window ()
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_set_color ('black')
threshold (Image, Region, 100, 255)
connection (Region, ConnectedRegions)
*选择下标为100的e区域
select_obj (ConnectedRegions, ObjectSelected, 100)
*对e区域进行腐蚀操作
erosion_circle (ObjectSelected, RegionErosion, 1.5)
*开运算
opening (Region, RegionErosion, RegionOpening)
*圆形结构开运算
opening_circle (Region, RegionOpening1, 1.5)
*矩形结构开运算
opening_rectangle1 (Region, RegionOpening2, 1.5, 1.5)
*闭运算
closing (Region, RegionOpening2, RegionClosing)
*圆形结构闭运算
closing_circle (Region, RegionClosing1, 3.5)
*矩形闭运算
closing_rectangle1 (Region, RegionClosing2, 3.5, 3.5)
dev_display (Image)
dev_set_color ('black')
dev_display (RegionOpening)
dev_display (RegionOpening1)
dev_display (RegionOpening2)
dev_display (RegionClosing)
dev_display (RegionClosing1)
dev_display (RegionOpening2)

4.击中击不中变换

击中击不中变换需要两个结构基元E和F,这两个基元组成一个结构元素对,一个探测图像内部,一个探测图像外部。结构元素击中部分必须在区域内部击不中部分必须在区域外

击中击不中区域:

hit_or_miss(region要进行击中击不中运算的区域,structelement1用于击中的结构元素,structelement2用于击不中的结构元素,regionhitmiss击中击不中后获得的区域,row,column参考点的坐标

read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
threshold (Image, Region, 100,255)
connection (Region, ConnectedRegions)
gen_circle (Circle, 100,20,9.5)
boundary (Circle, RegionBorder, 'outer')
gen_circle (Circle1, 250,20,14)
boundary (Circle1, RegionBorder1, 'outer')
dev_set_color ('black')
hit_or_miss (RegionBorder1, RegionBorder1, RegionBorder1, RegionHitMiss, 92,26)

二值图像的形态学应用

1.边界提取

求取区域的边界:

boundary(region 想要进行边界提取的区域:regionborder边界提取后获得的边界区域:boundarytype边界提取类型:)

read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
threshold (Image, Region, 100,255)
connection (Region, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
erosion_circle (SelectedRegions, RegionErosion, 3.5)
difference (SelectedRegions, RegionErosion, RegionDifference)
erosion_circle (SelectedRegions, RegionErosion1, 10)
difference (SelectedRegions, RegionErosion1, RegionDifference1)
boundary (SelectedRegions, RegionBorder, 'inner')

2.孔洞填充

孔洞填充:

fill_up(region需要进行填充的区域:regionfillup填充后获得的区域

填充具有某形状特征的孔洞区域:

fill_up_shape(region需要填充的区域:regionfillup填充后得到的区域:feature形状特征,min,max形状特征的最小值和最大值:)

read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
threshold (Image, Region, 100,255)
fill_up_shape (Region, RegionFillUp, 'anisometry', 1, 1.6)
fill_up (Region, RegionFillUp1)
difference (RegionFillUp, Region, RegionDifference)
dev_display (RegionDifference)

3.骨架

骨架是一幅图像的骨骼部分,是描述物体的几何形状和拓扑结构。

获得区域的骨架:

skeleton(region要进行骨架运算的区域:skeleton骨架处理后得到的区域::)

获得骨架区域的交叉点和端点:

junctions_skeleton(region骨架处理后得到的区域:endpoint骨架的端点区域,juncpoint骨架的交叉点区域::)

dev_clear_window ()
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
threshold (Image, Region, 100,255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 30, 99)
skeleton (SelectedRegions, Skeleton)
junctions_skeleton (Skeleton, EndPoints, JuncPoints)
dev_set_color ('yellow')
dev_display (SelectedRegions)
dev_set_color ('red')
dev_display (EndPoints)

4.Blob分析

指对图像中相同像素的连通区域进行分析,该连通域成为Blob

灰度图像形态学

1.灰度腐蚀

使生成结构元素对灰度图像进行腐蚀:

gray_erosion(image要进行腐蚀操作的图像,SE生成的结构元素,imageerosion腐蚀后获得的灰度图像

使用矩形结构元素对灰度图像进行腐蚀操作:

gray_erosion_rect(image要进行腐蚀操作的图像:imagemin腐蚀后获得的灰度图像:maskheight,maskwidth滤波模板的高宽:)

使用多边形结构元素对灰度图像进行腐蚀操作:

gray_erosion_shape(image要进行腐蚀操作的灰度图像:imagemin腐蚀后获得的灰度图像:maskheight,maskwidth滤波模板的高宽,maskshape模板的形状:)

2.灰度膨胀

使用生成的结构元素对灰度图像进行膨胀操作:

gray_dilation(image要进行膨胀操作的灰度图像,SE生成的结构元素,imagedilation膨胀后获得的灰度图像

使用矩形结构元素对灰度图像进行腐蚀操作:

gray_dilation_rect(image要进行膨胀操作的灰度图像:imagemax膨胀后的灰度图像:maskheight,maskwidth滤波模板的宽高:)

3.灰度开闭运算

使用生成的结构元素对灰度图像进行开运算操作:

gray_opening(image要进行开运算操作的灰度图像,SE生成的结构元素:imageopening执行开运算后的灰度图像

使用矩形结构元素对灰度图像进行开运算操作:

gray_opening_rect(image要进行开运算的灰度图:imageopening开运算后获得的灰度图:maskheight,maskwidth滤波模板的高宽:)

使用多边形结构元素对灰度图像进行开运算操作:

gray_opening_shape(image要进行开运算操作的图像:imageopening开运算后获得的灰度图像:maskheight,maskwidth滤波模板的高宽,maskshape模板的形状:)

使用生成的结构元素对灰度图像进行闭运算操作:

gray_closing(image要进行闭运算操作的灰度图,SE生成的结构元素,imageclosing闭运算后获得的灰度图

使用矩形结构元素对灰度图像进行闭运算操作:

gray_closing_rect(image要进行闭运算操作的灰度图像:iamgeclosing闭运算后获得的灰度图:maskheight,maskwidth滤波模板的高宽

多边形结构元素对灰度图像进行闭运算操作:

gray_closing_shape(image要进行闭运算操作的灰度图:imageclosing闭运算后获得的灰度图:maskheight,maskwidth滤波模板的高宽,maskshape模板的形状:)

4.顶帽变换和底帽变换

图像相减与开运算和闭运算相结合会产生顶,底帽变换。

灰度图顶帽变换操作:

gray_tophat(image灰度图顶帽变换操作,SE生成的结构元素,imagetophat顶帽变换后获得的图像

灰度图底帽变换操作:

gray_bothat(image要进行底帽变换的图像,SE生成的结构元素,imagebothat底帽变换后获得的图像

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值