Как выбрать количество интервалов при создании гистограммы HSV?

Я читал некоторую документацию о гистограмме HSV, и в нескольких ссылках канал насыщения был квантован на 256 значений. Это почему? Есть ли причина выбора этого числа? У меня те же вопросы по каналу Hue, часто он квантуется на 180 значений.


person Rami    schedule 13.07.2014    source источник
comment
Неофициальный ответ (т. е. не подкрепленный какой-либо документацией): 256, потому что программисты любят круглые числа — он помещается в один байт. И 180, потому что окружность HSB составляет 360 [градусов], но 360 не помещаются в один байт.   -  person Jongware    schedule 14.07.2014
comment
Спасибо Jongware, когда я узнал о гистограммах RGB, я видел людей, использующих 4x4x4, 8x8x8 или 16x16x16. В HSV я говорю только 256 для насыщения. почему не 16 например? мне нужно, чтобы он всегда был таким большим?   -  person Rami    schedule 14.07.2014
comment
Я думаю, что размер каждого бина (H, S, B) должен отражать то, для чего вы пытаетесь его использовать. Этот ТАК вопрос, например, использует большой интервал для оттенка — цвет считается самым важным — и только 3 для насыщенности и яркости. Основное ограничение заключается в том, что размеры бинов, умноженные друг на друга, должны использовать достаточно небольшой объем памяти, но покрывать достаточное количество каждого компонента для равномерного заполнения. Возможно, здесь вступает в игру метод проб и ошибок.   -  person Jongware    schedule 14.07.2014
comment
Ясно и понятно, большое спасибо @Jongware, не могли бы вы написать свой последний комментарий в качестве ответа? так что я могу установить это как ответ на мой вопрос :)   -  person Rami    schedule 15.07.2014


Ответы (1)


Отказ от ответственности: неофициальные ответы (т. е. не подкрепленные какой-либо документацией):

«256» — популярное число для обозначения размера ячейки, потому что программисты любят круглые числа — оно помещается в один байт. И "180", потому что окружность HSB - это "360 [градусов]", но "360" не помещается в один байт.

Для многих форматов изображений диапазон значений RGB ограничен 0..255 на канал — всего 3 байта. Чтобы сохранить тот же объем данных (игнорируя любые артефакты преобразования в другую цветовую модель), насыщенность и яркость также часто выражаются в отдельных байтах. То же самое можно сделать для оттенка, масштабируя исходный диапазон 0..359 (поскольку оттенок обычно выражается как значение в градусах на цветовом колесе HSB) до диапазона байтов 0..255. Однако, вероятно, потому что легче выполнять вычисления с числом, близким к исходному полному кругу на 360°, диапазон обрезается до 0..179. Таким образом, значение может быть сохранено в одном байте (и, таким образом, «HSB» использует столько же памяти, сколько и «RGB») и может быть тривиально преобразовано обратно (близко к) исходному значению — умножению на 2. Очевидно, придерживаться место для хранения выигрывает над верностью.

Учитывая 256 значений для S и B и 180 для H, вы получите цветовое пространство 256 * 256 * 180 = 11 796 480 цветов. Чтобы проверить количество цветов, вы строите гистограмму: массив, в котором вы можете считывать общее количество пикселей определенного цвета или цветового диапазона. Использование здесь цветового диапазона вместо фактических значений значительно снижает требования к памяти.

Для цветного изображения RGB с довольно равномерным распределением цветов вы можете сдвинуть каждый канал вниз на определенное количество битов. Вот как работает прямое преобразование из 24-битного «истинного цвета» RGB в 15-битное пространство RGB «высокого цвета»: каждый канал делится на 8, уменьшая 256 значений до 32 (5 бит на канал). Преобразование в 16-битное пространство RGB с высокими цветами работает так же; бит, оставшийся после 15-битного преобразования, назначается зеленому. Таким образом, диапазон цветов для зеленого удваивается, что полезно, поскольку человеческий глаз более восприимчив к оттенкам зеленого, чем к двум другим основным цветам.

Ситуация усложняется, когда цвета входного изображения не распределены равномерно. Наивное решение состоит в том, чтобы создать массив из [256][256][256], инициализировать все нулями, затем заполнить массив цветами изображения и, наконец, отсортировать их. Есть лучшие альтернативы — позвольте мне обратиться к моей старой Компьютерной графике [1] здесь. Подожди.

В 13.4 Воспроизведение цвета упоминаются названия двух разных подходов от Heckbert (Квантование цветового изображения для отображения кадрового буфера, SIGGRAPH 82): популярность алгоритмы медианной обрезки. (К сожалению, это все, что они говорят об этой теме. Я предполагаю, что эффективный код для обоих вариантов можно найти в Google.)

Грубое предположение:

Размер каждого бина (H, S, B) должен отражать то, для чего вы пытаетесь его использовать. Этот старый вопрос SO , например, использует большой интервал для hue — цвет считается самым важным — и только 3 разных значения для насыщенности и яркости. Таким образом, яркие изображения с некоторыми затемненными областями (скажем, комикс) дадут хороший разброс на этой гистограмме, а фотография в реальном цвете — не такой большой.

Основное ограничение заключается в том, что размеры бинов, умноженные друг на друга, должны использовать достаточно небольшой объем памяти, но покрывать достаточное количество каждого компонента для равномерного заполнения. Возможно, здесь вступает в игру метод проб и ошибок. Вы могли бы изначально равномерно распределить все компоненты H, S и B по доступной памяти в вашей гистограмме и обработать небольшую часть изображения; скажем, 1 из 4 пикселей по горизонтали и вертикали. Если вы заметили, что один из контейнеров для компонентов заполняется слишком быстро, в то время как другие остаются нетронутыми, отрегулируйте диапазоны и перезапустите.

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


[1] Компьютерная графика. Принципы и практика. (1997) Дж. Д. Фоли, А. ван Дам, С.К. Фейнер и Дж. Ф. Хьюз, 2-е изд., Рединг, Массачусетс: Addison-Wesley.

person Jongware    schedule 14.07.2014