第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)=(hf)(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πσ1e(zzˉ)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[:])

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

doubango简介

1、doubango官网&#xff1a;http://www.doubango.org/ doubango常用项目国内镜像&#xff08;放在淘宝的svn服务器&#xff09;&#xff0c;目前有4个项目&#xff1a;doubango, idoubs, imsdroid, telepresence。项目的svn地址如下格式http://code.taobao.org/svn/【项目名称…

第5章 Python 数字图像处理(DIP) - 图像复原与重建2 - 瑞利噪声

标题瑞利噪声瑞利噪声 瑞利噪声的PDF为 P(z){2b(z−a)e−(z−a)2/b,z≥a0,z<a(5.4)P(z) \begin{cases} \frac{2}{b}(z-a)e^{-(z-a)^2/b}, & z \ge a \\ 0, & z < a\end{cases} \tag{5.4}P(z){b2​(z−a)e−(z−a)2/b,0,​z≥az<a​(5.4) 均值和方差为 zˉa…

调焦后焦实现不同距离成像_如何用手机拍出单反的效果,系列学习(一)AF参数“自动调焦”...

首先我们来了解下AF&#xff0c;AF在照相机中是英文Auto Focus的缩写&#xff0c;自动调焦的意思。因此&#xff0c;AF照相机即是自动调焦照相机的简称。   这种照相机的调焦是利用电子测距器自动进行的。当按下照相机快门按钮时&#xff0c;根据被摄目标的距离&#xff0c;电…

第5章 Python 数字图像处理(DIP) - 图像复原与重建3 - 爱尔兰(伽马)噪声

标题爱尔兰&#xff08;伽马&#xff09;噪声爱尔兰&#xff08;伽马&#xff09;噪声 爱尔兰噪声的PDF是 P(z){abzb−1(b−1)!e−az,z≥00,z<0(5.7)P(z) \begin{cases} \frac{a^bz^{b-1}}{(b-1)!}e^{-az}, & z\geq 0 \\ 0, & z < 0 \end{cases} \tag{5.7}P(z)…

ipfs如何查找一个文件的_如何用 1 分钟遍历一个 100TB 的文件?

如果你在面试的时候遇到这样一个问题&#xff1a;如何用 1 分钟遍历一个 100TB 的文件&#xff1f;是不是立刻就懵圈了&#xff1f;不要紧&#xff0c;读了今天的文章&#xff0c;懵圈的可能是面试官。以下是全文。文件及硬盘管理是计算机操作系统的重要组成部分&#xff0c;让…

calendar类计算时间距离_日期时间--JAVA成长之路

Java中为处理日期和时间提供了大量的API&#xff0c;确实有把一件简单的事情搞复杂的嫌疑&#xff0c;各种类&#xff1a;Date Time Timestamp Calendar...&#xff0c;但是如果能够看到时间处理的本质就可以轻松hold住这堆东西了。常用的类表示类java.util.Date :能够准确记录…

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

标题指数噪声指数噪声 指数噪声的PDF为 P(z){ae−az,z≥00,z<0(5.10)P(z) \begin{cases} ae^{-az}, & z\geq 0 \\ 0, & z < 0 \end{cases} \tag{5.10}P(z){ae−az,0,​z≥0z<0​(5.10) 均值和方差为 zˉ1a(5.11)\bar{z} \frac{1}{a} \tag{5.11}zˉa1​(5.…

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

标题均匀噪声均匀噪声 均匀噪声的PDF为 P(z){1b−a,a≤z≤b0,other(5.13)P(z) \begin{cases}\frac{1}{b-a}, & a\leq z \leq b \\ 0, & \text{other}\end{cases} \tag{5.13}P(z){b−a1​,0,​a≤z≤bother​(5.13) 均值和方差为 zˉab2(5.14)\bar{z} \frac{a b}{2…

jquery实现的3D缩略图悬停效果

今天我们要告诉你如何创建一些令人兴奋的3D使用CSS3和jQuery悬停效果。这一想法的灵感来自于凉爽的悬停效果&#xff0c;再给客户做网站的时候用的这样的效果&#xff0c;今天就共享出来 在这个效果当中&#xff0c;我将使用的thumbails&#xff0c;就会发现一些更多的信息悬停…

python网页爬虫例子_Python 利用Python编写简单网络爬虫实例3

利用Python编写简单网络爬虫实例3 by:授客 QQ&#xff1a;1033553122 实验环境 python版本&#xff1a;3.3.5&#xff08;2.7下报错 实验目的 获取目标网站“http://bbs.51testing.com/forum.php”中特定url&#xff0c;通过分析发现&#xff0c;目标url同其它url的关系如下目标…

登陆SharePoint站点出现service unavailable----Http错误503

今天在登陆SharePoint站点时&#xff0c;遇到服务不可用&#xff0c;Http error 503。建议如下操作&#xff1a; 1. 在IIS中检查站点属性。在“起始页”&#xff0c;检查应用程序池。 2. 发现SharePoint Web Services Root已停止&#xff0c;右键启动。问题得到解决。 PS&#…

C# 数组

什么是数组&#xff1f;数组是一种数据结构&#xff0c;包含同一个类型的多个元素。数组的声明&#xff1a;int[] myIntArray; 注&#xff1a;声明数组时&#xff0c;方括号 ([]) 必须跟在类型后面&#xff0c;而不是变量名后面。在 C# 中&#xff0c;将方括号放在变量名后是不…

Downloading Android Source Code

Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制软件&#xff0c;它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓 库&#xff08;repository&#xff09;&#xff0c;许多个工作目录&#xff08…

第5章 Python 数字图像处理(DIP) - 图像复原与重建6 - 椒盐噪声

标题椒盐噪声椒盐噪声 如果kkk是一幅数字图像中表示灰度值的比特数&#xff0c;则灰度值可能是[0,2k−1][0, 2^k -1][0,2k−1]。椒盐噪声的PDF为&#xff1a; P(z){Ps,z2k−1Pp,z01−(PsPp),zV(5.16)P(z) \begin{cases} P_s, & z 2^k -1 \\ P_p, & z0 \\ 1-(P_s P_…

Keras 深度学习框架中文文档

2019独角兽企业重金招聘Python工程师标准>>> Keras深度学习框架中文文档 Keras官网&#xff1a;http://keras.io/Github项目&#xff1a;https://github.com/fchollet/keras中文文档主页&#xff1a;http://keras-cn.readthedocs.io/en/latest/Github中文文档&#…

求一个二维数组外围元素之和_C++数组作为函数的参数(学习笔记:第6章 04)...

数组作为函数的参数[1]数组元素作实参&#xff0c;与单个变量一样。数组名作参数&#xff0c;形、实参数都应是数组名&#xff08;实质上是地址&#xff0c;关于地址详见后续章节&#xff09;&#xff0c;类型要一样&#xff0c;传送的是数组首地址。对形参数组的改变会直接影响…

android p wifi一直在扫描_Android再次解读萤石云视频

点击上方蓝字关注 ??前言我之前写过一篇萤石云的集成文章&#xff0c;很多人问我有没有demo&#xff0c; 今天我再次总结一下&#xff0c; 并加个些功能。集成步骤视频预览播放视频放大缩小视频的质量切换截图之前的文章大家可以看下面的链接&#xff1a;https://mp.weixin.q…

第5章 Python 数字图像处理(DIP) - 图像复原与重建7 - 周期噪声 余弦噪声生成方法

标题周期噪声周期噪声 周期噪声通常是在获取图像期间由电气或机电干扰产生的 def add_sin_noise(img, scale1, angle0):"""add sin noise for imageparam: img: input image, 1 channel, dtypeuint8param: scale: sin scaler, smaller than 1, will enlarge, …

第5章 Python 数字图像处理(DIP) - 图像复原与重建8 - 估计噪声参数

标题估计噪声参数估计噪声参数 周期噪声的参数通常是通过检测图像的傅里叶谱来估计的。 只能使用由传感器生成的图像时&#xff0c;可由一小片恒定的背景灰度来估计PDF的参数。 来自图像条带的数据的最简单用途是&#xff0c;计算灰度级的均值和方差。考虑由SSS表示的一个条…

python 随机获取数组元素_Python创建二维数组的正确姿势

List &#xff08;列表&#xff09;是 Python 中最基本的数据结构。在用法上&#xff0c;它有点类似数组&#xff0c;因为每个列表都有一个下标&#xff0c;下标从 0 开始。因此&#xff0c;我们可以使用 list[1] 来获取下标对应的值。如果我们深入下列表的底层原理&#xff0c…