在matlab中用条件求和矩阵

时间:2011-04-26 19:38:46

标签: matlab sum

假设我有10x10矩阵M

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
  • 上的3x3区域上求和

第一步,我使用的代码是local_max=imregionalmax(M)。找出局部最大位置,但我怎样才能进一步使用这种协调来对M上的3x3矩阵求和?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您可以计算整个矩阵的总和,然后只保留您感兴趣的值。这应该有效:

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

如果您想要的是具有非零条目的矩阵,其中包含局部最大值:

local_max_sums = sums .* local_max;

答案 1 :(得分: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(:));

答案 2 :(得分:-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