Matlab中值滤波与平滑滤波

实现原理

1.根据卷积核大小对图像进行全零填充
2.根据填充类型定义卷积核
3.从图像三维矩阵抽取矩阵,进行卷积
4.输出处理后的图像

function [img] = img_filter(img,type,scale) 
    if mod(scale,2)~= 0
        info = size(img);
        %图像全零填充
        pad_img = zeros(scale-1+info(1),scale-1+info(2),info(3));
        pad_img((scale-1)/2 +1:(scale-1)/2+info(1),(scale-1)/2 +1:(scale-1)/2+info(2),:) = img;   
        
       %滤波类型
        if strcmp(type,'cross');
            kernel = zeros(scale,scale,3);
            kernel((scale-1)/2+1,:,:) = 1;
            kernel(:,(scale-1)/2+1,:) = 1;
            kernel_info = size(kernel);
            for r = (scale-1)/2 +1:(scale-1)/2+info(1)
                for l = (scale-1)/2 +1:(scale-1)/2+info(2)          
                    extract_matrix = pad_img(r-(scale-1)/2:r+(scale-1)/2,l-(scale-1)/2:l+(scale-1)/2,:);
                    B= sort(reshape(extract_matrix .* kernel,[],3));            
                    img(r-(scale-1)/2,l-(scale-1)/2 ,:) =median(B(scale^2-2*scale+2:end,:));  
                end
            end
        else strcmp(type,'average');
            kernel = ones(scale,scale,info(3));
            kernel_info = size(kernel);
            %遍历滤波 找块,卷积,求值
            for r = (scale-1)/2 +1:(scale-1)/2+info(1)
                for l = (scale-1)/2 +1:(scale-1)/2+info(2)          
                    extract_matrix = pad_img(r-(scale-1)/2:r+(scale-1)/2,l-(scale-1)/2:l+(scale-1)/2,:);
                    img(r-(scale-1)/2,l-(scale-1)/2 ,:) = sum(sum(extract_matrix .* kernel,1),2)/(kernel_info (1)*kernel_info(2));                     
                end
            end
        end
    end
end

使用方法

img_filter(img , type, scale):
img: 三维矩阵。 输入的待处理图像,大小无要求,要求必须是三通道图像,不识别灰度图。
type:字符串。 滤波类型,可输入’cross’ 调用十字中值滤波 或 ‘average’ 调用均值滤波。
scale:整型。 滤波核大小, 必须是单数,如3,代表3×3的卷积核。

举例:

close all;clear all;clc
load('dip_pic.mat');
cross = img_filter(test,'cross',5);
average = img_filter(test,'average',5);
subplot(2,2,1);imshow(rgb);title('原图')
subplot(2,2,2);imshow(test);title('噪声图')
subplot(2,2,3);imshow(cross);title('十字滤波')
subplot(2,2,4);imshow(average);title('均值滤波')

效果展示对椒盐噪声图片 5×5卷积核处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹栩珩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值