Halcon常用的集合运算与区域变换算子

一.集合运算

1.difference(Region, Sub : RegionDifference : : ) (差集)

算子说明:

计算两个区域的差集,第1区域剩下部分形成新的区域

算子参数:

1.Region(输入要处理的区域)
2.Sub(输入从 Region 中减去这些区域的并集)
3.RegionDifference(输出结果区域)

实例:
使用difference算子得到目标区域

dev_update_off ()
dev_close_window ()
read_image (Coins001, 'coins_001.jpg')
get_image_size (Coins001, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
*先转换成灰度图片
rgb1_to_gray (Coins001, GrayImage)
dev_display (GrayImage)
*首先获取图片的所有区域
threshold (GrayImage, Region, 0, 255)
threshold (GrayImage, Region1,0, 75)
dilation_circle (Region1, RegionDilation, 0.5)
connection (RegionDilation, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 20000, 999999)
*用整个区域减去筛选出来的区域,得到目标区域
difference (Region, SelectedRegions, RegionDifference)
dev_display (RegionDifference)

2.intersection(Region1, Region2 : RegionIntersection : : ) 交集

算子说明:

计算两个区域的交集。

算子参数:

1.Region1(输入要与 Region2 中的所有区域相交的区域)
2.Region2(输入与 Region1 相交的区域)
3.RegionIntersection(输出交集的结果)

实例:

dev_update_off ()
dev_close_window ()
read_image (Coins001, 'coins_001.jpg')
get_image_size (Coins001, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
*先转换成灰度图片
rgb1_to_gray (Coins001, GrayImage)
dev_display (GrayImage)
gen_rectangle1 (ROI_0, 143, 116, 248, 217)
gen_rectangle1 (TMP_Region, 200, 170, 287, 300)
intersection (ROI_0, TMP_Region, ROI_1)
dev_display (ROI_1)

效果图:
在这里插入图片描述

3.union1(Region : RegionUnion : : ) 合集

算子说明:

返回所有输入区域的合集。
算子参数:
1.Region(输入要计算并集的区域) 区域为数组类型
2.RegionUnion(输出所有输入区域的合集)

实例:

dev_update_off ()
dev_close_window ()
read_image (Coins001, 'coins_001.jpg')
get_image_size (Coins001, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
*先转换成灰度图片
rgb1_to_gray (Coins001, GrayImage)
dev_display (GrayImage)
threshold (GrayImage, Regions, 84, 255)
connection (Regions, ConnectedRegions)
dev_display (ConnectedRegions)
union1 (ConnectedRegions, RegionUnion)
dev_display (RegionUnion)

效果图:
在这里插入图片描述

4.union2(Region1, Region2 : RegionUnion : : ) 并集

算子说明:

返回两个区域的并集。

算子参数:

1.Region1(输入要计算与 Region2 中所有区域的联合的区域)
2.Region2(输入应添加到 Region1 的区域)
3.RegionUnion(输出结果区域)
实例:

dev_update_off ()
dev_close_window ()
read_image (Coins001, 'coins_001.jpg')
get_image_size (Coins001, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
*先转换成灰度图片
rgb1_to_gray (Coins001, GrayImage)
dev_display (GrayImage)
gen_rectangle1 (ROI_0, 62, 170, 148, 260)
gen_rectangle1 (TMP_Region, 101, 213, 219, 335)
union2 (ROI_0, TMP_Region, ROI_1)
dev_display (ROI_1)

效果图:
在这里插入图片描述

二.区域变换

1.connection(Region : ConnectedRegions : : )

算子说明:

connection用于计算给定的输入区域的连通分量,用于将一整块没有连接的给分开。

算子参数:

1.Region(输入区域)
2.ConnectedRegions(输出连接的组件)

实例:

dev_update_off ()
dev_close_window ()
read_image (Coins001, 'coins_001.jpg')
get_image_size (Coins001, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
*先转换成灰度图片
rgb1_to_gray (Coins001, GrayImage)
dev_display (GrayImage)
threshold (GrayImage, Regions, 130, 255)
connection (Regions, ConnectedRegions)
dev_display (ConnectedRegions)

效果图:
在这里插入图片描述

2.fill_up(Region : RegionFillUp : : )

算子说明:

fill_up填补区域的漏洞。

算子参数:

1.Region(输入包含孔洞的输入区域)
2.RegionFillUp(输出填充后的区域)

实例:

dev_update_off ()
dev_close_window ()
read_image (Coins001, 'coins_001.jpg')
get_image_size (Coins001, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
*先转换成灰度图片
rgb1_to_gray (Coins001, GrayImage)
dev_display (GrayImage)
threshold (GrayImage, Regions, 120, 255)
connection (Regions, ConnectedRegions)
fill_up (ConnectedRegions, RegionFillUp)
dev_display (RegionFillUp)

效果图:
在这里插入图片描述

3.shape_trans(Region : RegionTrans : Type : )

算子说明:

shape_trans根据参数变换输入区域的形状

算子参数:

1.Region(输入要改造的地区)
2.RegionTrans(输出转换区域)
3.Type(输入转换类型) 值列表:‘convex’、‘ellipse’、‘inner_center’、‘inner_circle’、‘outer_circle’、‘rectangle1’、‘rectangle2’

实例:

read_image (Image, 'fabrik')
regiongrowing (Image, Regions, 1, 1, 3, 100)
dev_set_draw ('margin')
dev_set_colored (6)
dev_clear_window ()
dev_display (Regions)
stop ()
shape_trans (Regions, RegionTrans, 'convex')
dev_clear_window ()
dev_display (RegionTrans)
stop ()
shape_trans (Regions, RegionTrans, 'ellipse')
dev_clear_window ()
dev_display (RegionTrans)
stop ()
shape_trans (Regions, RegionTrans, 'outer_circle')
dev_clear_window ()
dev_display (RegionTrans)
stop ()
shape_trans (Regions, RegionTrans, 'inner_circle')
dev_clear_window ()
dev_display (RegionTrans)
stop ()
shape_trans (Regions, RegionTrans, 'rectangle1')
dev_clear_window ()
dev_display (RegionTrans)
stop ()
shape_trans (Regions, RegionTrans, 'rectangle2')
dev_clear_window ()
dev_display (RegionTrans)
stop ()
shape_trans (Regions, RegionTrans, 'inner_center')
dev_clear_window ()
dev_display (RegionTrans)

效果图:
在这里插入图片描述

4.skeleton(Region : Skeleton : : )

算子说明:

skeleton计算骨架,即输入区域的中轴。

算子参数:

Region(输入要细化的区域)
Skeleton(输出结果骨架)

实例:

dev_close_window ()
read_image (Image, 'mreut')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 7)
threshold (EdgeAmplitude, Edges, 40, 255)
skeleton (Edges, Skeleton)
dev_display (Image)
dev_set_color ('red')
dev_display (Skeleton)

效果图:
在这里插入图片描述


版权声明:本文为qq_41234432原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。