数字图像学笔记

您所在的位置:网站首页 噪声和噪音区别 数字图像学笔记

数字图像学笔记

2024-07-12 21:22| 来源: 网络整理| 查看: 265

文章目录 噪音的产生噪音函数1. 椒盐噪音(Salt Pepper Noise)2. 高斯噪音(Gaussian Noise)3. 泊松噪音(Poisson Noise)泊松分布(Poisson Distribution)泊松分布与光通量泊松过程(Poisson Process)

噪音的产生

所谓噪音,就是指在原始信号中出现了我们不希望的信号,或者干扰。了解噪音的生成方法,是为了方便我们更好的评估去噪函数。通常,在图像学领域,由于传感器的原因,会出现3种比较常见的噪音。

分别是椒盐噪音、高斯噪音以及泊松噪音。现在就来分别了解下这些噪音的产生原因,以及手工实现噪音产生的方法。

噪音函数

之所以降噪,是因为在图像数据的存储、传输过程中,通常会因为电子元器件之间的电磁干扰产生,又或者图像数据在传输过程中遇到来自自然界、或者人为的干扰。

举个例子来说,过去黑白电视机经常由于电信号干扰,而在图像中产生雪花。又或者是拿一个强磁,对着电子管的电视机进行干扰,而在图像中出现一些水纹波。

那么,工程师们根据经验,把常见噪音进行了以下几种的分类。

1. 椒盐噪音(Salt Pepper Noise)

在这里插入图片描述 椒盐噪声(salt-and-pepper noise)又称脉冲噪声,它随机改变一些像素值,在二值图像上表现为使一些像素点变白,一些像素点变黑。 是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声,也就是老人们比较熟悉的所谓“雪花”。

N = { 0 p e p p e r 255 s a l t N = \left\{\begin{matrix} 0 & pepper\\ 255 & salt \end{matrix}\right. N={0255​peppersalt​

def salt_pepper_noise(image, ratio): output = np.zeros(image.shape, np.uint8) for i in range(image.shape[0]): for j in range(image.shape[1]): rand = random.random() if rand 0.5: # change the pixel to 255 output[i][j] = 255 else: output[i][j] = 0 else: output[i][j] = image[i][j] return output

输出效果:

在这里插入图片描述

2. 高斯噪音(Gaussian Noise)

文字的描述比较枯燥,我这里就直接贴一张图来说明什么叫高斯噪音

在这里插入图片描述 首先从一维来介绍,假设某一种有效信号它表示为 μ \mu μ,而随着时间的延续,比方说这个信号是来自某种温度传感器,由于传感器老化或者传输信号出现了某种干扰,这些干扰的信号范围在 [ − 3 σ , 3 σ ] [-3\sigma, 3\sigma] [−3σ,3σ]之间,然后我们把这段时间内噪音的振幅收集并且整理后,发现它符合正态分布曲线,亦或者称为高斯曲线,那么这样的噪音就称为高斯噪音。

f ( x ) = 1 2 π σ e ( − ( x − μ ) 2 2 σ 2 ) f(x) = \frac{1}{ \sqrt {2 \pi } \sigma } e^(- \frac{(x- \mu )^2}{2 \sigma^2} ) f(x)=2π ​σ1​e(−2σ2(x−μ)2​)

这个公式简单的说一下:

曲线关于 x = μ x = \mu x=μ 对称,通常这个值对应的是信号本号 x = μ x = \mu x=μ 处为正态分布的最大值,振幅为 1 2 π σ \frac{1}{ \sqrt {2 \pi } \sigma } 2π ​σ1​,也就是信号本号自身的强度,亦或者说是期望值而 σ \sigma σ所决定的,就是噪音信号的分布情况,数学上称这玩意为标准差当标准差越小,信号噪音就越集中在期望值附近,换句话说也就是信号受噪音影响程度越小,而标准差越大,信号就越模糊。

所以,如果将信号挪到了0上,而噪音分布的标准差为1的时候,这个就是小学二年级所说的标准正态分布了。

现在我们徒手撸一个高斯分布函数的实现:

def gaussian_noise_kernel(x, mu, sigma): exp = math.exp(-1 * ( math.pow(x - mu, 2) / (2 * math.pow(sigma, 2)) )) peak = (math.sqrt(2 * 3.14159) * sigma) return exp / peak

如果用numpy,代码可以写的更简单:

def gaussian_noise_kernel(x, mu, sigma): return np.exp(-1*((x-mu)**2)/(2*(sigma**2)))/(math.sqrt(2*np.pi) * sigma)

然后,我们使用numpy的linspace函数,生成X轴坐标,关于这个函数怎么使用的,你可以网上搜素一下它的函数说明。

用一种比较笨的方法计算Y轴坐标:

mu1, sig1 = 0, 1 # standard distribution mu2, sig2 = 1, 1 # move the chart to right mu3, sig3 = 0, 0.5 # increase the noise coverage mu4, sig4 = 0, 2.5 # increase the noise coverage x = np.linspace(-5, 5, 100) y1, y2, y3, y4 = [], [], [], [] for i in range(50): t1 = gaussian_noise_kernel(x[i], mu1, sig1) t2 = gaussian_noise_kernel(x[i], mu2, sig2) t3 = gaussian_noise_kernel(x[i], mu3, sig3) t4 = gaussian_noise_kernel(x[i], mu4, sig4) y1.append(t1) y2.append(t2) y3.append(t3) y4.append(t4) plt.plot(x, y1, 'r', label='mu1, sig1 = 0, 1') plt.plot(x, y2, 'g', label='mu2, sig2 = 1, 1') plt.plot(x, y3, 'b', label='mu3, sig3 = 0, 0.5') plt.plot(x, y4, 'm', label='mu4, sig4 = 0, 2.5') plt.legend() plt.grid() plt.show() plt.legend() plt.grid() plt.show()

在这里插入图片描述

现在我们已经成功的绘制处高斯分布曲线,然后把这个分布曲线函数引入到图像中,用来生成随机噪点。

首先明确一点,高斯噪音的特点是增加或减少原始信号,使得原始信号出现了随机“抖动”,并且抖动范围服从高斯分布(正态分布)。所以如果要生成高斯噪音,那么我们需要在原来高斯核的基础上,增加一个随机数生成器,并且把高斯函数调整为对于X=0轴上的正态分布(不一定是标准正态分布)。

在这里插入图片描述 所以,如果有一个正弦信号,那么叠加上高斯噪音后,输出的结果就会呈现上图所示的样子。现在放上实现的代码,它的执行效果不是最好的,但你应该是能看明白噪音的叠加方式。

在这里插入图片描述

def gaussian_noise(image, ratio, sigma): # generate gaussian kernel x = np.linspace(- 4 * sigma, 4 * sigma, 100) kernel = gaussian_noise_kernel(x, 0, sigma) # output image output = np.zeros(image.shape, np.uint8) for i in range(image.shape[0]): for j in range(image.shape[1]): rand = random.random() if rand t e v e n t ) = e − σ ⋅ t P(t_{wait} > t_{event}) = e^{- \sigma \cdot t} P(twait​>tevent​)=e−σ⋅t

这里 t t t表示时间变量, σ \sigma σ表示单位时间内 Δ t \Delta t Δt事件怕平均发生次数,或者说是期望。那么,我们同样可以得出某事件发生前的前面的事件发生概率,随着时间减少而增加

P ( t w a i t ≤ t e v e n t ) = 1 − e − σ ⋅ t P(t_{wait} \leq t_{event}) = 1 - e^{- \sigma \cdot t} P(twait​≤tevent​)=1−e−σ⋅t

明白了这个公式的概念,接下来我们就可以来模拟这个泊松过程了,那么受限于篇幅,生成泊松随机数的过程我就放在下一章里进行介绍了。

《泊松噪音》 ↩︎

Poisson Distribution, Alexander Katz, Andy Hayes, Tejas Suresh, etc. ↩︎

How to Create Awesome Noise That Is Actually Real, Erez Posner ↩︎

The Poisson Distribution and Poisson Process Explained, Will Koehresen ↩︎



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3