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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章