天天看點

python opencv中值濾波_opencv-python圖像預處理-濾波

為了消除外界環境對圖像采集的幹擾,增強圖像的邊緣及灰階跳變的部分,使圖像變得清晰以及提高圖像處理速度需要對圖像進行預處理操作,主要是對圖像進行濾波和增強操作。

使用的方法可以分為空間域處理和頻率域處理兩類。

空間域指圖像平面本身,這類圖像處理方法用各種模闆直接與圖像進行卷積運算,實作對圖像的處理。

頻率域是指從函數的頻率角度出發分析函數,對圖像進行傅裡葉變換可以将圖像由圖像空間轉換到頻域空間,然後在頻率域中對圖像的頻譜作分析處理,以改變圖像的頻率特征。

空間域與頻率域是兩種不同的技術,都可以實作對圖像的濾波、增強,隻是有些處理方式更适合在空間域完成,而有些則更适合在頻率域中完成。

頻率域的了解、使用還是很很困難的,需要深厚的數學功底,我也不是特别明白,以後的示例主要是圖像在空間域的處理。

圖像濾波(模糊)

濾波也叫模糊,下面是opencv中常見的五種濾波方法,先看一下濾波前後的效果。

python opencv中值濾波_opencv-python圖像預處理-濾波

# -*- coding: utf-8 -*-

"""

運作環境 python==3.6 opencv-contrib-python== 4.1 win10系統

第一行 “ # -*- coding: utf-8 -*- ” 告訴Python解釋器,按照UTF-8編碼讀取源代碼

"""

dir1="lena.jpg"

img1=cv2.imread(dir1) #讀入圖檔

#

#2D濾波 ,2D卷積就是自定義構造一個核

#建構一個卷積核5*5

kernel=np.ones((5,5),np.float32)/25 # 除以25是防止數值溢出

filter2D=cv2.filter2D(img1,-1,kernel)

cv2.imshow("filter2D", filter2D)

#

#中值模糊

#中值濾波法是一種非線性平滑技術,對椒鹽噪聲有很好的去燥效果

medianBlur=cv2.medianBlur(img1,5)

cv2.imshow("medianBlur", medianBlur)

#

#均值模糊

#均值濾波是典型的線性濾波算法,去随機噪聲有很好的去噪效果

#dst=cv2.blur(img1, (1, 5)) #(1, 15)是垂直方向模糊,(15, 1)還水準方向模糊

#dst=cv2.blur(img1, (5, 1)) #(1, 15)是垂直方向模糊,(15, 1)還水準方向模糊

blur=cv2.blur(dst,(5,5)) #兩個方向模糊

cv2.imshow("blur", blur)

#

#高斯模糊

#保留圖像的主要特征 輪廓 高斯模糊比均值模糊去噪效果好

GaussianBlur=cv2.GaussianBlur(img1,(5,5),0)

cv2.imshow("GaussianBlur", GaussianBlur)

#

#雙邊濾波 ,保留邊緣

# Python: cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]]) → dst

#src:輸入圖像

#d:過濾時周圍每個像素領域的直徑

#sigmaColor:在color space中過濾sigma。參數越大,臨近像素将會在越遠的地方mix。

#sigmaSpace:在coordinate space中過濾sigma。參數越大,那些顔色足夠相近的的顔色的影響越大。

bilateralFilter = cv2.bilateralFilter(img1,13,75,75)

cv2.imshow("bilateralFilter", bilateralFilter)

#

cv2.waitKey(0)

cv2.destroyAllWindows()

濾波方法還有很多,具體選擇哪種方法要根據實際圖像确定,參數需要不斷的調整,濾波效果好的圖像,有利于後續的圖像處理。