图像处理(2)- 空间滤波

图像的空间滤波

空间域是指图像平面本身、包含图像像素的平面。空间域图像处理是指直接对图像中的像素进行操作。

线性空间滤波器也称为模板、卷积模板、卷积核。
在这里插入图片描述

均值滤波

均值滤波器,也称为线性平滑滤波器,其输出是包含在滤波器模板邻域内的像素灰度的平均值。可用于(1)降低噪声;(2)伪轮廓效应的平滑处理;(3)去除图像中的不相关细节。
在这里插入图片描述

中值滤波

中值滤波器对处理脉冲噪声(椒盐噪声)非常有效,但是对一些细节多,特别是点、线、尖顶的图像不宜采用中值滤波。
在这里插入图片描述

MATLAB程序

MATLAB程序演示了对于含有椒盐噪声的图像,进行中值滤波和均值滤波处理。

clc
clear
close all
 
picture=imread('test.jpg');
 
% 读取原始图像的R、G、B值
picture_r=picture(:,:,1);
picture_g=picture(:,:,2);
picture_b=picture(:,:,3);
 
[M,N,C]=size(picture);
 
figure;
imshow(picture);
title('原始图像');
 
 
%% 加椒盐噪声
Noise_picture=imnoise(picture,'salt & pepper',0.1);% 噪声密度0.1
 
Noise_picture_r=Noise_picture(:,:,1);
Noise_picture_g=Noise_picture(:,:,2);
Noise_picture_b=Noise_picture(:,:,3);
 
figure;
imshow(Noise_picture);
title('加椒盐噪声');
 
 
%% 中值滤波
Mid_Filtered_picture=uint8(zeros(M,N,C));
 
pixel=zeros(1,9);
for k=1:3 % RGB三通道
    for i=1:M
        for j=1:N
            if(i>1 && i<M && j>1 && j<N) % 中间部分
                pixel(1:3) = Noise_picture(i-1:i+1, j-1, k);
                pixel(4:6) = Noise_picture(i-1:i+1, j  , k);
                pixel(7:9) = Noise_picture(i-1:i+1, j+1, k);
                pixel=sort(pixel);
                Mid_Filtered_picture(i,j,k)=pixel(5);
            elseif(i==1 && j>1 && j<N) % 第一行中间部分
                pixel(1:2) = Noise_picture(i:i+1, j-1, k);
                pixel(3:4) = Noise_picture(i:i+1, j  , k);
                pixel(5:6) = Noise_picture(i:i+1, j+1, k);
                pixel=sort(pixel(1:5));
                Mid_Filtered_picture(i,j,k)=pixel(3);
            elseif(i==M && j>1 && j<N) % 最后一行中间部分
                pixel(1:2) = Noise_picture(i-1:i, j-1, k);
                pixel(3:4) = Noise_picture(i-1:i, j  , k);
                pixel(5:6) = Noise_picture(i-1:i, j+1, k);
                pixel=sort(pixel(1:5));
                Mid_Filtered_picture(i,j,k)=pixel(3);
            elseif(j==1 && i>1 && i<M) % 第一列中间部分
                pixel(1:3) = Noise_picture(i-1:i+1, j  , k);
                pixel(4:6) = Noise_picture(i-1:i+1, j+1, k);
                pixel=sort(pixel(1:5));
                Mid_Filtered_picture(i,j,k)=pixel(3);
            elseif(j==N && i>1 && i<M) % 最后一列中间部分
                pixel(1:3) = Noise_picture(i-1:i+1, j-1, k);
                pixel(4:6) = Noise_picture(i-1:i+1, j  , k);
                pixel=sort(pixel(1:5));
                Mid_Filtered_picture(i,j,k)=pixel(3);
            elseif(i==1 && j==1) % 左上角
                pixel(1:2) = Noise_picture(i:i+1, j  , k);
                pixel(3:4) = Noise_picture(i:i+1, j+1, k);
                pixel=sort(pixel(1:4));
                Mid_Filtered_picture(i,j,k)=pixel(2);
            elseif(i==1 && j==N) % 右上角
                pixel(1:2) = Noise_picture(i:i+1, j-1, k);
                pixel(3:4) = Noise_picture(i:i+1, j  , k);
                pixel=sort(pixel(1:4));
                Mid_Filtered_picture(i,j,k)=pixel(2);
            elseif(i==M && j==N) % 右下角
                pixel(1:2) = Noise_picture(i-1:i, j-1, k);
                pixel(3:4) = Noise_picture(i-1:i, j  , k);
                pixel=sort(pixel(1:4));
                Mid_Filtered_picture(i,j,k)=pixel(2);
            elseif(i==M && j==1) % 左下角
                pixel(1:2) = Noise_picture(i-1:i, j  , k);
                pixel(3:4) = Noise_picture(i-1:i, j+1, k);
                pixel=sort(pixel(1:4));
                Mid_Filtered_picture(i,j,k)=pixel(2);
            end
        end
    end
end
 
figure;
imshow(Mid_Filtered_picture);
title('中值滤波');
 
 
%% 均值滤波
Average_Filtered_picture=uint8(zeros(M,N,C));
 
pixel=zeros(1,9);
mean_amp=0;
for k=1:3 % RGB三通道
    for i=1:M
        for j=1:N
            if(i>1 && i<M && j>1 && j<N) % 中间部分
                pixel(1:3) = Noise_picture(i-1:i+1, j-1, k);
                pixel(4:6) = Noise_picture(i-1:i+1, j  , k);
                pixel(7:9) = Noise_picture(i-1:i+1, j+1, k);
                mean_amp=mean(pixel);
                Average_Filtered_picture(i,j,k)=mean_amp;
            elseif(i==1 && j>1 && j<N) % 第一行中间部分
                pixel(1:2) = Noise_picture(i:i+1, j-1, k);
                pixel(3:4) = Noise_picture(i:i+1, j  , k);
                pixel(5:6) = Noise_picture(i:i+1, j+1, k);
                mean_amp=mean(pixel(1:5));
                Average_Filtered_picture(i,j,k)=mean_amp;
            elseif(i==M && j>1 && j<N) % 最后一行中间部分
                pixel(1:2) = Noise_picture(i-1:i, j-1, k);
                pixel(3:4) = Noise_picture(i-1:i, j  , k);
                pixel(5:6) = Noise_picture(i-1:i, j+1, k);
                mean_amp=mean(pixel(1:5));
                Average_Filtered_picture(i,j,k)=mean_amp;
            elseif(j==1 && i>1 && i<M) % 第一列中间部分
                pixel(1:3) = Noise_picture(i-1:i+1, j  , k);
                pixel(4:6) = Noise_picture(i-1:i+1, j+1, k);
                mean_amp=mean(pixel(1:5));
                Average_Filtered_picture(i,j,k)=mean_amp;
            elseif(j==N && i>1 && i<M) % 最后一列中间部分
                pixel(1:3) = Noise_picture(i-1:i+1, j-1, k);
                pixel(4:6) = Noise_picture(i-1:i+1, j  , k);
                mean_amp=mean(pixel(1:5));
                Average_Filtered_picture(i,j,k)=mean_amp;
            elseif(i==1 && j==1) % 左上角
                pixel(1:2) = Noise_picture(i:i+1, j  , k);
                pixel(3:4) = Noise_picture(i:i+1, j+1, k);
                mean_amp=mean(pixel(1:4));
                Average_Filtered_picture(i,j,k)=mean_amp;
            elseif(i==1 && j==N) % 右上角
                pixel(1:2) = Noise_picture(i:i+1, j-1, k);
                pixel(3:4) = Noise_picture(i:i+1, j  , k);
                mean_amp=mean(pixel(1:4));
                Average_Filtered_picture(i,j,k)=mean_amp;
            elseif(i==M && j==N) % 右下角
                pixel(1:2) = Noise_picture(i-1:i, j-1, k);
                pixel(3:4) = Noise_picture(i-1:i, j  , k);
                mean_amp=mean(pixel(1:4));
                Average_Filtered_picture(i,j,k)=mean_amp;
            elseif(i==M && j==1) % 左下角
                pixel(1:2) = Noise_picture(i-1:i, j  , k);
                pixel(3:4) = Noise_picture(i-1:i, j+1, k);
                mean_amp=mean(pixel(1:4));
                Average_Filtered_picture(i,j,k)=mean_amp;
            end
        end
    end
end
 
figure;
imshow(Average_Filtered_picture);
title('均值滤波');
 

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值