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

Справедливости ради следует отметить, что именно люди маркируют изображения, а компьютер должен учиться на этом, поэтому компьютеры всегда должны наверстывать упущенное!

Имея это заявление об отказе от ответственности, давайте поговорим о SIFT — масштабно-инвариантном преобразовании объектов, волшебной технике, которая может извлекать функции из изображений, сравнивать их, правильно выравнивать, если это необходимо, и даже выполнять сшивание изображений.

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

Это область исследований, на которую у одних из лучших ученых мира ушло более 2 десятилетий.

Цель состоит в том, чтобы сравнить схожие черты между двумя похожими изображениями, которые не идентичны.

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

Когда два изображения передаются алгоритму SIFT, он сначала идентифицирует то, что называется каплями или областями интереса в разных масштабах (это важно, чтобы позаботиться о масштабе). Второй шаг заключается в определении выравнивания среди изображений, т. е. ощущения направления/выравнивания, а затем масштабного коэффициента, после чего, наконец, мы можем сравнить эти капли/области интереса и посмотреть, совпадают ли они, тогда и только тогда мы закончим с функцией. обнаружение соответствия/изображения и сравнение.

Теперь давайте рассмотрим математику всех шагов

Первый шаг: идентификация BLOB-объектов в различных масштабах.

На этом этапе мы используем двумерный гауссовский фильтр, сглаживающий все изображения, и извлекаем нормализованные логарифмические гауссовы значения для разных сигм (сигма — это значение гауссовой дисперсии). Весы. некоторые капли могут быть идентифицированы при 1 сигма, другие при n сигма и так далее.

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

Следующим шагом является определение ориентации:

Для определения ориентации (т. е. изображение может быть наклонено по сравнению с другим) мы используем методы обнаружения краев, такие как «обнаружение хитрых краев» для каждого пикселя на всем изображении. После определения краев на уровне пикселей мы строим гистограмму направлений. (примерно 8 разных направлений по сравнению с количеством пикселей. Направление с наибольшим количеством будет считаться ориентацией капли.

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

Последний шаг — «идентификация похожего пятна» (после корректировки масштаба и ориентации).

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

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

Таким образом, алгоритм SIFT выполнил то, что мы и предполагали, он помог нам определить интересные особенности, затем помог определить ориентацию и, наконец, определить точные пятна на разных изображениях.

Спасибо за чтение!

Первоначально опубликовано по адресу https://www.linkedin.com/pulse/first-principles-approach-feature-blob-detection-using-krishna-yogi/