сумма по матрице с условием в Matlab - PullRequest
2 голосов
/ 26 апреля 2011

предположим, у меня есть матрица 10х10 М

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];
  • Я хочу сначала узнать локальный максимум в матрице
  • и затем в соответствии с максимальной позицией делайте сумму в области 3x3 над M

Для первого шага я использовал код local_max=imregionalmax(M). чтобы определить локальное максимальное положение, но как я могу пойти дальше, чтобы использовать эту координацию для суммирования по матрице 3x3 по M?

Спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 27 апреля 2011

Вы можете вычислить сумму для всей матрицы, а затем сохранить только те значения, которые вас интересуют. Это должно работать:

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

А если вам нужна матрица с ненулевыми записями, в которой расположены локальные максимумы:

local_max_sums = sums .* local_max;
0 голосов
/ 27 апреля 2011

Это своего рода грубая сила для 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
0 голосов
/ 27 апреля 2011

Вы, похоже, ищете функциональность матричного подмножества 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(:));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...