假设我有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];
第一步,我使用的代码是local_max=imregionalmax(M)
。找出局部最大位置,但我怎样才能进一步使用这种协调来对M上的3x3矩阵求和?
感谢您的帮助。
答案 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