Если у вас нет доступа к Toolbox для обработки изображений , еще один способ сделать это - создать четыре матрицы, представляющие верхнюю, правую, нижнюю и левую первую разницу для каждой точки, а затем выполнить поиск соответствующие элементы во всех четырех матрицах, которые неотрицательны (то есть элемент превышает всех своих соседей).
Вот идея разбита ...
Генерация некоторых тестовых данных:
>> sizeA = 3;
A = randi(255, sizeA)
A =
254 131 94
135 10 124
105 191 84
Дополните границы нулевыми элементами:
>> A2 = zeros(sizeA+2) * -Inf;
A2(2:end-1,2:end-1) = A
A2 =
0 0 0 0 0
0 254 131 94 0
0 135 10 124 0
0 105 191 84 0
0 0 0 0 0
Построим четыре матрицы первых разностей:
>> leftDiff = A2(2:end-1,2:end-1) - A2(2:end-1,1:end-2)
leftDiff =
254 -123 -37
135 -125 114
105 86 -107
>> topDiff = A2(2:end-1,2:end-1) - A2(1:end-2,2:end-1)
topDiff =
254 131 94
-119 -121 30
-30 181 -40
>> rightDiff = A2(2:end-1,2:end-1) - A2(2:end-1,3:end)
rightDiff =
123 37 94
125 -114 124
-86 107 84
>> bottomDiff = A2(2:end-1,2:end-1) - A2(3:end,2:end-1)
bottomDiff =
119 121 -30
30 -181 40
105 191 84
Найдите элементы, которые превосходят всех соседей:
indexKeep = find(leftDiff >= 0 & topDiff >= 0 & rightDiff >= 0 & bottomDiff >= 0)
Создать полученную матрицу:
>> B = zeros(sizeA);
B(indexKeep) = A(indexKeep)
B =
254 0 0
0 0 124
0 191 0
После оборачивания всего этого в функцию и проверки ее на 1000 случайных матриц 100x100 алгоритм выглядит довольно быстрым:
>> tic;
for ii = 1:1000
A = randi(255, 100);
B = test(A);
end; toc
Elapsed time is 0.861121 seconds.