圖像去噪定義python
圖像去噪是指減小數字圖像中噪聲的過程稱爲圖像去噪。現實中的數字圖像在數字化和傳輸過程當中常受到成像設備與外部環境噪聲干擾等影響,稱爲含噪圖像或噪聲圖像。編程
噪聲分類dom
按照噪聲組成來分:ide
f(x,y)表示給定原始圖象,g(x,y)表示圖象信號,n(x,y)表示噪聲。函數
(1)加性噪聲,此類噪聲與輸入圖象信號無關,含噪圖象可表示爲f(x,y)=g(x,y)+n(x,y),信道噪聲及光導攝像管的攝像機掃描圖象時產生的噪聲就屬這類噪聲;典型的加性噪聲有高斯噪聲,spa
(2)乘性噪聲,此類噪聲與圖象信號有關,含噪圖象可表示爲f(x,y)=g(x,y)+n(x,y)g(x,y),飛點掃描器掃描圖象時的噪聲,電視圖象中的相關噪聲,膠片中的顆粒噪聲就屬於此類噪聲;3d
(3)量化噪聲,此類噪聲與輸入圖象信號無關,是量化過程存在量化偏差,再反映到接收端而產生。code
按照噪聲密度分佈:blog
(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')
效果圖: