Разрядность мониторов и регулировка цветовой температуры.

  • Автор темы Автор темы lygun
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Разрядность мониторов и регулировка цветовой температуры.

sabos сказал(а):
Для знакомых с математикой: задачу "линеаризации" можно свести к вышеупомянутому примеру с "разжимающей" функцией у=x^gamma.
Эта функция имеет наибольшую погрешность именно в тенях. Смотрите у Линдблума.

Самую замысловатую "кривую" нелинейную функцию можно аппроксимировать кусочно, например кусочно-степенной (или сплайном).
Да, но для каждого кусочка потребуется хранить как минимум по параметру на границу (указание диапазонов рабочих стимулов). Не говоря уже о весовых коэффициентах. И блок вычисления диапазонов стимулов для определения участка аппроксимации - ибо за пределами участа аппроксимации функция принимает недостоверные значения. Какая элекроника способна обслуживать в таком режиме каждый пиксел при нынешних разрешениях?
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

ch_alex сказал(а):
Эта функция имеет наибольшую погрешность именно в тенях. Смотрите у Линдблума.
Помню, недавно была тема, где люди катастрофически теряли детали в тенях. Начитались Линдблума.

Линдблум без ошибок процитировал стандарт sRGB, здесь к нему претензий нет. Единственное, где оставил неясность (на которую начинающие ловятся косяками) — относительные и физические величины. Разберетесь с этим местом — станет понятно, когда (и почему) применяется линейный участок, когда он уместен, а когда нет.
ch_alex сказал(а):
Да, но для каждого кусочка . Какая элекроника способна обслуживать в таком режиме каждый пиксел при нынешних разрешениях?
Увы, ничего не понял. Электроника "обслуживать в таком режиме каждый пиксел" называется DAC+LUT.
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

sabos сказал(а):
Но получить доступ к 3D LUT невозможно, это known-how изготовителя.
Из чего, похоже, следует, что LUT, к которому имеет доступ пользователь - 8 битный . Похоже на правду... Значит, я еще одна жертва маркетинга.
sabos сказал(а):
При color transform возможно появление отрицательных значений и чисел больше единицы. Как с ними, привычно клипаем? И удивляемся "загогулинам" цвета?
В мониторы встраивают отдельные модули преобразования цвета, которые отвечают за уменьшение охвата (сделано по разному у всех).
Не по теме:
Все идет к тому, что скоро и колориметр будет к монитору подключаться.

Крайние точки, ИМХО настраивают на заводе (Если речь идет о мониторах не ниже SV)

PS Для 3D преобразований и 16 бит может быть недостаточно.
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

probep сказал(а):
Я переводил числа в шестнадцатиричный формат и отбрасывал последнюю пару символов. Поэтому никаких погрешностей не возникало.
Вот именно от этого я как раз и предостерегал. Отбрасывание младших разрядов — и есть тот самый сдвиг вправо, деление на степень_двойки, тогда как надо делить на (степень_двойки + 1). Более того, ещё надо бы округлять в сторону ближайшего целого. То есть, при 16-битном кодировании, значения 0x0080 и 0x0081 соответствуют 0x00 и 0x01 при 8-битном кодировании, но не оба равны 0x01 или, тем более, 0x00. Иначе вы на ровном месте будете путать по-настоящему различающиеся или, наоборот, совпадающие градации.




sabos сказал(а):
…LUT, задача которого — «линеаризация» (в кавычках, потому что задача его — приведение функции светимости к некоторому известному виду, например к степенной).
Можно и без кавычек, раз уж в логарифмических координатах степенная функция выглядит как прямая линия.


sabos сказал(а):
Samsonov сказал(а):
Непонятно, зачем же всё-таки нужны эти 10 бит.
Посмотрите на LUT как на вычислитель, который готовит переводит данные из гамма-сжатого вида к линейному. Что будет в области малых значений при ограничении разрядности? Верно, одни нули.
Мы говорим о разных вещах.
  • Сама матрица — конечно, пусть имеет сколь угодно точный драйвер, раз уж его характер отличен от степенного.
  • Внутренняя обработка сигнала — конечно, пусть идёт по сколь угодно разрядному тракту, особенно если там выполняется колориметрическое преобразование.
  • Но вот зачем нужны 10 бит на входе?
У нас же и так предполагается, что на вход устройства подаётся гамма-кодированный сигнал. Будь то степенная функция в чистом виде или что-то вроде sRGB / Lstar — точности в тенях и так предостаточно. Да и не только в тенях: я же недавно [THREAD=39278]приводил график[/THREAD] (см. в конце 2-й статьи) различия между соседними градациями — даже на мониторе с широким охватом нет никаких причин уходить от 8 бит. Всё это маркетологические происки, лишь бы на бабло народ развести; и ведь разведут же, я ничуть не сомневаюсь.


sabos сказал(а):
Теперь, когда внутрь монитора встраивают полноценный color transform (с улучшайзерами) — немедленно возникает вопрос: что с отрицательными значениями и числами больше единицы? Привычно клипаем и удивляемся «загогулинам» цвета?
А какие ещё есть варианты? Всё равно ведь компьютеру известны реальные возможности монитора — профилирование-то никто не отменял. Да и потери обычно не такие уж катастрофические (см. ту же вышеупомянутую статью), ведь мы пытаемся эмулировать сравнительно узкий охват на мониторе с довольно широкими возможностями, а не наоборот. Собственно, калибровочный софт просто не позволит нам запросить чересчур насыщенные R/G/B.




aspirin сказал(а):
sabos сказал(а):
получить доступ к 3D LUT невозможно, это known-how изготовителя.
Из чего, похоже, следует, что LUT, к которому имеет доступ пользователь, — 8 битный.
Каким же образом из этого следует, что он не может быть 10/12-битным?


И что такое «3D LUT» (в контексте мониторов)? Вы полагаете, что при эмуляции используется таблица с количеством ячеек в разы большим, чем число субпикселей на экране? Или что таблица сокращённая, а монитор вживую занимается 3-мерной интерполяцией, вместо того чтобы просто выполнить матричное преобразование?
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

Samsonov сказал(а):
Вот именно от этого я как раз и предостерегал. Отбрасывание младших разрядов — и есть тот самый сдвиг вправо, деление на степень_двойки, тогда как надо делить на (степень_двойки + 1). Более того, ещё надо бы округлять в сторону ближайшего целого. То есть, при 16-битном кодировании, значения 0x0080 и 0x0081 соответствуют 0x00 и 0x01 при 8-битном кодировании, но не оба равны 0x01 или, тем более, 0x00. Иначе вы на ровном месте будете путать по-настоящему различающиеся или, наоборот, совпадающие градации.
Совершенно не согласен. Я ещё понял бы (но всё равно не согласился бы категорически), если бы сравнивали 0x00F0 и 0x00F1, но причём тут 0x0080 и 0x0081?
Откуда Вы взяли, что надо округлять в большую сторону или делить на (степень двойки+1)?
Вообще всё это легко проверяется. Запускаете на неоткалиброванной видеоподсистеме прогу Calibration Tester и смотрите на стандартное распределение выходных 16 битных значений от 8 битных входных значений. Ничего даже близко похожее на ваше утверждение там нет.
Вот как выглядят строки в десятичном формате:
0 0 0 0
1 256 256 256
2 512 512 512
3 768 768 768
4 1024 1024 1024
...
или в шестнадцатиричном формате:
0 0 0 0
1 100 100 100
2 200 200 200
3 300 300 300
4 400 400 400
...
Если мы представим число 0x0081 в двоичной системе, то получим 00000000 01110001. Когда "обрезаются" 8 младших бит, то получим 00000000, а никак не 00000001
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

Samsonov сказал(а):
Каким же образом из этого следует, что он не может быть 10/12-битным?
В приведенной выше схеме - 8 битный. Может быть и 10-12. Только очень редко.

Не по теме:
На всякий случай, если не обратили внимания:
http://forum.rudtp.ru/showpost.php?p=454454&postcount=343

 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

Пардон, была случайная описка в моём предыдущем посте. Конечно же 0x0081 в двоичной системе будет 00000000 10000001. Когда "обрезаются" 8 младших бит, то получим 00000000, а никак не 00000001
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

aspirin сказал(а):

Не по теме:
Все идет к тому, что скоро и колориметр будет к монитору подключаться.


Не по теме:
вообще-то уже, и довольно давно: LCD3090WQXi


с уважением,
Александр
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

Не стал создавать новой ветки. Обнаружил непонятный феномен.
Выше в этой ветке я уже сообщал, что пробовал определить количество потерянных градаций при аппаратной калибровке монитора NEC 2690WUXi2. Была замечена странная вещь: потерь градаций практически нет при аппаратной калибровке!
Тогда обратил взор в сторону программной калибровки, т.е. калибровки LUT видеокарты. По всем канонам, если 16 битным выходным величинам из LUT видеокарты обрезать младшие биты до 8-битных величин (т.к. по стандарту DVI при single link подключении в монитор поступает 8 бит на канал), то почти всегда получается достаточно большое количество повторяющихся 8-битных значений и пропусков. Собственно, так все и считают потерянные градации в LUT видеокарты. Я решил проверить это с помощью колориметра. Оказалось, что на моём мониторе NEC 2690WUXi2 и с моей не самой навороченной видеокартой ATI 3850 AGP это совсем не так. Повторяющиеся значения если и встречались, то очень редко. Соответственно, начал внимательно исследовать сей феномен.
Оказалось, что монитор (вернее, колориметр) различает значения LUT видеокарты до 10 бита (со стороны старших битов). То есть значений RGB (градаций) на один канал как и положено составляет 256 на канал, но значения передаются с 10 битовой точностью! Повторяю, монитор подключён к видеокарте единственным страндартным подключением DVI-D.
Методика тестирования была достаточно проста:
1. Сначала менялась гамма-корректирующая информация в LUT видеокарте, так чтобы некоторым обычным 8 битовым входным значениям соответствовали выходные 16 битовые величины, отличающиеся друг от друга с точностью до 8...10...11...16 бит (со стороны старших битов).
2. Затем в программе ProfileMaker (или SpectraView II) выводились на экран цветовые патчи с заранее заданными по п.1 входными 8 битовыми значениями, а колориметр замерял яркость. В дальнейшем показания яркости сравнивались между собой.

Оказалось, что если выходные значения LUT видеокарты отличаются между собой до десятого бита включительно, то колориметр фиксирует расхождения. Если расхождения начинаются с одинадцатого бита, то колориметр не обнаруживает различий яркости.
Проверял несколько раз и, чтобы избежать "мухлежа" от производителей в мониторе, отключал DDC.
В итоге получается, что потерь градаций при программной калибровки (LUT видеокарты) практически не бывает.

На "более стандартных" видео-подсистемах с обычными мониторами IPS всё работает как и положено - передаётся ровно 8 бит информации (отдельная благодарность за помощь участнику конференции idontbite)

Если нужно, могу приложить результаты измерений.
Есть какие-либо мысли по объяснению сего феномена?
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

"Обычный" SIPS это какой? Как производились измерения?
LUT у видеокарт может быть и 16 битный. Потом это все в 10, и передается по DVI. Монитор может это принимать, а может не принимать.
probep сказал(а):
В итоге получается, что потерь градаций при программной калибровки (LUT видеокарты) практически не бывает.
Потери есть, просто они такие-же:)
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

Обычный S-IPS был HP LP2065 (Или я ошибаюсь и HP LP2065 не является S-IPS?), подключенный к встроенной видеокарте GeForce 6150 по DVI-кабелю.
Про измерения я вкрадце писал выше. Дополню:
1. Изменения в LUT монитора вносились программой Calibration Tester.
2. Для измерений использовался как ProfileMaker, так и SpectraView II.
3. Для ProfileMaker были создан референс-файл с нужной выборкой входных значений. И через Measuring Chart в MeasuteTool замерялись величины XYZ (и L*a*b*).
4. Для SpectraView II из меню запускалась опция Colorimeter Window, где задавая входные величины, измерялись значения XYZ.
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

probep сказал(а):
Я ещё понял бы (но всё равно не согласился бы категорически), если бы сравнивали 0x00F0 и 0x00F1, но причём тут 0x0080 и 0x0081?
А зачем сравнивать 0x00F*, если оно и так близко к 1,0 @ 8 бит? Я привёл пример значений, близких к 0,5 @ 8 бит, чтобы была заметна разница после округления.

Откуда вы взяли, что надо округлять в большую сторону или делить на (степень двойки + 1)?
Не в большую сторону, а к ближайшему целому — как обычно при округлении. Единичка добавляется, потому что число интервалов между градациями на единицу меньше количества интервалов:
  • 8 бит: 256 градаций, 255 интервалов;
  • 16 бит: 65'536 градаций, 65'535 интервалов.
То есть 1 из 255-ти интервалов соответствует 257-ми (а не 256-ти) интервалам из 65'535-ти.


Запускаете на некалиброванной системе Calibration Tester и видите: 0, 256, 512, 768, …, 65'280.
Это не значит, что именно такие значения сейчас находятся в памяти видеокарты, и что они действительно используются для цветокоррекции. Программа запрашивает значения из LUT и получает отрицательный ответ, означающий что LUT не менялась, — на основании этого пишет «The gamma curves for display 0 have not been modified» и самостоятельно генерирует значения, которые считает нужными.

Кстати, Spyder2/3 придерживается той же точки зрения: белый у них равен 65'280 (0xFF00). А вот если посмотреть на калибровку другими программами, то можно видеть распределение от 0 до 65'535 (0xFFFF) и с шагом 257, если таковой вообще используется.

Ну вы сами подумайте: чёрный должен быть в нуле, а белый — в максимуме. Битовый сдвиг, конечно, прост и быстр, но противоречит логике. Ведь никто же не гарантирует, что на выходе у нас действительно 8-битный монитор, а не 10-битный — для 10 бит значение 0xFF00 уже лишено смысла, там потребуется 0xFFC0 (коли следовать вашему методу). Если же мы используем полный диапазон по-универсальному, то каждый каскад волен сам решать, с какой глубиной цвета ему работать.
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

aspirin сказал(а):
В приведенной выше схеме — 8 битный. Может быть и 10–12. Только очень редко.
То есть вы хотите сказать, что если, к примеру, фирма Eizo в описании монитора ColorEdge CG241W заявляет: «Look-Up Table: 12 bits per color; Internal Processing: 16 bits per color», — это наглое враньё, и на самом деле там меняются только 8 бит, хотя математика действительно может быть 16-битной (интересно, и на кой же она тогда такая — при 8-битном-то тракте?)? А какие-нибудь объективные доказательства этому есть?

На всякий случай, если не обратили внимания: «[POST=454454]Схема тракта LCD и терминологии[/POST]».
Там на схеме (официальной ли?) одновременно фигурируют все возможные числа: и 8, и 10, и 12 бит, — с одной стороны, из-за этого ничего конкретного понять нельзя, но зато ясно, что уж хотя бы не отрицается возможность присутствия 10/12 бит на каждом участке. Так что не вижу противоречия заявляемым характеристикам.
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

probep сказал(а):
Обнаружил непонятный феномен.
Давайте рассуждать логически.
  • Режим рабочего стола — 8-битный. Вы сами это признаёте, да и Windows обзаведётся поддержкой 10/16 бит не раньше 7-й версии.
  • В спецификации Radeon HD 3850 ничего не сказано про 10-битный цвет.
  • В спецификации MultiSync LCD2690WUXi2 тоже ничего не сказано на этот счёт.
Вы правда думаете, что вам втихаря на халяву дадут то, что только-только начали предлагать как премиум-фичу за большие деньги?

По всем канонам, если 16-битным выходным величинам из LUT видеокарты обрезать младшие биты до 8-битных величин, то почти всегда получается достаточно большое количество повторяющихся 8-битных значений и пропусков. Оказалось, что монитор выдаёт разные значения до 10-го бита.
Может, всё-таки «каноны» не совсем такие, как вы себе представляете, и разница в 10-м бите ощущается именно из-за несоответствия между 256 и 257 в качестве делителя?
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

Samsonov сказал(а):
Кстати, Spyder2/3 придерживается той же точки зрения: белый у них равен 65'280 (0xFF00). А вот если посмотреть на калибровку другими программами...
Вы, конечно, имели в виду другими калибраторами? Например, i1d2, Monaco OPTIX.
У i1d2 и Monaco OPTIX белый равен 65'535
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

Samsonov сказал(а):
Давайте рассуждать логически.
  • Режим рабочего стола — 8-битный. Вы сами это признаёте, да и Windows обзаведётся поддержкой 10/16 бит не раньше 7-й версии.
  • В спецификации Radeon HD 3850 ничего не сказано про 10-битный цвет.
  • В спецификации MultiSync LCD2690WUXi2 тоже ничего не сказано на этот счёт.
Вы правда думаете, что вам втихаря на халяву дадут то, что только-только начали предлагать как премиум-фичу за большие деньги?

Может, всё-таки «каноны» не совсем такие, как вы себе представляете, и разница в 10-м бите ощущается именно из-за несоответствия между 256 и 257 в качестве делителя?
Это было бы замечательное объяснение, если бы только на обычных дисплеях всё не работало точно по "канонам". И на NEC 2690WUXi2 и на HP LP2065 использовались абсолютно одинаковые программы, настройки и таблицы гамма-коррекции и референс-файлы. Но у НЕКа разпознавались 10 битов, тогда как у HP ровно 8 бит. Я так и думал, что будут смеяться, но какой резон мне передёргивать?
Повторяю, на НЕке передаются 256 градаций на каждый канал цвета, но с 10 битовой точностью.
И причём тут опять делитель? Извините, я занимался программированием на ассемблере и знаю как получают из 16 битового числа 8 битовый: либо считывается лишь 8 битовая часть 16 битового регистра процессора, либо, как Вы правильно ранее указывали, сдвигом вправо на 8 бит. Никогда ничего там не делится и не округляется (да и слишком накладные операции деления и округления по сравнению с указанными).

А может кто повторит эксперимент на мониторах типа НЕК 2690? )Файлы с гамма-коррекцией и референс-файл я вышлю.)
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

Samsonov сказал(а):
То есть вы хотите сказать, что если, к примеру, фирма Eizo в описании монитора ColorEdge CG241W заявляет: «Look-Up Table: 12 bits per color; Internal Processing: 16 bits per color», — это наглое враньё
Речь шла об этом:
probep сказал(а):
...у некоторых EIZO топ класса на самом деле схема такая: "the path in the Eizo is "8-14bit3D-8-10bit1D-10
Samsonov сказал(а):
Там на схеме (официальной ли?) одновременно фигурируют все возможные числа: и 8, и 10, и 12 бит, — с одной стороны, из-за этого ничего конкретного понять нельзя, но зато ясно, что уж хотя бы не отрицается возможность присутствия 10/12 бит на каждом участке. Так что не вижу противоречия заявляемым характеристикам.
Вам лучше знать.


Samsonov сказал(а):
В спецификации Radeon HD 3850 ничего не сказано про 10-битный цвет.

Почитайте спецификацию.
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

ATI Radeon™ HD 3800 Series - GPU Specifications
http://ati.amd.com/products/Radeonhd3800/specs.html

Two integrated dual-link DVI display outputs
Each supports 18-, 24-, and 30-bit digital displays at all resolutions up to 1920x1200 (single-link DVI) or 2560x1600 (dual-link DVI)

Тоесть, поддержка 30-bit есть даже на single-link DVI?
А LUT у ATI Radeon™ HD 3800 Series какой, 10-bit что ли?
А если так, тогда дело не в мониторе, а в видеокарте?
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

idontbite сказал(а):
ATI Radeon™ HD 3800 Series - GPU Specifications
http://ati.amd.com/products/Radeonhd3800/specs.html

Two integrated dual-link DVI display outputs
Each supports 18-, 24-, and 30-bit digital displays at all resolutions up to 1920x1200 (single-link DVI) or 2560x1600 (dual-link DVI)

Тоесть, поддержка 30-bit есть даже на single-link DVI?
А LUT у ATI Radeon™ HD 3800 Series какой, 10-bit что ли?
А если так, тогда дело не в мониторе, а в видеокарте?

10 битные видеокарты выпускаются уже очень давно...
У HD 3800 LUT не менее 10 бит.
 
Ответ: Разрядность мониторов и регулировка цветовой температуры.

probep сказал(а):
Я так и думал, что будут смеяться, но какой резон мне передёргивать?
Никто не смеётся. Просто забавная ситуация получается, когда кто-то просит «объяснить суть феномена» и при этом сам же как бы между прочим добавляет, что повторить эксперимент практически ни у кого не получится — за неимением «волшебной» связки монитора и видеокарты.

Постараюсь на следующей неделе сварганить средство для более дотошной проверки вашего эффекта.


Я знаю, как получают из 16-битового числа 8-битовое: либо считывается лишь одна половина, либо сдвигом вправо на 8 бит. Никогда ничего там не делится и не округляется (да и слишком накладные операции деления и округления по сравнению с указанными).
Ну так задачи разные бывают. Если нам нужно просто вычленить часть числа, то это одно, но тут-то речь о другом. Например, если на входе у нас диапазон чисел от 0,000000 до 1,999999, а на выходе должны быть целые числа от 0 до 2, то, по-вашему, надо взять целую часть от 1,999999 и получить 1, то есть отобразить весь входной диапазон в 2 градации: 0 и 1? Согласитесь ведь, бредово как-то.

Загляните в спецификацию профилей ICC — там где описывается, как хранить TRC-таблицы. Они ведь тоже 16-битные, и тем не менее подходят для однозначного задания значений любой глубины представления — именно потому, что минимум там в 0x0000, а максимум в 0xFFFF. Это чёрным по-белому прописано. А по вашей методике, я уже приводил пример, возникает неоднозначность: если мы тупо пишем в LUT значение 0xFF00 для белого, то в случае с 10-битным дисплеем получается «недолив» — ведь для него белый должен быть 0xFFC0. А как, по-вашему, профилировщик должен узнавать, какая сейчас разрядность тракта между видеокартой и монитором? Если же применять универсальную формулу, то и знать ничего не нужно — мы абстрагируемся от конкретного оборудования.

И «накладные расходы» здесь не при чём. Ибо те значения, которые вы видите в Calibration Tester, — это не прямо LUT видеокарты, а просто таблица-посредник между пользовательскими приложениями и видеодрайвером, который однократно и как угодно сложно может пересчитать их в подходящие значения для непосредственной загрузки в видеокарту.
 
Статус
Закрыто для дальнейших ответов.