Локальный признак

Локальными признаками и их дескрипторами, которые являются компактными векторными представлениями локального района, являются базовые блоки многих алгоритмов компьютерного зрения. Их приложения включают регистрацию изображений, обнаружение объектов и классификацию, отслеживание и оценку движения. Использование локальных признаков позволяет этим алгоритмам лучше обрабатывать изменения шкалы, вращение и окклюзию. Computer Vision Toolbox™ предоставляет методы FAST, Harris, ORB и Shi & Tomasi для обнаружения угловых функций, а также SURF, KAZE и MSER для обнаружения признаков больших двоичных функций. Тулбокс включает SURF, KAZE, FREAK, BRISK, ORB и HOG дескрипторы. Вы можете смешивать и совпадать с детекторами и дескрипторами в зависимости от требований вашего приложения.

Что такое локальные признаки?

Локальные признаки относятся к шаблону или отдельной структуре, найденной в изображении, таком как точка, ребро или небольшая закрашенная фигура изображения. Они обычно связаны с закрашенной фигурой для изображений, который отличается от его непосредственного окружения текстурой, цветом или интенсивностью. То, что на самом деле представляет функция, не имеет значения, только то, что она отличается от окружения. Примерами локальных функций являются пятна, углы и краевые пиксели.

Пример 1. Пример обнаружения углов
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 реконструкции.

  • Чтобы представлять содержимое изображения компактно для обнаружения или классификации, не требуя сегментации изображения.

Что делает хороший локальный признак?

Детекторы, которые полагаются на основанные на градиентах и подходы к изменению интенсивности, обнаруживают хорошие локальные признаки. Эти функции включают ребра, пятна и области. Хорошие локальные признаки проявляют следующие свойства:

  • Повторяемые обнаружения:
    При задании двух изображений одной и той же сцены большинство функций, которые детектор находит в обоих изображениях, одинаковы. Функции устойчивы к изменениям условий просмотра и шума.

  • Отличительные особенности:
    Окрестность вокруг центра функции изменяется достаточно для надежного сравнения между функциями.

  • Локализуемый:
    Этой функции присвоено уникальное расположение. Изменения условий просмотра не влияют на его расположение.

Обнаружение функций и редукция данных

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,' MethodSURF')ДаДаДаДа
KAZEНетextractFeatures(I, points,' MethodKAZE')ДаДаДаДа
FREAKДаextractFeatures(I, points,' MethodFREAK')ДаДаДаНет
ОЖИВЛЕННЫЙДаextractFeatures(I, points,' MethodBRISK')ДаДаДаНет
ШАРДаextractFeatures(I, points,' MethodORB')НетДаДаНет
  • Блок

  • Район простого пикселя вокруг точки ключа

НетextractFeatures(I, points,' MethodBlock')НетНетДаДа

Примечание

  • extractFeatures функция обеспечивает различные методы извлечения, чтобы наилучшим образом соответствовать требованиям вашего приложения. Когда вы не задаете 'Method' вход для extractFeatures функция автоматически выбирает метод на основе типа входа класса точек.

  • Двоичные дескрипторы быстрые, но менее точные с точки зрения локализации. Они не подходят для задач классификации. extractFeatures функция возвращает binaryFeatures объект. Этот объект включает метрику соответствия на основе расстояния Хемминга, используемую в matchFeatures функция.

Использование локальных признаков

Регистрация двух изображений является простым способом понять локальные признаки. Этот пример находит геометрическое преобразование между двумя изображениями. Он использует локальные признаки для поиска хорошо локализованных якорных точек.

Отобразите два изображения

Первое изображение - оригинальное изображение.

original = imread('cameraman.tif');
figure;
imshow(original);

Figure contains an axes. The axes contains an object of type image.

Второе изображение является оригинальным изображением, повернутым и масштабированным.

scale = 1.3;
J = imresize(original,scale);
theta = 31;
distorted = imrotate(J,theta);
figure
imshow(distorted)

Figure contains an axes. The axes contains an object of type image.

Обнаружение совпадающих функций между исходным и искаженным изображением

Обнаружение совпадающих функций 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)')

Figure contains an axes. The axes with title Candidate matched points (including outliers) contains 4 objects of type image, line.

Анализируйте местоположения функций

Если существует достаточное количество допустимых совпадений, удалите ложные совпадения. Эффективным методом для этого сценария является алгоритм 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')

Figure contains an axes. The axes with title Matching points (inliers only) contains 4 objects of type image, line. These objects represent ptsOriginal, ptsDistorted.

Проверьте вычисленное геометрическое преобразование

Примените вычисленное геометрическое преобразование к искаженному изображению.

outputView = imref2d(size(original));
recovered  = imwarp(distorted,tform,'OutputView',outputView);

Отобразите восстановленное изображение и оригинальное изображение.

figure
imshowpair(original,recovered,'montage')

Figure contains an axes. The axes contains an object of type image.

Регистрация изображений с использованием нескольких функций

Этот пример основан на результатах примера «Использование локальных признаков». Использование более чем одной пары детекторов и дескрипторов позволяет вам объединить и укрепить свои результаты. Несколько пар также полезны для, когда вы не можете получить достаточно хороших соответствий (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');

Figure contains an axes. The axes contains 2 objects of type image, text.

Масштабируйте и вращайте оригинальное изображение, чтобы создать искаженное изображение.

scale = 1.3;
J = imresize(original, scale);
 
theta = 31;
distorted = imrotate(J,theta);
figure
imshow(distorted)

Figure contains an axes. The axes contains an object of type image.

Обнаружение функций на обоих изображениях. Сначала используйте детекторы 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')

Figure contains an axes. The axes with title Putative matches using BRISK & FREAK contains 4 objects of type image, line. These objects represent 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')

Figure contains an axes. The axes with title Matching points using SURF and BRISK (inliers only) contains 4 objects of type image, line. These objects represent ptsOriginal, ptsDistorted.

Сравните оригинальное и восстановленное изображение.

outputView = imref2d(size(original));
recovered  = imwarp(distorted,tformTotal,'OutputView',outputView);
 
figure;
imshowpair(original,recovered,'montage')

Figure contains an axes. The axes contains an object of type image.

Ссылки

[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.

Похожие темы