MATLAB - 在2D矩阵区域中查找最大值

时间:2011-10-06 17:12:35

标签: matlab matrix 2d max

我在找到如何在2D矩阵的定义区域中找到最大值时遇到问题。我也需要找到坐标。

现在,我有这个:

B ... 2Dmatrix <br>
[row_val row_ind] =max(B, [], 1) ;<br>
[col_val col_ind] =max(row_val) ;<br>
[r c] =find(B==max(B(:))) ;<br>
[s_v s_i] =max(B(:)) ;<br>
[r c] =ind2sub(size(B), s_i)<br><br>

它只找到最大值的坐标,但我无法选择矩阵的区域来查找最大值。

4 个答案:

答案 0 :(得分:4)

% extract region of interest
BRegion = B(rowStart:rowEnd, colStart:colEnd);

% find max value and get its index
[value, k] = max(BRegion(:));
[i, j] = ind2sub(size(BRegion), k);

% move indexes to correct spot in matrix
i = i + rowStart-1;
j = j + colStart-1;

答案 1 :(得分:0)

matlab如何帮助? http://www.mathworks.se/help/techdoc/ref/max.html 还有一些例子。 以下是有关坐标http://www.mathworks.com/matlabcentral/fileexchange/8136

的一些信息

答案 2 :(得分:0)

你使这比你需要的更难......没有理由压扁矩阵。

您使用maxind2sub走在正确的轨道上。有关选择区域的帮助,您可能需要查看Matlab自己的矩阵索引文档,特别是有关访问多个元素或逻辑索引的文档。

答案 3 :(得分:0)

这个问题需要考虑数组和索引。

首先,您需要确定您感兴趣的区域。如果您没有子区域的坐标,您可以使用例如IMRECT

%# create a figure and display your 2D array (B)
figure,imshow(B,[])
regionCoords = wait(imrect);

%# round the values to avoid fractional pixels
regionCoords = round(regionCoords);

regionCoords是一个包含[yMin,xMin,width,height]的数组,其中xMinyMin分别是左上角的行和列索引。

现在您可以提取子数组并找到最大值

的位置和值
xMin = regionCoords(2);
yMin = regionCoords(1);
xMax = regionCoords(2) + regionCoords(4) - 1;
yMax = regionCoords(1) + regionCoords(3) - 1;
subArray = B(xMin:xMax,yMin:yMax);

%# transform subArray to vector so that we get maximum of everything
[maxVal,maxIdx] = max(subArray(:));

剩下的就是取回行和列坐标(使用ind2sub)并对它们进行转换,使它们对应原始数组的坐标([1 1]的{​​{1}}为{ {1}}在原始数组的坐标中。)

subArray

要检查一切是否有效,您可以将[xMin,yMin]%# for the size of the subArray: use elements 4 and 3 of regionCoords %# take element 1 of maxIdx in case there are multiple maxima [xOfMaxSubArray,yOfMaxSubArray] = ind2sub(regionCoords([4 3]),maxIdx(1)); xOfMax = xOfMaxSubArray + xMin - 1; yOfMax = yOfMaxSubArray + yMin - 1; 进行比较。