Region在connection前后进行“交并差”等操作的异同

connection直译为“连接”。其实它的功能不是连接,它的功能是确定区域之间的连接关系,如果简单粗暴地解释的话,可以认为:connection的意思是“打散”,将不连接的区域打散成一个一个的区域。

 

一、difference操作

 

1、用connection之后的region集合减去单一region

 

以下为待处理的图:

image.png

read_image (Right, '未标题-1.jpg')
threshold (Right, One_Circle, 0, 80)
opening_circle (One_Circle, One_Circle, 3.5)

threshold (Right, Four_Reg, 100, 200)
opening_circle (Four_Reg, Four_Reg, 3.5)

dilation_circle (One_Circle, One_CircleDilation, 29.5)

*ConnectedRegions有几个值,xxx里就有几个值,这里是4个
connection (Four_Reg, ConnectedRegions)
difference (ConnectedRegions, One_CircleDilation, xxx)
area_center (xxx, Area, Row, Column)

*这里yyy只有3个值
difference (Four_Reg, One_CircleDilation, RegionDifference1)
connection (RegionDifference1, yyy)
area_center (yyy, Area1, Row1, Column1)

相关region的形状如下:

image.png

结果是:

Area := [1307, 4448, 4534, 0]

Area1 := [1307, 4448, 4534]

 

明明区域xxx和yyy看起来一模一样,但是xxx中有4个量,yyy中只有3个(通过Area/Area1元组可明确看出这一点)。

 

2、用connection之后的region集合减去多个region

 

用下面左面的4个region集合difference右边的2个region的集合:

image.png

效果如下,但是结果region集合里还是有4个量。

image.png

再举一个类似的例子:

用下面左面的4个region集合difference右边的2个region的集合:

image.png

结果region集合里还是有4个量。

image.png

但是对结果再执行一次connection算子之后,变成了6个量。

 

请注意,对于本文第一个例子中,如果对xxx执行connection算子的话,还是有4个量,那个面积为0的region并没有消失。但是如果再执行union1,然后再执行connection的话,就只有3个量了!

 

3、用单个region减去其他region在connection之后的region集合

read_image (Right, '未标题-1.jpg')
threshold (Right, One_Circle, 0, 80)
opening_circle (One_Circle, One_Circle, 3.5)

threshold (Right, Four_Reg, 100, 200)
opening_circle (Four_Reg, Four_Reg, 3.5)
gen_rectangle1 (ROI_0, 0, 190.5, 288, 242.5)
union2 (ROI_0, Four_Reg, RegionUnion)

connection (RegionUnion, RegionUnion)

dilation_circle (One_Circle, One_Circle_Dilation, 29.5)

difference (One_Circle_Dilation, RegionUnion, Region_Result)

connection (Region_Result, Region_Result_Connected)

用下面左面的单个region减去右边的5个region的集合:

image.png

结果是一个region,如果再执行connection的话,则会变成2个。

总结:

difference(Region, Sub : RegionDifference : : )

 

1、如上,对于difference算子来说,它的效果形状约等效于签名中的Region区域union1之后减去Sub区域union1之后的结果。简记为:union1(Region) - union1(Sub).   (注意,仅仅是效果形状)

 

2、签名中,差集结果RegionDifference 中元素的个数和Region一致,其中可能有些region的面积为0,或者有单个region被分隔开没有连在一起。

 

二、intersection 操作

image.png

上面左图是RegionUnion,右图是One_Circle_Dilation:

read_image (Right, '未标题-1.jpg')
threshold (Right, One_Circle, 0, 80)
opening_circle (One_Circle, One_Circle, 3.5)

threshold (Right, Four_Reg, 100, 200)
opening_circle (Four_Reg, Four_Reg, 3.5)
gen_rectangle1 (ROI_0, 0, 190.5, 288, 242.5)
union2 (ROI_0, Four_Reg, RegionUnion)

connection (RegionUnion, RegionUnion)

dilation_circle (One_Circle, One_Circle_Dilation, 29.5)


intersection (One_Circle_Dilation, RegionUnion, RegionIntersection)

intersection (RegionUnion, One_Circle_Dilation, RegionIntersection1)

area_center (RegionIntersection1, Area, Row, Column)
union1 (RegionIntersection1, RegionUnion1)
connection (RegionUnion1, ConnectedRegions)

RegionIntersection 和 RegionIntersection1的形状都是一样的,注意仅是形状。

image.png

但是RegionIntersection 中只有1个对象,而RegionIntersection1中有5个对象,其中还有一个面积为0的对象

 

可以看出,intersection 和difference的规律极为类似。

 

 

二、union2 操作

union2(Region1, Region2 : RegionUnion : : )

 

为节省篇幅,直接说结论:

1、签名中,RegionUnion中对象的个数和Region1一致,如果Region1含多个对象并且Region2只有一个对象,则Region1中每一个对象都和Region2 合并。

2、如果Region1只有1个对象,Region2有多个对象,相当于先将Region2合并,然后再和Region1合并,结果RegionUnion 中只有一个对象。

3、如果Region1有2个对象,Region2有多个对象,相当于先将Region2合并,然后再和Region1的每个对象逐个合并,结果RegionUnion 中有2个对象。



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864