5. 如何对区域进行交集,补集,反选,合并操作

目录:

      1. 反选( complement() )

      2. 补集( difference() 、symm_difference() )

      3. 合并 之 union1() 函数( 对所有连通域进行合并 )

      4. 合并 之 union2() 函数( 对两个连通域进行合并 )

      5. 交集( insection() )

 

1. 反选( complement() )

 

* 打开一个 ID 为 WindowHandle 的图像窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

* 创建一个半径为 131.727,圆心为(224.5,250.5) 大小的圆
gen_circle (Cricle1, 224.5, 250.5, 131.727)

* 清除窗口里面的内容
dev_clear_window ()

* 反选 
complement (Cricle1, RegionComplement)

 

图 1.1 上述代码运行示意图

 

2. 补集( difference() 、symm_difference() )

*获取 区域1 的补集

* 打开一个 ID 为 WindowHandle 的图像窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

* 创建一个半径为 69.7711,圆心为(122.5,126.5) 大小的圆
gen_circle (Cricle1, 122.5, 126.5, 69.7711)
gen_circle (Cricle2, 184.5, 179.5, 73.9256)

* 补集
difference (Cricle1, Cricle2, RegionDifference)

* 清除窗口里面的内容
dev_clear_window ()

* 显示 RegionDifference
dev_display (RegionDifference)
图1.2 difference() 运行效果
* 获取两区域合并后的区域与两区域交集的补集


* 打开一个 ID 为 WindowHandle 的图像窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

* 创建一个半径为 89.3588,圆心为(114.5,127.5) 大小的圆
gen_circle (Cricle1, 114.5, 127.5, 89.3588)
gen_circle (Cricle2, 163.5, 171.5, 94.8472)

* 计算两个区域的对称差
symm_difference(Cricle1, Cricle2 ,RegionDifference)

* 清除窗口里面的内容
dev_clear_window ()

* 显示 RegionDifference
dev_display (RegionDifference)
图1.3 symm_difference() 运行效果图

3. 合并 之 union1() 函数

* 合并 之 union1 (所有区域合并)

* 打开一个 ID 为 WindowHandle 的图像窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

read_image (Image, 'fabrik')

* 设置窗口中输出对象颜色的数目; 12 代表输出对象有 12 种颜色
dev_set_colored (12)

* 二值化; 提取出图片中像素值在128-255的区域
threshold (Image, Region, 128, 255)

* 用来计算输入区域中的所有连通域。对应的反向操作是union1。
* 输入:一个region;
* 输出:所有连通域的组合vector;
* 返回的连通域的最大数量可通过 set_system('max_connection',<Num>) 进行设置,默认 0 则返回所有连通域数目。
connection (Region, ConnectedRegions)

* 将上述独立的区域都合并为一个新的区域;即将窗口上的所有区域合并
union1 (ConnectedRegions, RegionUnion)

* 清除窗口里面的内容
dev_clear_window ()

dev_display (RegionUnion)
图1.4 union1() 运行效果图
图1.5 总共有 93 个联通域,当前选中的为第84个联通域

4. 合并 之 union2() 函数(两个区域合并)

* 合并 之 union2 (两个区域合并)


* 打开一个 ID 为 WindowHandle 的图像窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

* 设置窗口中输出对象颜色的数目; 12 代表输出对象有 12 种颜色
dev_set_colored (12)

gen_circle (Circle1, 101.5, 102.5, 63.2456)
gen_circle (Circle2, 295.5, 285.5, 75.9276)

union2 (Circle1, Circle2, RegionUnion)

dev_clear_window ()

dev_display (RegionUnion)

图1.6 union2() 运行效果图

4. 交集( insection() )

* 求两个相交图像之间的交集


dev_open_window (0, 0, 512, 512, 'black', WindowHandle)


gen_circle (Cricle1, 114.5, 127.5, 89.3588)
gen_circle (Cricle2, 163.5, 171.5, 94.8472)

* 计算两个区域相交的地方
intersection (Cricle1, Cricle2, RegionIntersection)

dev_clear_window ()
dev_display (RegionIntersection)
图1.7  intersection() 运行效果图

 

 

参考文献:

         【1】https://blog.csdn.net/cs5664798595/article/details/78280103

         【2】重码网视频系列

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值