首先是用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)<d/2)
output(i,j)=0;
end
end
end
imshow(output);
也可以分两步分别生成椒噪声和盐噪声,但是这个总的密度就没有那么好控制
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
版权声明:本文为qq_38843532原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。