圖像去噪定義
圖像去噪是指減少數字圖像中噪聲的過程稱為圖像去噪。現實中的數字圖像在數字化和傳輸過程中常受到成像設備與外部環境噪聲干擾等影響,稱為含噪圖像或噪聲圖像。
噪聲分類
按照噪聲組成來分:
f(x,y)表示給定原始圖象,g(x,y)表示圖象信號,n(x,y)表示噪聲。
(1)加性噪聲,此類噪聲與輸入圖象信號無關,含噪圖象可表示為f(x,y)=g(x,y)+n(x,y),信道噪聲及光導攝像管的攝像機掃描圖象時產生的噪聲就屬這類噪聲;典型的加性噪聲有高斯噪聲,
(2)乘性噪聲,此類噪聲與圖象信號有關,含噪圖象可表示為f(x,y)=g(x,y)+n(x,y)g(x,y),飛點掃描器掃描圖象時的噪聲,電視圖象中的相關噪聲,膠片中的顆粒噪聲就屬於此類噪聲;
(3)量化噪聲,此類噪聲與輸入圖象信號無關,是量化過程存在量化誤差,再反映到接收端而產生。
按照噪聲密度分布:
(1)高斯噪聲:指噪聲服從高斯分布,即某個強度的噪聲點個數最多,離這個強度越遠噪聲點個數越少,且這個規律服從高斯分布。高斯噪聲是一種加性噪聲,即噪聲直接加到原圖像上,因此可以用線性濾波器濾除。
(2)椒鹽噪聲(脈沖噪聲):類似把椒鹽撒在圖像上,因此得名,是一種在圖像上出現很多白點或黑點的噪聲,如電視里的雪花噪聲等。椒鹽噪聲可以認為是一種邏輯噪聲,用線性濾波器濾除的結果不好,一般采用中值濾波器濾波可以得到較好的結果。
(3)均勻噪聲:是指功率譜密度(信號功率在頻域的分布狀況)在整個頻域內是常數的噪聲。 所有頻率具有相同能量密度的隨機噪聲稱為白噪聲。
(4)瑞利噪聲:噪聲分布為瑞利分布。
(5)指數噪聲:噪聲分布為指數分布。
(6)伽馬噪聲:噪聲分布為瑞利分布。
(以下是對圖像加入高斯,椒鹽等噪聲的python代碼)

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Sat Mar 2 14:00:30 2019 4 5 @author: Administrator 6 """ 7 8 ''' 9 圖像添加噪聲,去除噪聲 10 ''' 11 import matplotlib.pyplot as plt 12 import numpy as np 13 from skimage.util import random_noise 14 from PIL import Image 15 16 img = plt.imread('F:/python編程/自己的博客園代碼/picture_process/example.jpg') 17 18 fig = plt.figure(figsize = (8.0,6.0)) 19 ax1 = fig.add_subplot(2,3,1) 20 ## show the original picture 21 ax1.imshow(img) 22 plt.title('original_picture') 23 24 ## gray_picture 25 gravity= np.array([0.299,0.587,0.114]) 26 #red*0.299+green*0.587+blue*0.114 27 img_gravity=np.dot(img,gravity) 28 ax2 = fig.add_subplot(2,3,2) 29 ## show the gray_picture 30 ax2.imshow(img_gravity,cmap='gray') 31 plt.title('gray_picture') 32 33 34 img_gaussian = random_noise(img, mode='gaussian', seed=100, clip=True) 35 ax3 = fig.add_subplot(2,3,3) 36 ax3.imshow(img_gaussian) 37 plt.title('add_gaussian') 38 39 40 img_salt = random_noise(img, mode='salt', seed=100, clip=True) 41 ax4 = fig.add_subplot(2,3,4) 42 ax4.imshow(img_salt) 43 plt.title('add_salt') 44 45 46 img_pepper = random_noise(img, mode='pepper', seed=100, clip=True) 47 ax4 = fig.add_subplot(2,3,5) 48 ax4.imshow(img_pepper) 49 plt.title('add_pepper') 50 51 52 img_sp = random_noise(img, mode='s&p', seed=100, clip=True) 53 ax4 = fig.add_subplot(2,3,6) 54 ax4.imshow(img_sp) 55 plt.title('add_sp')
去噪方法
中值濾波:
中值濾波法是一種非線性平滑技術,它將每一像素點的灰度值設置為該點某鄰域窗口內的所有像素點灰度值的中值。
高斯濾波:
高斯濾波是一種線性平滑濾波,適用於消除高斯噪聲,廣泛應用於圖像處理的減噪過程。通俗的講,高斯濾波就是對整幅圖像進行加權平均的過程,每一個像素點的值,都由其本身和鄰域內的其他像素值經過加權平均后得到。高斯濾波的具體操作是:用一個模板(或稱卷積、掩模)掃描圖像中的每一個像素,用模板確定的鄰域內像素的加權平均灰度值去替代模板中心像素點的值。
均值濾波:
均值濾波也稱為線性濾波,其采用的主要方法為鄰域平均法。線性濾波的基本原理是用均值代替原圖像中的各個像素值,即對待處理的當前像素點(x,y),選擇一個模板,該模板由其近鄰的若干像素組成,求模板中所有像素的均值,再把該均值賦予當前像素點(x,y),作為處理后圖像在該點上的灰度g(x,y),即g(x,y)=1/m ∑f(x,y) m為該模板中包含當前像素在內的像素總個數。
維納濾波:
維納濾波(wiener filtering) 一種基於最小均方誤差准則、對平穩過程的最優估計器。這種濾波器的輸出與期望輸出之間的均方誤差為最小,因此,它是一個最佳濾波系統。它可用於提取被平穩噪聲所污染的信號。
傅里葉濾波:簡稱fft,是通過對圖片信號在頻域里進行濾波,從而達到去噪效果。
(以下是幾種濾波方法(不一定全)在python代碼中的應用)

1 # -*- coding: utf-8 -*-
2 """
3 Created on Sat Mar 2 21:17:58 2019 4
5 @author: Administrator 6 """
7
8 '''
9 圖像去除噪聲 10 '''
11 import matplotlib.pyplot as plt 12 import numpy as np 13 from skimage.util import random_noise 14 from PIL import Image 15 import cv2 16
17 img = plt.imread('F:/python編程/自己的博客園代碼/picture_process/gaussian_picture.jpg') 18 fig = plt.figure(figsize=(8.0,6.0)) 19 ax1 = fig.add_subplot(2,3,1) 20 ax1.imshow(img) 21 plt.title('blur_picture') 22
23 ### 中值濾波
24 median_filter_img = cv2.medianBlur(img, 3) 25 ax2 = fig.add_subplot(2,3,2) 26 ax2.imshow(median_filter_img) 27 plt.title('median_filter') 28
29 #### 高斯濾波
30 Gaussian_filter_img = cv2.GaussianBlur(img, (3,3), 0) 31 ax2 = fig.add_subplot(2,3,3) 32 ax2.imshow(Gaussian_filter_img) 33 plt.title('Gaussian_filter') 34
35 #### 均值濾波
36 mean_vaule_filter = cv2.blur(img, (5,5)) 37 ax2 = fig.add_subplot(2,3,4) 38 ax2.imshow(mean_vaule_filter) 39 plt.title('mean_vaule_filter') 40
41 #### 雙邊濾波
42 #9 鄰域直徑,兩個 75 分別是空間高斯函數標准差,灰度值相似性高斯函數標准差
43 blur = cv2.bilateralFilter(img,9,75,75) 44 ax2 = fig.add_subplot(2,3,5) 45 ax2.imshow(blur) 46 plt.title('bilatral-filter')
效果圖: