Opencv2系列學習筆記7(圖像形態學運算)

形態學濾波理論於上世紀90年代提出,被用於分析及處理離散圖像。它定義了一系列的運算,應用預定義的形狀元素來變換一張圖像

一:圖像腐蝕、膨脹和開閉運算

圖像的腐蝕:替換爲當前像素位像素集合中的最小像素值<在結構元素的幾何中>,函數爲erode

圖像的膨脹:替換爲當前像素位像素集合中的最大像素值,函數爲dilate

圖像的開運算:先腐蝕後膨脹,函數爲morphologyEx,對應的參數爲MORPH_CLOSE

圖像的閉運算:先膨脹後腐蝕,函數爲morphologyEx,對應的參數爲MORPH_OPEN

Code:

  1. Mat image = imread("F:\\lena.png", 0);  
  2.     /*腐蝕運算 替換爲當前像素位像素集合中的最小像素值*/  
  3.     Mat eroded;  
  4.     erode(image, eroded, Mat());  
  5.   
  6.     /*膨脹運算 替換爲當前像素位像素集合中的最大像素值*/  
  7.     Mat dilated;  
  8.     dilate(image, dilated, Mat());  
  9.   
  10.     /*閉運算 先膨脹後腐蝕 
  11.     開運算 先腐蝕後膨脹 
  12.     */  
  13.     Mat closed;  
  14.     Mat element(5, 5, CV_8U, Scalar(1));  
  15.     morphologyEx(image, closed, MORPH_CLOSE, element);  

Result:

膨脹:

腐蝕:

二:利用形態學濾波進行邊緣檢測

思想:形態學濾波利用梯度進行邊緣檢測  原理就是計算膨脹後的圖像和腐蝕後的圖像的差值,由於兩個變換後的圖像不同之處主要在邊緣處,圖像邊緣將通過求差得到強化。函數爲morphologyEx,參數爲MORPH_GRADIENT。

此外後面可以用sobel算子<方向濾波器>,拉普拉斯變換<二階導數濾波器>和Canny算子對圖像進行邊緣檢測。

Code:

  1. Mat result;  
  2.     /* 形態學濾波利用梯度進行邊緣檢測  原理就是計算膨脹後的圖像和腐蝕後的圖像的差值, 
  3.     由於兩個變換後的圖像不同之處主要在邊緣處,圖像邊緣將通過求差得到強化。 
  4.     還可以利用圖像形態學濾波對圖像進行角點檢測。。 
  5.     */  
  6.     morphologyEx(image, result, MORPH_GRADIENT, Mat());   
  7.     threshold(result, result, 50, 255, THRESH_BINARY);  

Result:


三:形態學運算的其它應用

利用圖像的形態學運算還可以對圖像進行角點檢測,當然效果肯定不如之前的Harris等算子的角點檢測,故不作介紹。此外還可以通過利用分水嶺算法對圖像進行分割以及用GrabCut算法提取前景物體。後面如有用到,會詳細介紹,這裏粗略筆記。。。

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