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. ios 加密解密工具类字符判断等

    #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface Helpers : NSObject ...

  2. Ubuntu用户管理

    本文主要介绍Ubuntu的用户管理,包括建立和删除用户,用户授权等 ================== 创建用户并授权================== sudo adduser xxx 会在ho ...

  3. Jmeter-Logic Controllers(逻辑控制器)

    Critical Section Controller(临界区控制器) 参考:http://www.cnblogs.com/yanzhe/p/7729984.html ForEach Controll ...

  4. 折半查找(C语言)

    一.二分查找 在C和C++里,二分查找是针对有序数组所用的一种快速查找元素的方法. 二.二分查找的条件以及优缺点 条件:针对有序数组(元素从小到大或从大到小) 优点:查询速度较快,时间复杂度为O(n) ...

  5. iframe相关知识

    iframe 不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能,可是 iframe的大小却不像层那样可以“伸缩自如”,所以带来了使用上的麻烦.一般通过百分比 ...

  6. A*专题训练

    POJ2449 Remmarguts' Date UDF's capital consists of N stations. The hall is numbered S, while the sta ...

  7. Tiny4412 u-boot分析(3)u-boot 引导内核流程

    在u-boot中,通过bootm命令启动内核.bootm命令的作用是将内核加载到指定的内存地址,然后通过R0.R1.R2寄存器传递启动参数之后启动内核.在启动内核之前需要对环境做一些初始化工作,主要有 ...

  8. 关于location.href赋值的php用法

    <?php echo $_GET['action']; ?> <!doctype html> <html lang="zh"> <head ...

  9. Jenkins 基础入门

    原文地址:Jenkins 基础入门 博客地址:http://www.extlight.com 一.前言 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作, ...

  10. MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer

    mysql> select end) as '<60', end) as '60~69', end) as '70~79', end) as '80~89', end) as '>= ...