OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]

若有需要请点击查看原文,要看中文请访问这里。


一:腐蚀和膨胀

膨胀,就是用一个核去扫描原图,用核所覆盖区域的最大像素值代替锚点位置的像素。

反之,腐蚀,则是取最小像素值。直观的显示可以观察图1,2和3【图片来自OpenCV网站】:

OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]_第1张图片

图1 原图


OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]_第2张图片 

图2 膨胀操作之后的图像,用核来扫描图像时轮廓部分的黑色被邻近的高像素值白色代替,结果显示为白区域增大。


OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]_第3张图片

图3 腐蚀操作取邻域的最小像素值点,实现背景中的高像素值被低像素值代替,显示为背景被“腐蚀”。


二:以腐蚀和膨胀为基础的更多形态学变换

(1)开运算(Opening)和闭运算(Closing)

首先献上开运算的及闭运算的运算程式,分别如图4和5所示:


图4 开运算程式,明显开运算是先对图像进行腐蚀,再进行膨胀



图5 闭运算,先进行膨胀,再进行腐蚀


那有的同学会问,这样的结果是不是会相互抵消,所以还是原图啊!

这里我们用一个实例分析,假设我们有一副7*7的图像,是纯黑(0)和纯白(255),如下图6所示:

OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]_第4张图片

图6 图像原图

OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]_第5张图片

图7 腐蚀图像

OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]_第6张图片

图8 膨胀腐蚀之后的图像,得到开运算的图像


观察图6和图8,两张图有着明显的不同,图6中被暗块包围的亮块已经全部暗化。如原文所述:“Useful for removing small objects (it is assumed that the objects are bright on a dark foreground)”,开运算对于移除暗前景中的小亮块有效!

那我们就可以推断,对于闭运算,我们先膨胀,再去腐蚀,不就可以移除暗区域吗?

开运算是先腐蚀,再膨胀,用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。

闭运算是先膨胀,在腐蚀,用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。
http://www.cnblogs.com/zsb517/archive/2012/06/08/2541193.html

(二)形态学梯度(Morphological Gradient)



如上公式所示,膨胀图像和腐蚀图像做差,就是形态学梯度。容易想到,用图2去减去图3,可以得到下图9所示的图像,即字母的轮廓。

OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]_第7张图片

图9 膨胀和腐蚀做差,得到图像轮廓


(三)顶帽和黑帽(top hat and black hat)

黑帽和顶帽的解释OpenCV没有给出,只有图10所示这些:

OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]_第8张图片

图10 顶帽和黑帽

我也不太了解他们具体做些什么,等我明白了再来这里更新。


(四)图像金字塔image pyramids

既然说到图像金字塔,那么我们就用金字塔来说明,看图11:

OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]_第9张图片

图11 图像金字塔

图11分为四层,那如果我们有一个第二层大小的图片怎么把它缩小到第三层的大小呢?

那我们就引入高斯金字塔。

在利用高斯金字塔构建图像金字塔时,将第K层的图像先用高斯滤波器卷积,再除去偶数行,得到K+1层的图像。

如果要得到K-1层的图像,则先补充以 0 的像素偶数行,再通过高斯滤波器就可以得到。

那拉普拉斯金字塔呢?

这里为了方便说明,插入一张图片12,图片和后面公式均来自【章毓晋,图像工程】:

OpenCV&图像处理_3:以腐蚀[eroding]和膨胀[dilating]为基础的形态学操作和图像金字塔[image pyramids]_第10张图片

图12  高斯和拉普拉斯金字塔的构建


如图12所示,我们要构建第K层的拉普拉斯图像则需要:

那要构建第K-1层的拉普拉斯图像呢?只需要替换上式中的K变量就好啦……

所以,拉普拉斯金字塔的构建需要以高斯金字塔为基础。图像金字塔,是放大缩小图像尺寸方法的常用一种。

【可能很多人会问,为什么要用到高斯滤波来缩小图像,可不可以不用?

答案是肯定的,可以不用!但是不用的话就会损失很多信息,假设一副图像是黑白相间的条纹,我们去除偶数行时取出的恰好是都是黑色行呢?那我们不就是去掉了很多信息吗?所以,使用高斯滤波来保留一点信息,这样再取出偶数行时最起码整幅图像不会变纯白……

你可能感兴趣的:(OpenCV&图像处理,OpenCV,image,processing)