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

一、difference操作

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

以下为待处理的图:

 read_image (Right, '未标题-1.jpg')
threshold (Right, One_Circle, , )
opening_circle (One_Circle, One_Circle, 3.5) threshold (Right, Four_Reg, , )
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的形状如下:

结果是:

Area := [1307, 4448, 4534, ]

Area1 := [1307, 4448, 4534]

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

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

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

  

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

再举一个类似的例子:

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

  

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

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

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

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

 read_image (Right, '未标题-1.jpg')
threshold (Right, One_Circle, , )
opening_circle (One_Circle, One_Circle, 3.5) threshold (Right, Four_Reg, , )
opening_circle (Four_Reg, Four_Reg, 3.5)
gen_rectangle1 (ROI_0, , 190.5, , 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的集合:

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

总结:

difference(Region, Sub : RegionDifference : : )

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

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

二、intersection 操作

  

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

 read_image (Right, '未标题-1.jpg')
threshold (Right, One_Circle, , )
opening_circle (One_Circle, One_Circle, 3.5) threshold (Right, Four_Reg, , )
opening_circle (Four_Reg, Four_Reg, 3.5)
gen_rectangle1 (ROI_0, , 190.5, , 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的形状都是一样的,注意仅是形状。

  

但是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个对象。

Region在connection前后进行“交并差”等操作的异同的更多相关文章

  1. C# List 集合 交集、并集、差集、去重, 对象集合、 对象、引用类型、交并差补、List<T>

    关键词:C#  List 集合 交集.并集.差集.去重, 对象集合. 对象.引用类型.交并差.List<T> 有时候看官网文档是最高效的学习方式! 一.简单集合 Intersect 交集, ...

  2. PPT导出图片质量太差?简单操作直接导出印刷质地图片

    PPT导出图片质量太差?简单操作直接导出印刷质地图片    ​ PPT不仅可以用于展示文档,还可以用于简单图片合成处理,同时,PPT文档还可以全部导出为图片. 默认情况下,PPT导出的图片为96DPI ...

  3. 用SQL表达交并差操作

    交-并-差的处理 SQL语言:并运算UNION,交运算INTERSECT,差运算EXCEPT 基本语法形式: 子查询{UNION [ALL] | INTERSECT [ALL] | EXPECT [A ...

  4. MySQL中的交并差

    Mysql只提供了并集(union),没有提供差集,和交集,但是我们可以用union来实现交和差,下面即是实现方式: 首先创建两个表: ERROR 1064 (42000): mysql> cr ...

  5. shell 计算文件交并差

    交集 $ sort a b | uniq -d 并集 $ sort a b | uniq 差集a-b $ sort a b b | uniq -u 文件乱序 cat tmp.txt | awk 'BE ...

  6. oracle 的交并差函数,intersect;union;minus。

    创建表并添加数据: --创建TABLE_A create table TABLE_A ( A ), B ) ); --给TABLE_A添加数据 insert into TABLE_A values(' ...

  7. c#数据处理总结(分组、交并差与递归)

    前言:最近项目比较忙,完全没有时间写下总结笔记,今天抽出时间来写下笔记,供写后台的你来做数据处理后台代码编写的参考. 一.分组 var GroupForList = numberList.GroupB ...

  8. 基于C#的MongoDB数据库开发应用(4)--Redis的安装及使用

    在前面介绍了三篇关于MongoDB数据库的开发使用文章,严格来讲这个不能归类于MongoDB数据库开发,不过Redis又有着和MongoDB数据库非常密切的关系,它们两者很接近,Redis主要是内存中 ...

  9. [转载] Redis 起步

    转载地址:http://www.cnblogs.com/shanyou/archive/2012/01/28/2330451.html Rdis和JQuery一样是纯粹为应用而产生的,这里记录的是在C ...

随机推荐

  1. GPU Memory Usage占满而GPU-Util却为0的调试

    最近使用github上的一个开源项目训练基于CNN的翻译模型,使用THEANO_FLAGS='floatX=float32,device=gpu2,lib.cnmem=1' python run_nn ...

  2. Error: Could not symlink lib/pkgconfig/python-3.6.pc

    Mac安装python3的时候出如上错误 解决办法: 安装python3的时候就是输入python3死活没有反应 input sudo chown -R $USER /usr/local/lib/pk ...

  3. Codeforces 989A:A Blend of Springtime

    A. A Blend of Springtime time limit per test 1 second memory limit per test 256 megabytes input stan ...

  4. clamav完整查杀linux病毒实战(转)

    开篇前言 Linux服务器一直给我们的印象是安全.稳定.可靠,性能卓越.由于一来Linux本身的安全机制,Linux上的病毒.木马较少,二则由于宣称Linux是最安全的操作系统,导致很多人对Linux ...

  5. Hive之 数据存储

    首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据. 其次 ...

  6. linux关于ftp查看不到文件列表的问题

    今天配置linux服务器的ftp后,登录都正常,使用ftp工具登录后,所有目录都可以通过手工写路径访问,但是文件夹和文件列表看不到数据. 后来分析,总结原因得出结果是跟selinux有关,于是通过关闭 ...

  7. VS2017开发Linux平台上的程序

    重装系统后安装VS2015时卡住了,于是试试看VS2017怎样,听说还支持调Linux.发现VS2017跟12/13/15又有了新的飞跃,竟然支持模块化下载,对于我这种主要写C++简直是个福音,勾了L ...

  8. Java-Runoob-高级教程-实例-字符串:02. Java 实例 - 查找字符串最后一次出现的位置

    ylbtech-Java-Runoob-高级教程-实例-字符串:02. Java 实例 - 查找字符串最后一次出现的位置 1.返回顶部 1. Java 实例 - 查找字符串最后一次出现的位置  Jav ...

  9. CFGym 100211J 题解

    一.题目 二.题意 给定一个字母表(最多也就是英文小写字母的前10个字母),一个交换表,两个字符串,判断字符串A能否通过交换表的交换方式变成字符串B. 三.思路 1.一开始,比赛时,我半模拟半记忆化地 ...

  10. Oracle Lock(Enqueues)

    转载:http://www.cnblogs.com/Richardzhu/articles/2796540.html 数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多 ...