图像处理一:形态学膨胀和腐蚀

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yql_617540298/article/details/84778062

一、形态学概述

       形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构,而图像处理中的形态学主要是指数学形态学。

       数学形态学(Mathematical morphology)是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。(简单理解:形态学是基于形状的一系列图像处理操作)

       基本运算:二值腐蚀和膨胀,二值开闭运算,骨架抽取,极限腐蚀,击中击不中变换,形态学梯度,Top-hat变换,颗粒分析,流域变换,灰值腐蚀和膨胀,灰值开闭运算,灰值形态学梯度等。

二、膨胀与腐蚀

       作用:(1)消除噪声;

                  (2)分割出独立的图像元素,在图像中连接相邻的元素‘;

                   (3)寻找图像中的明显的极大值或极小值区域;

                   (4)求出图像的梯度。

       注意:腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。 

       膨胀:邻域扩张,效果图拥有比原图更大的高亮区域;

       腐蚀:原图中的高亮部分被腐蚀,邻域缩小,效果图拥有比原图更小的高亮区域。

       膨胀或腐蚀:将图像(或图像的一部分区域,A)与核(B)卷积。

       核:可以是任何形状和大小,它拥有一个单独定义的参考点,称为锚点。多数情况下,核是一个中间带有参考点和实心正方形或者圆形。

三、膨胀

        膨胀:求局部最大值操作。

       核B与图形A卷积,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素。

代码:

#coding=utf-8
import cv2
image = cv2.imread("F:/a.jpg",0);
#构造一个3×3的结构元素 
element = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))
dilate = cv2.dilate(image, element)
erode = cv2.erode(image, element)
 
#将两幅图像相减获得边,第一个参数是膨胀后的图像,第二个参数是腐蚀后的图像
result = cv2.absdiff(0,erode);
 
#上面得到的结果是灰度图,将其二值化以便更清楚的观察结果
retval, result = cv2.threshold(result, 40, 255, cv2.THRESH_BINARY); 
#反色,即对二值图每个像素取反
result = cv2.bitwise_not(result); 
#显示图像
#cv2.imshow("result",result); 
cv2.imwrite("F:/b.jpg",result)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、腐蚀

         腐蚀:与膨胀是一对相反的操作,腐蚀是求局部最小值的操作。

       代码:

#coding=utf-8
import cv2
image = cv2.imread("F:/a.jpg",0);
#构造一个3×3的结构元素 
element = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3))
dilate = cv2.dilate(image, element)
erode = cv2.erode(image, element)
 
#将两幅图像相减获得边,第一个参数是膨胀后的图像,第二个参数是腐蚀后的图像
result = cv2.absdiff(dilate,0);
 
#上面得到的结果是灰度图,将其二值化以便更清楚的观察结果
retval, result = cv2.threshold(result, 40, 255, cv2.THRESH_BINARY); 
#反色,即对二值图每个像素取反
result = cv2.bitwise_not(result); 
#显示图像
#cv2.imshow("result",result); 
cv2.imwrite("F:/c.jpg",result)
cv2.waitKey(0)
cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/yql_617540298/article/details/84778062