影象處理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()實現。依次輸入的是影象矩陣,選擇何種形態學運算,形態學處理的結構元,結構元的錨點,迭代次數。不同的結構元選取,處理後的形態學效果不同。