数字图像处理实验之平滑线性滤波器

本实验中,采用的均是盒状滤波器,即滤波器值全为1。代码如下:
主函数:

% 输入图像
img_1 = imread('Fig0333(a)(test_pattern_blurring_orig).tif');
% 获取尺寸
[r, c] = size(img_1);
%模板尺寸
m_s =[3, 5, 9, 15, 35];

%显示原图
subplot(231), imshow(img_1);
% 获取模板个数
[~, len] = size(m_s);

% 对每个模板都进行处理
for i = 1 : len
    % 扩展图像
    img_1s = m_10_Smooth_create_img(img_1, r, c, m_s(i) - 1);
    % 平滑处理
    img_2 = m_10_Smooth_process_img(img_1s, r, c, m_s(i));
    % 显示结果
    subplot(2, 3, i + 1), imshow(img_2);
end

m_10_Smooth_create_img.m 代码如下:

function img_s = m_10_Smooth_create_img(img, r, c, add)
% 该函数用于生成指定长宽和指定填充边大小的全零图像

% 生成扩展图像
img_s = zeros(r + add, c + add);
half = add / 2;
% 将原图复制到扩展图像
img_s(half + 1 : r + half, half + 1 : c + half) = img;
end

m_10_Smooth_process_img.m 代码如下:

function img_s = m_10_Smooth_process_img(img, r, c, m)
% 该函数用于用指定大小的均值模板平滑指定图像

% 新图像,用于赋值平滑后的结果
img_s = zeros(r, c);

% 逐个像素处理
for x = 1 : r
    for y = 1 : c
        % 滤波器范围内所有像素点之和
        sum = 0;
        for i = 1:m
            for j = 1:m
                sum = sum + img(x + i - 1, y + j - 1);
            end
        end
        % 除以系数
        img_s(x, y) = sum / (m * m);
    end
end

% 返回新图像
img_s = im2uint8(mat2gray(img_s));
end

结果如下:
实验结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值