(Python 3)数学形态学滤波——腐蚀、膨胀

前言

前段时间在看CSDN学院的计算机视觉的课程,课程链接:

  • https://edu.csdn.net/course/play/26281/327074?utm_source=blogtoedu

看完之后自己也做了比较粗略的笔记,链接如下:

  • https://blog.csdn.net/sf9898/article/details/104215801
  • https://blog.csdn.net/sf9898/article/details/104270277

由于以前上过数字图像处理的课程,因此在上这门课程上到数学形态学腐蚀膨胀那一块的时候有点疑惑,课程里面讲的膨胀的做法和我以前学的做法得出的答案是不一样的,因此查资料做整理得到这篇博客。

正文

抛出观点

个人认为课程里面的膨胀操作不正确

腐蚀&&膨胀

膨胀和腐蚀字面意思很好理解,膨胀就相当于在原有的图外围加一圈,腐蚀则是减少一圈,而且现实中比如OpenCV调用相应的函数得到的效果图也确实反映了上述结论。
在这里插入图片描述
回归到它们的本质(毕竟有时候要做题),看看它们的实现过程。以前学的和下面视频里的差不多。以下PPT图片来源于网上视频截图,我认为这个课程讲的不错,中科院的,传送门:

  • https://www.bilibili.com/video/av43045572?p=29

先说腐蚀,虽然步骤和CSDN计算机视觉课程讲的不一样但是我做出来的结果是一样的。

在这里插入图片描述
定义和意义不怎么理解问题不大,主要是算法步骤要会。比如下面这题,(a)是原始图像(二值图像),(b)是结构元素,也就是说(a)是上述的X,(b)是上述的S。(c)是最后的答案。

在这里插入图片描述
接下来按步骤走,用结构元素扫描每一个像素。做“与”操作——如果结构元素区域的图像的像素都为1,则这个origin或者说是图(b)中的+号所对应的像素就为1。比如下图,当结构元素移动到(或者说扫描到红色标记的区域)时,此时这三个方格内没有都是1(图中紫色区域为1),因此+号对应的像素点为0。
在这里插入图片描述
再比如下图,当移动到图中红色区域时,都为1,故+号处像素为1。依次类推,可以得出(c)图的结果。(黑色区域为最终结果)
在这里插入图片描述
可以试着做下PPT里面的题目。验证一下。

在这里插入图片描述

再说膨胀

在这里插入图片描述
移动或者说扫描的方式和上面一样(类似卷积),这回还是做与操作——但是这回是都为0,+号处才为0,也就是说只要有一个1的出现,那就为1。

比如这个图,按照类似的方法做一下。和图像中的卷积运算不大一样的是腐蚀膨胀过程一般会考虑边界,卷积一般不考虑边界。(下图中的蓝色部分相当于之前的+号)

在这里插入图片描述

在这里插入图片描述
可以发现,腐蚀会减少图中1的数量,膨胀则增加1的数量。那么在由黑白构成的二值图像中,膨胀会增加白色的范围,腐蚀则增加黑色的范围。因此,假设用以下这张图(font.png)进行实验,对于膨胀操作,可以想象,由于白色部分的增大,字体会变瘦;对于腐蚀操作,由于黑色部分的增大,字体会加粗。

在这里插入图片描述

Python3 + OpenCV 测试代码:

import cv2

img = cv2.imread("font.png")
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

cv2.imshow("img",img)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
eroded = cv2.erode(img,kernel)      #腐蚀
dilated = cv2.dilate(img,kernel)    #膨胀

cv2.imshow("dilated",dilated)
cv2.imshow("eroded",eroded)


cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图片出处:

  • https://blog.csdn.net/Suqing_2018/article/details/79185512?ops_request_misc=%7B%22request%5Fid%22%3A%22158175698119195239820858%22%2C%22scm%22%3A%2220140713.130056874…%22%7D&request_id=158175698119195239820858&biz_id=0&utm_source=distribute.pc_search_result.none-task

说明:

图片出处的博主文章是转载的,其中代码已经缺失,结果和我的相反的原因应该是源程序是对于黑色像素进行处理的。如若文章有哪里写错了还望指出。

发布了28 篇原创文章 · 获赞 12 · 访问量 4133

猜你喜欢

转载自blog.csdn.net/sf9898/article/details/104221549