例一:毛刺在往外凸的面上

策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。

 read_image (Tu, 'C:/Users/xiahui/Desktop/tu.jpg')
binary_threshold (Tu, Region, 'max_separability', 'dark', UsedThreshold)
opening_circle (Region, RegionOpening, 50.5)
difference (Region, RegionOpening, RegionDifference)
dev_display (Tu)
dev_display (RegionDifference)

可以看到,虽然毛刺被分割出来了,但是多出了4块干扰的区域。原因是执行opening_circle时,四个尖角被削平了。

开运算是先腐蚀再膨胀。腐蚀之后,毛刺被削没了,但是4个尖角大致保持以前的形状;4个尖角再经过膨胀运算后,就变得不尖了。

策略2:分割出白色部分,然后通过闭运算封闭凹槽,再通过闭运算之后的区域减去原白色部分区域,得到毛刺部分的区域。

 read_image (Tu, 'C:/Users/xiahui/Desktop/tu.jpg')
binary_threshold (Tu, Region, 'max_separability', 'light', UsedThreshold)
closing_circle (Region, RegionClosing, 50.5)
difference (RegionClosing, Region, RegionDifference)
dev_display (Tu)
dev_display (RegionDifference)

分割效果很好。

例二:毛刺在往内凹的面上

策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。

 read_image (Ao, 'C:/Users/xiahui/Desktop/ao.jpg')
binary_threshold (Ao, Region, 'max_separability', 'dark', UsedThreshold)
opening_circle (Region, RegionOpening, 50.5)
difference (Region, RegionOpening, RegionDifference)
dev_display (Ao)
dev_display (RegionDifference)

分割效果不佳,现象和原因同例一。

策略2:分割出白色部分,然后通过闭运算封闭凹槽,再通过闭运算之后的区域减去原白色部分区域,得到毛刺部分的区域。

 read_image (Ao, 'C:/Users/xiahui/Desktop/ao.jpg')
binary_threshold (Ao, Region, 'max_separability', 'light', UsedThreshold)
closing_circle (Region, RegionClosing, 50.5)
difference (RegionClosing, Region, RegionDifference)
dev_display (Ao)
dev_display (RegionDifference)

分割效果很好。

说明:

以上的opening_circle (Region, RegionOpening, 50.5)可以用下面的代码来完全等效:

set_system ('tsp_clip_region', 'false')
erosion_circle (Region, RegionErosion1, 50.5)
dilation_circle (RegionErosion1, RegionDilation, 50.5)

set_system ('tsp_clip_region', 'false')的意思是当region(一般是膨胀以后)超过图像区域时,不修剪region

下面我通过一些简单图形来观察开运算(腐蚀—膨胀)和闭运算(膨胀—腐蚀)的执行效果。

用腐蚀、膨胀算子来模拟开运算的过程:

 *模拟开运算
set_system ('tsp_clip_region', 'false')
read_image (Rect, 'C:/Users/xiahui/Desktop/Rect.jpg')
binary_threshold (Rect, Region, 'max_separability', 'dark', UsedThreshold)
erosion_circle (Region, RegionErosion, 30.5)
dilation_circle (RegionErosion, RegionDilation, 30.5)
dev_display (Rect)
dev_display (RegionDilation)

(这个星花腐蚀和膨胀值要小些,不然没有上图的效果)

用膨胀、腐蚀算子来模拟闭运算的过程:

 *模拟闭运算
set_system ('tsp_clip_region', 'false')
read_image (Rect, 'C:/Users/xiahui/Desktop/rect.jpg')
binary_threshold (Rect, Region, 'max_separability', 'dark', UsedThreshold)
dilation_circle (Region, RegionDilation, 30.5)
erosion_circle (RegionDilation, RegionErosion, 30.5)
dev_display (Rect)
dev_display (RegionErosion)

(矩形闭运算后可完全复原)

(正八边形闭运算后可完全复原)

叠加在一起看看:

(无法复原)

结论:

1、膨胀会使尖角变平滑。
2、对于凸多边形来说(可用shape_trans (Region, RegionTrans, 'convex')生成凸多边形),腐蚀以后,region的外形特征保持不变,矩形腐蚀以后仍是矩形,三角形腐蚀以后还是三角形。

3、对于非凸多边形来说,腐蚀以后,region的外形特征大致保持不变,但是如果region的尖角特别细,则会腐蚀掉,这样region的形状就会发生较大变化。

4、圆角腐蚀以后,可能变成尖角。

5、开运算会使尖角变平滑。

6、对于凸多边形来说,闭运算之后,region不发生任何变化。

7、对于有凹槽的非凸多边形来说,闭运算之后region的凹槽被填充。第一步膨胀过程中,夹角变圆角,第二步腐蚀过程中,圆角又可能复原成了尖角(见第4条)。

 

从去除毛刺的策略看开运算opening_circle和闭运算closing_circle的异同的更多相关文章

  1. (转) 开运算opening_circle和闭运算closing_circle的异同

    从去除毛刺的策略看开运算opening_circle和闭运算closing_circle的异同 例一:毛刺在往外凸的面上 策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算 ...

  2. 【OpenCV新手教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/23184547 作者:毛星云(浅墨) ...

  3. c#数字图像处理(十三)图像开运算与闭运算

    图像开运算与闭运算定义 二值图像开运算的数学表达式为: g(x, y)=open[f(x, y ), B]=dilate{erode[f(x, y),B],B} 二值图像的开运算事实上就是先作腐蚀运算 ...

  4. OpenCV计算机视觉学习(5)——形态学处理(腐蚀膨胀,开闭运算,礼帽黑帽,边缘检测)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 形态 ...

  5. java学习第13天( java获取当前时间,有关大数据的运算及精确数字运算,Date类)

    一 java获取当前时间 学习一个函数,得到当前时间的准确值 System.currectTimeMillis(). 可以得到以毫秒为单位的当前时间.它主要用于计算程序运行时间,long start= ...

  6. paper 76:膨胀、腐蚀、开、闭运算——数字图像处理中的形态学

    膨胀.腐蚀.开.闭运算是数学形态学最基本的变换.本文主要针对二值图像的形态学膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔):腐蚀:把二值图像各1像素连接成分的边界点去掉从而 ...

  7. OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换

    腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RE ...

  8. Java位运算总结:位运算用途广泛《转》

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  9. 学习 opencv---(10)形态学图像处理(2):开运算,闭运算,形态学梯度,顶帽,黒帽合辑

    上篇文章中,我们重点了解了腐蚀和膨胀这两种最基本的形态学操作,而运用这两个基本操作,我们可以实现更高级的形态学变换. 所以,本文的主角是OpenCV中的morphologyEx函数,它利用基本的膨胀和 ...

随机推荐

  1. java 利用Future做超时任务处理

    Callable<String> task = new Callable<String>() { @Override public String call() throws E ...

  2. IdentityServer4-介绍

    一.总体介绍 大多数现代应用或多或少是这样的: 通常,每个层(前端.中间层和后端)都必须保护资源并实现身份验证和/或授权——通常针对相同的用户存储. 将这些基本的安全功能外包给安全令牌服务,可以防止在 ...

  3. POJ.3537.Crosses and Crosses(博弈论 Multi-SG)

    题目链接 \(Description\) 有一个一行n列的棋盘,每个人每次往上放一个棋子,将三个棋子连在一起的人赢.问是否有必胜策略. \(Solution\) 首先一个人若在\(i\)处放棋子,那么 ...

  4. Python 将图片转化为 HTML 页面

    最近在 GitHub 看到一个挺有意思的 Python 程序(img2html: Convert a image to HTML). 它能将图片的每个像素用文字代替,最后生成一个HTML文档,在浏览器 ...

  5. 第二章 flex输入输出结构

    对于一个词法分析程序,一般读取文件或者终端 一个默认lex程序大致看上去像这样 YY_BUFFER_STATE bp; extern FILE* yyin; ... whatever the prog ...

  6. [原创]Java性能优化权威指南读书思维导图3

    [原创]Java性能优化权威指南读书思维导图3

  7. 【linux】linux修改open file 大小

    使用下面命令可以查看openfile数量 ulimit -a linux修改open file 大小,修改步骤如下: 1>修改file-max 修改文件: vi /etc/sysctl.conf ...

  8. android_双击退出

    /** * 设置高速双击退出程序 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-g ...

  9. import pandas as pd Python安装pandas模块

    在学习python过程中需要用到一个叫pandas的模块,在pycharm中安装时总是出错. 千般百度折腾还是无果,后来发现它需要安装很多依赖包.就问你气不气~ 需要手动安装啊,千万记住,这里有个py ...

  10. 如何使用IconFont 图标

    第一步:使用font-face声明字体 @font-face {font-family: 'iconfont'; src: url('iconfont.eot'); /* IE9*/ src: url ...