2012-12-04 28 views
6

我有一个N×M矩阵m,如:让所有的子阵

1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 

我想大小P的所有子矩阵×Q(P,Q是奇)W/O采用了-循环。

结果s应该是P×Q×((N-P + 1)·(M-Q + 1))矩阵。

E.g.如果P = Q = 3:

s(:,:,1) = [1 2 3; 5 6 7; 9 10 11] 
s(:,:,2) = [2 3 4; 6 7 8; 10 11 12] 
s(:,:,3) = [5 6 7; 9 10 11; 13 14 15] 
s(:,:,4) = [6 7 8; 10 11 12; 14 15 16] 
+0

为什么会有倍数?例如。 '5 6 7'出现两次。 – Jonas

+0

@Jonas对不起,我的例子很混乱。现在更容易理解吗? – kay

+0

不,我还是不太明白:为什么你想要重复条目?只是为了让你可以填满你的阵列?另外,你看看我的解决方案吗? – Jonas

回答

6

im2col可以帮助你在这里:

m = 
    1  2  3  4 
    5  6  7  8 
    9 10 11 12 
    13 14 15 16 

>> P = 3; Q = 3; 
>> columnized = im2col(m,[P Q],'sliding'); 
>> nMatrices = size(columnized,2); 
>> s = reshape(columnized, [P Q nMatrices]) 

s(:,:,1) = 
    1  2  3 
    5  6  7 
    9 10 11 
s(:,:,2) = 
    5  6  7 
    9 10 11 
    13 14 15 
s(:,:,3) = 
    2  3  4 
    6  7  8 
    10 11 12 
s(:,:,4) = 
    6  7  8 
    10 11 12 
    14 15 16 

im2col'sliding'选项查找所有重叠子矩阵,并返回各自为(P·Q) - 元素列向量在columnized。 (P·Q)×((N-P + 1)·(M-Q + 1))矩阵变换为P×Q×((N-P + 1)·( M-Q + 1))一个。