形態學處理及opencv-python函數

通過閾值分割可以得到二值圖,但往往會出現圖像中物體形態不完整,變的殘缺,或者有很多噪聲點。可以通過形態學處理,使其變得豐滿,或者去除掉多餘的像素。常用的形態學處理算法包括:腐蝕,膨脹,開運算,閉運算,形態學梯度,頂帽運算和底帽運算。

0. 結構元素

opencv中可用的結構元素有三種:矩陣,橢圓形,十字架

kernel = cv2.getStructuringElement(shape,ksize,anchor)
         shape:核的形狀
                cv2.MORPH_RECT: 矩形
                cv2.MORPH_CROSS: 十字形(以矩形的錨點爲中心的十字架)
                cv2.MORPH_ELLIPSE:橢圓(矩形的內切橢圓)  
         ksize: 核的大小,格式爲(width,height)
         anchor: 核的錨點,默認值爲(-1,-1),即核的中心點

注:也可以使用numpy.ndarray來自定義自己想要的各種結構元素 

1. 腐蝕

  • 作用:減小前景(白色)面積
  • 原理:取結構元素當前位置中像素值的最小值代替錨點位置的像素值,這樣就會使圖像中較暗的區域面積增大,較亮的的區域面積減小。如果是一張黑底,白色前景的二值圖,就會使白色的前景物體顏色變小,就像被腐蝕了一樣。
  • 代碼
dst = cv2.erode(src,kernel,anchor,iterations,borderType,borderValue):
參數:
        src: 輸入圖像對象矩陣,爲二值化圖像
        kernel:進行腐蝕操作的核,可以通過函數getStructuringElement()獲得
        anchor:錨點,默認爲(-1,-1)
        iterations:腐蝕操作的次數,默認爲1
        borderType: 邊界種類,有默認值
        borderValue:邊界值,有默認值

2. 膨脹

  • 作用:增加前景面積
  • 原理:取結構元素當前位置中像素值的最大值代替錨點位置的像素值
  • 代碼
dst = cv2.dilate(src,kernel,anchor,iterations,borderType,borderValue)
參數:
        src: 輸入圖像對象矩陣,爲二值化圖像
        kernel:進行腐蝕操作的核,可以通過函數getStructuringElement()獲得
        anchor:錨點,默認爲(-1,-1)
        iterations:腐蝕操作的次數,默認爲1
        borderType: 邊界種類
        borderValue:邊界值

3. 開運算

  • 作用:主要用於去除圖像上的噪音斑點,毛刺和小橋,而總的位置和形狀不便
  • 原理:先腐蝕,後膨脹
  • 代碼
dst = cv2.morphologyEx(src,op,kernel,anchor,iterations,borderType,borderValue)
參數:
        src: 輸入圖像對象矩陣,爲二值化圖像
        op:  形態學操作類型
            cv2.MORPH_OPEN      開運算
            cv2.MORPH_CLOSE     閉運算
            cv2.MORPH_GRADIENT  形態梯度
            cv2.MORPH_TOPHAT    頂帽運算
            cv2.MORPH_BLACKHAT  底帽運算
            
        kernel: 結構元素
        anchor:錨點,默認爲(-1,-1)
        iterations:腐蝕操作的次數,默認爲1
        borderType: 邊界種類
        borderValue:邊界值

4. 閉運算

  • 作用:主要用來連接被誤分爲許多小塊的前景對象,能夠填平小孔,彌合小裂縫,而總的位置和形狀不變。
  • 原理:先膨脹,後腐蝕

5. 形態學梯度

  • 原理:膨脹運算結果 減去 腐蝕運算結果
  • 作用:獲取輪廓信息

6. 頂帽運算

  • 原理:原圖像 減去 開運算

7. 底帽運算

  • 原理:原圖 減去 閉運算

 

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