在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
工作之余,脑海中突然蹦出“图像的卷积操作怎么实现呢?”,然后仔细考虑了以下实现细节,并记录下来,以备日后查看。 为了便于叙述和验证程序的有效性,这里贴出一张原图(图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 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论