2012-12-04 6 views
6

I M matrisinin m gibi X bir N var: bir kullanan w/osoktuIar submatrices

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

I Q x boyutu P her submatrices almak isteyen (P, Q, tek olan) -loop.

sonuç s ((N-P + 1) · (M-Q + 1)) matris x Q x P olmalıdır.

E.g.

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

Neden orada katları nelerdir? Örneğin. '5 6 7' iki kez görünür. – Jonas

+0

@Jonas üzgünüm, benim örneğim kafa karıştırıcıydı. Şimdi anlamak daha kolay mı? – kay

+0

Hayır, hala tam olarak anlamadım: Neden yinelenen girişleri almak istiyorsunuz? Sadece dizini doldurabilmen için? Ayrıca, çözümüme bir göz attın mı? – Jonas

cevap

6

im2col burada size yardımcı olabilir: 'sliding' seçeneğiyle

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 tüm örtüşen submatrices bulur ve (P · Q) olarak her döndürür

-eleman p = Q = 3 ise columnized'daki sütun vektörü. S × x, bir P matrisler geri bunları açmak için, reshape Bu (p · S) x ((N-p + 1) · (M-Q + 1)) matris ((N-p + 1) · (M-Q + 1)) bir.