工作之餘,腦海中突然蹦出「影象的卷積操作怎麼實現呢?」,然後仔細考慮了以下實現細節,並記錄下來,以備日後檢視。
為了便於敘述和驗證程式的有效性,這裡貼出一張原圖(圖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度 滑...