OpenCV Python и гистограмма ориентированного градиента

Есть ли какая-нибудь полезная документация по использованию функциональности HOGDescriptor в Python OpenCV? Я читал документацию по C++, но версия Python работает по-другому, и я не могу понять это, просто поковырявшись.

В частности, я ищу команду OpenCV в Python, которая принимает изображение и местоположение пикселя в качестве входных данных (и, возможно, также некоторые параметры размера окна обнаружения), а затем просто возвращает массив Python, который содержит вектор признаков HOG (т.е. список или массив NumPy и т. д., где j-й элемент списка является j-м компонентом гистограммы из гистограммы ориентированных градиентов).

Моя цель состоит в том, чтобы передать эти гистограммы в конвейеры SVM scikits.learn (чтобы я мог избежать обучения OpenCV SVM), но для этого мне нужны сами фактические векторы признаков, а не тот материал конвейеров цепочки обработки HOG, который кажется OpenCV использовать.

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


person ely    schedule 04.10.2011    source источник
comment
Примечание: разумный исполняемый файл C++ с простыми в использовании аргументами командной строки тоже подойдет, и я мог бы просто включить его в свой материал Python. Если вы знаете какие-либо проекты с эффективным кодом HOG, это может быть полезно.   -  person ely    schedule 04.10.2011


Ответы (4)


Как насчет Matlab в качестве источника вдохновения, принадлежащего этому статья

person Maurits    schedule 05.10.2011
comment
Спасибо! Возможно, я сам смогу перевести это на Python. Однако портировать его на другие языки может быть сложнее. - person ely; 06.10.2011

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

person Tony S Yu    schedule 11.12.2011
comment
Да, я получил расширенную копию этого до того, как он был принят в scikits.image. Я обнаружил, что это просто недостаточно хорошо или быстро. Другое дело, что интерфейс слишком сложен в использовании. Например, код Dalal и Triggs HoG принимает списки ключевых точек на изображении, тогда как версия scikits.image может делать только исправления. В итоге я просто написал свой собственный код. Я написал простую ванильную HoG для Python, а также собственную версию пирамидальной HoG. Наконец, я реализовал две версии GPU в PyCUDA. Вы можете найти код по ссылке здесь - person ely; 12.12.2011

взгляните на http://sourceforge.net/projects/hogtrainingtuto/?_test=beta для некоторого кода Python HOG и кучи реализаций C, cpp, java. Что касается реальной документации python и opencv, я тоже в недоумении. Но это должно вам немного помочь

person mugetsu    schedule 04.10.2011
comment
Я не вижу никакого кода Python в файле архива, который я скачал по этой ссылке. Единственная вещь, связанная с HOG, - это исполняемый файл под названием «cvHogFeatureCal», но у него нет документации, которую я могу найти. Другое дело, что OpenCV обычно реализует классификаторы как каскады, где пользователь вводит жесткие негативные изображения, а затем истинные позитивы для обучения, и OpenCV автоматически проходит весь путь до создания классификаторов. Мне особенно нужно избегать этого и просто захватывать векторы признаков HOG, а затем проводить обучение классификатора с другим программным обеспечением (scikits.learn). - person ely; 05.10.2011

Реализация 'Poselets' здесь имеет реализацию C дескрипторов HOG, которые, хотя и написаны имея в виду Matlab, можно адаптировать для работы с Python с использованием ctypes и numpy.

Вы можете удалить все подпрограммы mex и объявить свои входные и выходные массивы как float * в функции C.

Вам нужно убедиться, что ваши массивы numpy являются непрерывными Fortran. Это может быть достигнуто за счет:

image = image.copy(order='F', dtype = float32)

person Martin    schedule 11.10.2011
comment
Я использую вещи Poselet довольно регулярно. Основываясь на том, насколько недокументированным и непостижимым был их Java-код для их инструмента аннотации браузера, я склонен просто использовать код Matlab в верхнем посте. Идея Poselet великолепна, но тот факт, что (а) она находится в Matlab и (б) они не хотят помогать коллегам-ученым, предоставляя какую-либо поддержку их кода, делает меня гораздо менее склонным использовать их материал. Вероятно, было бы столько же работы, чтобы перевести лучшую процедуру Matlab от Maurits. - person ely; 11.10.2011
comment
Честно говоря, я мало экспериментировал с их реализацией, думаю, в основном из-за отсутствия документации! Но я создал что-то подобное, используя их процедуру HOG, как я описал выше, и это работает хорошо. Если скорость является приоритетом, использование их процедуры C может быть лучшим решением, чем вложенные циклы в python. - person Martin; 11.10.2011