Если у вас есть доступ к Toolbox для обработки изображений , вы можете воспользоваться рядом фильтрующих и морфологических операций, которые он содержит. Вот один из способов решения вашей проблемы, используя функции imfilter
, imclose
и imregionalmax
:
% Load and plot the image data:
imageData = imread('lattice_pic.jpg'); % Load the lattice image
subplot(221);
imshow(imageData);
title('Original image');
% Gaussian-filter the image:
gaussFilter = fspecial('gaussian', [31 31], 9); % Create the filter
filteredData = imfilter(imageData, gaussFilter);
subplot(222);
imshow(filteredData);
title('Gaussian-filtered image');
% Perform a morphological close operation:
closeElement = strel('disk', 31); % Create a disk-shaped structuring element
closedData = imclose(filteredData, closeElement);
subplot(223);
imshow(closedData);
title('Closed image');
% Find the regions where local maxima occur:
maxImage = imregionalmax(closedData);
maxImage = imdilate(maxImage, strel('disk', 5)); % Dilate the points to see
% them better on the plot
subplot(224);
imshow(maxImage);
title('Maxima locations');
А вот изображение, которое создает приведенный выше код:
Чтобы все выглядело хорошо, я просто продолжал пробовать несколько разных комбинаций для параметров для фильтра Гаусса (созданного с помощью fspecial
) и структурирующего элемента (созданного с помощью strel
). Однако это небольшое количество проб и ошибок дало очень хороший результат.
ПРИМЕЧАНИЕ: Изображение, возвращаемое с imregionalmax
, не всегда имеет только один пиксель, установленный на 1 (для обозначения максимумов). Выходное изображение часто содержит кластеры пикселей, потому что соседние пиксели во входном изображении могут иметь равные значения и, следовательно, оба учитываются как максимумы. В приведенном выше коде я также расширил эти точки с помощью imdilate
, просто чтобы их было легче увидеть на изображении, что делает еще больший кластер пикселей с центром в максимумах. Если вы хотите уменьшить кластер пикселей до одного пикселя, вы должны удалить шаг расширения и изменить изображение другими способами (добавить шум к результату или отфильтровать его, затем найти новые максимумы и т. Д.).