目标
本篇主要介绍了以下几点:
1.了解图像噪声,何为图像中的噪声。
2.何为加性均值高斯噪声。加性为什么意思?均值又表示了什么?高斯噪声有何特点?
3.如何产生加性零均值高斯噪声。如何产生正太分布?Box-Muller变换又是什么?
4.如何编程实现?
噪声
实际的图像经常会受到一些随机的影响而退化,可以理解为原图受到干扰和污染。通常就就把这个退化成为噪声(noise)。在我们采集、传输或者处理的过程中都有可能产生噪声,因此噪声的出现是多方面的原因。
在信号处理中我们用概率特征来描述噪声,即噪声出现的概率呈现为什么样子就为什么样子的噪声。就比如本篇的主角高斯噪声,其在信号中出现、分布的概率成高斯分布(正态分布)。也许你会疑问噪声概率分布应是无规律的,现实中也确实噪声严格上是不规律的分布,但是为了简化计算,人们常将噪声理想化,这种理想型的概率分布模型来描述的噪声称为白噪声。白噪声在信号中是典型的,其特点是具有常量功率谱。而高斯噪声属于白噪声的一个特例。
加性零均值高斯噪声
- 加性
加性噪声的表示为以下表达式
f(x,y)=g(x,y)+v(x,y)
g为原图像信号,v为噪声信号,两者关系是独立的,这表示原图信号如何变化与噪声无光,噪声不依赖于图像信号,这种独立与信号的噪声便称为加性噪(additive noise)。 - 零均值
均值为零,即噪声为高斯分布,高斯分公式中的均值为0,即高斯分布的对称轴为0。
产生原理步骤

代码实现
close all;
clear all;
clc;
I=imread('C:\Users\luoqi\Desktop\图片\影院\file.jpg');
[m,n,d]=size(I);
I_od=I;
if ndims(I)==3 %ndims 计算矩阵的维度
I=rgb2gray(I);
end
%% 计算图像的熵
h=zeros(256,1);
for i=1:m
for j=1:n
value=I(i,j);
h(value+1,1)=h(value+1,1)+1;
end
end
h=h./sum(h);%每个像素点的概率
figure
bar(h);%图像的亮度直方图
axis([0,255,0,max(h)*1.1]);
Entropy=0;
for i=1:255
if h(i)~=0
Entropy=Entropy-(h(i)*log2(h(i)));
end
end
disp(Entropy);
%% 加入高斯噪声
J=zeros(m,n,d);
sigma=10*rand(1);
for i=1:m
for j=1:2:n
t1=rand(1);
t2=rand(1);
z1=sigma*cos(2*pi*t1)*sqrt(-2*log(t2));
z2=sigma*sin(2*pi*t1)*sqrt(-2*log(t2));
for k=1:d
J(i,j,k)=I_od(i,j,k)+z1;
if j+1<=n
J(i,j+1,k)=I_od(i,j+1,k)+z2;
end
end
end
end
for i=1:m
for j=1:n
for k=1:d
if J(i,j,k)>255
J(i,j,k)=255;
elseif J(i,j,k)<0
J(i,j,k)=0;
end
end
end
end
J=uint8(J);
figure
subplot(121),imshow(I_od)
subplot(122),imshow(J);
%% 计算信噪比
V=J-I_od;%噪声矩阵
E=sum(sum(sum(V.^2)));
F=sum(sum(sum(J.^2)));
SNR=F/E;
SNR10dB=10*log10(SNR);