2011-04-26 79 views
2

與條件的矩陣假設我有一個10×10矩陣M總和超過在MATLAB

M=[64 36 50 87 22 45 37 23 68 88; 
    33 23 87 49 54 25 35 98 78 52; 
    12 54 76 43 24 87 54 98 45 34; 
    77 87 23 45 34 65 23 76 12 76; 
    12 34 55 44 76 98 93 23 54 67; 
    22 55 78 90 88 56 34 23 12 76; 
    99 23 67 89 34 23 12 87 45 23; 
    22 54 76 89 65 23 45 12 93 12; 
    44 56 23 88 67 14 15 67 34 12; 
    11 44 77 99 34 23 78 34 12 79]; 
  • 我想先了解一下當地最大的矩陣
  • ,然後根據最大位置做M上的3×3區域上的總和

對於第一步,我使用的代碼是local_max=imregionalmax(M)。找出當地的最大位置,但我怎樣才能進一步使用這種協調來總結M上的3×3矩陣?

感謝您的幫助。

+0

對於每個3x3的矩陣,你想要一個總和還是隻以最大值爲中心?如果你有兩個最大相同的最大值,你會怎麼做? – 2011-04-26 19:46:12

+0

@ josh,感謝您的快速回復,所以我想要的是每個3x3矩陣的總和,其中矩陣的中心是局部最大值的位置。如果有兩個相同的最大值,我想總結3x3矩陣爲他們兩個。 – tytamu 2011-04-26 20:00:40

+0

日元如果最大值發生在邊緣或更糟糕的角落,會發生什麼?矩陣「包裹」了嗎? – 2011-04-26 20:02:56

回答

3

您可以計算整個矩陣的總和,然後只保留您感興趣的值。 ULD工作:

local_max=imregionalmax(M) 
sums = imfilter(M, ones(3)); 
local_max_sums = sums(local_max); 

如果你想要的是非零條目的矩陣,其中局部最大值分別位於:

local_max_sums = sums .* local_max; 
+0

這是一個好主意,它對我的​​目的非常有用,謝謝。 – tytamu 2011-04-26 20:29:21

0

您似乎在尋找Matlab的矩陣子集功能。

基本上,

M = [ 1 2 3 4 5 6; 
     4 5 6 7 8 9; 
     7 8 9 0 1 2; 
     0 1 2 3 4 5; 
     3 4 5 6 7 8; 
     6 7 8 9 0 1]; 

如果你有在(3,3)一個最大,你可以使用M(2:4,2:4),以獲得

N = [ 5 6 7; 
     8 9 0; 
     1 2 3]; 

求和是矩陣只剩下了 - 就像

total = sum(N(:)); 
-1

這是一種用於Matlab的蠻力,但我認爲這作品。

bw = imregionalmax(M); 
[x,y] = find(bw); 

s = []; 
for i = 1:length(x) 
    startX = x(i)-2; 
    if(startX < 1) 
     startX = 1; 
    end 

    endX = x(i)+2; 
    if endX > 10 
     endX = 10; 
    end 

    startY = y(i)-2; 
    if startY < 1 
     startY = 1; 
    end 

    endY = y(i)+2; 
    if endY > 10 
     endY = 10; 
    end 

    s(i) = sum2(M(startX:endX, startY:endY)); 
end