椒盐噪声
椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种以一定概率随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素,在这个概率范围之外图像保持不变。
matlab代码
%%
clear all;
image=imread('sample.jpeg');
image_new=saltpepper(image,0.1,0.1);
image_matlab=imnoise(image,'salt & pepper',0.1);
figure(1);
subplot(131);
imshow(image);
title('原始图像')
subplot(132);
imshow(image_new);
title('手写椒盐噪声')
subplot(133);
imshow(image_matlab);
title('matlab椒盐噪声')
%直接使用salt,pepper的值噪声的数量好像比matlab自带的函数要对很多,对每一个通道都进行了随机,应该是对了
%但是按照上面的,平均下来每一个通道/3,噪声比自带函数少了,随便吧
function f=saltpepper(image,salt,pepper)
[length,width,height]=size(image);
image_new=image;
salt=salt/3;pepper=pepper/3;
%这个太啰嗦了,但是要怎么对特定名字的矩阵进行操作呢??
%要是生成黑白的噪声生成一个随机概率矩阵即可
a1=unifrnd(0,1,length,width);%0-1的随机概率矩阵
a2=(a1>0)&(a1<salt);
a3=(a1>=salt)&(a1<(salt+pepper));
c1=unifrnd(0,1,length,width);%0-1的随机概率矩阵
c2=(c1>0)&(c1<salt);
c3=(c1>=salt)&(c1<(salt+pepper));
b1=unifrnd(0,1,length,width);%0-1的随机概率矩阵
b2=(b1>0)&(b1<salt);
b3=(b1>=salt)&(b1<(salt+pepper));
if height==1
image_new(a2)=0;
image_new(a3)=255;
elseif height==3
t1=image_new(:,:,1);
t1(a2)=0;
t1(a3)=255;
image_new(:,:,1)=t1;
t2=image_new(:,:,2);
t2(b2)=0;
t2(b3)=255;
image_new(:,:,2)=t2;
t3=image_new(:,:,3);
t3(c2)=0;
t3(c3)=255;
image_new(:,:,3)=t3;
end
f=image_new;
end
效果图
|