1. 程式人生 > >影象處理OpenCV演算法03

影象處理OpenCV演算法03

6、閾值分割

      閾值分割主要是根據灰度值資訊提取前景,所以對前景物體有較強對比度的影象的分割特別有用。在OpenCV中通過呼叫cv2.threshold()實現閾值分割。

 

      全閾值分割:將灰度值大於thresh的畫素設為白色,小於或等於thresh的畫素設為黑色;反之也行,只不過表現形式不同。

          

      區域性閾值分割:針對輸入矩陣的每一個位置的值都有相對應的閾值,這些閾值構成了和輸入矩陣同等尺寸的矩陣thresh。

        

      熵閾值計算:通過計算所有分割閾值下的影象總熵,找到最大的熵,將最大熵對應的分割閾值作為最終的閾值。

首先計算影象I的累加概率直方圖,又稱零階累積矩,記為:

        

      計算各個灰度級的熵,記為:

        

      計算使f(t)=f1(t)+f2(t)最大化的t的值,該值即為得到的閾值。

        
      Otsu閾值分割:

      首先計算灰度直方圖的零階累積矩,

        

      計算灰度直方圖的一階累積矩,

        

      計算影象I的總體灰度平均值mean,其實就是k=255時的一階累積矩,mean=oneCumuMoment(255)

      計算每一個灰度級作為閾值時,前景區域的平均灰度、前景區域的平均灰度與整幅影象的平均灰度的方差。對方差的衡量採用以下度量:

        

      找到上述最大的,然後對應的k即為Otsu自動選取的閾值,

         

      自適應閾值:

      首先對影象進行平滑,平滑的結果記為,平滑一般採用高斯平滑,均值平滑,中值平滑。

通過自適應矩陣

        

        一般令ratio=0.15。


7、形態學處理:

      腐蝕:,結構元S與影象做與運算,如果都為1,則結果為1,否則為0。腐蝕的結果是影象較小一圈。在OpenCV中通過cv2.erode()實現。

      膨脹:,結構元S與影象做或運算,如果有一個為1,則結果為1,否則為0(都為0,結果為0)。膨脹的結果是影象擴大一圈。在OpenCV中通過cv2.dilate()實現。

      開運算:,先腐蝕在膨脹的過程。它具有消除亮度較高的細小區域、在纖細點處分離物體,對於較大物體可以在不明顯改變其面積的情況下平滑其邊界等作用。

      閉運算:,先膨脹在腐蝕的過程。它具有填充白色物體內細小黑色空洞的區域、連線臨近物體、同一個結構元、多次迭代處理,也可以在不明顯改變其面積的情況下平滑其邊界等作用。

      頂帽變換:,影象減去開運算的結果。它可以消除暗背景下的較量其區域,如果用原圖減去開運算結果,就可以得到原圖中灰度較亮的區域,可以用來校正不均勻光照。

      底帽變換:,影象減去閉運算的結果。它可以刪除較高亮度背景下的較暗區域,那麼用原圖減去閉運算結果,可以得到原圖中灰度較暗的區域。

      形態學梯度:,膨脹後的影象減去腐蝕後的影象,從而提取物體的邊界。

      以上5中形態學變換的功能實現可以通過呼叫OpenCV中的cv2.morphologyWx()實現。依次輸入的是影象矩陣,選擇何種形態學運算,形態學處理的結構元,結構元的錨點,迭代次數。不同的結構元選取,處理後的形態學效果不同。