Локальными признаками и их дескрипторами, которые являются компактными векторными представлениями локального района, являются базовые блоки многих алгоритмов компьютерного зрения. Их приложения включают регистрацию изображений, обнаружение объектов и классификацию, отслеживание и оценку движения. Использование локальных признаков позволяет этим алгоритмам лучше обрабатывать изменения шкалы, вращение и окклюзию. Computer Vision Toolbox™ предоставляет методы FAST, Harris, ORB и Shi & Tomasi для обнаружения угловых функций, а также SURF, KAZE и MSER для обнаружения признаков больших двоичных функций. Тулбокс включает SURF, KAZE, FREAK, BRISK, ORB и HOG дескрипторы. Вы можете смешивать и совпадать с детекторами и дескрипторами в зависимости от требований вашего приложения.
Локальные признаки относятся к шаблону или отдельной структуре, найденной в изображении, таком как точка, ребро или небольшая закрашенная фигура изображения. Они обычно связаны с закрашенной фигурой для изображений, который отличается от его непосредственного окружения текстурой, цветом или интенсивностью. То, что на самом деле представляет функция, не имеет значения, только то, что она отличается от окружения. Примерами локальных функций являются пятна, углы и краевые пиксели.
I = imread('circuit.tif'); corners = detectFASTFeatures(I,'MinContrast',0.1); J = insertMarker(I,corners,'circle'); imshow(J)
Локальные признаки позволяют вам найти соответствия изображений независимо от окклюзии, изменений условий просмотра или наличия загромождения. В сложение свойства локальных признаков делают их подходящими для классификации изображений, например, в Image Classification with Bag of Visual Words.
Локальные признаки используются двумя основными способами:
Локализация точек якоря для использования при сшивании изображений или 3-D реконструкции.
Чтобы представлять содержимое изображения компактно для обнаружения или классификации, не требуя сегментации изображения.
Приложение | MATLAB Examples |
---|---|
Регистрация изображений и сшивание | Особенность Основанный Панорамный Изображение Шить |
Обнаружение объектов | Обнаружение объектов в загроможденной сцене с использованием соответствия функций точек |
Алгоритм распознавания | Классификация цифр с использованием функций HOG |
Отслеживание объектов | Обнаружение и отслеживание лиц с помощью алгоритма KLT |
Распознавание категорий изображений | Категория изображений Классификация Использование Сумка признаков |
Нахождение геометрии стереосистемы | Некалиброванное стерео изображение выпрямление |
3-D реконструкция | Структура От Движения От Двух Видов, Структура От Движения От Нескольких Видов |
Поиск изображений | Извлечение изображений с использованием индивидуальной сумки признаков |
Детекторы, которые полагаются на основанные на градиентах и подходы к изменению интенсивности, обнаруживают хорошие локальные признаки. Эти функции включают ребра, пятна и области. Хорошие локальные признаки проявляют следующие свойства:
Повторяемые обнаружения:
При задании двух изображений одной и той же сцены большинство функций, которые детектор находит в обоих изображениях, одинаковы. Функции устойчивы к изменениям условий просмотра и шума.
Отличительные особенности:
Окрестность вокруг центра функции изменяется достаточно для надежного сравнения между функциями.
Локализуемый:
Этой функции присвоено уникальное расположение. Изменения условий просмотра не влияют на его расположение.
Feature detection выбирает области изображения, которые имеют уникальное содержимое, такие как углы или blobs. Используйте обнаружение функций, чтобы найти интересующие вас точки, которые можно использовать для дальнейшей обработки. Эти точки не обязательно соответствуют физическим структурам, таким как углы таблицы. Ключом к обнаружению признаков является поиск функций, которые остаются локально инвариантными, чтобы можно было обнаружить их даже в присутствии вращения или изменения шкалы.
Feature extraction включает в себя вычисление дескриптора, что обычно делается на областях с центром вокруг обнаруженных признаков. Дескрипторы полагаются на обработку изображения, чтобы преобразовать локальную окрестность пикселя в компактное векторное представление. Это новое представление позволяет сравнивать окрестности независимо от изменений шкалы или ориентации. Дескрипторы, такие как SIFT или SURF, полагаются на локальные расчеты. Двоичные дескрипторы, такие как BRISK, ORB или FREAK, полагаются на пары локальных различий интенсивности, которые затем кодируются в двоичный вектор.
Выберите лучший детектор функций и дескриптор с учетом критериев вашего приложения и характера ваших данных. Первая таблица помогает вам понять общие критерии для управления выбором. В следующих двух таблицах приведены подробные сведения о детекторах и дескрипторах, доступных в Computer Vision Toolbox.
Факторы по выбору детектора и дескриптора
Критерии | Предложение |
---|---|
Тип функций в вашем изображении | Используйте детектор, соответствующий вашим данным. Для примера, если ваше изображение содержит изображение камер бактерий, используйте детектор больших двоичных объектов, а не угловой детектор. Если ваше изображение является видом города на воздух, можно использовать угловой детектор для поиска техногенных структур. |
Контекст, в котором вы используете функции:
| Дескрипторы HOG, SURF и KAZE подходят для задач классификации. Напротив, двоичные дескрипторы, такие как ORB, BRISK и FREAK, обычно используются для нахождения соответствия точек между изображениями, которые используются для регистрации. |
Тип искажения, присутствующего в изображении | Выберите детектор и дескриптор, который адресовал искажение в ваших данных. Для примера, если изменения шкалы нет, рассмотрите угловой детектор, который не обрабатывает шкалу. Если ваши данные содержат более высокий уровень искажений, таких как шкала и вращение, используйте SURF, ORB или KAZE детектор функций и дескриптор. SURF и методы KAZE являются вычислительно интенсивными. |
Требования к эффективности:
| Двоичные дескрипторы обычно быстрее, но менее точны, чем дескрипторы на основе градиентов. Для большей точности используйте несколько детекторов и дескрипторов одновременно. |
Выберите функцию обнаружения на основе типа признака
Датчик | Тип функции | Функция | Шкала Независима |
---|---|---|---|
FAST [1] | Угол | detectFASTFeatures | Нет |
Алгоритм минимального собственного значения [4] | Угол | detectMinEigenFeatures | Нет |
Угловой детектор [3] | Угол | detectHarrisFeatures | Нет |
SURF [11] | Капля | detectSURFFeatures | Да |
KAZE [12] | Капля | detectKAZEFeatures | Да |
БРИСК [6] | Угол | detectBRISKFeatures | Да |
MSER [8] | Область с равномерной интенсивностью | detectMSERFeatures | Да |
ORB [13] | Угол | detectORBFeatures | Нет |
Примечание
Функции обнаружения возвращают объекты, которые содержат информацию о функциях. extractHOGFeatures
и extractFeatures
функции используют эти объекты для создания дескрипторов.
Выбор метода дескриптора
Описатель | Набор из двух предметов | Функция и метод | Постоянство | Типичное использование | ||
---|---|---|---|---|---|---|
Шкала | Вращение | Поиск соответствия точек | Классификация | |||
БОРОВ | Нет | extractHOGFeatures (I , ...) | Нет | Нет | Нет | Да |
LBP | Нет | extractLBPFeatures (I , ...) | Нет | Да | Нет | Да |
SURF | Нет | extractFeatures (I , points ,' Method SURF ') | Да | Да | Да | Да |
KAZE | Нет | extractFeatures (I , points ,' Method KAZE ') | Да | Да | Да | Да |
FREAK | Да | extractFeatures (I , points ,' Method FREAK ') | Да | Да | Да | Нет |
ОЖИВЛЕННЫЙ | Да | extractFeatures (I , points ,' Method BRISK ') | Да | Да | Да | Нет |
ШАР | Да | extractFeatures (I , points ,' Method ORB ') | Нет | Да | Да | Нет |
| Нет | extractFeatures (I , points ,' Method Block ') | Нет | Нет | Да | Да |
Примечание
extractFeatures
функция обеспечивает различные методы извлечения, чтобы наилучшим образом соответствовать требованиям вашего приложения. Когда вы не задаете 'Method'
вход для extractFeatures
функция автоматически выбирает метод на основе типа входа класса точек.
Двоичные дескрипторы быстрые, но менее точные с точки зрения локализации. Они не подходят для задач классификации. extractFeatures
функция возвращает binaryFeatures
объект. Этот объект включает метрику соответствия на основе расстояния Хемминга, используемую в matchFeatures
функция.
Регистрация двух изображений является простым способом понять локальные признаки. Этот пример находит геометрическое преобразование между двумя изображениями. Он использует локальные признаки для поиска хорошо локализованных якорных точек.
Отобразите два изображения
Первое изображение - оригинальное изображение.
original = imread('cameraman.tif');
figure;
imshow(original);
Второе изображение является оригинальным изображением, повернутым и масштабированным.
scale = 1.3; J = imresize(original,scale); theta = 31; distorted = imrotate(J,theta); figure imshow(distorted)
Обнаружение совпадающих функций между исходным и искаженным изображением
Обнаружение совпадающих функций SURF является первым шагом в определении преобразования, необходимого для коррекции искаженного изображения.
ptsOriginal = detectSURFFeatures(original); ptsDistorted = detectSURFFeatures(distorted);
Извлеките функции и сравните обнаруженные пятна между двумя изображениями
Этап обнаружения обнаружил несколько примерно соответствующих структур больших двоичных объектов в обоих изображениях. Сравнение обнаруженных признаков больших двоичных функций. Этому процессу способствует редукция данных, которая определяет локальный дескриптор закрашенной фигуры.
[featuresOriginal,validPtsOriginal] = ... extractFeatures(original,ptsOriginal); [featuresDistorted,validPtsDistorted] = ... extractFeatures(distorted,ptsDistorted);
Не исключено, что не все исходные точки использовались для извлечения дескрипторов. Точки могли быть отклонены, если они были слишком близки к границе изображения. Поэтому действительные точки возвращаются в дополнение к дескрипторам функций.
Размер закрашенной фигуры, используемого для вычисления дескрипторов, определяется на этапе редукции данных. Размер закрашенной фигуры соответствует шкале, в котором обнаружена функция. Независимо от размера закрашенной фигуры, два вектора функций, featuresOriginal
и featuresDistorted
, вычисляются таким образом, чтобы они были равной длины. Дескрипторы позволяют вам сравнить обнаруженные признаки, независимо от их размера и поворота.
Поиск совпадений кандидатов
Получите соответствие кандидата между функциями путем ввода дескрипторов в matchFeatures
функция. Соответствие кандидатов предполагает, что результаты могут содержать некоторые недопустимые совпадения. Две закрашенные фигуры, которые совпадают, могут указывать на одинаковые функции, но могут быть неправильными. Угол таблицы может выглядеть как угол стула, но две функции, очевидно, не совпадают.
indexPairs = matchFeatures(featuresOriginal,featuresDistorted);
Найти местоположения точек из обоих изображений
Каждая строка возвращенного indexPairs
содержит два индекса совпадения функций кандидата между изображениями. Используйте индексы, чтобы собрать фактические местоположения точек с обоих изображений.
matchedOriginal = validPtsOriginal(indexPairs(:,1)); matchedDistorted = validPtsDistorted(indexPairs(:,2));
Отображение совпадений кандидатов
figure
showMatchedFeatures(original,distorted,matchedOriginal,matchedDistorted)
title('Candidate matched points (including outliers)')
Анализируйте местоположения функций
Если существует достаточное количество допустимых совпадений, удалите ложные совпадения. Эффективным методом для этого сценария является алгоритм RANSAC. The estimateGeometricTransform2D
функция реализует M-estimator выборочный консенсус (MSAC), который является вариантом алгоритма RANSAC. MSAC находит геометрическое преобразование и отделяет инлиеры (правильные соответствия) от выбросов (ложные соответствия).
[tform, inlierIdx] = estimateGeometricTransform2D( ... matchedDistorted, matchedOriginal,'similarity'); inlierDistorted = matchedDistorted(inlierIdx, :); inlierOriginal = matchedOriginal(inlierIdx, :);
Отобразите совпадающие точки
figure showMatchedFeatures(original,distorted,inlierOriginal,inlierDistorted) title('Matching points (inliers only)') legend('ptsOriginal','ptsDistorted')
Проверьте вычисленное геометрическое преобразование
Примените вычисленное геометрическое преобразование к искаженному изображению.
outputView = imref2d(size(original));
recovered = imwarp(distorted,tform,'OutputView',outputView);
Отобразите восстановленное изображение и оригинальное изображение.
figure
imshowpair(original,recovered,'montage')
Этот пример основан на результатах примера «Использование локальных признаков». Использование более чем одной пары детекторов и дескрипторов позволяет вам объединить и укрепить свои результаты. Несколько пар также полезны для, когда вы не можете получить достаточно хороших соответствий (inliers) с помощью одного детектора функций.
Загрузите оригинальное изображение.
original = imread('cameraman.tif'); figure; imshow(original); text(size(original,2),size(original,1)+15, ... 'Image courtesy of Massachusetts Institute of Technology', ... 'FontSize',7,'HorizontalAlignment','right');
Масштабируйте и вращайте оригинальное изображение, чтобы создать искаженное изображение.
scale = 1.3; J = imresize(original, scale); theta = 31; distorted = imrotate(J,theta); figure imshow(distorted)
Обнаружение функций на обоих изображениях. Сначала используйте детекторы BRISK, затем SURF.
ptsOriginalBRISK = detectBRISKFeatures(original,'MinContrast',0.01); ptsDistortedBRISK = detectBRISKFeatures(distorted,'MinContrast',0.01); ptsOriginalSURF = detectSURFFeatures(original); ptsDistortedSURF = detectSURFFeatures(distorted);
Извлеките дескрипторы из исходных и искаженных изображений. Функции BRISK по умолчанию используют дескриптор FREAK.
[featuresOriginalFREAK,validPtsOriginalBRISK] = ... extractFeatures(original,ptsOriginalBRISK); [featuresDistortedFREAK,validPtsDistortedBRISK] = ... extractFeatures(distorted,ptsDistortedBRISK); [featuresOriginalSURF,validPtsOriginalSURF] = ... extractFeatures(original,ptsOriginalSURF); [featuresDistortedSURF,validPtsDistortedSURF] = ... extractFeatures(distorted,ptsDistortedSURF);
Определите соответствие кандидатов, сначала сопоставив дескрипторы FREAK, а затем SURF. Чтобы получить как можно больше совпадений функций, начните с детектора и совпадающих порогов, которые ниже значений по умолчанию. Как только вы получите рабочее решение, можно постепенно увеличить пороги, чтобы уменьшить вычислительную нагрузку, необходимую для извлечения и соответствия функциям.
indexPairsBRISK = matchFeatures(featuresOriginalFREAK,... featuresDistortedFREAK,'MatchThreshold',40,'MaxRatio',0.8); indexPairsSURF = matchFeatures(featuresOriginalSURF,featuresDistortedSURF);
Получите совпадающие точки кандидата для BRISK и SURF.
matchedOriginalBRISK = validPtsOriginalBRISK(indexPairsBRISK(:,1)); matchedDistortedBRISK = validPtsDistortedBRISK(indexPairsBRISK(:,2)); matchedOriginalSURF = validPtsOriginalSURF(indexPairsSURF(:,1)); matchedDistortedSURF = validPtsDistortedSURF(indexPairsSURF(:,2));
Визуализация предполагаемых матчей БРИСК.
figure showMatchedFeatures(original,distorted,matchedOriginalBRISK,... matchedDistortedBRISK) title('Putative matches using BRISK & FREAK') legend('ptsOriginalBRISK','ptsDistortedBRISK')
Объедините подходящие локальные признаки BRISK и SURF. Используйте Location
свойство для объединения местоположений точек из функций BRISK и SURF.
matchedOriginalXY = ... [matchedOriginalSURF.Location; matchedOriginalBRISK.Location]; matchedDistortedXY = ... [matchedDistortedSURF.Location; matchedDistortedBRISK.Location];
Определите точки inlier и геометрическое преобразование функций BRISK и SURF.
[tformTotal,inlierIdx] = ... estimateGeometricTransform2D(matchedDistortedXY,... matchedOriginalXY,'similarity'); inlierDistortedXY = matchedDistortedXY(inlierIdx, :); inlierOriginalXY = matchedOriginalXY(inlierIdx, :);
Отображение результатов. Результат обеспечивает несколько больше соответствий, чем в примере, который использовал один детектор функций.
figure showMatchedFeatures(original,distorted,inlierOriginalXY,inlierDistortedXY) title('Matching points using SURF and BRISK (inliers only)') legend('ptsOriginal','ptsDistorted')
Сравните оригинальное и восстановленное изображение.
outputView = imref2d(size(original)); recovered = imwarp(distorted,tformTotal,'OutputView',outputView); figure; imshowpair(original,recovered,'montage')
[1] Ростен, Э. и Т. Драммонд. «Машинное обучение для высокоскоростного обнаружения углов». 9-я Европейская конференция по компьютерному зрению. Том 1, 2006, стр. 430-443.
[2] Mikolajczyk, K., and C. Schmid. «Оценка эффективности локальных дескрипторов». Транзакции IEEE по шаблонному анализу и машинному анализу. Том 27, Выпуск 10, 2005, стр. 1615-1630.
[3] Harris, C. and M. J. Stephens. Комбинированный детектор углов и ребер. Материалы четвертой конференции «Alvey Vision». 1988 августа, с. 147-152.
[4] Shi, J. and C. Tomasi. «Хорошие функции для отслеживания». Материалы Конференции IEEE по компьютерному зрению и распознаванию шаблонов. Июнь 1994, с. 593-600.
[5] Tuytelaars, T., and K. Mikolajczyk. Локальные детекторы инвариантных функций: съемка. Основы и тренды в компьютерной графике и видении. Том 3, Выпуск 3, 2007, стр. 177-280.
[6] Leutenegger, S., M. Chli, and R. Siegwart. BRISK: Binary Robust Invariant Scalable Keypoints (неопр.) (недоступная ссылка). Материалы Международной конференции IEEE. ICCV, 2011.
[7] Нистер, Д. и Х. Стевениус. «Linear Time Maximally Stable Extremal Областей». 10-я Европейская конференция по Компьютерному зрению. Марсель, Франция: 2008, № 5303, с. 183-196.
[8] Matas, J., O. Chum, M. Urba, and T. Pajdla. «Устойчивый широкий базовый стерео из максимально стабильнейшие экстремальнейшие области». Труды British Machine Vision Conference. 2002, стр 384–396.
[9] Обдрзалек Д., С. Басовник, Л. Мач, А. Микулик. «Обнаружение элементов сцены с использованием максимально стабильных цветовых областей». Коммуникации в компьютерной и информационной науке. La Ferte-Bernard, France: 2009, Vol. 82 CCIS (2010 12 01), pp. 107-115.
[10] Mikolajczyk, K., T. Tuytelaars, C. Schmid, A. Zisserman, T. Kadir, and L. Van Gool. "Сравнение детекторов аффинных областей. "Международный журнал компьютерного зрения. Том 65, № 1-2, 2005 ноября, стр. 43-72.
[11] Bay, H., A. Ess, T. Tuytelaars, and L. Van Gool. SURF: ускоренные робастные функции. Компьютерное зрение и понимание изображений (CVIU). Том 110, № 3, 2008, стр. 346-359.
[12] Alcantarilla, P.F., A. Bartoli, and A.J. Davison. «KAZE Функций», ECCV 2012, часть VI, LNCS 7577 стр. 214, 2012
[13] Rublee, E., V. Rabaud, K. Konolige and G. Bradski. ORB: Эффективная альтернатива SIFT или SURF. В работе 2011 международной конференции по компьютерному зрению, 2564-2571. Барселона, Испания, 2011.