本实验中,采用的均是盒状滤波器,即滤波器值全为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
结果如下: