图像处理中常见噪声

2016-09-08 13:27:30 Real_Myth 阅读数 12387

图像去噪方法及发展

图像处理知识库 · 2015-12-29 23:49

图像去噪方法及发展

现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。减少数字图像中噪声的过程称为图像去噪。

一、概述

图像是一种重要的信息源,通过图像处理可以帮助人们了解信息的内涵。但是图像在生成和传输过程中常常因受到各种噪声的干扰和影响而使图像降质,这对后续图像的处理(如分割、压缩和图像理解等)将产生不利影响。噪声种类很多,如:电噪声、机械噪声、信道噪声和其他噪声。为了抑制噪声,改善图像质量,便于更高层次的处理,必须对图像进行去噪预处理。消除图像噪声的工作称之为图像滤波或平滑。数字图像噪声去除涉及光学系统、微电子技术、计算机科学、数学分析等领域,是一门综合性很强的边缘科学,如今其理论体系已十分完善,且其实践应用很广泛,在医学、军事、艺术、农业等都有广泛且成熟的应用。

噪声在理论上可以定义为“ 不可预测,只能用概率统计方法来认识的随机误差”,因此将图像噪声看成是多维随机过程是合适的, 因而描述噪声的方法完全可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。但在很多情况下,这样描述方法是很复杂, 甚至不可能的,而实际应用往往也不必要,通常使用其数值特征,即均值方差、相关函数等。因为这些数值特征都可以从某些方面反映出噪声的特征。

二、图像中的噪声

噪声对图像信号幅度和相位的影响十分复杂,有些噪声和图像信号相互独立不相关,有些是相关的,噪声本身之间也可能相关。因此要减少图像中的噪声,必须针对具体情况采用不同方法,否则很难获得满意的处理效果。一般图像处理中常见的噪声有:

1.加性噪声。

加性噪声和图像信号强度是不相关的, 如图像在传输过程中引进的“ 信道噪声”、电视摄像机扫描图像的噪声的。这类带有噪声的图像可看成为理想无噪声图像f与噪声n 之和,即g = f + n

2.乘性噪声。

乘性噪声和图像信号是相关的,往往随图像信号的变化而变化,如飞点扫描图像中的噪声、电视扫描光栅、胶片颗粒造成等,这类噪声和图像的关系是g = f + fn

3.量化噪声。

量化噪声是数字图像的主要噪声源,其大小显示出数字图像和原始图像的差异,减少这种噪声的最好办法就是采用按灰度级概率密度函数选择量化级的最优量化措施。

4.“椒盐”噪声。

此类噪声如图像切割引起的即黑图像上的白点,白图像上的黑点噪声,在变换域引入的误差,使图像反变换后造成的变换噪声等。

三、图像中的去噪方法

人们根据实际图像的特点、噪声的统计特征和频谱分布规律,发展了各式各样的去噪方法,其中最为直观的方法是根据噪声能量一般集中于高频、而图像频谱则分布于一个有限区间的这一特点,采用低通滤波来进行去噪的方法,例如滑动平均窗滤波器,还有 Wiener 线性滤波器、基于一阶滤波(排序量)的方法、基于马尔可夫模型和基于偏微分方程(PDE,Partial Differential Equation)的方法和 Lp正规化方法等。而低通滤波是一把双刃剑,它在消除图像噪声的同时, 也会消除图像的部分有用的高频信息,因此,各种去噪方法的研究实际是在去噪和保留高频信息之间进行的权衡。减少噪声的方法可以在图像空间域或在图像变换域完成。

1.图像平滑。

图像平滑处理视其噪声图像本身的特性而定,可以在空间域也可以在频率域采用不同的措施。在空间域对图像平滑处理常用领域平均法和中值滤波。

(1)邻域平均法:是将一个像素及其邻域中所有像素的平均值赋给输出图像中相应的像素,从而达到平滑的目的,又称均值滤波。其过程是使一个窗口在图像上滑动,窗口中心位置的值用窗内各点值的平均值来代替, 即用几个像素的灰度平均值来代替一个像素的灰度。其主要的优点是算法简单、计算速度快,但其代价是会造成图像一定程度的模糊。

(2)中值滤波:是一种基于排序统计理论的可有效抑制噪声的非线性平滑滤波。其滤波原理是:首先确定一个以某个像素为中心点的邻域,一般为方形邻域,然后将邻域中各像素的灰度值进行排序,取中间值作为中心像素灰度的新值,这里的邻域通常被称为窗口;当窗口在图像中上下左右进行移动后,利用中值滤波算法可以很好地对图像进行平滑处理。中值滤波的输出像素是由邻域图像的中间值决定的, 因而中值滤波对极限像素值(与周围像素灰度值差别较大的像素)远不如平均值那么敏感,从而可以消除孤立的噪声点,可以使图像产生较少的模糊。

2. 小波滤波。

近年来,小波理论得到了非常迅速的发展, 而且由于其具备良好的时频局部化能力和多分辨率分析能力,因而在图像处理各领域有非常广泛的应用。在去噪领域中,小波理论深受许多学者的重视,他们应用小波变换进行去噪,并获得了非常好的效果。

(1)模极大值重构滤波:信号的模极大值重构是利用信号在各个尺度上小波系数的模极大值来重构信号。信号小波系数的模极大值包含了信号的峰变性与奇异性,如果可以从这些极大值来重构信号, 那么就可以通过处理小波系数的模极大值而实现对信号奇异性的修改,也可以通过抑制某些极大值点而去除相应的奇异性,这是模极大值重构滤波的基本思想。

模极大值重构滤波方法是根据信号和噪声在小波变换下随尺度变换呈现出的不同变化特性提出的,有很好的理论基础,因而滤波性能较为稳定,它对噪声的依赖性较小,不需要知道噪声的方差,特别是对低信噪比的信号滤波时更能体现其优越性。然而它有一个根本性的缺点,就是在滤波过程中存在一个由模极大值重构小波系数的问题, 从而使得该方法的计算量大大增加,另外其实际滤波效果也并不十分令人满意。

(2)空域相关滤波:Witkin 首先提出了利用尺度空间相关性来对信号滤波的思想,对含噪信号经过子带分解后,从粗尺度到细尺度逐步搜索信号的主要边缘,最终从噪声背景中得到真实信号。Xu 在此基础上,提出了空域相关滤波的方法。信号的突变点在不同尺度的同一位置都有较大的峰值出现,噪声能量却随着尺度的增大而减小。因此,可以取相邻尺度的小波系数直接相乘进行计算,这样做相关计算将在锐化信号边缘与其他重要特征的同时抑制噪声,而且能够提高信号主要边缘的定位精度,更好地刻画真实信号。

但其计算量大,需要迭代,并且用到了小波阈值滤波的一些思想。在实际应用时,还需要估计噪声方差才能设定适当的阈值。

(3)小波域阈值滤波:小波变换具有一种“集中”的能力。信号经小波变换后,可以认为由信号产生的小波系数包含有信号的重要信息,其幅值较大,但数目较少,而噪声对应的小波系数幅值小。通过在不同尺度上选取一合适的阈值,并将小于该阈值的小波系数置零, 而保留大于阈值的小波系数,从而使信号中的噪声得到有效的抑制,最后进行小波逆变换,得到滤波后的重构信号。

小波域阈值滤波方法是实现最简单、计算量最小的一种方法,因而应用最广泛。但其阈值选取比较困难,虽然 Donoho在理论上证明并找到了最优的通用阈值,但实际应用中效果并不十分理想。另外, 阈值的选取还依赖于噪声的方差,因此需要事先估计噪声方差。

四、图像去噪方法的发展

相关学科的发展也在推动着图像处理技术不断前进,小波的出现使得图像去噪方法发展到了一个新的阶段,目前图像的去噪方法主要体现在:

1. 对图像的去噪方法大多是多种方法结合,既能很好地保持边缘信息,又能去除图像中的噪声,比如将中值滤波和小波滤波结合起来进行滤波。

2. 在小波变换对图像进行去噪的过程中, 对于阈值选择的研究一直是热点。

3. 实验表明脊波和曲波对图像的去噪效果大大优于其他同类的方法,特别是在噪声严重的情况下曲波优越性更为显著。目前对脊波和曲波的研究刚刚开始,但是它们在诸多领域显示出的优良性质已经为许多的研究者关注,成为研究的热点。

4. 学术界一直存在着何种算法最优的讨论,但是在选择滤波算法的时候应该根据先验数据以及实际问题的要求来分析和选择适当的算法。在小波变换处理过程中,数据的前期处理和后期处理是小波滤波研究的一个方向。

在众多图像去噪算法中,究竟哪一种算法是最好的,应该根据图像的实际要求而应用不同的方法;有些算法确实好,但它的实用性有限。


2014-07-11 16:45:12 thnh169 阅读数 40898

1.研究噪声特性的必要性

        本文的内容主要介绍了常见噪声的分类与其特性。将噪声建模,然后用模型去实现各式各样的噪声。

        实际生活中的各种照片的老化,都可以归结为以下老化模型。


     这个模型很简单,也可以直接用以下公式来表达。


在频域内,用以下公式区表示。


     根据以上式子,可以看出,老旧照片的复原,主要分为两个任务,一个是去噪;另一个是去卷积,或者称为逆滤波,也就是将老化滤波器做反处理。

     本文首先由噪声类型与其建模。随后的博文,会介绍几种基础的去噪方法和基础的逆滤波方法。

    

2.噪声的实现

      2.1    评价用图像与其直方图

        

      2.2  高斯噪声

        高斯噪声,也称为正态噪声,其统计特性服从正态分布。一种较为泛用的噪声模型。 
        Matlab的实现较为简单,Matlab已经有一个randn(M,N)的函数,用其可以产生出均值为0、方差为1、尺寸为M X N像素的高斯噪声图像。
        用以下程序就可以产生任意均值和方差的高斯噪声。

a = 0;
b = 0.08;
n_gaussian = a + b .* randn(M,N);

         

        2.3 瑞利噪声

        瑞利噪声相比高斯噪声而言,其形状向右歪斜,这对于拟合某些歪斜直方图噪声很有用。

        瑞利噪声的实现可以借由平均噪声来实现。如下所示。


这里的表示均值为0,方差为1的均匀分布的噪声。Matlab里,使用函数rand(M,N)就可以产生一个均值为0,方差为1的均匀噪声。

a = -0.2;
b = 0.03;
n_rayleigh = a + (-b .* log(1 - rand(M,N))).^0.5;

        

       2.4 伽马噪声

         伽马噪声的分布,服从了伽马曲线的分布。伽马噪声的实现,需要使用b个服从指数分布的噪声叠加而来。指数分布的噪声,可以使用均匀分布来实现。


使用若干个(这里用b表示)均匀分布叠加,就可以得到伽马噪声。


当然,当b=1的时候,就可以得到指数噪声了。

a = 25;
b = 3;
n_Erlang = zeros(M,N); 

for j=1:b
    n_Erlang = n_Erlang + (-1/a)*log(1 - rand(M,N));
end



         2.5 均匀噪声

             如同前面所示,均匀噪声可以由函数rand(M,N)直接产生。


a = 0;
b = 0.3;
n_Uniform = a + (b-a)*rand(M,N);

         2.6 椒盐噪声

         椒盐噪声也成为双脉冲噪声。在早期的印刷电影胶片上,由于胶片化学性质的不稳定和播放时候的损伤,会使得胶片表面的感光材料和胶片的基底欠落,在播放时候,产生一些或白或黑的损伤。事实上,这也可以归结为特殊的椒盐噪声。

        椒盐噪声的实现,需要一些逻辑判断。这里我们的思路是,产生均匀噪声,然后将超过阈值的点设置为黑点,或白点。当然,如果需要拟合电影胶片的损伤的话,可以选用别的类型噪声去拟合。

       

a = 0.05;
b = 0.05;
x = rand(M,N);

g_sp = zeros(M,N);
g_sp = f;

g_sp(find(x<=a)) = 0;
g_sp(find(x > a & x<(a+b))) = 1;



3.总结

     本文,实现的几类较为基本的噪声。并给出了其实现的方法,代码在下面。下一篇博文,会进行几个常用去噪滤波器的比较。

close all;
clear all;
clc;

f = imread('./original_pattern.tif');
f = mat2gray(f,[0 255]);
[M,N] = size(f);

figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original image');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(f,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');
%% ---------------gaussian-------------------
a = 0;
b = 0.08;
n_gaussian = a + b .* randn(M,N);

g_gaussian = f + n_gaussian; 

figure();
subplot(1,2,1);
imshow(g_gaussian,[0 1]);
xlabel('a).Ruselt of Gaussian noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_gaussian,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');

%% ---------------rayleigh-------------------
a = -0.2;
b = 0.03;
n_rayleigh = a + (-b .* log(1 - rand(M,N))).^0.5;

g_rayleigh = f + n_rayleigh; 

figure();
subplot(1,2,1);
imshow(g_rayleigh,[0 1]);
xlabel('a).Ruselt of Rayleigh noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_rayleigh,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');
%% ---------------Erlang-------------------
a = 25;
b = 3;
n_Erlang = zeros(M,N); 

for j=1:b
    n_Erlang = n_Erlang + (-1/a)*log(1 - rand(M,N));
end

g_Erlang = f + n_Erlang; 

figure();
subplot(1,2,1);
imshow(g_Erlang,[0 1]);
xlabel('a).Ruselt of Erlang noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_Erlang,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');

%% ---------------Exponential-------------------
a = 9;
n_Ex = (-1/a)*log(1 - rand(M,N)); 

g_Ex = f + n_Ex;

figure();
subplot(1,2,1);
imshow(g_Ex,[0 1]);
xlabel('a).Ruselt of Exponential noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_Ex,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');

%% ---------------Uniform-------------------
a = 0;
b = 0.3;
n_Uniform = a + (b-a)*rand(M,N);

g_Uniform = f + n_Uniform;

figure();
subplot(1,2,1);
imshow(g_Uniform,[0 1]);
xlabel('a).Ruselt of Uniform noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_Uniform,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');

%% ---------------Salt & pepper-------------------
a = 0.05;
b = 0.05;
x = rand(M,N);

g_sp = zeros(M,N);
g_sp = f;

g_sp(find(x<=a)) = 0;
g_sp(find(x > a & x<(a+b))) = 1;

figure();
subplot(1,2,1);
imshow(g_sp,[0 1]);
xlabel('a).Ruselt of Salt & pepper noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_sp,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.3]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');

原文发于博客:http://blog.csdn.net/thnh169/ 



=============更新日志===================

2016 - 5 - 21 修正英文单词的拼写错误。


2016-05-07 20:15:59 lpsl1882 阅读数 12462

常见的噪声模型有(z是噪声值,μ表示均值,s2表示方差):

1、高斯噪声

2、瑞里噪声μ=a+sqrt(pi*b/4),s2=b(4-pi)/4

3、伽马噪声 μ=b/a,s2=b/a^2

4、指数分布噪声 μ=1/a,s2=1/a^2

5、均匀分布噪声 μ=(a+b)/2,s2=(b-a)^2/12

6、椒盐噪声其中盐表示亮点,椒表示暗点。

7、周期噪声,比如空间域图像受到正弦波信号干扰。

 

现在我们来试着给图像加上噪声。C++,python,matlab提供了普通随机数和服从高斯分布的随机数,可以直接生成椒盐噪声、均匀分布噪声和高斯噪声。但是剩下的几种噪声模型,要生成服从这些噪声模型的随机数就不太容易了。假设我们只能获取普通随机数,现在要把普通随机数变成服从特定函数分布的随机数,在连续系统下是很困难的,但是离散系统下有多种方法可以使用。比如给出一个很大的、有重复元素的集合,集合内元素的数量比上集合总数就是该元素在特定函数分布中应该出现的概率,这样随机获取集合的元素,出现某种元素的概率是服从特定的分布的。我使用另外一种方法。

假设当前图像像素范围为[0,255],我们将当前概率密度函数映射为p(x),x属于[0,255],然后通过累加方法求出概率函数F(x),x属于[0,255],注意这里F(255)=1,否则需要进行归一化。之后我获取普通随机数r,搜索得出r的值处于F(i)和F(i+1)之间,那么我就把i或者i+1作为获取到的服从p(x)分布的随机数。

获取服从分布的随机数r之后,再通过随机数生成(x,y)位置,给该点像素值加上r作为噪声。

https://github.com/artzers/NGImageProcessor.git ImageNoiseGenerator.py

2009-10-22 11:48:00 aaojiao1342 阅读数 249
write me

转载于:https://www.cnblogs.com/bluefish/archive/2009/10/22/1587948.html

2015-01-25 13:31:17 EbowTang 阅读数 4794

1.研究噪声特性的必要性

        本文的内容主要介绍了常见噪声的分类与其特性。将噪声建模,然后用模型去实现各式各样的噪声。

        实际生活中的各种照片的老化,都可以归结为以下老化模型。


     这个模型很简单,也可以直接用以下公式来表达。


在频域内,用以下公式区表示。


     根据以上式子,可以看出,老旧照片的复原,主要分为两个任务,一个是去噪;另一个是去卷积,或者称为逆滤波,也就是将老化滤波器做反处理。

     本文首先由噪声类型与其建模。随后的博文,会介绍几种基础的去噪方法和基础的逆滤波方法。

    

2.噪声的实现

      2.1    评价用图像与其直方图

        

      2.2  高斯噪声

        高斯噪声,也称为正态噪声,其统计特性服从正态分布。一种较为泛用的噪声模型。 
        Matlab的实现较为简单,Matlab已经有一个randn(M,N)的函数,用其可以产生出均值为0、方差为1、尺寸为M X N像素的高斯噪声图像。
        用以下程序就可以产生任意均值和方差的高斯噪声。

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. a = 0;  
  2. b = 0.08;  
  3. n_gaussian = a + b .* randn(M,N);  

来自另一种写法:
randn('seed', 0);
noisy = original + sigma*randn(size(original));
         

        2.3 瑞利噪声

        瑞利噪声相比高斯噪声而言,其形状向右歪斜,这对于拟合某些歪斜直方图噪声很有用。

        瑞利噪声的实现可以借由平均噪声来实现。如下所示。


这里的表示均值为0,方差为1的均匀分布的噪声。Matlab里,使用函数rand(M,N)就可以产生一个均值为0,方差为1的均匀噪声。

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. a = -0.2;  
  2. b = 0.03;  
  3. n_rayleigh = a + (-b .* log(1 - rand(M,N))).^0.5;  

        

       2.4 伽马噪声

         伽马噪声的分布,服从了伽马曲线的分布。伽马噪声的实现,需要使用b个服从指数分布的噪声叠加而来。指数分布的噪声,可以使用均匀分布来实现。


使用若干个(这里用b表示)均匀分布叠加,就可以得到伽马噪声。


当然,当b=1的时候,就可以得到指数噪声了。

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. a = 25;  
  2. b = 3;  
  3. n_Erlang = zeros(M,N);   
  4.   
  5. for j=1:b  
  6.     n_Erlang = n_Erlang + (-1/a)*log(1 - rand(M,N));  
  7. end  



         2.5 均匀噪声

             如同前面所示,均匀噪声可以由函数rand(M,N)直接产生。


[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. a = 0;  
  2. b = 0.3;  
  3. n_Uniform = a + (b-a)*rand(M,N);  

         2.6 椒盐噪声

         椒盐噪声也成为双脉冲噪声。在早期的印刷电影胶片上,由于胶片化学性质的不稳定和播放时候的损伤,会使得胶片表面的感光材料和胶片的基底欠落,在播放时候,产生一些或白或黑的损伤。事实上,这也可以归结为特殊的椒盐噪声。

        椒盐噪声的实现,需要一些逻辑判断。这里我们的思路是,产生均匀噪声,然后将超过阈值的点设置为黑点,或白点。当然,如果需要拟合电影胶片的损伤的话,可以选用别的类型噪声去拟合。

       

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. a = 0.05;  
  2. b = 0.05;  
  3. x = rand(M,N);  
  4.   
  5. g_sp = zeros(M,N);  
  6. g_sp = f;  
  7.   
  8. g_sp(find(x<=a)) = 0;  
  9. g_sp(find(x > a & x<(a+b))) = 1;  



3.总结

     本文,实现的几类较为基本的噪声。并给出了其实现的方法,代码在下面。下一篇博文,会进行几个常用去噪滤波器的比较。
close all;
clear all;
clc;

f = imread('./original_pattern.tif');
f = mat2gray(f,[0 255]);
[M,N] = size(f);

figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).Original image');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(f,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');
%% ---------------gaussian-------------------
a = 0;
b = 0.08;
n_gaussian = a + b .* randn(M,N);

g_gaussian = f + n_gaussian; 

figure();
subplot(1,2,1);
imshow(g_gaussian,[0 1]);
xlabel('a).Ruselt of Gaussian noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_gaussian,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');

%% ---------------rayleigh-------------------
a = -0.2;
b = 0.03;
n_rayleigh = a + (-b .* log(1 - rand(M,N))).^0.5;

g_rayleigh = f + n_rayleigh; 

figure();
subplot(1,2,1);
imshow(g_rayleigh,[0 1]);
xlabel('a).Ruselt of Rayleigh noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_rayleigh,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');
%% ---------------Erlang-------------------
a = 25;
b = 3;
n_Erlang = zeros(M,N); 

for j=1:b
    n_Erlang = n_Erlang + (-1/a)*log(1 - rand(M,N));
end

g_Erlang = f + n_Erlang; 

figure();
subplot(1,2,1);
imshow(g_Erlang,[0 1]);
xlabel('a).Ruselt of Erlang noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_Erlang,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');

%% ---------------Exponential-------------------
a = 9;
n_Ex = (-1/a)*log(1 - rand(M,N)); 

g_Ex = f + n_Ex;

figure();
subplot(1,2,1);
imshow(g_Ex,[0 1]);
xlabel('a).Ruselt of Exponential noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_Ex,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');

%% ---------------Uniform-------------------
a = 0;
b = 0.3;
n_Uniform = a + (b-a)*rand(M,N);

g_Uniform = f + n_Uniform;

figure();
subplot(1,2,1);
imshow(g_Uniform,[0 1]);
xlabel('a).Ruselt of Uniform noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_Uniform,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.014]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');

%% ---------------Salt & pepper-------------------
a = 0.05;
b = 0.05;
x = rand(M,N);

g_sp = zeros(M,N);
g_sp = f;

g_sp(find(x<=a)) = 0;
g_sp(find(x > a & x<(a+b))) = 1;

figure();
subplot(1,2,1);
imshow(g_sp,[0 1]);
xlabel('a).Ruselt of Salt & pepper noise');

subplot(1,2,2);
x = linspace(-0.2,1.2,358);
h = hist(g_sp,x)/(M*N);
Histogram = zeros(358,1);
for y = 1:256
    Histogram = Histogram + h(:,y);
end
bar(-0.2:1/255:1.2,Histogram);
axis([-0.2 1.2 0 0.3]),grid;
xlabel('b).The Histogram of a');
ylabel('Number of pixels');

原文发于博客:http://blog.csdn.net/thnh169/ 




参考资源:

【1】原作者,zhoufan900428原文地址:http://blog.csdn.net/zhoufan900428/article/details/37695357