Кодирование нескольких слоев информации с помощью OpenCV - PullRequest
0 голосов
/ 15 января 2019

Как лучше всего оптимизировать кодирование нескольких слоев точек данных с помощью OpenCV?

Например, если есть изображение леса, и я хочу закодировать большие метки, такие как «лес», метки среднего размера, такие как «дерево», то маленькие метки, такие как «лист» или «ветвь», один пиксель. может иметь 3 метки: лес, дерево, лист, а затем для каждой из них может быть значение вероятности.

Это сравнительно упрощенный пример, но можно представить, что ярлыков будет гораздо больше.

Самым простым способом было бы просто иметь по одному cv :: Mat для каждой возможной метки, но мой вопрос больше направлен на лучший способ оптимизировать использование памяти.

1 Ответ

0 голосов
/ 15 января 2019

Я думаю, что вы можете использовать биты для кодирования этой информации. Например, предположим, что вы используете изображение размером 8U (1 байт на пиксель). Тогда вы можете использовать что-то вроде

0x01 : leaf
0x02 : tree
0x04 : forest

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

Итак,

0x03 будет leaf, tree

0x06 будет tree, forest

Для уровней достоверности вам придется использовать отдельные каналы. Если вы согласны с потерей точности, вы можете использовать для них каналы 8U вместо каналов 32F. Таким образом, вместо того, чтобы хранить 0,6578 в формате с плавающей запятой, вы можете сохранить его как 66 в байте.

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

...