Как я могу найти локальные максимумы в изображении в MATLAB?

Короткое решение в K& R C, мог быть скомпилирован:

main(){main()}

14 байтов

20
задан Assad Ebrahim 30 September 2012 в 13:19
поделиться

4 ответа

bw = pic > imdilate(pic, [1 1 1; 1 0 1; 1 1 1]);
37
ответ дан 29 November 2019 в 22:40
поделиться

Если у вас есть Панель инструментов обработки изображений , вы можете использовать функцию IMREGIONALMAX :

BW = imregionalmax(y);

Переменная BW будет - логическая матрица того же размера, что и y , с единицами, указывающими локальные максимумы, и нулями в противном случае.

ПРИМЕЧАНИЕ: Как вы указываете, IMREGIONALMAX найдет максимумы, которые больше или равны своим соседям. Если вы хотите исключить соседние максимумы с одинаковым значением (т. Е. Найти максимумы, состоящие из отдельных пикселей), вы можете использовать функцию BWCONNCOMP . Следующее должно удалить точки в BW , у которых есть какие-либо соседи, оставив только отдельные пиксели:

CC = bwconncomp(BW);
for i = 1:CC.NumObjects,
  index = CC.PixelIdxList{i};
  if (numel(index) > 1),
    BW(index) = false;
  end
end
18
ответ дан 29 November 2019 в 22:40
поделиться

В качестве альтернативы, вы можете использовать nlfilter и указать свою собственную функцию, которая будет применяться к каждому соседству.

Это «найти строгий максимум» функция просто проверит, является ли центр окрестности строго большим, чем все другие элементы в этой окрестности, который для этой цели всегда равен 3x3. Следовательно:

I = imread('tire.tif');
BW = nlfilter(I, [3 3], @(x) all(x(5) > x([1:4 6:9])) );
imshow(BW)
11
ответ дан 29 November 2019 в 22:40
поделиться

или просто используйте отличный: extrema2.m

2
ответ дан 29 November 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: