第5章 Python 数字图像处理(DIP) - 图像复原与重建1 - 高斯噪声
本章主要講圖像復原與重建,首先是了解一下各種噪聲的特點與模型,還有形成的方法。一些重點的噪聲,如高斯噪聲,均勻噪聲,伽馬噪聲,指數(shù)噪聲,還有椒鹽噪聲等。
本章主要的噪聲研究方法主要是加性噪聲。
標題
- 圖像退化/復原處理的一個模型
- 噪聲模型
- 噪聲的空間和頻率特性
- 一些重要的噪聲概率密度函數(shù)(PDF)
- 高斯噪聲
圖像退化/復原處理的一個模型
-
退化
把圖像退化建模為一個算子H\mathcal{H}H,算子與一個加性噪聲項共同對輸入圖像f(x,y)f(x, y)f(x,y)進行運算,生成一幅退化的圖像g(x,y)g(x, y)g(x,y)。 -
復原
已知退化圖像g(x,y)g(x, y)g(x,y)、關(guān)于H\mathcal{H}H和加性噪聲項η(x,y)\eta(x, y)η(x,y),要復原的目的是得到原圖的一個估計f^(x,y)\hat{f}(x, y)f^?(x,y),并使得與f(x,y)f(x, y)f(x,y)盡可能接近。 -
退化模型
f(x,y)?退化函數(shù)H?⊕噪聲η(x,y)?g(x,y)f(x, y) \Rightarrow 退化函數(shù)\mathcal{H} \Rightarrow \oplus \ \ 噪聲\eta(x, y) \Rightarrow g(x, y)f(x,y)?退化函數(shù)H?⊕??噪聲η(x,y)?g(x,y) -
復原模型
g(x,y)?復原濾波器?f^(x,y)g(x, y) \Rightarrow 復原濾波器 \Rightarrow \hat{f}(x, y)g(x,y)?復原濾波器?f^?(x,y)
若H\mathcal{H}H是一個線性位置不變片子,則空間域中的退化圖像為
g(x,y)=(h?f)(x,y)+η(x,y)(5.1)g(x, y) = (h\star f)(x, y) + \eta(x, y) \tag{5.1}g(x,y)=(h?f)(x,y)+η(x,y)(5.1)
頻率域的等效公式為
G(u,v)=H(u,v)F(u,v)+N(u,v)(5.2)G(u, v) = H(u, v)F(u, v) + N(u, v) \tag{5.2}G(u,v)=H(u,v)F(u,v)+N(u,v)(5.2)
噪聲模型
噪聲的空間和頻率特性
當噪聲的傅里葉譜是常量時,噪聲通常稱為白噪聲
一些重要的噪聲概率密度函數(shù)(PDF)
高斯噪聲
高斯隨機變量的PDF如下
P(z)=12πσe?(z?zˉ)2/2σ2,?∞<z<∞(5.3)P(z) = \frac{1}{\sqrt{2\pi\sigma}}e^{-(z-\bar z)^2 /2\sigma^2} , -\infty<z<\infty \tag{5.3}P(z)=2πσ?1?e?(z?zˉ)2/2σ2,?∞<z<∞(5.3)
式中,zzz表示灰度,zˉ\bar{z}zˉ是zzz的均(平均)值,σ\sigmaσ是zzz的標準差。zzz值在區(qū)間zˉ±σ\bar{z} \pm \sigmazˉ±σ內(nèi)的概率約為0.68,zzz值在區(qū)間zˉ±2σ\bar{z} \pm 2\sigmazˉ±2σ內(nèi)的概率約為0.95。
def gauss_pdf(z):mean = np.mean(z)sigma = np.std(z)gauss = (1 /(np.sqrt(2*np.pi*sigma))) * np.exp(-((z - mean)**2)/(2*sigma))return gauss更正下面代碼,如果之前已經(jīng)復制的,也請更正
def add_gaussian_noise(img, mu=0, sigma=0.1):"""add gaussian noise for imageparam: img: input image, dtype=uint8param: mean: noise meanparam: sigma: noise sigmareturn: image_out: image with gaussian noise"""# image = np.array(img/255, dtype=float) # 這是有錯誤的,將得不到正確的結(jié)果,修改如下image = np.array(img, dtype=float)noise = np.random.normal(mu, sigma, image.shape)# 這是另外一種采樣法,但不是很正確 # x = np.linspace(-(mu + 10 * sigma), (mu + 10 * sigma), 500) # gauss = 1/(np.sqrt(2 * np.pi) * sigma) * np.exp(-(x - mu)**2 / (2 * sigma**2)) # gauss = gauss / gauss.max() # noise = np.random.choice(gauss, size=image.shape)image_out = image + noiseimage_out = np.uint8(normalize(image_out)*255)return image_out # 高斯PDF mean = 0 sigma = 20 image = np.zeros([512, 512]) noise = np.random.normal(mean, sigma, image.shape) z_ = np.mean(noise) sigma = np.std(noise) print(f"z_ -> {z_}, sigma^2 -> {sigma}")# noise_max = max(abs(noise.min()), noise.max()) # # noise = noise_max - noise # noise = noise / noise_maxz_ = np.mean(noise) sigma = np.std(noise) print(f"z_ -> {z_}, sigma^2 -> {sigma}") plt.figure(figsize=(9, 6)) hist = plt.hist(noise.flatten(), density=True) plt.show() z_ -> -0.017029652654878595, sigma^2 -> 20.04642811124816 z_ -> -0.017029652654878595, sigma^2 -> 20.04642811124816 # 采樣 mu = 0 sigma = 20 x = np.linspace(-(mu + 10 * sigma), (mu + 10 * sigma), 500) gauss = 1/(np.sqrt(2 * np.pi) * sigma) * np.exp(-(x - mu)**2 / (2 * sigma**2)) gauss = gauss / gauss.max() choice = np.random.choice(gauss, size=image.shape)plt.figure(figsize=(14, 5)) plt.subplot(1,2,1), plt.plot(x, gauss) plt.subplot(1,2,2), plt.hist(choice.flatten()) plt.show() # 高斯PDF z = np.linspace(0, 10, 500)z_ = np.mean(z) sigma = np.std(z)print(f"z_ -> {z_}, sigma^2 -> {sigma}") gauss = gauss_pdf(z)plt.figure(figsize=(9, 6)) plt.plot(z, gauss) plt.show() z_ -> 5.0, sigma^2 -> 2.8925306337070777 # 高斯加性噪聲 img_ori = cv2.imread("DIP_Figures/DIP3E_Original_Images_CH05/Fig0503 (original_pattern).tif", 0) # img_ori = np.ones([256, 256]) * 128 img_gauss = add_gaussian_noise(img_ori, mu=0, sigma=10) # Fix 2021-12-16, image show below donot fixed, so the result might be not the sameplt.figure(figsize=(9, 6)) plt.subplot(121), plt.imshow(img_ori, 'gray', vmin=0, vmax=255), plt.xticks([]), plt.yticks([]) plt.subplot(122), plt.imshow(img_gauss, 'gray'), plt.xticks([]), plt.yticks([])plt.tight_layout() plt.show() hist, bins = np.histogram(img_gauss.flatten(), bins=255, range=[0, 255], density=True) bar = plt.bar(bins[:-1], hist[:])總結(jié)
以上是生活随笔為你收集整理的第5章 Python 数字图像处理(DIP) - 图像复原与重建1 - 高斯噪声的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go语言 基础教程 实战
- 下一篇: Vivado HLS教程