Как нормализовать дескрипторы функций OpenCV в целочисленном масштабе? - PullRequest
1 голос
/ 19 октября 2011

Реализация OpenCV SURF возвращает последовательность из 64/128 32-битных значений с плавающей запятой (дескриптор) для каждой характерной точки, найденной на изображении.Есть ли способ нормализовать значения с плавающей точкой и привести их к целочисленной шкале (например, [0, 255])?Это позволит сэкономить важное место (1 или 2 байта на значение вместо 4).Кроме того, преобразование должно гарантировать, что дескрипторы остаются значимыми для других целей, таких как кластеризация.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 12 февраля 2012

Вы можете обрабатывать объекты с плавающей точкой как обычное изображение (Mat или cvmat), а затем использовать cv :: normalize ().Другим вариантом является использование cv :: norm () для поиска диапазона значений дескриптора, а затем cv :: convertTo () для преобразования в CV_8U.Посмотрите документацию OpenCV для этих функций.

0 голосов
/ 05 июня 2015

Дескриптор, возвращаемый cv :: SurfFeatureDetector, уже нормализован.Вы можете убедиться в этом, взяв норму L2 возвращаемого cv :: Mat, или обратитесь к статье.

0 голосов
/ 01 ноября 2011

Есть и другие функции, кроме SURF. BRIEF экстрактор использует только 32 байта на дескриптор. Он использует 32 байта без знака [0-255] в качестве своих элементов. Вы можете создать его так:

Ptr ptrExtractor = DescriptorExtractor::create("BRIEF");

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

...