MATLAB - поиск максимального значения в области 2D матрицы - PullRequest
0 голосов
/ 06 октября 2011

У меня проблема с поиском, как найти максимальное значение в определенной области 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 ]

4 голосов
/ 14 ноября 2011
% 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;
0 голосов
/ 07 октября 2011

Вы делаете это сложнее, чем нужно ... нет никаких причин для выравнивания матрицы.

Вы на правильном пути, используя max и ind2sub. Чтобы получить помощь в выборе региона, вы можете обратиться к собственной документации Matlab по матричной индексации, в частности по доступу к нескольким элементам или логической индексации.

0 голосов
/ 07 октября 2011

Этот вопрос требует мышления в терминах массивов и индексов.

Во-первых, вам нужно указать интересующий вас регион. Если у вас нет координат субрегиона, вы можете получить их, например, с помощью. 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] из 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;

Чтобы убедиться, что все работает, вы можете сравнить maxVal с B(xOfMax,yOfMax).

0 голосов
/ 06 октября 2011

Как с помощью matlab?http://www.mathworks.se/help/techdoc/ref/max.html есть также несколько примеров.Вот некоторая информация о координатах http://www.mathworks.com/matlabcentral/fileexchange/8136

...