卷积操作的matlab实现

本文详细介绍了如何使用MATLAB实现图像的卷积操作,并通过一个具体的例子——利用均值核对图像进行卷积来说明其过程。文中给出了完整的MATLAB代码实现及卷积前后图像效果对比。

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

工作之余,脑海中突然蹦出“图像的卷积操作怎么实现呢?”,然后仔细考虑了以下实现细节,并记录下来,以备日后查看。

为了便于叙述和验证程序的有效性,这里贴出一张原图(图1)和它相应地经过均值核卷积以后的效果图(图2)。

              

                                          图1. castle原始图片                               图2. castle经过均值核卷积后的结果

 

matlab代码:

function conv_img = conv2_op(img,filter,padding,stride)

% convolution for 3D image

%         img : rgb or gray image, pixel value scaled in [0,1].

%        filter : convolution kernenl.

%  padding : padding size.

%      stride : filter move step size.

[h,w,c] = size(img);

ker_sz  = size(filter);

Size = floor( ([h,w]-size(filter)+2*padding)/stride )+1;

padding_img = zeros(h+2*padding,w+2*padding,c);

padding_img(padding+1:end-padding,padding+1:end-padding,:) = img;

conv_img = zeros([Size,c]);

% deal with filter

if c == 3    filter = repmat(filter,[1,1,3]);   end

row_idx = 1:stride:size(padding_img,1);

col_idx = 1:stride:size(padding_img,2);

% 主要思路:conv_img每个位置(row,col)的值,要在padding_img上找到相应的被卷积块,然后和filter进行卷积。

for row = 1:Size(1)

    up    = row_idx(row);

    down  = up+ker_sz(2)-1;

    for col = 1:Size(2)

        left  = col_idx(col);

        right = left+ker_sz(1)-1;

        conv_img(row,col,:) = sum(reshape(padding_img(up:down,left:right,:).*filter,prod(ker_sz),[]),1);

    end

end

end

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ReLuJie

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

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

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

打赏作者

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

抵扣说明:

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

余额充值