数字图像处理中imfilter函数卷积算法代码(matlab)

该博客介绍了一个用于处理灰度图像的自定义卷积函数my_imfilter,它通过二维卷积实现图像的平滑。博客内容包括填充0边的矩阵处理、卷积操作以及结果的去边界处理。示例中使用了高斯核进行卷积,并展示了原始图像与平滑后的图像对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function result = my_imfilter(I, h)
% 此函数只能处理灰度图像
[m n] = size(I);
i_add = zeros(m+2,n+2);
[m_add n_add] = size(i_add);
% 此处i_add为填充0边后的矩阵图像
i_add(2:m+1,2:n+1) = I(1:m,1:n);
% 在对i_add进行卷积时,不能让卷积后的结果影响未卷积的,所以创建个i_add_copy来作为不变的图像
i_add_copy = i_add;

% size(h,1)是获取矩阵h的行数
% 又因为此矩阵为正方形,所以行数与列数相等
ker = size(h,1);
ker_radius = (ker-1)*0.5;
for j = 1:(m_add-ker+1)
   for i = 1:(n_add-ker+1)
       %(j+ker_radius, i+ker_radius) 中心坐标
      i_add(j+ker_radius, i+ker_radius) = my_convo(j, i, ker, i_add_copy,h); 
   end
end

i_add_sub = zeros(m,n);
%0边框去掉
i_add_sub(1:m,1:n) = i_add(2:m+1,2:n+1);
result = uint8(i_add_sub);
end

function J = my_convo(j,i,ker,i_add_copy,h)
sum = 0;
[m n] = size(h);
h_copy = zeros(m,n);
h_copy(1:ker, 1:ker) = h(1:ker, 1:ker).*i_add_copy(j:j+ker-1, i:i+ker-1);

for y = 1:ker
    for x = 1:ker
        sum = sum+h_copy(y,x);
    end
end
J = sum;
end


clear, clc, close all;
% 卷积模版大小=6*sigma+1最为合适
I = imread('3.jpg');
I = rgb2gray(I);
h = [1 2 1;2 4 2;1 2 1]./16;
i = my_imfilter(I,h);
figure;
subplot(121),imshow(I),title('original image');
subplot(122),imshow(i),title('gaussian smooth1');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值