Обнаружение особенностей |
---|
Обнаружение краев |
Обнаружение угла |
Обнаружение пятен |
Ridge detection |
Hough transform |
|
Structure tensor |
Affine invariant feature detection |
Feature description |
Scale space |
Преобразование Хафа — это метод извлечения признаков, используемый в анализе изображений , компьютерном зрении , распознавании образов и цифровой обработке изображений . [1] [2] Целью метода является поиск несовершенных экземпляров объектов в пределах определенного класса форм с помощью процедуры голосования. Эта процедура голосования выполняется в пространстве параметров , из которого кандидаты на объекты получаются как локальные максимумы в так называемом пространстве аккумуляторов, которое явно строится алгоритмом для вычисления преобразования Хафа.
Классическое преобразование Хафа было связано с идентификацией линий на изображении, но позже преобразование Хафа было расширено для идентификации положений произвольных форм, чаще всего кругов или эллипсов . Преобразование Хафа, в том виде, в котором оно используется сегодня, было изобретено Ричардом Дудой и Питером Хартом в 1972 году, которые назвали его «обобщенным преобразованием Хафа» [3] в честь соответствующего патента 1962 года Пола Хафа. [4] [5] Преобразование было популяризировано в сообществе компьютерного зрения Даной Х. Баллардом через журнальную статью 1981 года под названием « Обобщение преобразования Хафа для обнаружения произвольных форм ».
Первоначально он был изобретен для машинного анализа фотографий, полученных с помощью пузырьковой камеры (Хаф, 1959).
Преобразование Хафа было запатентовано в качестве патента США 3,069,654 в 1962 году и передано Комиссии по атомной энергии США под названием «Метод и средства распознавания сложных шаблонов». Этот патент использует параметризацию наклона-пересечения для прямых линий, что неудобно приводит к неограниченному пространству преобразования, поскольку наклон может стремиться к бесконечности.
Параметризация rho–theta, которая сегодня используется повсеместно, была впервые описана в
хотя это было стандартом для преобразования Радона , по крайней мере, с 1930-х годов.
Вариант О'Гормана и Клоуза описан в
История изобретения современной формы преобразования Хафа изложена в
При автоматическом анализе цифровых изображений часто возникает подзадача обнаружения простых форм, таких как прямые линии, окружности или эллипсы. Во многих случаях детектор краев может использоваться в качестве этапа предварительной обработки для получения точек изображения или пикселей изображения, которые находятся на желаемой кривой в пространстве изображения. Однако из-за несовершенств либо в данных изображения, либо в детекторе краев могут быть пропущенные точки или пиксели на желаемых кривых, а также пространственные отклонения между идеальной линией/окружностью/эллипсом и зашумленными точками края, полученными от детектора краев. По этим причинам часто бывает нетривиально сгруппировать извлеченные характеристики края в соответствующий набор линий, окружностей или эллипсов. Целью преобразования Хафа является решение этой проблемы, позволяя выполнять группировки точек края в кандидатов на объекты путем выполнения явной процедуры голосования по набору параметризованных объектов изображения (Шапиро и Стокман, 304).
Простейшим случаем преобразования Хафа является обнаружение прямых линий. В общем случае прямая линия y = mx + b может быть представлена как точка ( b , m ) в пространстве параметров. Однако вертикальные линии представляют собой проблему. Они могут привести к неограниченным значениям параметра наклона m . Таким образом, по вычислительным причинам Дуда и Харт [6] предложили использовать нормальную форму Гессе
где — расстояние от начала координат до ближайшей точки на прямой, а — угол между осью и линией, соединяющей начало координат с этой ближайшей точкой.
Интуиция для этой формы, подобно уравнению плоскости, заключается в том, что каждый вектор на линии должен быть перпендикулярен (ортогонален) прямой линии длины , которая исходит из начала координат. Можно видеть, что точка пересечения функциональной линии и перпендикулярной линии, которая исходит из начала координат, находится в . Таким образом, для любой точки на линии вектор должен быть ортогонален вектору . Следовательно, мы получаем, что для любой точки на функциональной линии уравнение должно быть удовлетворено. Следовательно, . Поскольку и , мы получаем . Поскольку , мы получаем окончательную форму .
Поэтому можно связать с каждой линией изображения пару . Плоскость иногда называют пространством Хафа для множества прямых линий в двух измерениях. Такое представление делает преобразование Хафа концептуально очень близким к двумерному преобразованию Радона . Фактически, преобразование Хафа математически эквивалентно преобразованию Радона, но эти два преобразования имеют различные вычислительные интерпретации, традиционно связанные с ними. [7]
Если задана одна точка на плоскости, то набор всех прямых линий, проходящих через эту точку, соответствует синусоидальной кривой в плоскости ( r , θ ), которая уникальна для этой точки. Набор из двух или более точек, образующих прямую линию, создаст синусоиды, пересекающиеся в точке ( r , θ ) для этой линии. Таким образом, задача обнаружения коллинеарных точек может быть преобразована в задачу поиска конкурирующих кривых .
При наличии формы, параметризованной с помощью , принимающей значения в наборе , называемом пространством формы, можно интерпретировать преобразование Хафа как обратное преобразование распределения вероятностей в пространстве изображения в пространство формы и интерпретировать обнаружение формы как оценку максимального правдоподобия .
Явно преобразование Хафа выполняет приближенный наивный байесовский вывод. Мы начинаем с однородного априорного значения в пространстве форм. Мы рассматриваем только положительные свидетельства и игнорируем все отрицательные свидетельства, чтобы мы могли обнаружить частично закрытые формы.
Мы суммируем логарифмическое правдоподобие в пространстве формы до аддитивной константы. Предположение наивного Байеса означает, что все пиксели в пространстве изображения предоставляют независимые свидетельства, так что их правдоподобия умножаются, то есть их логарифмические правдоподобия складываются. Свобода в аддитивной константе позволяет нам не выполнять никаких операций над «фоновыми пикселями» в пространстве формы.
Наконец, мы выполняем оценку максимального правдоподобия, выбирая пики в логарифмическом правдоподобии на пространстве форм. [8]
Производные
Алгоритм линейного преобразования Хафа оценивает два параметра, которые определяют прямую линию. Пространство преобразования имеет два измерения, и каждая точка в пространстве преобразования используется как аккумулятор для обнаружения или идентификации линии, описанной . Каждая точка в обнаруженных краях на изображении вносит вклад в аккумуляторы.
Размерность аккумулятора равна числу неизвестных параметров, т. е. двум, учитывая квантованные значения и в паре . Для каждого пикселя в и его окрестности алгоритм преобразования Хафа определяет, достаточно ли доказательств прямой линии в этом пикселе. Если да, он вычисляет параметры этой линии, затем ищет ячейку аккумулятора, в которую попадают параметры, и увеличивает значение этой ячейки.
Находя ячейки с наивысшими значениями, как правило, путем поиска локальных максимумов в пространстве аккумулятора, можно извлечь наиболее вероятные линии и считать их (приблизительные) геометрические определения (Шапиро и Стокман, 304). Самый простой способ найти эти пики — применить некоторую форму порога, но другие методы могут дать лучшие результаты в других обстоятельствах — определить, какие линии найдены, а также сколько. Поскольку возвращаемые линии не содержат никакой информации о длине, часто необходимо на следующем этапе найти, какие части изображения соответствуют каким линиям. Более того, из-за ошибок несовершенства на этапе обнаружения краев, как правило, будут ошибки в пространстве аккумулятора, что может сделать нетривиальным поиск соответствующих пиков и, следовательно, соответствующих линий.
Конечный результат линейного преобразования Хафа — двумерный массив (матрица), аналогичный аккумулятору — одно измерение этой матрицы — квантованный угол , а другое измерение — квантованное расстояние . Каждый элемент матрицы имеет значение, равное сумме точек или пикселей, которые расположены на линии, представленной квантованными параметрами . Таким образом, элемент с наибольшим значением указывает на прямую линию, которая наиболее представлена во входном изображении. [9]
Рассмотрим три точки данных, показанные здесь черными точками.
Из расчетов видно, что в обоих случаях опорная линия в 60° имеет схожую длину. Отсюда следует, что соответствующие линии (синие на рисунке выше) очень похожи. Таким образом, можно предположить, что все точки лежат близко к синей линии.
Ниже приведен другой пример, демонстрирующий результаты преобразования Хафа на растровом изображении, содержащем две толстые линии.
Результаты этого преобразования были сохранены в матрице. Значение ячейки представляет собой количество кривых, проходящих через любую точку. Более высокие значения ячейки отображаются ярче. Два отчетливо ярких пятна являются параметрами Хафа двух линий. Из положений этих пятен можно определить угол и расстояние от центра изображения двух линий на входном изображении.
Улучшение, предложенное О'Горманом и Клоузом, может быть использовано для обнаружения линий, если принять во внимание, что локальный градиент интенсивности изображения обязательно будет ортогонален краю. Поскольку обнаружение края обычно включает вычисление величины градиента интенсивности, направление градиента часто находится как побочный эффект. Если заданная точка координат ( x,y ) действительно находится на линии, то локальное направление градиента дает параметр θ , соответствующий указанной линии, и затем немедленно получается параметр r . (Шапиро и Стокман, 305) Направление градиента можно оценить с точностью до 20°, что сокращает след синусоиды с полных 180° до примерно 45°. Это сокращает время вычислений и имеет интересный эффект сокращения количества бесполезных голосов, тем самым улучшая видимость пиков, соответствующих реальным линиям на изображении.
Фернандес и Оливейра [10] предложили улучшенную схему голосования для преобразования Хафа, которая позволяет программной реализации достигать производительности в реальном времени даже на относительно больших изображениях (например, 1280×960). Преобразование Хафа на основе ядра использует ту же параметризацию, предложенную Дудой и Хартом, но работает с кластерами приблизительно коллинеарных пикселей. Для каждого кластера голоса подаются с использованием ориентированного эллиптического гауссовского ядра, которое моделирует неопределенность, связанную с наиболее подходящей линией относительно соответствующего кластера. Такой подход не только значительно улучшает производительность схемы голосования, но и создает гораздо более чистый аккумулятор и делает преобразование более устойчивым к обнаружению ложных линий.
Лимбергер и Оливейра [11] предложили детерминированный метод обнаружения плоскости в неорганизованных облаках точек, стоимость которого определяется числом образцов, достигая производительности в реальном времени для относительно больших наборов данных (до точек на процессоре 3,4 ГГц). Он основан на быстрой стратегии голосования преобразования Хафа для плоских областей, вдохновленной преобразованием Хафа на основе ядра (KHT). Это трехмерное преобразование Хафа на основе ядра (3DKHT) использует быстрый и надежный алгоритм для сегментации кластеров приблизительно копланарных образцов и отдает голоса за отдельные кластеры (вместо отдельных образцов) на ( ) сферическом аккумуляторе с использованием трехмерного гауссова ядра. Этот подход на несколько порядков быстрее существующих (недетерминированных) методов обнаружения плоскости в облаках точек, таких как RHT и RANSAC , и лучше масштабируется с размером наборов данных. Его можно использовать с любым приложением, требующим быстрого обнаружения плоских объектов в больших наборах данных.
Хотя версия преобразования, описанная выше, применима только для поиска прямых линий, аналогичное преобразование можно использовать для поиска любой формы, которая может быть представлена набором параметров. Например, окружность можно преобразовать в набор из трех параметров, представляющих ее центр и радиус, так что пространство Хафа становится трехмерным. Произвольные эллипсы и кривые также можно найти таким образом, как и любую форму, легко выраженную в виде набора параметров.
Обобщение преобразования Хафа для обнаружения аналитических фигур в пространствах любой размерности было предложено Фернандесом и Оливейрой. [12] В отличие от других подходов, основанных на преобразовании Хафа для аналитических фигур, метод Фернандеса не зависит от формы, которую нужно обнаружить, или от типа входных данных. Обнаружение может быть приведено к типу аналитической фигуры путем изменения предполагаемой модели геометрии, в которой были закодированы данные (например, евклидово пространство , проективное пространство , конформная геометрия и т. д.), в то время как предложенная формулировка остается неизменной. Кроме того, она гарантирует, что предполагаемые фигуры представлены с наименьшим возможным числом параметров, и позволяет одновременно обнаруживать различные виды фигур, которые наилучшим образом соответствуют входному набору записей с различной размерностью и различными геометрическими определениями (например, одновременное обнаружение плоскостей и сфер, которые наилучшим образом соответствуют набору точек, прямых линий и окружностей).
Для более сложных фигур на плоскости (т. е. фигур, которые не могут быть представлены аналитически в каком-либо двумерном пространстве) используется обобщенное преобразование Хафа [13] , которое позволяет объекту голосовать за определенное положение, ориентацию и/или масштабирование фигуры с использованием предопределенной таблицы соответствия. Преобразование Хафа накапливает вклады всех пикселей в обнаруженном крае.
Изменить алгоритм для обнаружения круговых фигур вместо линий сравнительно просто.
Если мы заранее не знаем радиус окружности, которую пытаемся найти, мы можем использовать трехмерное пространство аккумуляторов для поиска окружностей с произвольным радиусом. Естественно, это более затратно с точки зрения вычислений.
Этот метод также позволяет обнаруживать круги, которые частично находятся за пределами пространства аккумулятора, при условии, что внутри него все еще находится достаточная часть площади круга.
Преобразование Хафа также может использоваться для обнаружения 3D-объектов в данных диапазона или 3D- облаках точек . Расширение классического преобразования Хафа для обнаружения плоскости довольно простое. Плоскость представлена ее явным уравнением , для которого мы можем использовать 3D-пространство Хафа, соответствующее , и . Это расширение страдает от тех же проблем, что и его 2D-аналог, т. е. почти горизонтальные плоскости могут быть надежно обнаружены, в то время как производительность ухудшается, когда плоскостное направление становится вертикальным (большие значения и усиливают шум в данных). Эта формулировка плоскости использовалась для обнаружения плоскостей в облаках точек, полученных с помощью воздушного лазерного сканирования [14], и работает очень хорошо, потому что в этой области все плоскости почти горизонтальны.
Для обобщенного обнаружения плоскости с использованием преобразования Хафа плоскость может быть параметризована ее нормальным вектором (с использованием сферических координат) и ее расстоянием от начала координат, что приводит к трехмерному пространству Хафа. Это приводит к тому, что каждая точка во входных данных голосует за синусоидальную поверхность в пространстве Хафа. Пересечение этих синусоидальных поверхностей указывает на наличие плоскости. [15] Более общий подход для более чем 3 измерений требует эвристики поиска, чтобы оставаться осуществимым. [16]
Преобразование Хафа также использовалось для поиска цилиндрических объектов в облаках точек с использованием двухэтапного подхода. Первый шаг находит ориентацию цилиндра, а второй шаг находит положение и радиус. [17]
Одна общая деталь вариации. То есть, нахождение ячеек с наибольшим количеством на одном этапе может быть использовано для ограничения диапазона значений, искомых на следующем этапе.
Пространство параметров высокой размерности для преобразования Хафа не только медленное, но и при необдуманной реализации может легко переполнить доступную память. Даже если среда программирования позволяет выделять массив, больший, чем доступное пространство памяти, через виртуальную память, количество страниц , необходимых для этого, будет очень большим, поскольку массив накопителя используется в режиме случайного доступа, редко останавливаясь в смежной памяти, поскольку он переходит от индекса к индексу.
Рассмотрим задачу поиска эллипсов на изображении 800x600. Предполагая, что радиусы эллипсов ориентированы вдоль главных осей, пространство параметров является четырехмерным. ( x , y ) определяет центр эллипса, а a и b обозначают два радиуса. Допуская, что центр может находиться в любом месте изображения, добавляем ограничение 0 < x < 800 и 0 < y < 600. Если радиусам задать те же значения, что и ограничениям, то останется разреженно заполненный массив аккумуляторов из более чем 230 миллиардов значений.
Программа, задуманная таким образом, вряд ли сможет выделить достаточно памяти. Это не значит, что проблема не может быть решена, а лишь то, что должны быть найдены новые способы ограничения размера массива аккумуляторов, что делает это осуществимым. Например:
Применив только первые три из этих ограничений к приведенному примеру, размер массива аккумуляторов сокращается почти в 1000 раз, что позволяет уменьшить его до размера, который с гораздо большей вероятностью поместится в памяти современного компьютера.
Юнхун Се и Цян Цзи предлагают эффективный способ реализации преобразования Хафа для обнаружения эллипсов, преодолевая проблемы с памятью. [18] Как обсуждалось в алгоритме (на странице 2 статьи), этот подход использует только одномерный аккумулятор (для малой оси) для обнаружения эллипсов на изображении. Сложность составляет O(N 3 ) по количеству ненулевых точек на изображении.
Преобразование Хафа эффективно только в том случае, если большое количество голосов попадает в правую ячейку, так что ячейку можно легко обнаружить на фоне фонового шума. Это означает, что ячейка не должна быть слишком маленькой, иначе некоторые голоса попадут в соседние ячейки, тем самым уменьшая видимость основной ячейки. [19]
Кроме того, когда число параметров велико (то есть когда мы используем преобразование Хафа с обычно более чем тремя параметрами), среднее число голосов, поданных в одном бине, очень мало, и те бины, которые соответствуют реальной фигуре на изображении, не обязательно имеют гораздо большее число голосов, чем их соседи. Сложность увеличивается со скоростью с каждым дополнительным параметром, где — размер пространства изображения, а — число параметров. (Шапиро и Стокман, 310) Таким образом, преобразование Хафа должно использоваться с большой осторожностью, чтобы обнаружить что-либо, кроме линий или кругов.
Наконец, большая часть эффективности преобразования Хафа зависит от качества входных данных: края должны быть хорошо обнаружены, чтобы преобразование Хафа было эффективным. Использование преобразования Хафа на зашумленных изображениях — очень деликатный вопрос, и, как правило, перед этим необходимо использовать этап шумоподавления. В случае, когда изображение искажено спеклами, как в случае с радиолокационными изображениями, преобразование Радона иногда предпочтительнее для обнаружения линий, поскольку оно ослабляет шум посредством суммирования.