MATLAB添加噪声

首先是用MATLAB自带的imnoise函数添加噪声。

img= im2double(imread('D:\Matlab2018a\work\img.png'));%改为你要读入图片的路径;im2double作归一化处理
sigma=25;%添加噪声的标准差
imgnoise=imnoise(img,'gaussian',0,(sigma/255)^2); %添加均值为0,标准差为sigma高斯噪声
imshow(imgnoise);
imwrite(imgnoise,'imgnoise.png');%输出噪声图到当前文件夹

由于matlab的imnoise函数会将输出归一化,所以在读入图片的时候就先用im2double把图片归一化了,免得数据类型不一样。
将上面添加噪声那一句改为如下语句则添加其它种类的噪声

imgnoise=imnoise(img,'salt & pepper',0.05); %添加密度为5%的椒盐噪声
imgnoise=imnoise(img,'speckle',(sigma/255)^2); %添加均值为0,标准差为sigma乘性噪声,这个是用服从均匀分布的随机噪声乘以图像img,再加到img上。
imgnoise=imnoise(img,'poisson');%添加泊松噪声

下面我们用自己写的代码来添加噪声。

img=img+(sigma/255)*randn(size(img));%给img添加标准差为sigma的高斯噪声
img=img+img.*((sigma/255)*rand(size(img)));%给img添加标准差为sigma的乘性噪声,也是均匀分布

对于椒盐噪声,先用rand()生成均匀分布的随机噪声,然后根据你需要的椒盐噪声密度,作阈值处理,反正就是这种思想,实现的方法有很多,我这里列一种。

img=im2double(imread('8.png'));%改为你要读入图片的路径
imgnoise =(rand(size(img))); %生成随机数组
d = 0.1;  %需要的椒盐噪声密度
output=img; 
[width,height]=size(img);

for i=1:width
    for j=1:height
        if(imgnoise(i,j)>(1-d/2))
            output(i,j)=1;
        end
        if(imgnoise(i,j)

也可以分两步分别生成椒噪声和盐噪声,但是这个总的密度就没有那么好控制

img=im2double(imread('8.png'));%改为你要读入图片的路径
d = 0.1;  %需要的胡椒或盐粒噪声密度
output=img; 
[width,height]=size(img);
a1=rand(width,height)< d^0.5;
a2=rand(width,height)< d^0.5;
output(a1&a2) = 1; %生成盐噪声
b1=rand(width,height)< d^0.5;
b2=rand(width,height)< d^0.5;
output(b1&b2) = 0; %生成胡椒噪声
imshow(output);
%椒盐噪声的密度就是d+d-d*d

你可能感兴趣的:(MATLAB)