Локальное выявление признаков и экстракция

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

Что такое локальные функции?

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

 Пример 1. Пример углового обнаружения
I = imread('circuit.tif');
corners = detectFASTFeatures(I,'MinContrast',0.1);
J = insertMarker(I,corners,'circle');
imshow(J)

Преимущества и приложения локальных функций

Локальные функции позволяют вам найти соответствия изображений независимо от поглощения газов, изменений в просмотре условий или присутствия помехи. Кроме того, свойства локальных функций делают их подходящими для классификации изображений, такой как в Классификации Изображений с Мешком Визуальных Слов.

Локальные функции используются двумя основными способами:

  • Локализовать точки привязки для использования в сшивании изображений или 3-D реконструкции.

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

Что делает хорошую локальную функцию?

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

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

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

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

Выявление признаков и извлечение признаков

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

Feature extraction включает вычисление дескриптора, который обычно делается на областях, сосредоточенных вокруг обнаруженных функций. Дескрипторы используют обработку изображений, чтобы преобразовать локальное пиксельное окружение в компактное векторное представление. Это новое представление разрешает сравнение между окружениями независимо от изменений по своим масштабам или ориентации. Дескрипторы, те, которые ОТСЕИВАЮТ или SURF, используют локальные расчеты градиента. Бинарные дескрипторы, такие как BRISK, ORB или FREAK, используют пары локальных различий в интенсивности, которые затем закодированы в бинарный вектор.

Выберите анализатор и дескриптор

Выберите лучший анализатор и дескриптор путем рассмотрения критериев приложения и природы данных. Первая таблица помогает вам изучить общие критерии, чтобы управлять вашим выбором. Следующие две таблицы предоставляют подробную информацию о детекторах и дескрипторах, доступных в Computer Vision Toolbox.

Факторы для выбора детектора и дескриптора

КритерииПредложение

Тип функций в вашем изображении

Используйте детектор, подходящий для ваших данных. Например, если ваше изображение содержит изображение ячеек бактерий, используйте детектор блоба, а не угловой детектор. Если ваше изображение является видом с воздуха города, можно использовать угловой детектор, чтобы найти искусственные структуры.

Контекст, в котором вы используете функции:

  • Соответствие с ключевыми пунктами

  • Классификация

ПОЖИРАТЕЛЬ РЕСУРСОВ, 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Да
ШАР [13]УголdetectORBFeaturesНет

Примечание

Функции обнаружения возвращают объекты, которые содержат информацию о функциях. extractHOGFeatures и extractFeatures функции используют эти объекты создать дескрипторы.

Выберите метод дескриптора

ДескрипторДвоичный файлФункция и методИнвариантностьТипичное использование
ШкалаВращениеНахождение соответствий точкиКлассификация
ПОЖИРАТЕЛЬ РЕСУРСОВНетextractHOGFeaturesi, ...)НетНетНетДа
LBPНетextractLBPFeaturesi, ...)НетДаНетДа
SurfНетextractFeaturesi'points', 'Methodsurf')ДаДаДаДа
KAZEНетextractFeaturesi'points', 'Method', 'KAZE')ДаДаДаДа
FREAKДаextractFeaturesi'points', 'Method', 'FREAK')ДаДаДаНет
ОЖИВЛЕННЫЙДаextractFeaturesi'points', 'Method', 'BRISK')ДаДаДаНет
ШАРДаextractFeaturesi'points', 'Method', 'ORB')НетДаДаНет
  • Блок

  • Простое пиксельное окружение вокруг keypoint

НетextractFeaturesi'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. estimateGeometricTransform функционируйте реализует демонстрационное согласие M-средства-оценки (MSAC), который является вариантом алгоритма RANSAC. MSAC находит геометрическое преобразование и разделяет inliers (правильные соответствия) от выбросов (побочные соответствия).

[tform, inlierDistorted,inlierOriginal] = ...
            estimateGeometricTransform(matchedDistorted,...
                matchedOriginal,'similarity');

Отобразите соответствующие точки

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));

Визуализируйте BRISK предполагаемые соответствия.

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 и геометрическое преобразование функций SURF и BRISK.

[tformTotal,inlierDistortedXY,inlierOriginalXY] = ...
    estimateGeometricTransform(matchedDistortedXY,...
        matchedOriginalXY,'similarity');

Отобразите результаты. Результат обеспечивает еще несколько соответствий, чем пример, который использовал один анализатор.

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] Rosten, E. и Т. Драммонд. “Машинное обучение для Высокоскоростного Углового Обнаружения”. 9-я европейская Конференция по Компьютерному зрению. Издание 1, 2006, стр 430–443.

[2] Mikolajczyk, K. и К. Шмид. “Оценка результатов деятельности локальных дескрипторов”. Транзакции IEEE согласно Анализу Шаблона и Искусственному интеллекту. Издание 27, Выпуск 10, 2005, стр 1615–1630.

[3] Харрис, C. и М. Дж. Стивенс. “Объединенный Детектор Угла и Ребра”. Продолжения 4-й Конференции по Видению Alvey. Август 1988, стр 147–152.

[4] Ши, J. и К. Томэзи. “Хорошие Функции, чтобы Отследить”. Продолжения Конференции по IEEE по Компьютерному зрению и Распознаванию образов. Июнь 1994, стр 593–600.

[5] Tuytelaars, T. и К. Миколэджчик. “Локальные Инвариантные Анализаторы: Обзор”. Основы и Тренды в Компьютерной графике и Видении. Издание 3, Выпуск 3, 2007, стр 177–280.

[6] Leutenegger, S., М. Чли и Р. Сигварт. “BRISK: бинарный устойчивый инвариантный масштабируемый Keypoints”. Продолжения международной конференции IEEE. ICCV, 2011.

[7] Nister, D. и Х. Стьюениус. "Линейное Время Максимально Устойчивые Экстремальные области". 10-я европейская Конференция по Компьютерному зрению. Марсель, Франция: 2008, № 5303, стр 183–196.

[8] Матас, J. O. Приятель, М. Арба, и Т. Пэдждла. "Устойчивый широко-базовый стерео из максимально устойчивых экстремальных областей. "Продолжения британской Конференции по Машинному зрению. 2002, стр 384–396.

[9] Обдрзэлек Д., С. Бэзовник, Л. Мах и А. Микулик. "Обнаруживая Элементы Сцены Используя Максимально Устойчивые Цветные области. "Коммуникации в Информатике и вычислительной технике. Ля-Ферт-Бернар, Франция: 2009, CCIS Издания 82 (2010 12 01), стр 107–115.

[10] Mikolajczyk, K., Т. Тейтелэарс, К. Шмид, А. Зиссермен, Т. Кэдир и Л. ван Гул. "Сравнение Аффинных Детекторов области. "Международный журнал Компьютерного зрения. Издание 65, № 1-2, ноябрь 2005, стр 43–72.

[11] Отсек, H. A. Эс, Т. Тейтелэарс и Л. ван Гул. surf: Ускоренные Устойчивые Функции”. Компьютерное зрение и Распознавание изображений (CVIU). Издание 110, № 3, 2008, стр 346–359.

[12] Alcantarilla, P.F., А. Бартоли и А.Дж. Дэйвисон. "Функции KAZE", ECCV 2012, Часть VI, LNCS 7 577 стр 214, 2012

[13] Rublee, E., В. Рабо, К. Конолидж и Г. Брадский. "ORB: эффективная альтернатива, чтобы ОТСЕЯТЬ или SURF". В Продолжениях 2 011 Международных конференций по вопросам Компьютерного зрения, 2564–2571. Барселона, Испания, 2011.

Похожие темы