卷積操作的matlab實現

2021-08-21 16:22:52 字數 1509 閱讀 5030

工作之餘,腦海中突然蹦出「影象的卷積操作怎麼實現呢?」,然後仔細考慮了以下實現細節,並記錄下來,以備日後檢視。

為了便於敘述和驗證程式的有效性,這裡貼出一張原圖(圖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);

endendend

Matlab的卷積編碼實現

最近在做乙個scfde波形的c和向量實現,指導老師給了幾份matlab 要我把對應的c語言和向量寫出來 並行運算指令操作 簡單的 一下就寫完了,有些寫的還是有點煩躁,特別是卷積編碼的解碼,今天我們先不談解碼,先談下編碼,這個還是寫的比較流暢的。卷積編碼器,聽著就不好理解,沒事,我來分析一波,首先我們...

matlab卷積動畫實現

為了完成學校布置的卷積動畫任務,匆匆學了下matlab的相關操作,寫的 也是很爛,最後實現了相關功能,分享一下。clc subplot 2 1,2 t1 0 0.1 同時輸入兩個點,兩點一線 m1 0.5 t1 p plot t1,m1,b markersize 5 axis 0501.5 grid...

matlab的二維卷積操作

matlab的conv2函式實現步驟 conv2 a,b 其中,矩陣a和b的尺寸分別為ma na即mb nb 對矩陣a補零,第一行之前和最後一行之後都補mb 1行,第一列之前和最後一列之後都補nb 1列 注意conv2不支援其他的邊界補充選項,函式內部對輸入總是補零 將卷積核繞其中心旋轉180度 滑...