我在找到如何在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>
它只找到最大值的坐标,但我无法选择矩阵的区域来查找最大值。
答案 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)
你使这比你需要的更难......没有理由压扁矩阵。
您使用max
和ind2sub
走在正确的轨道上。有关选择区域的帮助,您可能需要查看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]
的数组,其中xMin
和yMin
分别是左上角的行和列索引。
现在您可以提取子数组并找到最大值
的位置和值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;
进行比较。