[Stove AI] Машинное обучение 050 — Извлечение звездных характеристик изображений
(Библиотеки Python и номера версий, используемые в этой статье: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2)
Для характерных точек изображения мы обсудили метод обнаружения краев, алгоритм обнаружения углов Харриса и т. д. Эти алгоритмы обнаружения обнаруживают края контура изображения, а не внутренние детали.Если вы хотите дополнительно извлечь внутренние детали изображения, изображение, вам нужно использовать экстрактор признаков SIFT и экстрактор звездочек. В прошлой статье мы объяснили экстрактор признаков SIFT, а теперь давайте представим экстрактор признаков Star.
в блогеОсновные понятия о характерных точках и как их найтиКак упоминалось в OpenCV, существуют следующие модели характерных точек: (использование этих функций также применимо к OpenCV-Python)
1. Детектор признаков Харриса-Ши-Томаси и cv::GoodFeaturesToTrackDetector
Наиболее часто используемое определение углов было предложено Харрисом [Harris88], эти углы, известные как углы Хаара, могут считаться исходными ключевыми точками; в дальнейшем оно было расширено Ши и Томаси [Shi94]. большинство приложений для отслеживания. По историческим причинам в OpenCV это называется «GoodFeatures»;
2. Простой детектор больших двоичных объектов и cv::SimpleBlobDetector
Предложите понятие «пятна». Капли не так четко определены по своей природе, но представляют интересующие области, которые, как можно ожидать, будут иметь некоторую стабильность с течением времени.
3. Детектор функций FAST и cv::FastFeatureDetector
FAST (Features for Accelerated Segment Tests), первоначально предложенный Ростеном и Драммондом [Rosten06], имеет основную идею, что если несколько соседних точек подобны P, то P будет хорошей ключевой точкой.
4. Детектор функций SIFT и cv::xfeatures2d::SIFT
Функции SIFT (Scale-Invariant Feature Transform) [Lowe04], первоначально предложенные Дэвидом Лоу в 2004 году, широко используются и являются основой для многих впоследствии разработанных функций; функции SIFT требуют значительных вычислительных ресурсов, но очень выразительны.
5. Детектор функций SURF и cv::xfeatures2d::SURF
Функции SURF (Accelerated Robust Features) были первоначально предложены Бэем и др. в 2006 г. [Bay06, Bay08] и во многих отношениях являются развитием функций SIFT, которые мы только что обсуждали. Функции, созданные SURF, не только намного быстрее вычисляются, но во многих случаях также более устойчивы к изменениям ориентации или освещенности, наблюдаемым функциями SIFT.
6. Детектор признаков Star/CenSurE и cv::xfeatures2d::StarDetector
Функция Star, также известная как функция Center Surround Extremum (или CenSurE), пытается решить проблему обеспечения уровня локализации углов Хаара или функций FAST, а также обеспечивает неизменность масштаба.
7. Экстрактор кратких дескрипторов и cv::BriefDescriptorExtractor
BRIEF, или Binary Robust Independent Fundamental Features, является относительно новым алгоритмом, BRIEF не находит ключевые точки; вместо этого он используется для создания дескрипторов ключевых точек, которые могут быть обнаружены любым другим доступным алгоритмом обнаружения признаков.
8. Алгоритм BRISK
Дескриптор BRISK40, представленный Leutenegger et al., пытается улучшить Brief двумя разными способами (Leutenegger11). Во-первых, BRISK представляет один из собственных детекторов признаков (напомним, что Brief — это просто способ вычисления дескрипторов). Во-вторых, сама функция BRISK, хотя и похожа на принцип BRIEF, пытается выполнять бинарные сравнения таким образом, чтобы повысить надежность всей функции.
9. Детектор функций ORB и cv::ORB
Функция ORB [Rublee11] была создана с целью предоставления более быстрой альтернативы SIFT или SURF. Функция ORB использует детектор ключевых точек, очень близкий к FAST (который мы видели ранее в этой главе), но использует принципиально другой дескриптор, в основном основанный на BRIEF.
10. Экстрактор дескриптора FREAK и cv::xfeatures2d::FREAK
Первоначально представленный как усовершенствование Brief, BRISK и ORB, дескриптор FREAK представляет собой биологический дескриптор, который работает очень похоже на Brief, в основном в том, как он вычисляет поле бинарных сравнений [Alahi12].
11. Плотная сетка признаков и класс cv::DenseFeatureDetector
Цель класса cv::DenseFeatureDetector53 — просто создать регулярный массив функций в сетке на изображении.
1. Используйте звездочку для извлечения характерных точек изображения.
Конкретный код очень похож на мою предыдущую статью, вы можете сначала взглянуть[Искусственный интеллект плиты] Машинное обучение 049 — Извлечение характерных точек изображений SIFT
star = cv2.xfeatures2d.StarDetector_create() # 构建Star特征点检测器对象
keypoints = star.detect(gray, None) # 用Star特征点检测器对象检测灰度图中的特征点
# 将keypoints绘制到原图中
img_sift = np.copy(img)
cv2.drawKeypoints(img, keypoints, img_sift, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
#画在原图上,第一个是原图,第二个image是目标图,这个flags既包括位置又包括方向,也有只有位置的flags
#圆圈的大小表示特征的重要性大小,主要在桌子腿上,腿上边缘和棱角比较多,更有代表性
# 显示绘制有特征点的图像
plt.figure(12,figsize=(15,30))
plt.subplot(121)
img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.title('Raw Img')
plt.subplot(122)
img_sift_rgb=cv2.cvtColor(img_sift,cv2.COLOR_BGR2RGB)
plt.imshow(img_sift_rgb)
plt.title('Img with Star features')
########################резюме########################## ######
1, метод извлечения характерной точки звезды легко реализуется в коде, функция cv2.xfeatures2d.StarDetector_create () может быть создана, а детектор звезды может быть достигнут с помощью методов обнаружения.
2. Результаты экстрактора характерных точек Star и экстрактора характерных точек SIFT имеют много общего, оба из которых имеют много характерных точек возле ножек стола.
#################################################################
Примечание. Эта часть кода была загружена в (мой гитхаб), добро пожаловать на скачивание.
Использованная литература:
1. Классические примеры машинного обучения Python, Пратик Джоши, перевод Тао Цзюньцзе и Чена Сяоли.