В настоящее время я пользуюсь imread
, чтобы прочитать изображение следующим образом. Функция Matlab detectSURFFeatures
работает только с изображениями в оттенках серого.
I = rgb2gray(imread('434.jpg'));
Вы можете запустить эту строку, чтобы получить функции SURF.
points = detectSURFFeatures(I);
Вы можете построить функции прибоя, используя следующее.
imshow(I);
hold on;
plot(point.selectStrongest(10));
hold off;
Вот визуализация изображения, с которым я работал.

Эта печать points
объекта, вы можете получить следующие свойства, показывающие 41 функции.
Scale: [41x1 single]
SignOfLaplacian: [41x1 int8]
Orientation: [41x1 single]
Location: [41x2 single]
Metric: [41x1 single]
Count: 41
Если у вас есть все черно-белых изображений, хранящихся в объекте клеток под названием cellimg
(один элемент ячейки для каждого изображения), вы можете запустить detectSURFFeatures
на каждом из них следующим образом.
cellsurf = cellfun(@(I) detectSURFFeatures(I), cellimg, 'UniformOutput', false);
Каждый элемент cellsurf
будет содержать точки SURF. Поскольку вам нужен набор отличительных и фиксированных функций, которые будут идентифицировать каждое изображение, вы можете выбрать самые сильные точки на каждом изображении в cellsurf
. Вы можете либо использовать верхние n
количество функций, либо установить n = min(points)
. Вычислите минимальное количество функций, используя следующий код.
n = min(cellfun(@(S) S.Count, cellsurf));
Затем вы можете выбрать самые сильные очки, запустив selectStrongest
на каждой клетке в cellsurf
.
F = cellfun(@(S) S.selectStrongest(n), cellsurf, 'UniformOutput', false);
переменной F
будет содержать постоянный набор функций. Вы можете изменить n
соответственно, чтобы изменить количество наиболее сильных функций, которые вы хотите. Чтобы соответствовать двум наборам функций, вы можете использовать встроенный matchFeatures function.
Примечания
- Если вам нужно больше возможностей, вы можете указать другой параметр «MetricThreshold» при вызове функции
detectSURFFeatures
.
- Вы можете использовать другие алгоритмы функций вместо SURF с помощью функций:
detectBRISKFeatures
, detectFASTFeatures
, detectHarrisFeatures
, detectMinEigenFeatures
, detectMSERFeatures
Что случилось с 83 точками SURF? Что не так с применением SURF для 1000 изображений и получения отдельных точек? – krisdestruction
, но как я могу сравнить изображение запроса с другими функциями от других изображений, я хочу использовать расстояние, подобное евклидову расстоянию или DTW, для измерения расстояния между изображениями запроса и другими изображениями –
Как я могу использовать 83 точки SURF для сравнения изображений? есть много векторов Масштабирование, Ориентация, местоположение ... и т. д., и это дает различное количество функций (значений) для каждого изображения. –