日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

第5章 Python 数字图像处理(DIP) - 图像复原与重建1 - 高斯噪声

發布時間:2023/12/10 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第5章 Python 数字图像处理(DIP) - 图像复原与重建1 - 高斯噪声 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本章主要講圖像復原與重建,首先是了解一下各種噪聲的特點與模型,還有形成的方法。一些重點的噪聲,如高斯噪聲,均勻噪聲,伽馬噪聲,指數噪聲,還有椒鹽噪聲等。
本章主要的噪聲研究方法主要是加性噪聲。

標題

    • 圖像退化/復原處理的一個模型
    • 噪聲模型
      • 噪聲的空間和頻率特性
      • 一些重要的噪聲概率密度函數(PDF)
        • 高斯噪聲

import sys import numpy as np import cv2 import matplotlib import matplotlib.pyplot as plt import PIL from PIL import Imageprint(f"Python version: {sys.version}") print(f"Numpy version: {np.__version__}") print(f"Opencv version: {cv2.__version__}") print(f"Matplotlib version: {matplotlib.__version__}") print(f"Pillow version: {PIL.__version__}") Python version: 3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)] Numpy version: 1.18.1 Opencv version: 4.2.0 Matplotlib version: 3.1.3 Pillow version: 7.0.0 def normalize(mask):return (mask - mask.min()) / (mask.max() - mask.min())

圖像退化/復原處理的一個模型

  • 退化
    把圖像退化建模為一個算子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)、關于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)?退化函數H?⊕噪聲η(x,y)?g(x,y)f(x, y) \Rightarrow 退化函數\mathcal{H} \Rightarrow \oplus \ \ 噪聲\eta(x, y) \Rightarrow g(x, y)f(x,y)?退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)

噪聲模型

噪聲的空間和頻率特性

當噪聲的傅里葉譜是常量時,噪聲通常稱為白噪聲

一些重要的噪聲概率密度函數(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值在區間zˉ±σ\bar{z} \pm \sigmazˉ±σ內的概率約為0.68,zzz值在區間zˉ±2σ\bar{z} \pm 2\sigmazˉ±2σ內的概率約為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

更正下面代碼,如果之前已經復制的,也請更正

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) # 這是有錯誤的,將得不到正確的結果,修改如下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[:])

總結

以上是生活随笔為你收集整理的第5章 Python 数字图像处理(DIP) - 图像复原与重建1 - 高斯噪声的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。