Matlab实现图像添加椒盐噪声及中值滤波/均值滤波去除

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里自带的函数进行实现。

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('中值滤波图像');

实验结果如下。
在这里插入图片描述

Matlab中,可以使用以下步骤来添加椒盐噪声灰度图像: 1. 首先,读取和显示灰度图像。可以使用imread函数来读取图像文件,imshow函数来显示图像。 2. 创建一个与原始图像大小相同的零矩阵,作为添加噪声后的图像。 3. 使用rand函数生成一个与原始图像大小相同的随机矩阵,该矩阵的元素在[0,1]范围内随机生成。 4. 使用噪声密度参数来控制添加椒盐噪声的程度。根据噪声密度参数生成一个随机矩阵,将元素小于噪声密度的位置置为0,将元素大于1减去噪声密度。 5. 将原始图像矩阵按照噪声密度矩阵的位置进行替换。如果噪声密度矩阵的元素值小于0.5,将原始图像矩阵的对应位置置为0;如果噪声密度矩阵的元素值大于0.5,将原始图像矩阵的对应位置置为255。 6. 可以使用imshow函数来显示添加椒盐噪声后的图像。 下面是一个示例代码: ```matlab % 读取和显示灰度图像 image = imread('lena.png'); imshow(image); % 创建零矩阵,作为添加噪声后的图像 noisy_image = zeros(size(image)); % 生成随机矩阵 rand_matrix = rand(size(image)); % 噪声密度参数 noise_density = 0.05; % 添加椒盐噪声 noisy_image(rand_matrix < noise_density/2) = 0; noisy_image(rand_matrix > 1 - noise_density/2) = 255; % 显示添加噪声后的图像 figure; imshow(uint8(noisy_image)); ``` 这样,就可以在Matlab中将椒盐噪声添加灰度图像上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值