最近在看cnn做手寫數字識別,其中cnn中convolution在影象處理中就涉及了矩陣卷積。因為博主有了奧本海姆《訊號與系統》中一維卷積的基礎,這裡就模擬的推廣一下矩陣卷積(二維,高維類似)。
卷積步驟:
1. 考慮到卷積的交換律,可以選擇較方便矩陣(一般選較小)作為卷積核。對此矩陣進行繞中心的180度旋轉,如[1
420]
變換成[0
241]
; 2. 將旋轉過的卷積核左下角的元素與待卷積矩陣的右上角元素對齊(重疊),沒有重疊元素處補零,重疊處相乘,乘積和即為結果矩陣的a1
,1;
3. 依次左移,求結果矩陣第一行元素,直到兩矩陣無重疊為止;
4. 依次下移,求結果矩陣第一列元素,直到兩矩陣無重疊為止;
5. 其餘各處元素類似可求的;
這裡matlab還提供了其他幾種用法:
% c = convn(a, b, 'shape') controls the size of the answer c:
% 'full' - (default) returns the full n-d convolution
% 'same' - returns the central part of the convolution that
% is the same size as a.
% 'valid' - returns only the part of the result that can be
% computed without assuming zero-padded arrays.
% size(c,k) = max([nak-max(0,nbk-1)],0).
其中』valid』就可以直接用在cnn的影象處理中。
example:
>> a = [1,2;4,0]
a = 1 2
4 0
>> b = [1,2;3,4]
b = 1 2
3 4
>> conv2(a,b)
ans =
1 4 4
7 18 8
12 16 0
%conv2是專門用於二維的卷積函式,convn可用於高維;
matlab函式 convn多維卷積
簡單的卷積就不說了,向量卷積用此函式與用conv效果相同,矩陣卷積用此函式與conv2的二維卷積效果相同。此函式的方便之處在於支援三維卷積 其實相對於conv2來說就是省了乙個for迴圈。對於三維卷積,比如a矩陣大小為 2,3,3 b矩陣大小為 2,3 計算a與b的卷積結果就是過程就是對於a矩陣的第...
Matlab中操作矩陣常用函式
函式 作用zeros 建立0矩陣 ones 建立全部為1的矩陣 rand 產生隨機矩陣 數列 true 邏輯數列1 false 邏輯數列0 eye對角矩陣 diag 對角矩陣 blkdiag 模組的對角矩陣 cat矩陣連線 vertcat 矩陣豎直連線 horzcat 矩陣水平連線 repelem ...
MATLAB中的卷積運算
imfilter 線性空間濾波 conv2 二位卷積 conv2 a,b,same 將b作為模版在a上平移,最後的矩陣大小與a相同 例如 a 1 2 3 4 5 6 7 8 9 b 1 1 1 1 1 1 1 1 1 conv2 a,b,same 12 21 16 27 45 33 24 39 28...