2011-04-26 45 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