Улучшение функций

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

Когда я впервые начал изучать масштабную инвариантность, я предполагал, что мы можем просто запустить детектор Угол Харриса на разных уровнях в масштабном пространстве, чтобы найти инвариантные особенности. И мы можем - этот конкретный метод называется детектором Угол Харриса-Лапласа. Но по мере того, как я исследовал и узнавал больше о детекторах с инвариантным масштабом, был один метод, который появлялся снова и снова. Этот метод является детектором Разности Гаусса (DoG).

Я нашел метод «Различия гаусса» (DoG) действительно интересным по нескольким причинам. В то время как детектор Harris Corner фокусируется, в общем, на углах, метод DoG идентифицирует капли . Кляксы - это более аморфная область пикселей, у которых есть что-то общее, например интенсивность. Я также заметил, что метод DoG часто упоминается в статьях, посвященных дескрипторам функций, о которых мы узнаем позже. Последний момент, о котором стоит упомянуть, заключается в том, что DoG идентифицирует как края, так и объекты blob в одной операции.

Начните с гауссовой шкалы

Чтобы лучше понять, как работает Разница Гаусса, давайте рассмотрим следующий пример. Мы смотрим на разные уровни в пространстве гауссовой шкалы. Другими словами, эти изображения размыты с размытием по Гауссу на разных сигмах.

Давайте разберемся немного в этом. Если вы внимательно посмотрите на приведенные выше изображения, вы, вероятно, сможете выделить некоторые детали (например, глаз), которые четко видны на всех трех изображениях. Эти детали видны на всех вышеперечисленных сигмах. Теперь рассмотрите детали (такие как крошечные перья вокруг клюва), которые вы можете видеть только на исходном изображении или центральном изображении, но не можете хорошо видеть на крайнем правом изображении. Эти детали видны только на этой конкретной сигме. Это потому, что, как мы обсуждали ранее, сигма представляет масштаб. Некоторые детали крупнее и видны даже при более сильных размытиях, а другие детали меньше и видны только при более слабых размытиях. Другими словами, существует корреляция между силой размытия, которая представлена ​​сигмой, и деталями или особенностями, которые видны на этой сигме. Сигма - это масштабный коэффициент, который дает нам представление о том, какие функции видны в определенном масштабе.

Вычесть следующее

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

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

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

Внимательные читатели заметят, что результирующее изображение напоминает результат операции Собела, которую мы обсуждали, когда говорили о Обнаружении края. Это потому, что Разница Гаусса извлекает как края, так и капли.

Мы можем повторить этот процесс еще на двух наборах сигм, как показано ниже.

Первый набор изображений имеет сигму 0,7 и 1, и полученное изображение содержит множество мелких деталей в виде перьев. Второй набор деталей находится между сигмой 2 и 2,8. Вы можете видеть, что многие детали перьев больше не видны на сигме 2. Более крупные детали, такие как глаз, отчетливо видны как на 0,5, так и на 2 сигме.

Магия здесь в том, что размытие по Гауссу «сглаживает» изображение. Области с очень небольшим изменением контрастности выглядят одинаковыми, несмотря на то, что одно изображение имеет более сильное размытие, чем другое. Когда есть небольшое изменение в области, результат вычитания ближе к нулю (черный). В высококонтрастных областях (края, пятна) сила размытия имеет большее значение. Чем больше контраст, тем более устойчива область к гауссову при более низкой сигме.

Мы повторяем этот процесс много раз, чтобы получить различия в различных масштабах.

SIDENOTE: Различие техники Гаусса развилось из другой техники, называемой лапласианом Гаусса (LoG). Оказывается, вычитание гауссовских изображений друг из друга - это быстрая оценка лапласиана гауссиана. Различие метода Гаусса - это менее затратная в вычислениях аппроксимация лапласиана вычисления Гаусса.

Найдите особенности

На этом этапе некоторые из вас, возможно, заметили, что у нас есть стопка изображений, полученных в результате вычитания изображений с различными размытиями по Гауссу, но у нас еще нет списка функций, как это было, когда мы использовали детектор Harris Corner. Давайте посмотрим, как мы можем превратить эти изображения в список функций, с которыми мы можем начать работать.

Для начала у нас есть стопка изображений с размытием по Гауссу в разных масштабах (помните, что мы используем значение сигмы в качестве значения масштаба) - давайте убедимся, что мы сортируем изображения на основе значения масштаба.

Мы собираемся пропустить изображение в самом высоком масштабе и начнем со второго изображения. Лучше всего начинать с самого высокого масштаба, потому что изображение будет наименьшим, если говорить о разрешении в пикселях. Затем мы рассмотрим каждый пиксель на этом изображении. Для каждого пикселя мы будем смотреть на его соседей - восемь пикселей непосредственно вокруг данного пикселя. Мы оценим, является ли этот пиксель локальным максимумом, сравнив его значение с восемью соседними пикселями и определив, является ли это наибольшим значением. Аналогичным образом мы определяем, является ли этот пиксель локальным минимумом, если он имеет наименьшее значение по сравнению с его соседями. Значения пикселей, которые являются локальными максимумами или локальными минимумами, называются локальными экстремумами.

Здесь все становится по-настоящему интересным! Как только мы определяем, является ли конкретный пиксель локальным экстремумом в определенном масштабе, мы затем сравниваем этот пиксель с соответствующим пикселем в предыдущем масштабном изображении и следующем масштабном изображении вместе со всеми его соседями.

Например, предположим, что мы определили, что пиксель в позиции (4,5) является локальным экстремумом для данного масштаба. Мы сравниваем значение нашего пикселя со значением пикселя в том же месте (4,5) и всех этих соседей в предыдущем масштабе. Затем мы делаем то же самое для следующего масштаба. В целом, мы сравниваем каждый пиксель с восемью соседями в той же шкале и девятью соседями в следующей и предыдущей шкалах. Если наш пиксель по-прежнему является локальным экстремумом по сравнению со всеми его ближайшими соседями в трех масштабах, тогда у нас есть координаты x и y для этой функции вместе со значением шкалы.

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

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

Мы добились большого прогресса, но еще не закончили поиск наших масштабно-инвариантных функций. На данный момент у нас есть список локальных максимумов, которые определяются положением x и y вместе со значением шкалы, представленным σ. Скорее всего, наша коллекция потенциальных функций включает функции, которые недостаточно надежны, чтобы быть полезными. Следующие несколько шагов помогут нам отсеять ненадежные функции. В этом духе обычно существует алгоритм определения порога, при котором, если экстремум меньше определенного значения, он отклоняется. Это позволяет нам сохранять высококонтрастные функции. Метод DoG также имеет тенденцию выделять края, и, как мы уже обсуждали, края не создают отличных функций. В качестве механизма для удаления краевых элементов большинство масштабно-инвариантных алгоритмов обычно завершают этап, аналогичный детектору углов Харриса, чтобы удалить краевые элементы и сконцентрироваться на функциях, которые мы можем надежно использовать в дальнейшем.

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

На изображении выше показаны результаты нашего алгоритма Различия Гаусса. Центр каждого круга - это расположение объекта. Размер круга соответствует масштабу обнаружения объекта. Большие кружки указывают на особенности, которые все еще видны даже после того, как изображение было значительно размыто. Меньшие круги показывают нам особенности, которые видны только при более слабом размытии. Обратите внимание, что многие особенности коры представлены очень крошечными кругами - это потому, что детали коры видны только на самом низком уровне чешуи.

Шаги к отличию гауссовского детектора блобов

Как и в случае с детектором Harris Corner, давайте подытожим все этапы обнаружения масштабно-инвариантных функций с помощью детектора разности гауссовых блобов:

  1. Преобразуйте изображение в оттенки серого, чтобы сосредоточиться на интенсивности, а не на отдельных цветовых каналах
  2. Создайте пирамиду гауссовского изображения, запустив гауссовский фильтр и субдискретизацию.
  3. Неоднократно запускайте фильтр размытия по Гауссу через пирамиду изображения Гаусса, чтобы создать дополнительные шаги масштабирования.
  4. Рассчитайте разницу между каждой последовательной парой размытых изображений
  5. Начиная с наименьшего изображения (наибольший масштаб), определите, какие значения пикселей являются экстремумами (наименьшее и наибольшее значения).
  6. Для каждого пикселя экстремума сравните его с соседями как в предыдущем, так и в последующих масштабах и сохраните только экстремумы, которые остаются экстремумами после сравнения его с соседними масштабами.
  7. Отфильтровать потенциальные характерные точки, где экстремумы не соответствуют пороговому значению
  8. Отфильтровать потенциальные характерные точки, соответствующие краям
  9. Результирующие характерные точки должны быть надежными и доступными в масштабном пространстве.

TL; DR

Техника Различия Гаусса (DoG) - очень влиятельный подход к обнаружению объектов Blob с неизменным масштабом. Процесс включает в себя выполнение гауссовых сверток в различных изображениях и последующее вычитание соседних изображений друг из друга. В результате получается изображение, на котором выделяются края и объекты-капли. Затем мы смотрим на все пиксели по всем шкалам, чтобы найти локальные экстремумы - пиксели, которые представляют наибольшую величину изменения. Последний шаг - отфильтровать любые нежелательные функции с помощью методов обнаружения пороговых значений и краев.

Источники и дополнительная информация