影象處理OpenCV演算法02
5、影象濾波(平滑)
影象濾波(平滑),即在儘量保留影象細節特徵的條件下對目標影象的噪聲進行抑制,是影象預處理中不可缺少的操作,其處理效果的好壞將直接影響到後續影象處理和分析的有效性和可靠性。
常用的影象濾波演算法高斯濾波、均值濾波、中值濾波、雙邊濾波等。
卷積的定義:假設被卷積的影象為I,卷積核為K。
I與K的二維離散卷積計算步驟如下:
首先將K翻轉成,然後用K沿著I的每一個位置相乘求和,得到full卷積,,從filter和image剛相交開始做卷積。
valid卷積:
當filter全部在image裡面的時候,進行卷積運算。
same卷:
當filter的中心(K)與image的邊角重合時,開始做卷積運算。
在OpenCV中通過呼叫signal.convolve2d()實現卷積。
高斯濾波:高斯濾波(高斯平滑)是一種線性平滑濾波,適用於消除高斯噪聲,廣泛應用於影象處理的減噪過程。通俗的講,高斯濾波就是對整幅影象進行加權平均的過程,每一個畫素點的值,都由其本身和鄰域內的其他畫素值經過加權平均後得到。高斯平滑濾波器對於抑制服從正態分佈的噪聲非常有效。
高斯卷積運算元的構建:
首先計算高斯矩陣:
再計算高斯矩陣的和:
最後用高斯矩陣除以本身的和,即歸一化,得到高斯卷積運算元:
在OpenCV中,通過呼叫cv2.getGaussianKernel(ksize,sigma,ktype)實現一維水平方向上的高斯平滑,再進行一維垂直方向上的高斯平滑。
均值平滑:均值濾波,是最簡單的一種線性濾波操作,輸出影象的每一個畫素是核視窗內輸入影象對應影象畫素的平均值。其演算法比較簡單,計算速度快,但是均值濾波本身存在著固有的缺陷,即它不能很好地保護影象細節,在去除噪聲的同時,也破壞了影象的細節部分,從而使影象變得模糊,不能很好地去除噪聲點。但均值濾波對週期性的干擾噪聲有很好的抑制作用。
均值平滑:
利用矩陣積分,計算出矩陣中任意矩形區域內的和,快速均值平滑:
在OpenCV中,通過呼叫cv2.blur()實現均值濾波。
中值濾波:中值濾波法是一種非線性平滑技術,將影象的每個畫素用鄰域 (以當前畫素為中心的正方形區域)畫素的中值代替 ,常用於消除影象中的椒鹽噪聲。中值濾波對脈衝噪聲有良好的濾除作用,特別是在濾除噪聲的同時,能夠保護訊號的邊緣,使之不被模糊,但它會洗去均勻介質區域中的紋理。
再OpenCV中,通過呼叫cv2.medianBlur()實現中值濾波。
雙邊濾波:雙邊濾波(Bilateral filter)是一種非線性的濾波方法,是結合影象的空間鄰近度和畫素值相似度的一種折衷處理,同時考慮空域資訊和灰度相似性,達到保邊去噪的目的,具有簡單、非迭代、區域性的特點,能夠對低頻資訊進行較好的額濾波。雙邊濾波器的好處是可以做邊緣儲存,這個特點對於一些影象模糊來說很有用。
雙邊濾波根據每個位置的領域,對應該位置構建不同的權重模板,首先,構建winH*winW的空間距離權重模板,與構建高斯卷積核的過程類似,winH*winW均為奇數,0<=h<winH,0<=w<winW。
然後,構建winH*winW的相似權重模板,是通過(r,c)處的值與其領域值得差值的指數衡量。
最後將closenessWeight和similarityWeight的對應位置相乘,然後進行歸一化,便可得到改位置的權重模板,將所得到的權重模板和該位置領域的對應位置相乘求和,最後就得到該位置的輸出值。
在OpenCV中,通過呼叫cv2.bilateralFilter()實現雙邊濾波。
聯合雙邊濾波與雙邊濾波不同之處在於,雙邊濾波是根據原圖對每一個位置,通過該位置和其領域的灰度值的差的指數來估計相似性;而聯合雙邊濾波是首先對原圖進行高斯平滑,根據平滑的結果,用當前的位置及其領域的值得差來估計相似性權重模板。