OpenCV3編程入門讀書筆記4-形態學濾波


一、腐蝕和膨脹

1、腐蝕和膨脹的主要功能

(1)消除噪聲

(2)分割出獨立的圖像元素,在圖像中連接相鄰的元素

(3)尋找圖像中的極大值或者極小值區域

(4)求出圖像的梯度

2、膨脹(dilate)

膨脹就是求局部最大值的操作。從數學角度來說,就是將圖像與核進行卷積,計算核B覆蓋區域的像素點的最大值,並把這個最大值賦值給參考點指定的元素。這樣就會使圖像中的高亮區域逐漸增長。

3、腐蝕(erode)

腐蝕和膨脹是相反的操作,腐蝕是求局部最小值的操作。腐蝕操作會使圖像中的高亮區逐漸減小。

4、膨脹和腐蝕示例

 1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\car1.jpg",0);
 2 
 3 Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
 4 
 5 Mat dilateImage;
 6 dilate(srcImage, dilateImage, element);
 7 
 8 Mat erodeImage;
 9 erode(srcImage, erodeImage, element);    
10 
11 imshow("srcImage", srcImage);
12 imshow("dilateImage", dilateImage);
13 imshow("erodeImage", erodeImage);
14 
15 waitKey(0);

5、效果圖:

二、開運算

1、概述

開運算是先腐蝕后膨脹。主要用於消除小物體,在纖細點處分離物體,並且在平滑較大物體的邊界的同時不明顯改變其面積,同時抑制比結構元小的亮細節。

2、示例

 1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test1.png",0);
 2 
 3 Mat element = getStructuringElement(MORPH_RECT, Size(5,5));
 4 
 5 Mat openImage;
 6 morphologyEx(srcImage, openImage, MORPH_OPEN, element);
 7 
 8 imshow("srcImage", srcImage);
 9 imshow("openImage", openImage);
10 
11 waitKey(0);

3、效果圖

三、閉運算

 1、概述

閉運算是先膨脹后腐蝕。用來填充物體內細小空洞、連接鄰近物體、平滑其邊界的同時並不明顯改變其面積,同時抑制比結構元小的暗細節。

2、示例

 1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test2.png",0);
 2 
 3 Mat element = getStructuringElement(MORPH_RECT, Size(5,5));
 4 
 5 Mat closeImage;
 6 morphologyEx(srcImage, closeImage, MORPH_CLOSE, element);
 7 
 8 imshow("srcImage", srcImage);
 9 imshow("closeImage", closeImage);
10 
11 waitKey(0);

3、效果圖

四、形態學梯度

1、概述

就是將膨脹土和腐蝕圖相減。對二值化圖像進行這一操作可以將邊緣突出來,可以使用形態學梯度來保留物體的邊緣輪廓

2、示例

 1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test2.png",0);
 2 
 3 Mat element = getStructuringElement(MORPH_RECT, Size(2,2));
 4 
 5 Mat gradientImage;
 6 morphologyEx(srcImage, gradientImage, MORPH_GRADIENT, element);
 7 
 8 imshow("srcImage", srcImage);
 9 imshow("gradientImage", gradientImage);
10 
11 waitKey(0);

3、效果圖

五、頂帽變換和黑帽變換

1、概述

頂帽變換就是用源圖像減去開運算圖像。因為開運算帶來的結果是放大了裂縫或者局部低亮度的區域。因此,從原圖中減去開運算后的圖,得到的效果圖突出了比原圖輪廓周圍區域更明亮的區域。頂帽一般用於校正不均勻光照的影響(補充:均勻光照在從背景中提取目標的處理中扮演核心的角色)。

黑帽變換就是用閉運算減去源圖像。黑帽運算后的效果圖突出了比原圖輪廓周圍的區域更暗的區域。黑帽運算一般用來分離比鄰近點暗一些的斑塊。

2、示例

 1 Mat srcImage = imread("E:\\CodeResource\\opencv\\car_pic\\test2.png",0);
 2 
 3 Mat element = getStructuringElement(MORPH_RECT, Size(15,15));
 4 
 5 Mat tophatImage;
 6 morphologyEx(srcImage, tophatImage, MORPH_TOPHAT, element);
 7 
 8 Mat blackhatImage;
 9 morphologyEx(srcImage, blackhatImage, MORPH_BLACKHAT, element);
10 
11 imshow("srcImage", srcImage);
12 imshow("tophatImage", tophatImage);
13 imshow("blackhatImage", blackhatImage);
14 
15 waitKey(0);

3、效果圖

 參考:http://blog.csdn.net/hx1298234467/article/details/49887925


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM