Отображение 8-битного изображения на 30-битном оборудовании, что делать с дополнительными битами? [закрыто]

Я создаю некоторое оборудование с графическим пользовательским интерфейсом, и мои изображения хранятся с 8 битами на пиксель (bpp) в формате RRRGGGBB. Однако мой видеочип требует 30 бит на пиксель (10 бит для каждого цвета), что оставляет мне проблему преобразования каждого канала из 3 бит (или 2 в синем случае) в 10 бит.

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

  • Сопоставьте исходные 3 бита с 3 старшими битами видеочипа, а оставшиеся биты установите на 0 (я полагаю, что белый цвет не будет таким белым)
  • Сопоставьте исходные 3 бита с 3 старшими битами видеочипа, а оставшиеся биты установите в 1 (я полагаю, что черный цвет не будет полностью черным)
  • Сопоставьте каждый исходный бит (b1,b2,b3) с несколькими битами на видеочипе (например, b1,b1,b1,b1,b2,b2,b2,b,b3,b3) - я не знаю, делает ли это любое чувство...

Какой из этих подходов лучше других или есть более адекватное решение?

Спасибо,

Programmers.SE гораздо лучше подходит для этого вопроса. Общей практикой в ​​этой области является повторение сопоставления шаблонов b1,b2,b3 -> b1,b2,b3,b1,b2,b3,b1,b2,b3,b1.
Этот вопрос кажется не по теме, потому что он касается графического программирования, а не фотографии.
@mattdm, хотя на самом деле вопрос касается программирования, сообщество Photo.SE гораздо более способно ответить на него, как показывают все ответы до сих пор. Люди здесь очень хорошо разбираются в этом вопросе.
Тем не менее, это не по теме. Поскольку многие из присутствующих здесь приходят с одного из трех больших сайтов, мы склонны склоняться к технической/гиковой стороне фотографии, так что, конечно, вы получите много людей, которые знают ответы. Бьюсь об заклад, вы могли бы получить достойный ответ на многие вопросы общей инженерии, информатики или физики, не связанные с фотографией. Несмотря на то, что это возможно, я бы не хотел этого делать, потому что это самоусиливающийся способ отклонить сайт от более широкой области фотографии только в эту техническую нишу.

Ответы (3)

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

Например, предположим, что вы хотите расширить 3-битное значение до 8-битного, используя полный динамический диапазон 8-битного числа, но распределяя 8 возможных входных значений по этому диапазону как можно лучше. Допустим, исходные биты 3-битного входного числа равны ABC. Лучшим расширенным 8-битным числом с учетом вышеуказанных ограничений будет ABCABCAB.

Вероятно, это не совсем по теме Photo.SE. Тем не менее, вы, вероятно, захотите интерполировать. У вас есть диапазон [0, 7], представляемый тремя битами, и вы хотите растянуть его так, чтобы 0 оставался равным 0, а 7 отображался на 1023 (максимальное значение, которое можно представить десятью битами). Предполагая линейную интерполяцию, вы можете вычислить соответствующее 10-битное значение из 3-битного значения следующим образом:

v 10 бит = v 3 бит * 1023/7

Да, не по теме, и интерполяция — это то, что нужно, но я думаю, что вы можете получить лучшие результаты, используя соседние пиксели в своей интерпретации. Используйте пиксели N, S, E и W с одним весом, а пиксели NE, SE, NW и SW с меньшим весом, возможно, что-то связанное с квадратным корнем из 2.

Погуглите в поисках предсказания Пирша, возможно, вам поможет кое-что из математики.

Тем не менее, результаты не будут такими уж хорошими.