图像处理噪声类型

2017-04-24 16:21:16 charlene_bo 阅读数 9747

转自:http://blog.csdn.net/zhoufan900428/article/details/37695357


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);  

         

        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.总结

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

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
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');
 来自CODE的代码片

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

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-06-26 22:13:09 zhougynui 阅读数 23030

噪声表现形式

噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块。一般,噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息。通俗的说就是噪声让图像不清楚。

噪声来源

两个方面

(1)图像获取过程中

两种常用类型的图像传感器CCD和CMOS采集图像过程中,由于受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声,如电阻引起的热噪声、场效应管的沟道热噪声、光子噪声、暗电流噪声、光响应非均匀性噪声。

(2)图像信号传输过程中

由于传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。另外,在图像处理的某些环节当输入的对象并不如预想时也会在结果图像中引入噪声。

噪声对数字图像的影响

对于数字图像信号,噪声表为或大或小的极值,这些极值通过加减作用于图像像素的真实灰度值上,对图像造成亮、暗点干扰,极大降低了图像质量,影响图像复原、分割、特征提取、图像识别等后继工作的进行。

噪声的描述和分类

噪声可以看作随机信号,具有统计学上的特征属性。功率谱密度功率频谱分布PDF)即是噪声的特征之一,通过功率谱密度分类噪声。

(1)高斯噪声

高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。

概率密度函数PDF:


其中z表示灰度值,μ表示z的平均值或期望值,σ表示z的标准差。标准差的平方σ2称为z的方差。

产生原因:1)图像传感器在拍摄时市场不够明亮、亮度不够均匀;2)电路各元器件自身噪声和相互影响;

3)图像传感器长期工作,温度过高。


(2)瑞利噪声

瑞利噪声的概率密度函数由下式给出:

均值:


方差:

注意 距原点的位移和其密度图形的基本形状向右变形的事实,瑞利密度对于近似偏移的直方图十分适用。

(3)伽马(爱尔兰)噪声

伽马噪声的PDF由下式给出:

其中,a>0,b为正整数且“!”表示阶乘。其密度的均值和方差由下式给出:

下图显示了伽马密度的曲线,尽管上式经常被用来表示伽马密度,严格地说,只有当分母为伽马函数Г(b)时才是正确的。当分母如表达式所示时,该密度近似称为爱尔兰密度。


 

(4)指数分布噪声

指数噪声的PDF可由下式给出:

其中a>0。概率密度函数的期望值和方差是:

注意,指数分布的概率密度函数是当b=l时爱尔兰概率分布的特殊情况。

(5)均匀噪声分布

均匀噪声分布的概率密度,由下式给出:

    

概率密度函数的期望值和方差可由下式给出:

           

(6)脉冲噪声(椒盐噪声)

(双极)脉冲噪声的PDF可由下式给出:

        

如果b>a,灰度值b在图像中将显示为一个亮点,相反,a的值将显示为一个暗点。若Pa或Pb为零,则脉冲噪声称为单极脉冲。如果Pa和Pb均不可能为零,尤其是它们近似相等时,脉冲噪声值将类似于随机分布在图像上的胡椒和盐粉微粒。由于这个原因,双极脉冲噪声也称为椒盐噪声。同时,它们有时也称为散粒和尖峰噪声。在我们的讨论中,将交替使用脉冲噪声和椒盐噪声这两个术语。

 噪声脉冲可以是正的,也可以是负的。标定通常是图像数字化过程的一部分。因为脉冲干扰通常与图像信号的强度相比较大,因此,在一幅图像中,脉冲噪声总是数字化为最大值(纯黑或纯白)。这样,通常假设a,b是饱和值,从某种意义上看,在数字化图像中,它们等于所允许的最大值和最小值。由于这一结果,负脉冲以一个黑点(胡椒点)出现在图像中。由于相同的原因,正脉冲以白点(盐点)出现在图像中。对于一个8位图像,这意味着a=0(黑)。b=255(白)。显示了脉冲噪声的概率密度函数。

        前述的一组PDF为在实践中模型化宽带噪声干扰状态提供了有用的工具。例如,在一幅图像中,高斯噪声的产生源于电子电路噪声和由低照明度或高温带来的传感器噪声。瑞利密度分布在图像范围内特征化噪声现象时非常有用。指数密度分布和伽马密度分布在激光成像中有一些应用。像前几章所提及的那样,脉冲噪声主要表现在成像中的短暂停留中,例如,错误的开关操作。均匀密度分布可能是在实践中描述得最少的,然而,均匀密度作为模拟随机数产生器的基础是非常有用的。

不同的噪声在图像的表现形式

下图为原始测试图像

加入不同噪声后图像(椒盐噪声是惟一一种引起退化的视觉可见的噪声类型。):


2019-07-24 16:49:10 qq_33208851 阅读数 20687


图像处理系列笔记: https://blog.csdn.net/qq_33208851/article/details/95335809


图像复原 即利用退化过程的先验知识,去恢复已被退化图像的本来面目。在图像的复原中,需要对噪声进行处理。

1.什么是图像噪声

图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。 图像中各种妨碍人们对其信息接受的因素即可称为图像噪声 。噪声在理论上可以定义为“不可预测,只能用概率统计方法来认识的随机误差”(图像噪声可以描述成不同的类型,其归类方法就是基于统计方法的)。因此将图像噪声看成是多维随机过程是合适的,因而描述噪声的方法完全可以借用随机过程的描述,即用其概率分布函数和概率密度分布函数。通俗的说就是噪声让图像不清楚。
参考文章:https://baike.baidu.com/item/图像噪声/4116468?fr=aladdin

2. 图像噪声来源

  1. 图像获取过程中
    图像传感器CCD和CMOS采集图像过程中受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声。

  2. 图像信号传输过程中
    传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。

3. 噪声分类

噪声按照不同的分类标准可以有不同的分类形式:

  • 基于产生原因:内部噪声,外部噪声。
  • 基于噪声与信号的关系
    加性嗓声和图像信号强度是不相关的,这类带有噪声的图像g可看成为理想无噪声图像f与噪声n之和:
    在这里插入图片描述
    乘性嗓声和图像信号是相关的,往往随图像信号的变化而变化,载送每一个象素信息的载体的变化而产生的噪声受信息本身调制。在某些情况下,如信号变化很小,噪声也不大。为了分析处理方便,常常将乘性噪声近似认为是加性噪声,而且总是假定信号和噪声是互相统计独立。
    在这里插入图片描述
  • 按照基于统计后的概率密度函数:是比较重要的,主要因为引入数学模型,这就有助于运用数学手段去除噪声。在不同场景下噪声的施加方式都不同,由于在外界的某种条件下,噪声下图像-原图像(没有噪声时)的概率密度函数(统计结果)服从某种分布函数,那么就把它归类为相应的噪声。下面将具体说明基于统计后的概率密度函数的噪声分类及其消除方式。

3.1 高斯噪声及其消除方式

在空间域和频域中,由于高斯噪声在数学上的易处理性(高斯函数,高斯函数的傅里叶变换仍然是高斯函数,见相关博文),这种噪声(也称为正态噪声)模型经常被用在实践中,事实上,这种易处理性非常方便。
高斯函数:
在这里插入图片描述
在这里插入图片描述

3.1.1 如何确定一种噪声是高斯噪声

样本图:
在这里插入图片描述
噪声下的样本图:
在这里插入图片描述
噪声的直方图(统计直方图):
在这里插入图片描述
可以看到,噪声的直方图中图形像高斯正态函数的分布。
说明:噪声对原图像的影响是随机的,直方图呈现的分布形式是基于统计的结果直方图表示了(归一化后)灰度值的概率密度分布,因此可以使用直方图来表示灰度值的概率密度。
统计直方图:
在这里插入图片描述
在这里插入图片描述

3.1.2 高斯滤波消除高斯噪声

关于高斯滤波(模糊)的方法和过程在前面的文章中写过:

图像处理(7)–高斯模糊原理

3.1.3 高斯函数的重要性质

高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:

  1. 二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.
  2. 高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性 质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.
  3. 高斯函数的付立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所 污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号 所污染,同时保留了大部分所需信号.
  4. 高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过 调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.
  5. 由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.

3.2 瑞利噪声

瑞利分布:
在这里插入图片描述
在这里插入图片描述
均值和方差:
在这里插入图片描述
瑞利分布百度百科:https://baike.baidu.com/item/瑞利分布/10284554?fr=aladdin

3.2.1 如何确定一种噪声是瑞利噪声

样本图:
在这里插入图片描述
噪声下的样本图:
在这里插入图片描述
噪声的直方图(统计直方图):
在这里插入图片描述

3.3 伽马(爱尔兰)噪声

伽马函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
或者:
在这里插入图片描述
在这里插入图片描述
Γ函数详解:
https://blog.csdn.net/lanchunhui/article/details/50535735
伽马函数百度百科:https://baike.baidu.com/item/伽玛函数/3540177?fromtitle=伽马函数&fromid=11217190&fr=aladdin
伽马噪声百度百科:https://baike.baidu.com/item/Erlang噪声/22026470?fr=aladdin
伽马噪声直方图:
在这里插入图片描述

3.4 指数分布噪声

概率密度函数:
在这里插入图片描述
在这里插入图片描述
累计分布函数:
在这里插入图片描述
在这里插入图片描述
期望值(均值):
在这里插入图片描述
方差:
在这里插入图片描述
相关博文:https://blog.csdn.net/ningyaliuhebei/article/details/46409941

3.5 均匀分布噪声

一个连续随机变量X在区间[a,b]上具有均匀分布,记作

X∼Uniform(a,b)

当它的概率密度函数满足:
在这里插入图片描述
在这里插入图片描述
它的分布函数如下所示:
在这里插入图片描述
在这里插入图片描述
相应的期望和方差:
在这里插入图片描述
在这里插入图片描述
均匀分布百度百科:https://baike.baidu.com/item/均匀分布/954451?fr=aladdin

3.6 脉冲(椒盐)噪声及其消除方式

3.6.1 脉冲(椒盐)噪声

椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。盐和胡椒噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。例如失效的感应器导致像素值为最小值,饱和的感应器导致像素值为最大值。
在这里插入图片描述
在这里插入图片描述

3.6.1 脉冲(椒盐)噪声的消除方式

一般使用非线性滤波器处理椒盐噪声:

  • 异常值侦测
    异常侦测(Anomaly detection)有时称为异常值侦测(Outlier detection),如其名所隐含的,在给定的资料集合中,它将侦测在已有的规律中表现异常者。现今常用的方法以计算距离为基础的K-近邻算法或是机器学习中的支持向量机等。
  • 中值滤波器
    中值滤波器(Median filtering) 如其名所隐含的,它将一个像素的值用该像素邻域中强度值的中间值来取代(计算中间值的过程中,也会将该像素的原始值包含),中值滤波器在处理盐和胡椒噪声上能提供绝佳的噪声降低效能。
  • 伪中值滤波器
    为了改进中值滤波器的计算速率,伪中值滤波器(Pseudo-median filtering) 以近似的方法算出中间值。

4. 图像去噪算法的分类

  • 空间域滤波
    空域滤波是在原图像上直接进行数据运算,对像素的灰度值进行处理。常见的空间域图像去噪算法有邻域平均法、中值滤波、低通滤波等。

  • 变换域滤波
    图像变换域去噪方法是对图像进行某种变换,将图像从空间域转换到变换域,再对变换域中的变换系数进行处理,再进行反变换将图像从变换域转换到空间域来达到去除图像嗓声的目的。将图像从空间域转换到变换域的变换方法很多,如傅立叶变换、沃尔什-哈达玛变换、余弦变换、K-L变换以及小波变换等。而傅立叶变换和小波变换则是常见的用于图像去噪的变换方法。

  • 偏微分方程
    偏微分方程是近年来兴起的一种图像处理方法,主要针对低层图像处理并取得了很好的效果。偏微分方程具有各向异性的特点,应用在图像去噪中,可以在去除噪声的同时,很好的保持边缘。偏微分方程的应用主要可以分为两类:一种是基本的迭代格式,通过随时间变化的更新,使得图像向所要得到的效果逐渐逼近,这种算法的代表为Perona和Malik的方程[27],以及对其改进后的后续工作。该方法在确定扩散系数时有很大的选择空间,在前向扩散的同时具有后向扩散的功能,所以,具有平滑图像和将边缘尖锐化的能力。偏微分方程在低噪声密度的图像处理中取得了较好的效果,但是在处理高噪声密度图像时去噪效果不好,而且处理时间明显高出许多。

  • 变分法
    另一种利用数学进行图像去噪方法是基于变分法的思想,确定图像的能量函数,通过对能量函数的最小化工作,使得图像达到平滑状态,现在得到广泛应用的全变分TV模型就是这一类。这类方法的关键是找到合适的能量方程,保证演化的稳定性,获得理想的结果。-形 态学噪声滤除器
    将开与闭结合可用来滤除噪声,首先对有噪声图像进行开运算,可选择结构要素矩阵比噪声尺寸大,因而开运算的结果是将背景噪声去除;再对前一步得到的图像进行闭运算,将图像上的噪声去掉。据此可知,此方法适用的图像类型是图像中的对象尺寸都比较大,且没有微小细节,对这类图像除噪效果会较好。
    参考博文:https://blog.csdn.net/Arcsinsin/article/details/12260373

5. 图像去噪算法

根据图像的特征建立起相应的概率密度函数。在对数字图像进行处理的过程中,一般需要以概率密度函数作为根本的依据来对噪声的统计特性进行表述,建立起对应的数据模型。

5.1 基于空间域下的滤波器

关于空间域下的滤波器在我的 图像处理(10)–空间滤波 一文中有详细的介绍。这个很重要。

5.2 基于小波域的小波阈值去噪

小波萎缩法是目前研究最为广泛的方法,小波萎缩法又分成如下两类:第1类是阈值萎缩,由于阈值萎缩主要基于如下事实,即比较大的小波系数一般都是以实际信号为主,而比较小的系数则很大程度是噪声。因此可通过设定合适的阈值,首先将小于闽值的系数置零,而保留大于闭值的小波系数;然后经过阈值函数映射得到估计系数;最后对估计系数进行逆变换,就可以实现去噪和重建;而另外一种萎缩方法则不同,它是通过判断系数被噪声污染的程度,并为这种程度引入各种度量方法(例如概率和隶属度等),进而确定萎缩的比例,所以这种萎缩方法又被称为比例萎缩。阈值萎缩方法中的两个基本要素是阈值和阈值函数。

阈值的选择:
阈值的确定在阈值萎缩中是最关键的。目前使用的阈值可以分成全局阈值和局部适应阈值两类。其中,全局阈值对各层所有的小波系数或同一层内的小波系数都是统一的;而局部适应阈值是根据当前系数周围的局部情况来确定阈值。目前提出的全局阈值主要有以下几种:

(1),Donoho和Johastone统一阈值(简称DJ阈值):

其中σ为噪声标准方差,N为信号的尺寸或长度。

image

(2),基于零均值正态分布的置信区间阈值:

image

(3),Bayes Shrink阈值和Map Shrink阈值。在小波系数服从广义高斯分布的假设下,Chang等人得出了阈值:

image

其中,(R为噪声标准方差,RB为广义高斯分布的标准方差值)。

(4),最小最大化阈值:这是Donoho和John Stone在最小最大化意义下得出的阈值与上边的阈值不同,它是依赖于信号的,而且没有显式表达式,在求取时需要预先知道原信号。

(5),理想阈值:理想阈值是在均方差准则下的最优阈值,同最大最小化阈值一样,也没有显式的表达式,并且这个阈值的计算通常也需先知道信号本身。

阈值函数:

Bruce和Gao。提出了一种半软阈值函数:

image

该方法通过选择合适的阈值T1和12,可以在软阈值方法和硬阈值方法之间达到很好的折中。另外,zhang等人为了对SIJRE误差准则函数进行基于梯度的优化搜索,提出了另外一种阈值函数,这种阈值函数同上边闭值函数所不同的是它拥有更高的导数阶,故其重建图像更为平滑,但该文作者将去噪效果的提高归功于搜索方法,其实,Donoh。和 Johnstone提出的在当前小波系数集合中,搜索最优阈值的方法,对于当前已经是优的了,由此可见,该去噪效果的提高则应归功于阈值函数的选取。

5.3 基于PDE的图像去噪

目前,基于PDE的图像处理方法的研究,也是图像去噪的研究热点方向,并且己经取得了一定的理论和实际应用方面的成它的去噪过程为通过建立噪声图像为某非线性PDE的初始条件,然后求解这个PDE,得到在不同时刻的解,即为滤波结果。Perona和Malik提出了基于PDE的非线性扩散滤波方法(以下简称P-M),各向异性的去噪模型根据图像的梯度值决定扩散的速度,使之能兼顾噪声消除和边缘保持两方面的要求。

以P-M模型为代表的这类方法己经在图像增强、图像分割和边缘检测等领域得到了广泛的应用,取得了很好的效果。

P-M是一种非线性的各向异性方法,目的是为了克服线性滤波方法存在的模糊边缘和边缘位置移动的缺点。基本思想是:图像特征强的地方减少扩散系数,图像特征弱的地方增强扩散系数。方程如下:

image

其中u(x,y,t)是随时间变化的图像,image是梯度的模,image扩散系数函数用于控制扩散速度。理想的扩散系数应当使各向异性扩散在灰度变化平缓的区域快速进行,而在灰度变化急剧的位置(即图像特征处)低速扩散乃至不扩散函数,所以,imag应具有如下性质:

image

基于以上的两个性质,P-M提出了如下扩散系数函数:

image

其中k为边缘阈值,用来判断边缘区域和平坦区域。引入通量函数,主要是为了阐明阈值k在扩散操作中的作用,其函数定义如下:

image

尽管P-M方程在抑制噪声与保留图像重要特征方面取得了一定的效果,但却表现出病态且不稳定。Catt等人对该方程进行了改进,他们先用高斯核同图像作卷积,然后取其梯度模作图像边缘信息的估计。文献提出用优化的对称指数滤波器对图像作光滑,然后取其梯度模作图像边缘信息的估计。这两种估计方法的基本思想是降低噪声的干扰,更加真实地提取图像的边缘特征信息,以便利用边缘信息更好地控制P-M方程的扩散行为。

5.4 全变分(TV)图像去噪

TV方法是由Rudin Osher and Fatemi提出,它基于变分法的思想,确定图像的能量函数,通过对图像能量函数最小化达到平滑去噪的目的。是现在比较流行的图像复原方法。图像的能量函数方程为:

image

在文献[2]中给出的全变分去噪能量泛函为:

image

为了使得能量函数最小,其欧拉-拉格朗日方程为:

image

其中,梯度算子:

image

正则项:

image

用来减少平坦区域的退化。将整体左边转换成图像中任意像素点中的局部坐标系后,方程可以分解成边缘方向和边缘正交的两个方向,分解后个方向的系数控制着该方向的扩散强度。扩散方向实际上是一个分线性的各向异性的扩散方程,其扩散算子仅沿图像梯度的正交方向扩散,扩散系数为1/|▽μ|,而朝着梯度方向无扩散。这样可以通过图像的梯度来判断边缘位置,使得边缘扩散系数最小,从而降低对边缘的模糊程度,但是也由于边缘的扩散系数小,噪声得不到很好的抑制,而且当|▽μ|>λ的时候,势能函数是非凸的,使得边缘处处理表现不稳定。所以,如何确定扩散参数的值是一个问题。

参考文章:https://blog.csdn.net/Arcsinsin/article/details/12260373

在空间域上的各种滤波器在OpenCV中均有相应的实现方式,例如:
OpenCV(4)–HPF高通滤波器
OpenCV(13)–图片模糊处理(平滑)
等等

图像处理系列笔记: https://blog.csdn.net/qq_33208851/article/details/95335809
关于我的OpenCV文章

图像常见噪声类型

阅读数 14667