详解什么是灰度值开运算闭运算



详解什么是灰度值开运算闭运算

(2014-08-19 09:42:44)
 分类:图像处理
我们在进行开运算和闭运算的时候会遇到两种类型的算子,一种是 opening_circle 这样的,一种是 gray_opening 这样的,可能你看了 Halcon 的帮助文档也没弄清楚怎么回事,那我就按自己的理解多讲几句这两种算子到底是什么区别吧。  
 
首先要明白一件事:  
开运算 = 腐蚀 + 膨胀;(断开细小的地方,所以叫开)  
闭运算 = 膨胀 + 腐蚀。(连接细小的地方,所以叫闭)  
 
然后,一定要仔细琢磨透在图像处理中所谓 region image 到底有什么区别。这两者的区别很大,而且很重要。我相信你肯定遇到过自己找到一个算子,想对 image 进行处理,结果发现这个算子的参数只能是 region 这样的情况。  
 
好,不废话了,打字比较快,说的比较乱,如果有语句不通顺或者难以理解的地方,请见谅,恳请指出我们一起交流。  
 
dilation1 是对一个 region 进行膨胀,注意这里变量是一个 region region 从某种意义上来说已经失去了灰度值这一性质,因为 region 基本上都是在灰度值的性质下提取出来的 image 的一个子集。而 gray_dilation 是对图像 Image 进行膨胀,也就是变量是 Image ,而不是 region 。你可以这么理解 region image 的区别, region 基本上一个 region 就是一个灰度值,不存在什么所谓的灰度值差异,而 image 是由各种各样的灰度值组成的,有灰度值的差异。  
 
我们经常用到的 opening_circle closing_circle 等开运算闭运算的算子是“二值图像形态学运算”,再回忆一下二值图像是什么, region 是什么以及用 threshold 对图像进行阈值分割之后是不是得到一个 region ,这个时候图像就是一个二值图像,这个时候的膨胀和腐蚀就是你所理解的将一个 region 变粗或者变细了。  
 
而灰度值开运算和闭运算,也就是 gray_opening gray_closing 其实是“灰度图像的形态学运算”。想想二值图像和灰度图像有什么区别?那么要理解灰度值开运算和闭运算,由于开运算是只先腐蚀再膨胀,而闭运算是先膨胀再腐蚀,所以必须先知道灰度值膨胀和灰度值腐蚀是什么意思。  
 
灰度值膨胀:  
我先说结果:原图像中被膨胀的区域的灰度值会相应地增大,所以也就对应着膨胀之后的图像更亮一些,原图像中那些暗一些的细节都会变小或消失,这主要取决于你所用的结构元素的大小。那么为什么会增大呢?这是因为膨胀的原理是取原图像和结构元素之和所包围的那一部分小邻域内的灰度值的最大值。还有这里的结构元素和二值图像中的元素也有本质的区别,这里的结构元素是带有灰度值信息的,也就是说即使你给定的是同样大小的圆,如果灰度值大小不一样,得到的结果也不一样。  
其实二值图像中的膨胀和这个道理也是一样的,原区域和结构元素相加,取相加之和所包围小邻域内的最大值,由于在二值的情况下,只有 0 1 ,那么最大值自然就是 1 了,这就是你为什么会在二值图像的膨胀操作的情况下会看到原来的区域变得更大了的原因。其实这也可以理解成并不是区域变大了,而是这些点出原来的灰度值被变成了另外一种相反的灰度值,和我们所膨胀的区域的灰度值是一样的,所以才看起来和我们之前的区域连在一起成为一个区域了。那么你再想想把 0 1 两种情况扩展到 0-255 256 个情况的时候,会发生什么事情?为什么在这种情况下你看不到明显的区域变大或者变小的现象,甚至膨胀本来应该是变大,结果你看到一些线条反而变细甚至消失了?因为我们仍然实在修改灰度值,膨胀就是让处理的区域内的灰度值变大,如果原来的线条是黑色的,灰度值变大之后,可不就是黑色的减少了,看起来就像是线条变细了么?这下你明白了吧?其实是一个道理,只不过这里分成了 256 种灰度级,让人看起来变化更细微而已。  
         灰度值腐蚀:把膨胀的过程反过来就是了。我想你肯定想到了,这种操作处理之后图像会变得比原来暗,亮的细节会被抑制。   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值