為了消除外界環境對圖像采集的幹擾,增強圖像的邊緣及灰階跳變的部分,使圖像變得清晰以及提高圖像處理速度需要對圖像進行預處理操作,主要是對圖像進行濾波和增強操作。
使用的方法可以分為空間域處理和頻率域處理兩類。
空間域指圖像平面本身,這類圖像處理方法用各種模闆直接與圖像進行卷積運算,實作對圖像的處理。
頻率域是指從函數的頻率角度出發分析函數,對圖像進行傅裡葉變換可以将圖像由圖像空間轉換到頻域空間,然後在頻率域中對圖像的頻譜作分析處理,以改變圖像的頻率特征。
空間域與頻率域是兩種不同的技術,都可以實作對圖像的濾波、增強,隻是有些處理方式更适合在空間域完成,而有些則更适合在頻率域中完成。
頻率域的了解、使用還是很很困難的,需要深厚的數學功底,我也不是特别明白,以後的示例主要是圖像在空間域的處理。
圖像濾波(模糊)
濾波也叫模糊,下面是opencv中常見的五種濾波方法,先看一下濾波前後的效果。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQEMwMEMwMDMCFkRFJUQ2QDODRjM2UzQFZUO2UjQxQTN9MnJykDO3YTNkhzM0kjNxkDZmljNzY2NkRGOxcTOyMWN1ETPuV2avR3PnVGcq5yYwkDZiZmMiVmZ5MDOzkTMiRWMhBTYmhDZzETNhZGOwMWZwEmZ4ATOvwFZlVmZvwVbvNmL1RWahJmLzM3YpB3Lc9CX6MHc0RHaiojIsJye.jpeg)
# -*- 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()
濾波方法還有很多,具體選擇哪種方法要根據實際圖像确定,參數需要不斷的調整,濾波效果好的圖像,有利于後續的圖像處理。