Matlab实现图像添加椒盐噪声及中值滤波/均值滤波去除
添加椒盐噪声
椒盐噪声(pepper&salt noise)由胡椒噪声(pepper noise)和盐噪声(salt noise)组成。一般因图像传感器,传输信道等处产生,由黑白相间的亮暗点噪声组成。
黑点可以看出胡椒,白点可以看成盐。
下面为使用matlab自带的函数对图像添加椒盐噪声的代码和添加后的结果。
I = imread('elaine.512.tiff');%读取图片
I_PepperSalt=imnoise(I,'salt & pepper');% 添加椒盐噪声
均值滤波
均值滤波的原理是,滤波后的像素的值为其本身及周围9个像素值的平均值。如下图所示。
matlab自带实现均值滤波的函数,在这里,我们先自己实现一下。
clc;
clear;
I = imread('elaine.512.tiff'); %读取图片
I_PepperSalt=imnoise(I,'salt & pepper'); % 添加椒盐噪声
Mat = ones(3,3)/9; % 3×3均值滤波矩阵
[m,n] = size(I_PepperSalt); % 读取图像长和宽
I1 = double(I_PepperSalt); %将图像转换成double类型
I2 = I1;
for i=2:m-1
for j=2:n-1 %从去除边缘的像素开始滤波
Mat2 = I1(i-1:i+1,j-1:j+1).*Mat;
s = sum(Mat2(:));
I2(i,j) = s;
end
end
I3 = uint8(I2);
%%图像对比
figure;
subplot(131)
imshow(I);title('原始图像');
subplot(132)
imshow(I_PepperSalt);title('椒盐噪声图像');
subplot(133)
imshow(I3);title('均值滤波图像');
中值滤波
中值滤波则是将选取的3x3的像素块里的像素值按从小到大重新排列,选取中间的像素作为滤波后图像的像素。
同样的,matlab自带实现中值滤波的函数,在这里,我们首先也先自己实现一下。
clc;
clear;
I = imread('elaine.512.tiff'); %读取图片
I_PepperSalt=imnoise(I,'salt & pepper'); % 添加椒盐噪声
[m,n] = size(I_PepperSalt); % 读取图像长和宽
I1 = double(I_PepperSalt); %将图像转换成double类型
I2 = I1;
for i=2:m-1
for j=2:n-1 %从去除边缘的像素开始滤波
Mat = I1(i-1:i+1,j-1:j+1);
Mat2 = Mat(:);
s=sort(Mat2); %对像素进行排序
I2(i,j) = s(floor(9/2)+1); %选取中值
end
end
I3 = uint8(I2);
%%图像对比
figure;
subplot(131)
imshow(I);title('原始图像');
subplot(132)
imshow(I_PepperSalt);title('椒盐噪声图像');
subplot(133)
imshow(I3);title('中值滤波图像');
完整代码
在这里,我们直接使用matlab里自带的函数进行实现。文章来源:https://www.toymoban.com/news/detail-509243.html
I = imread('elaine.512.tiff');
I2 = imnoise(I,'salt & pepper'); % 加入椒盐噪声
H = fspecial('average',3);
I3 = uint8(filter2(H, I2));
I4 = medfilt2(I2,[3,3]);
%%
figure;
subplot(221)
imshow(I);title('原始图像');
subplot(222)
imshow(I2);title('椒盐噪声图像');
subplot(223)
imshow(I3);title('均值滤波图像');
subplot(224)
imshow(I4);title('中值滤波图像');
实验结果如下。
文章来源地址https://www.toymoban.com/news/detail-509243.html
到了这里,关于Matlab实现图像添加椒盐噪声及中值滤波/均值滤波去除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!