|
Подгонка 5/6/5 RGB под 18 бит (6/6/6) RGB |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 23)
|
Feb 21 2008, 06:42
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(DmitryR @ Feb 21 2008, 10:09)  Я бы предварительно посмотрел, как кодируется серый цвет в одном и другом формате, так как именно окраска серых тонов является самым заметным артефактом неправильного преобразования цвета. Да, спасибо, хорошая идея. Значит нужно проверить color map конкретного дисплея насчет его кодировки по серому относительно полного комплекта RGB, и затем сопоставить это с кодировкой серой шкалы входного формата, так ? Ежели подогнать серые оттенки, гарантирует ли это правильность цветов ? А в принципе, может есть смысл рассмотреть перекодировку R, B в 6 бит по нелинейной шкале (обратное S) ?
|
|
|
|
|
Feb 21 2008, 07:37
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(torik @ Feb 21 2008, 11:06)  Если на входе RGB 565, а не цветоразностный, то наверное нет смысла перекодировать что-либо, просто *2 (сдвиг или прямо назначить на нужные выводы дисплея...). Кроме того, оттенки серого 6 бит и так выглядят неочень... А какой дисплей? Спасибо. Да, дейсвительно, на входе RGB 565, пока закодировал в 666 просто сдвигом влево R и B, либо думаю просто добавлю нули (или '1', пока не уверен) а коде конвертируя в 18 бит. Выходной дисплей: Kyocera TCG057QV1AC. Это 5.7" TFT со встроенным контроллером, принимает 18 бит RGB вход. В приципе основная информация идет ч/б, т.е. оттенки серого важны (хотя не требуется у них супер резолюция), но вход пред-определен как 565. Цвет нужен только для всяких overlayев (менюшки и т.д.), т.е. там очень высокая точность не сильно важна.
|
|
|
|
|
Feb 21 2008, 09:12
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(rv3dll(lex) @ Feb 21 2008, 12:17)  выкинуть нафиг младший бит в шестёрке и задействовать его под альфа канал Не понял ? Зачем альфа канал ? В приципе про таковой знаю только по наслышеке, никогда с ним не приходилось работать еще. А вообще оно релевантно мне ? Цитата(aaarrr @ Feb 21 2008, 12:19)  Не надо '1' - чистого черного цвета не будет, хотя 1ЕМР вряд ли будет сильно заметна. Спасибо. А что такое 1EMP ?
|
|
|
|
|
Feb 21 2008, 11:54
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
И как результаты, получается? Я как раз только-что вывел ч/б картинку на LCD панель, чтобы проверить выше сказанное. И получил какую-то непонятную проблему  : - итак, вход 565 - на дисплей 666 R и B сдвигаем на 1 влево (просто назначением пинов) - пока отсутствует старший разряд (закрываем, к примеру диафрагму, темная картинка) - все впорядке. А как только появляется старший разряд - начинаются какие-то мелькания... Может и не так все просто...
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Feb 21 2008, 12:34
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(torik @ Feb 21 2008, 15:54)  И как результаты, получается? Я как раз только-что вывел ч/б картинку на LCD панель, чтобы проверить выше сказанное. И получил какую-то непонятную проблему  : - итак, вход 565 - на дисплей 666 R и B сдвигаем на 1 влево (просто назначением пинов) - пока отсутствует старший разряд (закрываем, к примеру диафрагму, темная картинка) - все впорядке. А как только появляется старший разряд - начинаются какие-то мелькания... Может и не так все просто... На данном этапе отображаем на OLED дисплее (похожее на то что обычно идет в видоискателях цифровых камер, там где электронные видоискатели, не оптические), картинка в видоискателе нормальная, т.е. нашим требованиям удовлетворяет. Там OLED имеет сериальный вход 8 бит (т.е. R -> G -> B, бит на каждый), но мы подаем 5/6/5 так что данные сдвинуты на MSB. Кроме того идет выход видео на TV монитор, но там composite ессно, и я не уверен а каком формате там были данные в оригинале (до конвертации в composite) ибо это делается не нами и внутри системы в которую у нас доступа нет. В вашем случае получается что кода старший разряд на входе обнулен (в 565 - темная картинка) а мы сдвигаем нулем влево - мы по идее все-равно должны получить примерно схожий уровен в выходном формате (0х01111 в 5-битном формате должен примерно соответствовать 0х011110). Небольшие искажения можно ожидать, но по идее ничего драмматического... Нужно подумать что происходит в вашем случае...
|
|
|
|
|
Feb 21 2008, 18:07
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(torik @ Feb 21 2008, 18:54)  - итак, вход 565 - на дисплей 666 R и B сдвигаем на 1 влево (просто назначением пинов) Сдвигайте R и B на 1 влево, и если их старший (5) бит равен 1 - добавляйте еще 1. черный останется черным, а белый - белым. 0b000000 -> 0b000000 0b011111 -> 0b111110 0b100000 -> 0b100001 0b111111 -> 0b111111
|
|
|
|
|
Feb 22 2008, 11:06
|

Частый гость
 
Группа: Свой
Сообщений: 99
Регистрация: 27-10-07
Из: СПб
Пользователь №: 31 797

|
Цитата(Саша Z @ Feb 20 2008, 22:39)  Хочу удостовериться в правильности подхода: на входе имеем 16 бит RGB данные в формате 5/6/5, т.е. 5 бит на R, B, 6 бит на G. на выходе нужно 18 бит, т.е. 6 бит на каждый цвет. Смело умножайте R и B на 2. Можно, с коррекцией младшего разряда, как предлагал _pv. Формат 5-6-5 используется исключительно для экономии, позволяя вписаться в 16 разрядов. Человеческий глаз более восприимчив к зеленому цвету, поэтому он цифруется с большей точностью.
|
|
|
|
|
Feb 22 2008, 11:53
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Да - фиг с ней с коррекцией младшего бита.
Во, быть одна очень важная деталь, о которой забыли: если мы пишем в видеобуфер с камеры и одновременно выводим на монитор из этого же буфера, то получаем при динамической картинке помеху в виде горизонтальной полосы (ползущей по вертикали). Это вполне логично, ведь когда мы читаем из буфера для вывода на монитор, то в один прекрасный момент мы доходим до строки, где в данный момент идет запись с камеры. Т.е. в верхней части монитора выводится новый кадр, а внизу - еще предыдущей. Именно поэтому этой помехи не видно на статической картинке. Похожий эффект возникает и при использовании черезсстрочной развертки...
Методы борьбы: - синхронизировать вывод и ввод картинки. Подходит только если частоты ввода/вывода кратны. - использовать две страницы памяти. В одну пишем новый кадр, из другой пока выводим, после меняем местами... Этот способ проверил - порядок...
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Feb 22 2008, 14:55
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(torik @ Feb 22 2008, 15:53)  Да - фиг с ней с коррекцией младшего бита.
Во, быть одна очень важная деталь, о которой забыли: если мы пишем в видеобуфер с камеры и одновременно выводим на монитор из этого же буфера, то получаем при динамической картинке помеху в виде горизонтальной полосы (ползущей по вертикали). Это вполне логично, ведь когда мы читаем из буфера для вывода на монитор, то в один прекрасный момент мы доходим до строки, где в данный момент идет запись с камеры. Т.е. в верхней части монитора выводится новый кадр, а внизу - еще предыдущей. Именно поэтому этой помехи не видно на статической картинке. Похожий эффект возникает и при использовании черезсстрочной развертки...
Методы борьбы: - синхронизировать вывод и ввод картинки. Подходит только если частоты ввода/вывода кратны. - использовать две страницы памяти. В одну пишем новый кадр, из другой пока выводим, после меняем местами... Этот способ проверил - порядок... Ну это-то логично но только если rates записи и чтения в/из буфера не равны. Иначе, если они равны и есть задержка чтения относительно записи, то чтение всегда по идее должно запаздывать ан постоянное тау, и тогда не должно быть помехи. Есть задержки записи и чтения в/из буфера за счет того что физическиая длинна строки (в клоках) больше чем длинна видео данных, посему даже если скорость чтения у меня будет чуть ниже скорости записи, все равно поинтеры записи/чтения не должны пересекаться. Все это пока рассчетные теории, буду проверять на практике в симуляции...
|
|
|
|
|
Feb 22 2008, 15:22
|

Частый гость
 
Группа: Свой
Сообщений: 99
Регистрация: 27-10-07
Из: СПб
Пользователь №: 31 797

|
Цитата(Саша Z @ Feb 22 2008, 17:55)  Ну это-то логично но только если rates записи и чтения в/из буфера не равны. Иначе, если они равны и есть задержка чтения относительно записи, то чтение всегда по идее должно запаздывать ан постоянное тау, и тогда не должно быть помехи. Все правильно. При равных кадровых и строчных частотах, т.е. если развертка одинаковая, никаких помех не будет, главное, чтобы чтение не опередило запись. Тем более, что есть кадровое гашение, когда запись кадра закончено, и можно спокойно дочитывать буфер, не опасаясь, что запись нового кадра его испортит. Мы же эту тему обсуждали в другой теме...
|
|
|
|
|
Feb 22 2008, 18:28
|
Знающий
   
Группа: Свой
Сообщений: 921
Регистрация: 6-04-07
Из: Israel
Пользователь №: 26 822

|
Цитата(Liseev @ Feb 22 2008, 19:22)  Все правильно. При равных кадровых и строчных частотах, т.е. если развертка одинаковая, никаких помех не будет, главное, чтобы чтение не опередило запись. Тем более, что есть кадровое гашение, когда запись кадра закончено, и можно спокойно дочитывать буфер, не опасаясь, что запись нового кадра его испортит.
Мы же эту тему обсуждали в другой теме... Да, так и есть, обсуждали с вами.  В данной ветке оно как-то палвно переросло в схожее русло...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|