Почему мы используем числа с плавающей запятой в OpenCV? - PullRequest
0 голосов
/ 25 июня 2018

Я знаю форматы cv::8UC1 или cv::8UC3 для изображений, это 1-канальные символы без знака 0-255 или 3-канальные для форматов изображений без знака RGB 0-255 для хранения соответственно.

Но как насчет форматов с плавающей запятой, таких как cv::32F? У меня есть два вопроса об этих парнях.

1-Почему они 32-битные? Я имею в виду, почему нам нужно хранить интенсивность пикселя в диапазоне 0-4294967296? (Тогда я думаю, что мы должны снова преобразовать его в 8-битные числа в диапазоне 0-255!)

2-Как я знаю, мы используем двумерную матрицу для хранения изображения, имеющего целочисленные координаты (x, y). Но я видел в некоторых кодах, что они используют числа с плавающей точкой, чтобы найти местоположение / координаты пикселя. Как эта часть книги О'рейли:

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

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

Что это значит?

1 Ответ

0 голосов
/ 25 июня 2018

Я постараюсь сделать краткое объяснение, но я уверен, что со временем вы поймете это лучше.Когда мы снимаем изображение цифровым способом, мы фактически используем датчик в виде таблицы, где мы измеряем количество света, попадающего в эту ячейку.Свет - это физическая величина.тот факт, что вы ограничиваете измеренные значения до 0,255, не означает, что наш глаз не способен увидеть более тонкое деление.Поэтому многие приложения действительно дают значения 0 ... 2 ^ 16-1 вместо 0 ... 2 ^ 8-1 (что составляет 255).Теперь, я думаю, вы знаете достаточно для ответа на ваш вопрос:

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

  2. Как упоминалось выше, мы фиксируемтолько «таблица пикселей», но мы предполагаем, что реальность является более сложной.Как это действительно так.Таким образом, фермер может «упасть» между двумя пикселями.Итак, мы можем выбрать другой подход: попытаться найти Трактор, на котором едет фермер, и взять его середину.Который может справедливо упасть между двумя пикселями.

Продолжайте читать, с практикой вы освоите его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...