前言
如图像增强那样,图像复原技术的主要目的是以某种预定义的方式来改进图像。尽管两者的涵盖范围有重叠之处,但图像增强主要是一种主观处理,而图像复原很大程度上是一种客观处理。图像复原利用退化现象的先验知识来复原已退化的图像。因此,复原技术主要是对退化建模并应用逆过程来恢复原图像。本章主要介绍适用于许多复原情况的线性空间不变复原模型,讨论由投影重建图像的基本技术及这些技术在计算机断层成像(CT)中的应用,计算机断层成像是图像处理的最重要的商业应用,尤其是在医疗保健领域。
1. 图像的噪声
图像的噪声 是指在图像中出现的无关信息或随机误差,它通常表现为图像中不属于原始场景的像素值的随机波动。这些波动会使图像失真,影响其视觉效果和后续的图像处理任务,如图像分割、特征提取或模式识别。
图像的噪声主要有六种,其噪声模型的概率密度函数如下所示:
2. 图像的噪声模型
2.1 高斯噪声
高斯噪声(Gaussian Noise)是图像处理和信号处理中一种非常常见的噪声类型,其名称来源于其数值分布遵循高斯分布,也称为正态分布。高斯噪声在各种成像系统、通信系统中都有广泛应用,是噪声建模的标准选择之一。
2.1.1 高斯噪声的来源
- 热噪声:电阻中的电子热运动会引起的电压噪声,这在物理上是随机的,因此符合正态分布。
- 量化误差:数字系统中对模拟信号进行量化时产生的误差,其概率分布往往近似高斯分布。
- 光子噪声:在光电探测器中,由光子到达的随机性产生的噪声,符合泊松分布,但在大样本量时近似为高斯分布。
- 通信干扰:信号在传输过程中受到的随机干扰、散射和多径效应等,往往可以用高斯噪声来近似描述。
2.1.2 高斯噪声的特性
- 均值和方差:高斯噪声的均值和方差决定其中心和宽度,噪声分布围绕均值对称展开。
- 正态分布:高斯噪声遵循正态分布,即呈钟形曲线。其噪声值集中在均值附近,远离均值的概率逐渐降低。
- 宽带噪声:高斯噪声在频域上表现为宽带,即覆盖较宽的频率范围。
- 随机性:高斯噪声的取值具有完全的随机性,且每个数据点相互独立。
2.1.3 高斯噪声的效果
生成高斯噪声的代码如下所示:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def genGaussianNoiseImage(mean, sigma, img):
"""
生成高斯噪声
:param mean: 噪声的均值,一般设为 0。
:param sigma: 噪声的标准差,决定了噪声的强度,值越大,噪声越强。
:param img: 原图像
:return:
"""
# 生成高斯噪声
noise = np.random.normal(mean, sigma, img.shape).astype(np.float32)
# 将高斯噪声加到图像上
noise_img = img + noise
# 将加噪后的图像限制在0到255之间,防止溢出
noise_img = np.uint8(cv.normalize(noise_img, None, 0, 255, cv.NORM_MINMAX))
# noise_img = np.clip(noise_img, 0, 255).astype(np.uint8)
# 计算噪声图像的直方图
noise_hist = cv.calcHist([noise_img], [0], None, [256], [0, 256])
return noise_img, noise_hist
if __name__ == '__main__':
img = cv.imread('Image/Fig0701.tif', 0)
hist = cv.calcHist([img], [0], None, [256], [0, 256])
img1, hist1 = genGaussianNoiseImage(0, 10, img)
img2, hist2 = genGaussianNoiseImage(0, 20, img)
img3, hist3 = genGaussianNoiseImage(0, 30, img)
img4, hist4 = genGaussianNoiseImage(0, 40, img)
img5, hist5 = genGaussianNoiseImage(0, 50, img)
# 进行图像的锐化操作
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(15, 20))
imgs = [img, img1, img2, hist, hist1, hist2, img3, img4, img5, hist3, hist4, hist5]
labels = ['Original Image', 'sigma = 10', 'sigma = 20', 'Hist', 'Hist', 'Hist', 'sigma = 30', 'sigma = 40',
'sigma = 50', 'Hist', 'Hist', 'Hist']
for i in range(3):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(3, 6):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
for i in range(6, 9):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(9, 12):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
plt.tight_layout()
plt.savefig("Image/tmp.png")
plt.show()
高斯噪声的效果图如下所示:
从上图可以看出:
标准差越小像素值越集中,也就是图像越清晰
标准差越大像素值越分散,也就是图像越模糊
2.1.4 高斯噪声的应用场景
- 图像处理:常用于模拟图像噪声,或在图像去噪、模糊处理和滤波算法中进行性能测试。
- 信号处理:在通信系统中,作为一种典型的噪声模型,用于分析和仿真系统抗噪性能。
- 机器学习:用于数据增强,生成随机扰动以防止模型过拟合,提高模型的泛化能力。
- 金融建模:高斯噪声模型可用于模拟市场中的随机波动,为金融数据分析和量化交易提供模拟场景。
- 医学成像:在MRI、CT等成像中产生的噪声可以近似为高斯噪声,在医学图像去噪处理时经常涉及。
2.2 瑞利噪声
2.2.1 瑞利噪声的来源
瑞丽噪声源于多径传播环境,特别是在无线通信和雷达信号处理中。以下是瑞丽噪声的常见来源:
- 多径传播:当信号在传输过程中遇到多个不同的反射表面或传播路径时,信号会经过多个路径到达接收器。这种多路径效应会导致不同路径的信号合成,从而引入瑞丽噪声。
- 雷达回波:在雷达或无线通信中,目标物体会反射发射的信号。由于反射信号的强度和路径的不同,接收的信号强度会变化,并且这种变化通常会遵循瑞丽分布。
- 散射信号:在某些应用中,信号可能会被物体或表面散射,导致不同强度的散射回波。这种散射信号的幅度通常符合瑞丽分布。
2.2.2 瑞利噪声的特性
瑞丽噪声的分布具有以下几个显著特征:
- 单峰分布:瑞丽噪声的概率密度函数具有单峰形状。噪声的值大多集中在较小幅度附近,随着幅度增大,概率密度迅速下降。
- 非负性:瑞丽噪声的值只能是非负的。这是因为它通常表示信号强度或幅度,无法出现负值。
- 依赖于幅度的分布:瑞丽噪声的概率密度函数随信号幅度的增加而指数下降,表现出明显的右偏。
- 参数化:瑞丽噪声通常用两个参数来描述:
- 尺度参数(σ):决定瑞丽分布的扩展范围,控制信号的强度。
- 形状参数(k):影响噪声的变化趋势,通常与散射的多路径情况有关。
2.2.3 瑞利噪声的效果
瑞丽噪声的生成代码如下图所示:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def genRayleignNoiseImage(sigma, img):
"""
生成瑞丽噪声
:param sigma: 是瑞丽分布的标度参数,控制噪声的扩展范围。
:param img: 原图像
:return:
"""
# 生成瑞丽噪声
noise = np.random.rayleigh(sigma, img.shape).astype(np.float32)
# 将瑞丽噪声加到图像上
noise_img = img + noise
# 将加噪后的图像限制在0到255之间,防止溢出
noise_img = np.uint8(cv.normalize(noise_img, None, 0, 255, cv.NORM_MINMAX))
# noise_img = np.clip(noise_img, 0, 255).astype(np.uint8)
# 计算噪声图像的直方图
noise_hist = cv.calcHist([noise_img], [0], None, [256], [0, 256])
return noise_img, noise_hist
if __name__ == '__main__':
img = cv.imread('Image/Fig0701.tif', 0)
hist = cv.calcHist([img], [0], None, [256], [0, 256])
img1, hist1 = genRayleignNoiseImage(10, img)
img2, hist2 = genRayleignNoiseImage(20, img)
img3, hist3 = genRayleignNoiseImage(30, img)
img4, hist4 = genRayleignNoiseImage(40, img)
img5, hist5 = genRayleignNoiseImage(50, img)
# 进行图像的锐化操作
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(15, 20))
imgs = [img, img1, img2, hist, hist1, hist2, img3, img4, img5, hist3, hist4, hist5]
labels = ['Original Image', 'sigma = 10', 'sigma = 20', 'Hist', 'Hist', 'Hist', 'sigma = 30', 'sigma = 40',
'sigma = 50', 'Hist', 'Hist', 'Hist']
for i in range(3):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(3, 6):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
for i in range(6, 9):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(9, 12):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
plt.tight_layout()
plt.savefig("Image/tmp.png")
plt.show()
瑞丽噪声的效果图如下所示:
2.2.4 瑞利噪声的应用场景
瑞丽噪声在多个领域中都有广泛的应用,尤其在信号处理和成像领域:
- 雷达成像和无线通信:在雷达系统中,瑞丽噪声用于模拟回波信号中的随机变化。在无线通信中,瑞丽噪声可以用于模拟信号在传输过程中的衰落,尤其是在多径传播条件下。
- 图像处理和计算机视觉:瑞丽噪声也常用于图像处理中,特别是模拟雷达图像中的噪声特性。在遥感、卫星成像等领域,瑞丽噪声可用于测试去噪算法的鲁棒性。
- 生物医学成像:在医学成像领域,瑞丽噪声有时用于模拟超声波成像或磁共振成像(MRI)中的噪声,尤其在低信号强度的图像中。
- 声学和噪声控制:瑞丽噪声有时用于描述某些声学现象,例如海洋或大气中的随机噪声。
- 气象学和环境监测:在气象学中,瑞丽噪声可用于模拟由风速或其他自然现象引起的信号干扰。
2.3 爱尔兰(伽马)噪声
2.3.1 伽马噪声的来源
- 信号衰减过程:伽马分布可用来建模信号的衰减,尤其是在经过多个随机过程(例如多个散射过程或衰落效应)后。例如,在无线通信中,信号可能受到多个散射源的影响,导致强度分布呈现伽马分布,从而产生伽马噪声。
- 医学成像(例如 PET 扫描):在医学成像,尤其是正电子发射断层扫描(PET)中,伽马射线与物质相互作用后会产生伽马噪声。伽马射线的统计性质遵循伽马分布,影响成像的质量。
- 图像和视频处理:在图像处理领域,伽马噪声有时出现在低光照或低信噪比环境下,特别是在图像传感器或者相机设备的输出信号中,这些信号会受到随机噪声的影响,呈现伽马分布的特征。
- 光子计数和辐射检测:在光子计数或者辐射检测的过程中,检测到的信号常常遵循伽马分布。信号的强度通常不是均匀分布的,而是呈现出与衰减或累积过程相关的伽马分布。
2.3.2 伽马噪声的特性
伽马噪声遵循伽马分布,其主要特性包括:
- 非对称性:伽马噪声的概率密度函数(PDF)是非对称的,通常有一个偏态。它的分布在低值范围较集中,而在高值范围逐渐衰减。这种特性使得伽马噪声适用于模拟非均匀或非对称的噪声过程。
- 形态控制:伽马分布有一个形状参数(k),它决定了分布的形态。不同的形状参数可以模拟不同类型的噪声:
- 当 𝑘很大时,伽马噪声呈现近似于正态分布的形态。
- 当 𝑘很小时,分布表现为较强的右偏性。
- 尺度和形状的独立性:伽马分布的尺度参数(θ)和形状参数(k)可以独立调整,分别控制噪声的幅度和分布的形状。
- 非负性:伽马噪声只能取非负值(即 𝑥≥0),这使得它适用于建模不能为负的物理量(例如信号强度、功率等)。
2.3.3 伽马噪声的效果
伽马噪声的生成代码如下所示:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def genGammaNoiseImage(k, sigma, img):
"""
生成伽马噪声
:param sigma: 是尺度参数,控制噪声的扩展范围。
:param k: 形状参数,控制分布的形状。
:param img: 原图像
:return:
"""
# 生成伽马噪声
noise = np.random.gamma(k, sigma, img.shape).astype(np.float32)
# 将伽马噪声加到图像上
noise_img = img + noise
# 将加噪后的图像限制在0到255之间,防止溢出
noise_img = np.uint8(cv.normalize(noise_img, None, 0, 255, cv.NORM_MINMAX))
# noise_img = np.clip(noise_img, 0, 255).astype(np.uint8)
# 计算噪声图像的直方图
noise_hist = cv.calcHist([noise_img], [0], None, [256], [0, 256])
return noise_img, noise_hist
if __name__ == '__main__':
img = cv.imread('Image/Fig0701.tif', 0)
hist = cv.calcHist([img], [0], None, [256], [0, 256])
img1, hist1 = genGammaNoiseImage(2.5, 10, img)
img2, hist2 = genGammaNoiseImage(2.5, 20, img)
img3, hist3 = genGammaNoiseImage(2.5, 30, img)
img4, hist4 = genGammaNoiseImage(2.5, 40, img)
img5, hist5 = genGammaNoiseImage(2.5, 50, img)
# 进行图像的锐化操作
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(15, 20))
imgs = [img, img1, img2, hist, hist1, hist2, img3, img4, img5, hist3, hist4, hist5]
labels = ['Original Image', 'sigma = 10', 'sigma = 20', 'Hist', 'Hist', 'Hist', 'sigma = 30', 'sigma = 40',
'sigma = 50', 'Hist', 'Hist', 'Hist']
for i in range(3):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(3, 6):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
for i in range(6, 9):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(9, 12):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
plt.tight_layout()
plt.savefig("Image/tmp.png")
plt.show()
伽马噪声的效果图如下所示:
2.3.4 伽马噪声的使用场景
- 医学成像:
- 正电子发射断层扫描(PET):PET扫描使用伽马射线探测体内放射性物质的分布。在PET图像中,伽马噪声通常出现在图像中,因为伽马射线的检测过程遵循伽马分布。
- 放射性成像:伽马噪声在放射性成像中也有广泛应用,尤其是在核医学领域,用来描述辐射检测过程中的随机误差。
- 图像处理:
- 在低光照条件下,图像传感器的响应通常呈现伽马分布,造成图像中的噪声有时呈现伽马噪声特性。
- 遥感图像:在遥感图像处理中,尤其是卫星图像和雷达图像中,伽马噪声可以用来模拟信号传播中的非线性衰减。
- 通信系统:
- 在无线通信中,信号在传播过程中会受到多径效应的影响,导致信号的衰减或噪声呈现伽马分布,伽马噪声用于模拟这种衰减过程。
- 在雷达系统中,雷达波的散射和回波也可能呈现伽马噪声特性,尤其是在复杂的反射和多径环境下。
- 光子计数和辐射检测:
- 在光子计数系统中,光子的到达通常是随机的,且具有伽马分布。伽马噪声可以模拟光子计数过程中出现的统计噪声。
- 核辐射检测:核辐射探测系统中的噪声也遵循伽马分布。
- 信号处理和滤波:
伽马噪声在信号处理领域被用来测试滤波算法的鲁棒性,特别是针对非高斯噪声类型的处理。
2.4 指数噪声
2.4.1 指数噪声的来源
- 放射性衰变:放射性物质衰变的过程通常遵循指数分布。每个放射性粒子的衰变时间是随机的,且其衰变过程服从指数分布。这种噪声出现在核物理、辐射探测等领域,表现为放射性衰变的时间间隔。
- 无线通信中的信道衰减:在无线通信中,信号在传播过程中会受到不同程度的衰减。尤其在多径衰落情况下,信号强度随着距离的增加或障碍物的影响,通常遵循指数衰减。这种衰减过程会引入指数噪声。
- 光纤通信:在光纤通信系统中,信号的传播受到光纤中散射、吸收等因素的影响,信号的强度通常随着传输距离的增加而呈现指数衰减。指数噪声可以用来建模光信号的衰减和噪声。
- 生物医学成像(如PET扫描):在正电子发射断层扫描(PET)等医学成像技术中,探测到的信号或放射性衰变的过程常常呈现指数分布。在PET扫描中,放射性物质的衰变过程和相应的信号噪声具有指数性特征。
- 光子计数和辐射检测:在光子计数系统或辐射检测中,信号的时间间隔常常是随机的,且符合指数分布。比如,在辐射探测中,光子到达的时间间隔是由衰变过程决定的,通常符合指数分布。
- 排队论中的噪声:在排队理论中,客户到达的时间间隔和服务时间通常假设服从指数分布。这类噪声常常用于建模等待时间、处理时间等随机过程。
- 信号传输过程中的随机衰减:在一些信号传输过程(如声学信号、无线电波等)中,信号在介质中的传播会受到散射、吸收等随机因素的影响,导致信号的幅度呈现指数性衰减,从而产生指数噪声。
2.4.2 指数噪声的特性
- 非负性:指数噪声是非负的,这意味着噪声值只能是正数或零。这使得它非常适用于描述某些物理量,如信号的强度、功率等,这些量不能为负。
- 无记忆性(Markov性):指数噪声具有无记忆性,也称为Markov性。即当前噪声的值只与当前的状态有关,而与过去的历史无关。这使得它适用于建模随机衰减过程,如信号衰减、粒子衰变等。
- 右偏性:指数噪声的分布具有右偏性,即大多数噪声值集中在较小的范围内,较大的值出现的概率迅速下降。这种特性通常表现为噪声的迅速衰减。
- 长尾分布:尽管指数噪声集中在小值附近,但它的分布有较长的尾巴,能够产生较大的噪声值。这个特性使得指数噪声在某些情况下能够模拟极端值的出现。
2.4.3 指数噪声的效果
生成指数噪声的代码如下所示:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def genExponentNoiseImage(_lambda, img):
"""
生成指数噪声
:param _lambda: 速率参数(rate parameter),控制噪声衰减的速度。较大的 λ 值会导致更快的衰减。
:param img: 原图像
:return:
"""
# 生成指数噪声
noise = np.random.exponential(_lambda, img.shape).astype(np.float32)
# 将指数噪声加到图像上
noise_img = img + noise
# 将加噪后的图像限制在0到255之间,防止溢出
noise_img = np.uint8(cv.normalize(noise_img, None, 0, 255, cv.NORM_MINMAX))
# noise_img = np.clip(noise_img, 0, 255).astype(np.uint8)
# 计算噪声图像的直方图
noise_hist = cv.calcHist([noise_img], [0], None, [256], [0, 256])
return noise_img, noise_hist
if __name__ == '__main__':
img = cv.imread('Image/Fig0701.tif', 0)
hist = cv.calcHist([img], [0], None, [256], [0, 256])
img1, hist1 = genExponentNoiseImage(10, img)
img2, hist2 = genExponentNoiseImage(20, img)
img3, hist3 = genExponentNoiseImage(30, img)
img4, hist4 = genExponentNoiseImage(40, img)
img5, hist5 = genExponentNoiseImage(50, img)
# 进行图像的锐化操作
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(15, 20))
imgs = [img, img1, img2, hist, hist1, hist2, img3, img4, img5, hist3, hist4, hist5]
labels = ['Original Image', 'sigma = 10', 'sigma = 20', 'Hist', 'Hist', 'Hist', 'sigma = 30', 'sigma = 40',
'sigma = 50', 'Hist', 'Hist', 'Hist']
for i in range(3):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(3, 6):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
for i in range(6, 9):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(9, 12):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
plt.tight_layout()
plt.savefig("Image/tmp.png")
plt.show()
指数噪声的效果图如下所示:
2.4.4 指数噪声的应用场景
- 通信系统:
- 信道衰落:在无线通信系统中,信号的强度通常会受到多径效应或环境影响的衰减,信号的幅度和强度可能呈现指数衰减。指数噪声用于模拟信号的衰落、路径损耗等情况。
- 光纤通信:在光纤通信中,信号传输受到光纤中散射、吸收等因素的影响,导致信号的强度随着传播距离增加而呈现指数衰减。
- 生物医学成像:
- PET扫描:正电子发射断层扫描(PET)是使用放射性同位素进行成像的技术,其中放射性衰变的过程和探测的信号常常呈现指数分布。PET图像中的噪声常表现为指数噪声。
- X射线衰减:在X射线成像中,信号的衰减通常会遵循指数规律,这种衰减会影响图像质量,并可能导致指数噪声的出现。
- 辐射探测与光子计数:在光子计数和辐射探测等应用中,光子到达的时间间隔是随机的,且符合指数分布。通过模拟这些过程的指数噪声,可以提高系统对探测信号的处理能力。
- 排队系统与随机过程建模:在排队论中,客户到达的时间间隔、服务时间等通常假设服从指数分布。指数噪声可以用于建模随机到达的事件或等待时间。
- 光学与声学系统:在光学和声学系统中,信号的衰减通常由介质中的随机散射和吸收引起,这些过程可能表现为指数噪声。例如,激光通信中的衰减信号可以使用指数噪声来建模。
- 图像处理与成像技术:在某些图像成像技术中,低光照或信号衰减可能导致图像噪声呈现指数分布。例如,在低光照条件下,图像传感器的响应可能呈现指数性衰减,造成指数噪声。
- 自然现象模拟:在模拟自然现象(如海洋波动、地震波传播等)时,指数噪声可以用来描述随机衰减的现象。这些现象的强度常常呈现指数分布。
2.5 均匀噪声
2.5.1 均匀噪声的来源
- 硬件噪声:在许多电子设备(如传感器、放大器、模拟电路等)中,由于组件本身的固有特性,可能会产生均匀分布的噪声。例如,模拟电路中的放大器可能会因为电压源的不稳定而产生均匀噪声。
- 信号采样误差:在数字信号处理和数据采集过程中,采样误差和量化误差可能导致均匀噪声的产生。例如,在模拟信号转化为数字信号的过程中,由于量化误差,可能会生成均匀分布的噪声。
- 数字信号模拟:在某些数字信号处理中,均匀噪声常用于模拟随机噪声源,尤其是在测试和调试阶段。例如,信号处理中的一些算法测试会加入均匀噪声,以评估算法的鲁棒性。
- 模拟环境中的外部扰动:在一些物理实验中,外部环境扰动可能导致均匀噪声的出现。例如,在某些气象或地质仪器中,由于外界气候变化、电磁干扰等因素,噪声信号可能呈现均匀分布。
- 随机过程中的噪声:在某些随机过程建模中,均匀噪声被用来模拟系统中的随机扰动。这种噪声来源于过程中的随机性,可能是在一定范围内随机变化的扰动。
2.5.2 均匀噪声的特性
- 广泛的随机性:与其他噪声(如高斯噪声)不同,均匀噪声不会偏向于某个值。其值在指定范围内是完全随机且等概率的,通常表现出较为“平坦”的分布。
- 无偏性:均匀噪声在给定范围内没有偏向任何特定值。换句话说,噪声的均值会恰好位于该范围的中间位置。
- 有限范围:均匀噪声通常是在一个有限范围内变化。例如,噪声值可能仅在 [0, 1] 或 [-5, 5] 这样的区间内波动,而不会超出这个范围。
- 无记忆性:均匀噪声通常是一个独立同分布(i.i.d.)过程,意味着它的每个样本都是独立生成的,前一个样本不会影响后一个样本。
2.5.3 均匀噪声的效果
生成均匀噪声的代码如下所示:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def genUniformNoiseImage(a, b, img):
"""
生成均匀噪声
在区间 [a,b] 内,所有值的概率密度是相等的。
:param a: 均匀分布的最小值。
:param b: 均匀分布的最大值。
:param img: 原图像
:return:
"""
# 生成均匀噪声
noise = np.random.uniform(a, b, img.shape).astype(np.float32)
# 将均匀噪声加到图像上
noise_img = img + noise
# 将加噪后的图像限制在0到255之间,防止溢出
noise_img = np.uint8(cv.normalize(noise_img, None, 0, 255, cv.NORM_MINMAX))
# noise_img = np.clip(noise_img, 0, 255).astype(np.uint8)
# 计算噪声图像的直方图
noise_hist = cv.calcHist([noise_img], [0], None, [256], [0, 256])
return noise_img, noise_hist
if __name__ == '__main__':
img = cv.imread('Image/Fig0701.tif', 0)
hist = cv.calcHist([img], [0], None, [256], [0, 256])
img1, hist1 = genUniformNoiseImage(0, 10, img)
img2, hist2 = genUniformNoiseImage(0, 50, img)
img3, hist3 = genUniformNoiseImage(0, 90, img)
img4, hist4 = genUniformNoiseImage(0, 130, img)
img5, hist5 = genUniformNoiseImage(0, 170, img)
# 进行图像的锐化操作
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(15, 20))
imgs = [img, img1, img2, hist, hist1, hist2, img3, img4, img5, hist3, hist4, hist5]
labels = ['Original Image', 'b = 10', 'b = 50', 'Hist', 'Hist', 'Hist', 'b = 90', 'b = 130',
'b = 170', 'Hist', 'Hist', 'Hist']
for i in range(3):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(3, 6):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
for i in range(6, 9):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(9, 12):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
plt.tight_layout()
plt.savefig("Image/tmp.png")
plt.show()
均匀噪声效果图如下所示:
2.5.4 均匀噪声的应用场景
- 图像处理:在图像处理中,均匀噪声常用于模拟图像传感器或环境的干扰。均匀噪声会影响图像质量,使得图像像素值在一定范围内随机波动。它常用于测试图像去噪算法和图像增强技术的效果。
- 模拟与建模:均匀噪声常用于模拟其他类型的噪声或随机过程,特别是在计算机仿真和数值模型中。它用于测试和验证算法的稳定性和鲁棒性。例如,模拟信号的随机扰动时,可以使用均匀噪声。
- 通信系统:在通信系统中,均匀噪声有时用于模拟理想情况下的噪声源。在一些通信协议和信号处理算法的测试中,均匀噪声有助于了解系统在受控环境下的表现。
- 数据加扰:均匀噪声可用于加扰数据以增加其安全性。例如,在密码学中的某些加密算法中,均匀噪声可以用于使加密过程更加难以破解。
- 噪声测试:均匀噪声可以用于测试噪声抑制和滤波算法。研究人员可以向信号中加入均匀噪声,模拟实际工作环境中的干扰,以测试去噪技术的有效性。
- 音频处理:在音频处理领域,均匀噪声用于模拟音频信号中的随机干扰。它用于测试音频增强技术,尤其是在低质量音频数据中,均匀噪声常作为一种常见的扰动来源。
- 物理实验中的随机误差:在物理实验和工程测量中,均匀噪声可以用来表示某些类型的测量误差或设备噪声。例如,在精确度要求较高的测量过程中,由于设备本身的限制或外部干扰,测量结果可能呈现均匀分布的噪声。
- 视频和动画模拟:在视频图像的合成或动画模拟中,均匀噪声常被用于添加背景扰动或模拟特定环境条件下的干扰。它能帮助生成更自然的动画效果,特别是模拟风、雨、雪等自然现象的影响。
2.6 椒盐噪声
2.6.1 椒盐噪声的来源
- 传感器误差:图像传感器(如CMOS和CCD传感器)在采集图像时,由于硬件缺陷或环境因素,可能会产生随机亮点或黑点。传感器中的电流噪声、热噪声以及光电转换误差都是导致椒盐噪声的来源。
- 数据传输错误:在图像或视频数据的传输过程中,尤其是在不稳定或受干扰的网络环境中,可能会发生位翻转或数据丢失,这种情况会产生椒盐噪声,使图像或视频中出现随机的白色和黑色噪声点。
- 数据压缩失真:某些图像压缩算法(尤其是有损压缩)在压缩和解压缩过程中可能会引入椒盐噪声。这种情况主要发生在低质量压缩中,压缩算法可能会忽略一些像素,从而在图像中留下杂点。
- 模拟信号的数字化:在将模拟信号转换为数字信号的过程中,采样过程中的量化误差可能导致像素点的随机偏移,特别是对于高对比度图像,容易形成椒盐噪声。
- 光线不足或环境干扰:在低光照条件下拍摄图像时,传感器对光信号的弱响应会导致部分像素无响应或过度响应,形成随机的亮点和暗点。
2.6.2 椒盐噪声的特性
- 二值化特征:椒盐噪声通常呈现为二值化的黑点和白点,黑点称为“椒”(pepper),白点称为“盐”(salt)。噪声值通常为最大或最小值,例如在灰度图像中通常为0(黑色)和255(白色)。
- 随机分布:噪声点的位置在图像或信号中随机分布,即任何像素都有可能被椒盐噪声替换,但噪声通常只占图像中的少数像素。
- 脉冲式噪声:椒盐噪声属于脉冲噪声类型,即噪声点与周围的像素值有明显的差异,使得噪声在图像中呈现突兀的白色或黑色点。
- 高对比度:由于噪声点的数值极端(0或255),与正常像素的灰度值形成了强烈对比,因此椒盐噪声在视觉上非常明显,容易辨识。
- 易于分离:由于其特有的明暗突变特性,椒盐噪声通常比较容易检测和去除。例如,常用的中值滤波器对椒盐噪声具有较好的去噪效果。
2.6.3 椒盐噪声的效果
生成椒盐噪声的代码如下:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
def genSaltPepperNoiseImage(salt_prob, pepper_prob, img):
"""
生成椒盐噪声
:param salt_prob: “盐”噪声的比例。
:param pepper_prob: “椒”噪声的比例。
:param img: 原图像
:return:
"""
noise_img = img.copy()
# 获取图像的行数和列数
row, col = img.shape
# 生成“盐”噪声(随机选择一定比例的像素点设为255,即白色)
num_salt = int(salt_prob * row * col)
salt_coords = [np.random.randint(0, i, num_salt) for i in img.shape]
noise_img[salt_coords[0], salt_coords[1]] = 255 # 设置为白色(盐)
# 生成“椒”噪声(随机选择一定比例的像素点设为0,即黑色)
num_pepper = int(pepper_prob * row * col)
pepper_coords = [np.random.randint(0, i, num_pepper) for i in img.shape]
noise_img[pepper_coords[0], pepper_coords[1]] = 0 # 设置为黑色(椒)
# 计算噪声图像的直方图
noise_hist = cv.calcHist([noise_img], [0], None, [256], [0, 256])
return noise_img, noise_hist
if __name__ == '__main__':
img = cv.imread('Image/Fig0701.tif', 0)
hist = cv.calcHist([img], [0], None, [256], [0, 256])
img1, hist1 = genSaltPepperNoiseImage(0.02, 0.02, img)
img2, hist2 = genSaltPepperNoiseImage(0.04, 0.04, img)
img3, hist3 = genSaltPepperNoiseImage(0.06, 0.06, img)
img4, hist4 = genSaltPepperNoiseImage(0.08, 0.08, img)
img5, hist5 = genSaltPepperNoiseImage(0.1, 0.1, img)
# 进行图像的锐化操作
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(15, 20))
imgs = [img, img1, img2, hist, hist1, hist2, img3, img4, img5, hist3, hist4, hist5]
labels = ['Original Image', 'prob = 0.02', 'prob = 0.04', 'Hist', 'Hist', 'Hist', 'prob = 0.06', 'prob = 0.08',
'prob = 0.1', 'Hist', 'Hist', 'Hist']
for i in range(3):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(3, 6):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
for i in range(6, 9):
plt.subplot(4, 3, i + 1), plt.title(labels[i]), plt.axis('off')
plt.imshow(imgs[i], 'gray', vmin=0, vmax=255)
for i in range(9, 12):
plt.subplot(4, 3, i + 1), plt.title(labels[i])
plt.plot(imgs[i], color='r')
plt.tight_layout()
plt.savefig("Image/tmp.png")
plt.show()
椒盐噪声的效果如下:
2.6.4 椒盐噪声的应用场景
- 图像处理算法测试:椒盐噪声广泛用于测试图像去噪算法的性能。通过向图像添加椒盐噪声,研究人员可以验证不同去噪算法(如中值滤波、加权中值滤波、非局部均值滤波)的效果和鲁棒性。
- 通信系统中的信号处理:在模拟和数字通信系统中,数据传输过程可能会受到干扰,导致信号中出现类似椒盐噪声的脉冲噪声。模拟这种噪声可以帮助工程师测试和优化通信系统的错误检测和纠正能力。
- 视觉传感器测试:在视觉系统(如监控摄像头、自动驾驶汽车的摄像头)中,椒盐噪声可以用于模拟传感器故障或外部干扰。测试这些设备在噪声条件下的稳定性和抗干扰能力是确保设备可靠性的重要步骤。
- 医学影像处理:医学影像设备(如X射线、CT、MRI等)在成像时可能会因为探测器噪声或环境因素产生椒盐噪声。为此,椒盐噪声可以用于测试和开发医学图像的降噪技术,帮助医生获得更清晰的图像以便诊断。
- 视频传输测试:在视频流传输过程中,尤其是在无线传输和低带宽网络条件下,数据丢包会导致视频中出现椒盐噪声。通过模拟这种情况,可以测试视频传输协议、编码技术和抗丢包技术的性能。
- 机器学习中的数据增强:在训练图像分类或目标检测等深度学习模型时,向数据中添加椒盐噪声可以提高模型的抗干扰能力。通过这种方式,模型能够更好地应对实际应用中可能遇到的噪声情况。
- 图像修复算法开发:图像修复技术(如去噪、修复损坏区域等)需要对各种噪声类型具有较好的修复能力。椒盐噪声常被用于测试修复算法的有效性,尤其是在图像中的杂点修复和细节恢复方面。
- 嵌入式设备图像测试:嵌入式设备(如手机、车载摄像头、无人机相机等)在复杂环境下可能会受到干扰,从而产生类似椒盐噪声的现象。向图像添加椒盐噪声可以帮助评估这些设备在恶劣环境中的工作效果。