• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

卷积操作的matlab实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

为了便于叙述和验证程序的有效性,这里贴出一张原图(图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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
基于matlab的数字图像处理GUI设计发布时间:2022-07-18
下一篇:
MATLAB sort函数用法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap