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