濾波
濾波常用於降噪;
濾波有多種,中值濾波,均值濾波,等等,說的很高大上,其實很簡單,各種濾波原理類似。
以中值濾波為例,把 每一點的數據 用 該點指定鄰域內數的中位數 代替,
如 數據 [1,8,3],鄰域大小為3,則8經過濾波后是3,[1,3,8]的中位數;數據可以是多維的,鄰域也可以為多維;
其過程類似卷積
python 中值濾波函數為 scipy.signal.medfilt(signal, kernel_size),第一個參數為信號值,第二個參數為滑框大小,注意第二個參數必須為奇數,即左+1+右;
如果滑框內沒數據,以 0 填充
import random import numpy as np import scipy.signal as signal # 一維中值濾波 x=np.arange(0,100,10) random.shuffle(x) print x # [70 20 10 30 40 0 60 80 90 50] print signal.medfilt(x,3) # 一維中值濾波 # [20. 20. 20. 30. 30. 40. 60. 80. 80. 50.] # 二維中值濾波 x=np.random.randint(1,1000,(4,4)) print x # [[711 77 365 518] # [987 621 734 19] # [652 370 615 467] # [852 420 880 175]] print signal.medfilt(x,(3,3)) # [[ 0. 365. 77. 0.] # [370. 621. 467. 365.] # [420. 652. 467. 175.] # [ 0. 420. 370. 0.]]
二維中值濾波還可以用 signal.medfilt2d(),速度快,但只支持 int8,float32,float64
滑框維度總是可以為1,如果大於1,其維度必須等於信號維度
也就是說,如果信號為3維,滑框必須為3維
圖像去噪
濾波常用於圖像預處理
import numpy as np from PIL import Image import scipy.signal as signal im=Image.open('test2.png') # 讀入圖片並建立Image對象im # im=im.convert('L') # 轉為灰度圖 data=[] # 存儲圖像中所有像素值的list(二維) width,height=im.size # 圖片尺寸,長寬,或者說寬高-->橫豎 print(width, height) # 讀取圖像像素的值 for w in range(width): # 對每個行號h row=[] # 記錄每一行像素 for h in range(height): # 對每行的每個像素列位置w value=im.getpixel((w, h)) # 用getpixel讀取這一點像素值 row.append(value) # 把它加到這一行的list中去 data.append(row) # 把記錄好的每一行加到data的子list中去,就建立了模擬的二維list ### 彩色圖濾波 # data=signal.medfilt(data,kernel_size=3) # 二維中值濾波 # data=signal.medfilt(data,kernel_size=5) data=signal.medfilt(data,kernel_size=(3, 3, 3)) ### 灰度圖濾波 ##1 # data=signal.medfilt(data,kernel_size=(3, 3)) ##2 # data = np.uint8(data) # data=signal.medfilt2d(data,kernel_size=(11, 11)) # data=np.int32(data) # 轉換為int類型,以使用快速二維濾波 # data=np.int8(data) print(data) # 創建並保存結果 for w in range(width): # 對每一行 for h in range(height): # 對該行的每一個列號 im.putpixel((w,h),tuple(data[w][h])) # 將data中該位置的值存進圖像,要求參數為tuple # im.putpixel((w,h),data[w][h]) # 灰度圖的處理方式 im.save('result2.jpg') # 存儲
圖1 為原圖;圖2 使用 領域為3的中值濾波處理;圖3 使用 領域為5的中值濾波處理
當使用中值濾波處理圖片時,圖像的邊緣可能變得模糊,領域越大,越模糊。
圖3 的邊緣就比 圖1 模糊。
也就是說濾波對圖像的有去躁和模糊的作用。
參考資料:
https://blog.csdn.net/shu15121856/article/details/76273137
https://blog.csdn.net/qq_38131594/article/details/80758567
https://blog.csdn.net/qinghuaci666/article/details/81737624