MATLAB添加噪声

    xiaoxiao2022-07-07  185

    首先是用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
    最新回复(0)