Здравствуйте, Vis, Вы писали:
Vis>Итак задача стоит так:
Vis>Итак, после сканирования мы получаем битмап, Vis>в котором каждый пиксел представлен как RGB.
Vis>Возможно ли сделать так, чтобы картинка была представленна Vis>в длиннах отражённой волны вместо RBG?
В человеческом глазе есть три типа цветовых рецепторов, каждый со своей кривой спектральной чуствительности. Цвет опрделяется уровнями возбуждения этих трех рецепторов. Понятно, что одного и того же возбуждения мы можем добиться бесконечным количеством разных спектров. Более того, взяв три источника с произвольными спектрами, то, т.к. чуствительность рецепторов практически линейна от интесивности, мы регулируя их интенсивность можем добиться произвольного возбуждения рецепторов. Правда, если мы эти источники выберем плохо, то нам придется в некоторых случаях светить с отрицательной интесивностью. Это, по сути дела, означает, что в качестве базовых цветов мы можем взять произвольные источники, единственно желательно, чтобы они охватывали больший диапазон и отстояли друг от друга подальше. На практике так и происходит. Кривые спектральной чуствительности датчиков в сканерах и фотоаппаратах могут сильно отличаться от модели к модели, но если мы их знаем — мы можем точно сказать, какой цвет в итоге получается.
В итоге, то что Вы просите, в принципе, аналогично просьбе востановить функцию по известным занчениям трех определенных интегралов.
Здравствуйте, MichaelP, Вы писали:
MP>В человеческом глазе есть три типа цветовых рецепторов, каждый со своей кривой спектральной чуствительности. Цвет опрделяется уровнями возбуждения этих трех рецепторов. Понятно, что одного и того же возбуждения мы можем добиться бесконечным количеством разных спектров. Более того, взяв три источника с произвольными спектрами, то, т.к. чуствительность рецепторов практически линейна от интесивности, мы регулируя их интенсивность можем добиться произвольного возбуждения рецепторов.
Это интересный вопрос, на самом деле. Что понимается под "интенсивностью"? Скажем, количество излученных фотонов в скунду? Если так, то нет — не линейна. В этом легко убедиться — рисуем в Paint один белый пиксел на черном фоне. На некотором расстоянии рисуем квадратик 2x2 — 4 пиксела. С весьма хорошим приближением мы можем считать, что 4 пиксела излучают в 4 раза больше фотонов в единицу времени, чем один. Но визуально он никак не тянет на "вчетверо ярче". Лучше отодвинуться от монитора подальше, чтобы пространственное разрешение не сбивало с толку.
Для другого эксперимента надо правильно отрегулировать яркость и контрастность на мониторе (ну и/или гамма-коррекцию):
В пространстве sRGB визуально вопринимаемая яркость приблизительно прямо пропорциональна значению. RGB=(255,255,255) выглядит примерно вдвое ярче, чем RGB=(127,127,127) (в MS Paint, в стандартной палитре внизу это — темно-серый цвет, в верхней строке цветных квадратиков). Рисуем белый пиксел и серый на некотором расстоянии от него. Действительно, белый пиксел воспринимается приблизительно вдвое ярче. Теперь вопрос — сколько надо нарисовать серых пикселов, чтобы выровнять яркость? 2? Нет — 4. С большого расстояния 4 серых пиксела действительно выглядят примерно как один белый по яркости.
MP>Правда, если мы эти источники выберем плохо, то нам придется в некоторых случаях светить с отрицательной интесивностью.
О! Дайте-дайте мне фиолетовый цвет в RGB!
Это мне навеяло фокус с "холодными лучами". Если взять рефлектор (раньше такие были для обогрева) и заменить в нем спирать куском сухого льда, то создастся впечатление, что он светит холодными лучами — лицом эти "лучи" чувствуются вполне отчетливо.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
MS>Это интересный вопрос, на самом деле. Что понимается под "интенсивностью"? Скажем, количество излученных фотонов в скунду? Если так, то нет — не линейна.
Считается линейной не по квантам, а по энергии.
MS>В этом легко убедиться — рисуем в Paint один белый пиксел на черном фоне. На некотором расстоянии рисуем квадратик 2x2 — 4 пиксела. С весьма хорошим приближением мы можем считать, что 4 пиксела излучают в 4 раза больше фотонов в единицу времени, чем один. Но визуально он никак не тянет на "вчетверо ярче". Лучше отодвинуться от монитора подальше, чтобы пространственное разрешение не сбивало с толку.
Я здесь не совсем правильно употребил слово "интесивность", имеется в виду, если я правильно помню, яркость. Вообщем, то что на единицу телесного угла.
Также есть еще одна тонкость. Колбочки в центре глаза и перефирии немного по разному воспринимают цвета и, поэтому, цвет фона воспринимается несколько иначе, чем цвет объекта. Но эти различия не очень существенны. Хотя колориметрические таблицы традиционно делаются для углов обзора в 2° и 10°.
MS>В пространстве sRGB визуально вопринимаемая яркость приблизительно прямо пропорциональна значению. RGB=(255,255,255) выглядит примерно вдвое ярче, чем RGB=(127,127,127) (в MS Paint, в стандартной палитре внизу это — темно-серый цвет, в верхней строке цветных квадратиков). Рисуем белый пиксел и серый на некотором расстоянии от него. Действительно, белый пиксел воспринимается приблизительно вдвое ярче. Теперь вопрос — сколько надо нарисовать серых пикселов, чтобы выровнять яркость? 2? Нет — 4. С большого расстояния 4 серых пиксела действительно выглядят примерно как один белый по яркости.
Человек видит в большей степени мозгом, а не глазом. И на его восприятие влияет и фон и окружение. Отличным примером этого является одна из моих любимых оптических иллюзий. Поэтому речь идет, обычно, о чистых экспериментах, когда отсутствуют отвлекающие составляющие.
Про цветовые пространства я не говорил сознательно, иначе можно утонуть в этом вопросе. Но раз уж вы упомянули sRGB, то надо сказать, что в нем яркость не пропорциональна значению. Гамма у него на большом диапазоне 2.2, т.е. (255,255,255) должно быть больше чем в 4-е раза ярче, чем (127,127,127). Но я не специалист по колориметрии и не могу сказать, как надо грамотно ставить эксперимент и может ли человек прямо в лоб количествено оценивать яркость, но 1 и 4 пиксела, имхо, маловато для этого. Может действительно надо рисовать объекты такие, чтобы их угловой размер был в районе 2°?
MS>О! Дайте-дайте мне фиолетовый цвет в RGB!
Если за основные цвета брать монохромные, как, например, в CIE RGB (в sGRB, кстати не так — там гамут еще больше заужен), можно почти математически доказать, что будут существовать неотображаемые цвета. Логично предположить, что кривые спектральной чуствительночти для данного цветового пространства будут непрерывными. Но в силу монохромности у нас будут существовать три точки (соответствующие основным цветам), в которых только одна компоненнта не равна 0, а две остальные равны 0. Отсюда следует, что у каждой кривой чуствительности есть, как миниммум, две области с отрицательными значениями.
Здравствуйте, MichaelP, Вы писали:
MP>Человек видит в большей степени мозгом, а не глазом. И на его восприятие влияет и фон и окружение. Отличным примером этого является одна из моих любимых оптических иллюзий. Поэтому речь идет, обычно, о чистых экспериментах, когда отсутствуют отвлекающие составляющие.
Плиз, поясните — в чём иллюзия этой картинки? (Может у меня с английским столь плохо, может с глазами...)
Ваша программа работает корректно? Один звонок и я всё исправлю!
>Плиз, поясните — в чём иллюзия этой картинки? (Может у меня с английским столь плохо, может с глазами...)
Цвет клеток A и B — одинаков (в RGB смысле ), хотя визуально A гораздо темнее B
Здравствуйте, MichaelP, Вы писали:
MP>Про цветовые пространства я не говорил сознательно, иначе можно утонуть в этом вопросе. Но раз уж вы упомянули sRGB, то надо сказать, что в нем яркость не пропорциональна значению. Гамма у него на большом диапазоне 2.2, т.е. (255,255,255) должно быть больше чем в 4-е раза ярче, чем (127,127,127).
Какая яркость? Измеренная прибором интенсивность — конечно нелинейна, но воспринимаемая (перцептуальная) яркость — как раз линейна.
Это, на самом деле, очень запутанный вопрос. Я лишь сошлюсь на признанного авторитета в данной области, Charles Poynton и приведу лишь конечный вывод: http://www.poynton.com/notes/color/GammaFQA.html
The nonlinearity of a CRT is very nearly the inverse of the lightness sensitivity of human vision. The nonlinearity causes a CRT's response to be roughly perceptually uniform. Far from being a defect, this feature is highly desirable.
The main purpose of gamma correction in video, desktop graphics, prepress, JPEG, and MPEG is to code intensity into a perceptually-uniform domain, so as to obtain the best perceptual performance from a limited number of bits in each of the R, G, and B (or C, M, Y, and K) components.
Здесь не надо быть специалистом по колометрии. sRGB — это все-таки перцептуально-линейное пространство (воспринимая яркость примерно пропорциональна длине вектора RGB). Объяснение и обоснование этому очень простое — при таком кодировании можно обойтись минимальным количеством бит на канал.
Гамма 2.2 — это значение степени для перевода из перцептуально-линейного пространства в физически линейное (linear-light intensity) и обратно (1/2.2).
Я, как образцово-показательный неуч, окольными путями сам обнаружил, что интерполировать цвета в перцептуально-линейном пространстве — это неправильно и объясняется это простой геометрической сущностью: http://www.rsdn.ru/forum/?mid=695821
Фокус с интерполяцией между цветами (провал по яркости посередине) доказывает, что sRGB (то, чем мы обычно оперируем в битмапах, а потом отдаем на съедение функциям API) является именно перцептуально-линейным.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, MichaelP, Вы писали:
MP>>Про цветовые пространства я не говорил сознательно, иначе можно утонуть в этом вопросе. Но раз уж вы упомянули sRGB, то надо сказать, что в нем яркость не пропорциональна значению. Гамма у него на большом диапазоне 2.2, т.е. (255,255,255) должно быть больше чем в 4-е раза ярче, чем (127,127,127).
MS>Какая яркость? Измеренная прибором интенсивность — конечно нелинейна, но воспринимаемая (перцептуальная) яркость — как раз линейна.
MS>Это, на самом деле, очень запутанный вопрос. Я лишь сошлюсь на признанного авторитета в данной области, Charles Poynton и приведу лишь конечный вывод: http://www.poynton.com/notes/color/GammaFQA.html
Это действительно очень запутанный вопрос. Поэтому я и избегал углубляться в цветовые пространства и не шел далее рецепторов.
Дело в том, что пока мы остаемся на уровне рецепторов — там все более-менее линейно. Но далее сигнал поступает в мозг, а вот там уже все нелинейно. Кстати, если посмотреть на попытки создать визуально равноверное цветовое пространство, то гамма должна быть 3. (CIE Lab, CIE L*u*v*). Но нужно четко сосназавать, что эти пространства не аддитивны. О них можно посмотреть здесь:
Т.е. получается некоторый парадокс. Если надо правильно смешивать цвета (а они смешиваются в рецепторах), то надо работать в линейном прострастнстве, но при этом мы получим неравномерность по интенсивности. И наоборот. Поэтому, может, действительно, выбор гаммы в районе 2 позволяет достичь некоторого компромисса.
В ограниченом наборе случев эту проблему можно решить более строго. Например, если нам надо получить равномерный градиент, то мне казалось бы логичным построить его в, к примеру, в Lab, Затем преобразовать XYZ, а затем sRGB, с учетом его гаммы. Только не забывайте сразу уйти во float или 16-битный цвет, иначе на преобразованиях можно получить большие ошибки квантования. Но, уже в задаче альфа-блендинга (где надо активно складывать цвета) такое решение вряд ли представляется возможным.
Здравствуйте, MichaelP, Вы писали:
MP>Т.е. получается некоторый парадокс. Если надо правильно смешивать цвета (а они смешиваются в рецепторах), то надо работать в линейном прострастнстве, но при этом мы получим неравномерность по интенсивности. И наоборот. Поэтому, может, действительно, выбор гаммы в районе 2 позволяет достичь некоторого компромисса.
MP>В ограниченом наборе случев эту проблему можно решить более строго. Например, если нам надо получить равномерный градиент, то мне казалось бы логичным построить его в, к примеру, в Lab, Затем преобразовать XYZ, а затем sRGB, с учетом его гаммы. Только не забывайте сразу уйти во float или 16-битный цвет, иначе на преобразованиях можно получить большие ошибки квантования. Но, уже в задаче альфа-блендинга (где надо активно складывать цвета) такое решение вряд ли представляется возможным.
Спасибо за инфу. Возможно, что с градиентом именно так и надо делать. В самом деле, в перцептуально линейном RGB между чистыми цветами надо интерполировать по дуге, иначе возникают те самые "провалы по яркости":
Неважно, что левый градиент выгладит как-то "более выпукло и выразительно". Это, кстати, как раз и доказывает, что он выглядит неправильно. Он долженн выглядеть совершенно "плоско", как правый.
Но! Что делать в случае градиента в виде серой шкалы? По идее он должен быть линейным, безо всяких гамма-коррекций (опять же, речь идет о перцептуально линейном RGB):
Который из этих вариантов правильный? И что значит "правильный"? Лично я затрудняюсь сказать, хоть и склоняюсь к левому (так кажется логичгным). Но если так, то что делать в случае промежуточных вариантов? Получается, что гамма зависит от пути, по которому мы интерполируем — вообще бардак.
Но в перцептуально линейном RGB, для сглаживания (anti-alias) линейная серая шкала тоже дает не лучший результат:
На левой части черные закругленные углы на белом фоне выглядят явно толще. А белые на черном — наоборот, тоньше. При gamma=1.6...1.9 результат гораздо более адекватен визуально. Хотя серая шкала — перцептуально линейна. Феномен!
Может быть действительно надо всегда интерполировать с учетом гаммы, даже вдоль серой шкалы (gray ramp)? Но это эквивалентно тому, чтобы работать в физически линейном RGB.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, MichaelP, Вы писали:
MS>На левой части черные закругленные углы на белом фоне выглядят явно толще. А белые на черном — наоборот, тоньше. При gamma=1.6...1.9 результат гораздо более адекватен визуально. Хотя серая шкала — перцептуально линейна. Феномен! MS>Может быть действительно надо всегда интерполировать с учетом гаммы, даже вдоль серой шкалы (gray ramp)? Но это эквивалентно тому, чтобы работать в физически линейном RGB.
А почему серая шкала должна быть перцептуально линейна? Чем таким особенным она отличается от лругих цветов?
Вот, кстати, построил градиенты, тем способом, которым я предлагал (желательно, чтобы монитор был откалиброван под sRGB):
Здесь осуществлен переход от красного к синему. Верхний линеен в CIE L*u*v* (и уже из него преведен в sRGB), нижний линеен в sRGB (гамма приблизительно 2.2-2.4). CIE L*u*v*, я выбрал из тех соображений, что для мониторов он подходит больше, чем Lab.
ИМХО, достаточно заметно, что на верхнем градиенте переход более равномерный.
Для серой шкалы отличия заметны гораздо меньше, но все-таки различимы (с трудом )
Для линейной гаммы изображения делать не стал, т.к. там, имхо, неравномерность восприятия очевидна. Но, если захотите — сделать нетрудно.
Спасибо! Очень интересная и актуальная для меня тема. Надо бы отделить ветку. Попросим!
MP>А почему серая шкала должна быть перцептуально линейна? Чем таким особенным она отличается от лругих цветов?
Не знаю, на самом деле. Но вот иллюстрация:
Которая из двух серых шкал является правильной? И что значит "правильной"?
MP>Вот, кстати, построил градиенты, тем способом, которым я предлагал (желательно, чтобы монитор был откалиброван под sRGB):
[. . .]
Здесь сразу бросается в глаза "слишком много красного". Вот я тоже построил градиент для сравнения непосредственно в RGB, но с gamma=2.0 (средний):
Кстати, "загадка" со сглаживанием решается очень просто. Причина здесь именно в том, что пикселы с интенсивностью 1.0 и 0.5 действительно визуально отличаются по яркости примерно вдвое. Но для того, чтобы выровнять визуальную яркость, нам надо не два, а четыре темных пиксела.
Растаризатор вычисляет "площадь покрытия" пиксела внутренностью полигона и устанавливает значение непрозначности (opacity) пропорционально этой площади. Рассморим белую горизонтальную линию на черном фоне. При "точном попадании", все пикселы этой линии полностью покрыты (коэффициент 1.0). Но если мы сместим линию на полпиксела вверх, то растаризатор вычислит уже две строки пикселов, перекрытых наполовину (коэффициент 0.5 у обоих линий). Но линия из двух пикселов с яркостью 0.5 (RGB=127,127,127) выглядит явно темнее, чем одна с яркостью 1.0. Вот я нарисовал в MS Paint:
(желательно настроить на sRGB и отойти на 2-3 метра от монитора для "созерцания").
Нижняя линия имеет яркость 0.5 (127,127,127), верхняя, которая приблизтельно соответствует яркости средней — 0.75 (192,192,192). Это примерно соответствует gamma=2.5, то есть 0.5^(1/2.5).
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали: MS>Не знаю, на самом деле. Но вот иллюстрация: MS>
MS>Которая из двух серых шкал является правильной? И что значит "правильной"?
Ну конечно же та, которая при развороте и наложении на себя же даст равномерную белую полоску.
Вопрос с наложением достаточно тонок, т.к. сам требует какого-то алгоритма вычисления суммарной яркости. Ну, давайте тогда сделаем изображение, состоящее из встречных градиентов однопиксельной высоты:
и посмотрим, где серость равномернее. Отойдя на пару метров от монитора.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
MS>Здесь сразу бросается в глаза "слишком много красного". Вот я тоже построил градиент для сравнения непосредственно в RGB, но с gamma=2.0 (средний):
MS>
Да, красного больше, но задача была обеспечить равномерный по восприятию (в том числе и по цветовому) переход. Вас же не смущает, что при градиенте с гамма=2 в середине интенсивность не равна 127. Если вы признаете неравномерность восприятия по интенсивности, то почему бы не признать неравномерность восприятия по цвету. Гаммой вы выровняли переход по интенсивности, а вот если смотреть с точки зрения цветовой равномерности, то, имхо, ваш вариант слишком "засиделся" в синем цвете. На довольно большом участке справа перехода цвета практически незаметно.
MS>Это примерно соответствует gamma=2.5, то есть 0.5^(1/2.5).
Да, я и не спорю, выбор хорошей гаммы отличный компромисс между точной цветопередачей и равномерностью восприятия. Просто нельзя все сводить к гамме и не зря мировая научная мысльне превый год бьется над построением перцептуально равномерных пространств. И я бы сразу не стал отбрасывать ее достижения в виде L*u*v* и Lab. Кстати, еще раз обращаю внимание, что эти пространства тяготеют к гамма = 3.
Здравствуйте, Sinclair, Вы писали:
S>Ну, давайте тогда сделаем изображение, состоящее из встречных градиентов однопиксельной высоты: S> S>и посмотрим, где серость равномернее. Отойдя на пару метров от монитора.
Чем доказали, что гамма монитора близка к 2.
Кстати, если над этим методом поработать, то получится отличная тестовая картинка для выставления гаммы монитора. Чем-то она мне инуитивно нравится больше стандартных (их, в частности, приводил McSeem2 где-то выше по ветке). Наверное из-за того, что в ней сразу используются все оттенки серого.
Здравствуйте, MichaelP, Вы писали:
MP>Чем доказали, что гамма монитора близка к 2.
Рискну оспорить. Это не гамма монитора, а гамма восприятия (сетчатка глаза плюс обработка мозговой нейросетью). Вот еще одна иллюстрация:
Разглядывать надо уже с расстояния метров 5-7. Гамма монитора здесь уж точно ни при чем — пиксел либо светится, либо не светится. Все пикселы излучают свет одинаковой (с большой точностью) интенсивности. Можно возразить, что здесь может присутствовать некая "паразитная засветка", но это на CRT — там пиксел накрывает чуть большую площадь, чем ему положено — за счет этого возникает дополнительная нелинейность (на принтере — вообще бардак, там пиксел — это клякса, накрывающая с десяток "пиксело-мест"). Но на LCD — все четко, там если и присутствует некая засветка, то настолько незначительная, что ей можно пренебречь.
Итак, что мы видим. Сплошной белый, черезстрочный белый и каждая четвертая линия белого. Но визуально они никак не тянут на соотношение 1.0 : 0.5 : 0.25, хотя интенсивность излучения находится именно в такой пропорции. Визуально же соотношение где-то 1.0 : 0.7 : 0.5.
Что я этим хочу сказать — черезстрочная сетка выглядит примерно в sqrt(2) темнее, чем сполошная белая область. Отсюда и "правильность" gamma=2.0.
И если уж быть совсем чесным, то я не вполне уверен, что sRGB — это именно перцептуально линейное пространство (ну или близкое к перцептуально линейному). Просто Чарльз Пойнтон меня "убедительно убедил" в этом. Ну и мои эксперименты это подтверждают.
Попробую порассуждать.
То, что линейная интерполяция между двумя крайними цветами дает явно видимый провал по яркости, обусловнено как раз геометрической сущностью перцептуально-линейного RGB. Иними словами, в перцептуально линейном RGB используется Евклидова метрика для визуально воспринимаемой яркости: sqrt(r*r+g*g+b*b). В физитчески линейном пространстве используется метрика Манхеттена: r+g+b. И gamma=2.0 — это как раз и есть функция преобразования метрик. Это несколько грубоватая интерпретация, но в первом приближении она верна и подтверждается практикой.
Кстати, в картинке со встречным черезстрочным градиентом и gamma=1.0, видимый провал по яркости посередине появляется именно потому, что перцептуально линейное пространство является чем-то не вполне естественным (хотя и экономным с точки зрения количества бит на пиксел). Цвет RGB=(127,127,127) выглядит примерно вдвое темнее, чем RGB=(255,255,255). Но физическая светимость при этом должна быть уменьшена вчетверо! Если мы ее уменьшим вдвое, например, черезстрочной белой закраской, то мы будем воспринимать ее не вдвое, а в sqrt(2) раз темнее. Другими словами, при gamma=1.0, это не середина "провалена", а края "подняты". Но единственный способ скомпенсировать это — "поднять середину", поскольку "опустить края" мы никак не можем.
MP>Кстати, если над этим методом поработать, то получится отличная тестовая картинка для выставления гаммы монитора. Чем-то она мне инуитивно нравится больше стандартных (их, в частности, приводил McSeem2 где-то выше по ветке). Наверное из-за того, что в ней сразу используются все оттенки серого.
Да, Синклер молодец — и как это я сам не сообразил. Новое слово в настройке гаммы!
По идее, надо еще пустить градиент по вертикали. Вот тогда точно будут представлены все оттенки серого.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, MichaelP, Вы писали:
MP>Да, красного больше, но задача была обеспечить равномерный по восприятию (в том числе и по цветовому) переход. Вас же не смущает, что при градиенте с гамма=2 в середине интенсивность не равна 127. Если вы признаете неравномерность восприятия по интенсивности, то почему бы не признать неравномерность восприятия по цвету. Гаммой вы выровняли переход по интенсивности, а вот если смотреть с точки зрения цветовой равномерности, то, имхо, ваш вариант слишком "засиделся" в синем цвете. На довольно большом участке справа перехода цвета практически незаметно.
Ну, я точно так же могу возразить, что в Вашем случае на довольно большом участке слева незаметно никакого градиента, а справа — он слишком резкий. Я лишь "ратую" за то, что мой вариант более симметричный, иными словами, участки справа и слева, на которых почти не заметно градиента приблизительно одинаковы. У Вас же они существенно отличаются. Но, возможно, здесь накладывается индивидуальное воприятие. Надо опросить "незаинтересованных свидетелей" — который из градиентов представляется более симметричным. L*u*v или RGB-gamma=2.0?
MS>>Это примерно соответствует gamma=2.5, то есть 0.5^(1/2.5).
MP>Да, я и не спорю, выбор хорошей гаммы отличный компромисс между точной цветопередачей и равномерностью восприятия. Просто нельзя все сводить к гамме и не зря мировая научная мысльне превый год бьется над построением перцептуально равномерных пространств. И я бы сразу не стал отбрасывать ее достижения в виде L*u*v* и Lab. Кстати, еще раз обращаю внимание, что эти пространства тяготеют к гамма = 3.
Все это очень дорогие пространства. Как, например, делается alpha-blend в L*u*v? А остальные 24 color compositing операции?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, MichaelP, Вы писали:
MP>Кстати, если над этим методом поработать, то получится отличная тестовая картинка для выставления гаммы монитора. Чем-то она мне инуитивно нравится больше стандартных (их, в частности, приводил McSeem2 где-то выше по ветке). Наверное из-за того, что в ней сразу используются все оттенки серого.
Но в принципе, встречно-черезстрочный градиент и не нужен. По крайней мере, по полосам (черезстрочные/сплошные) получается гораздо точнее. Что, факически сводится вот к этому:
У меня лишь можно менять цвет и желаемую гамму. Ну или определить *фактическую* гамму монитора (подстраивая слайдер "Gamma").
Но скажите, люди-добры, какие козлы догадались убрать старые добрые колёсики "яркость" и "контрастность" из LCD мониторов?! Повбывав бы таких "инженеров".
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Кстати говоря, вертикальные линии толщиной в пиксель лучше не использовать для тестов , так как CRT мониторы смазывают жутко один пиксель . Все более не менее правильные тесты используют горизонтали .
По поводу цветового восприятия , не совсем правильно что человек воспринимает цвет близко к гамме 2.2 , использование гаммы 2.2 (2.0) пошло чисто исторически от тех же CRT мониторов.
Подумайте как бы воспринимал окружающую картинку человек при линейном восприятии гаммы 2.0 при изменении яркости в сотни раз ? А в реальности изменения яркости еще больше.
Можно провести серию тестов на градиентах серого , но на точно откалиброванных мониторах , реально лучше всего на мониторе с линейной гаммой.
Я всегда работал с цветами так :
Работаем всегда с ЛИНЕЙНЫМИ цветами , которые складываются и отнимаются физически .
Какаю либо коррекцию производим только ПРИ ВЫВОДЕ на устройство (монитор например).
Здравствуйте, minorlogic, Вы писали:
M>Все же лучше использовать горизонтальные полосы , а еще лучше совмесно полосы шириной 1 пиксел и шириной 2 пиксела.
M>Собственно легкий тест , поставить рядом чередующиеся горизонтальные и вертикальные полосы . На большинстве CRT мониторов они будут различной яркости.
Вот, собственно, иллюстрация:
Эту картинку я создал на основе идеи Sinclairа. Обладатели CRT мониторов могут убедится, что две полоски смотряться по разному (на LCD — не так), хотя они абсолютно одинаковые, только одна нарисована вертикальными линиями, а другая — горизонтальными. В этом можно убедиться повернув картинку на 90°.
В sRGB эти полоски должны полностью сливаться с фоном. В чем я и убедился на своем домашнем откалиброваном под sRGB LCD мониторе. На CRT мониторе отрисовка горизотальными линиями явно лучше соответствует действительности. Но тут я уже боюсь утверждать, что она ее полностью правильно отражает. Может, как-нибудь откалибрую монитор на работе и посмотрю, так ли это.
Вот вариант картинки только с горизонтальными линиями:
Еще раз подчеркну, картинка сделана для sRGB, а оно не сводится к простой гамме.
MP>Эту картинку я создал на основе идеи Sinclairа. Обладатели CRT мониторов могут убедится, что две полоски смотряться по разному (на LCD — не так), хотя они абсолютно одинаковые, только одна нарисована вертикальными линиями, а другая — горизонтальными. В этом можно убедиться повернув картинку на 90°.
M>Я всегда работал с цветами так :
M>Работаем всегда с ЛИНЕЙНЫМИ цветами , которые складываются и отнимаются физически . M>Какаю либо коррекцию производим только ПРИ ВЫВОДЕ на устройство (монитор например).
Здесь уже неоднократно говорилось, что разные задачи требуют разного подхода.
Сложение цветов правильнее делать в линейной гамме. А вот, многократно упоминаемый здесь градиент, не требует сложения цветов, а требует перцептуальной линейности. На такой задаче линейная гамма работает отвратительно. Для нее лучше подходит гамма близкая к 3.
Но это "чистые" задачи. Большинство реальных задач (например, альфа блендинг или какие-нибудь фото фильтры) требуют некоторую смесь и того и другого. Попытка правильно совместить эти требования может приводить к очень громоздким вычислениям. Поэтому, как компромисс, можно использовать гамму близкую к 2.
Здравствуйте, McSeem2, Вы писали:
MS>Ну, я точно так же могу возразить, что в Вашем случае на довольно большом участке слева незаметно никакого градиента, а справа — он слишком резкий. Я лишь "ратую" за то, что мой вариант более симметричный, иными словами, участки справа и слева, на которых почти не заметно градиента приблизительно одинаковы. У Вас же они существенно отличаются. Но, возможно, здесь накладывается индивидуальное воприятие. Надо опросить "незаинтересованных свидетелей" — который из градиентов представляется более симметричным. L*u*v или RGB-gamma=2.0?
На моем домашнем мониторе, который откалиброван под sRGB, моя картинка кажется мне более симметричной.
MS>Все это очень дорогие пространства. Как, например, делается alpha-blend в L*u*v? А остальные 24 color compositing операции?
Так я же и не устаю повторять, что использование гаммы в районе 2 представляется мне очень удачным компромиссом между правильной цветопередачей и равномерностью восприятия.
Здравствуйте, MichaelP, Вы писали:
MP>Здравствуйте, minorlogic, Вы писали:
MP>Здесь уже неоднократно говорилось, что разные задачи требуют разного подхода.
MP>Сложение цветов правильнее делать в линейной гамме. А вот, многократно упоминаемый здесь градиент, не требует сложения цветов, а требует перцептуальной линейности. На такой задаче линейная гамма работает отвратительно. Для нее лучше подходит гамма близкая к 3.
Тут я не очень понимаю что значит "перцептуальной линейности" , если постоянной яркости , тогда в YUV или LAB или еще что то , там линейно , потом обратно в RGB и применяем гамма корекцию к монитору.
MP>Но это "чистые" задачи. Большинство реальных задач (например, альфа блендинг или какие-нибудь фото фильтры) требуют некоторую смесь и того и другого. Попытка правильно совместить эти требования может приводить к очень громоздким вычислениям. Поэтому, как компромисс, можно использовать гамму близкую к 2.
Опять не согласен СОВСЕМ. только так — перевод в ленейное представление — операции — перевод опять в гама скоректированное
Здравствуйте, minorlogic, Вы писали:
M>Тут я не очень понимаю что значит "перцептуальной линейности" , если постоянной яркости , тогда в YUV или LAB или еще что то , там линейно , потом обратно в RGB и применяем гамма корекцию к монитору.
M>Опять не согласен СОВСЕМ. только так — перевод в ленейное представление — операции — перевод опять в гама скоректированное
"Гамма-скорректированное" — это и есть перцептуально линейное (естественно с оговоркой — приблизительно). Это то, что мы пишем в битмап, а потом вызываем BitBlt. Там визуальная яркость прямо пропорциональна длине вектора RGB и расстояние между цветами расчитывется в Евклидовой метрике.
То, что ты называешь "линейным" — это физически линейное, когда интенсивность излучения прямо пропорциональна значению (опять же, с оговоркой — приблизительно, там все приблизительно). Очевидно, что в этом случае используется метрика Манхеттена (r+g+b), поскольку интенсивности излучения каналов складываются (каждый со своим коэффициентом, но это не важно).
Воспринимаемая (перцептуальная) яркость в первом приближении пропорциональна корню квадратному от интенсивности излучения (две одинаковые фары воспринимаются примерно в sqrt(2) раз ярче, чем одна).
Но при этом, ЭЛТ дает интенсивность излучения (физическую) примерно пропорциональную квадрату напряжения на модуляторе и соответственно, значению в RGB. Грубо говоря, эти две зависимости компенсируются (не совсем, конечно же) и таким образом, мы уже имеем перцептуально линейное представление, не делая ничего. Пиксел RGB(127,127,127) дает примерно вчетверо меньше света, чем RGB(255,255,255), но глазами он воспронимается примерно вдвое темнее.
Более того, перцептуально линейное представление — это все, что у нас есть, и цвета представлены там наиболее компактно — 8 бит на канал вполне достаточно.
Гамма 2.2 — это функция преобразования из перцептуально линейного пространства в физически линейное и обратно. Эта гамма учитывает все — и нелинейность восприятия и нелинейность монитора. Линейная интерполяция цветов должна выполняться именно в физически линейном пространстве, после чего накладывается гамма для преобразования в перцептуально линейное. Здесь мы имеем дело с чистой геометрией.
Почему бы в видеокарте не настроить функцию преобразования, так, чтобы мы всегда работали в физически линейном пространстве и не заморачивались преобразованиями? По одной единственной причине — в физически линейном пространстве восьми бит на канал — мало. Надо 12-14. И соответственно, надо иметь в виду, что для работы без потерь, нам картинку (например, из PNG) надо переводить в 16 бит на канал и работать с ними. А потом опять преобразовывать в 8. RGB24 в физически линейном представлении — это примерно как RGB555 в перцептуально линейном. В каких-то задачах это не так уж и важно. В других — очень важно.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
представим лист белой бумаги при освещении в 1 физическую единицу, и черный бархат , который условно примем за 0.
составим также шахматное полотно из белых и черных квадратов.
четвертый лист подберем так чтобы его перцептуальная яркость соответствовала шахматному рисунку .
теперь осветив эти 4 листа физическим светом в 100 единиц ( а глаз воспринимает в гораздо большем диапазоне ), по твоей логике мы получим такую картину.
лист который был перцептуально средним между бархатом и белым листом ЖУТКО сместится по восприятию или к бархату или к белому листу .
Гдето нарушена логик а, потому что на самом деле этоит лист будет все равно примерно в 2 раза тусклее белого листа
Здравствуйте, minorlogic, Вы писали:
M>представим лист белой бумаги при освещении в 1 физическую единицу, и черный бархат , который условно примем за 0. M>составим также шахматное полотно из белых и черных квадратов. M>четвертый лист подберем так чтобы его перцептуальная яркость соответствовала шахматному рисунку .
M>теперь осветив эти 4 листа физическим светом в 100 единиц ( а глаз воспринимает в гораздо большем диапазоне ), по твоей логике мы получим такую картину. M>лист который был перцептуально средним между бархатом и белым листом ЖУТКО сместится по восприятию или к бархату или к белому листу .
M>Гдето нарушена логик а, потому что на самом деле этоит лист будет все равно примерно в 2 раза тусклее белого листа
Если визуальная яркость серого и шахматного листов одинакова, то значит и физическая одинакова (они отражают одинаковое количество света). Явное "нарушение логики" возникнет, если только клетки очень крупные. Но здесь уже пространственное разрешение сбивает с толку. Речь идет либо о точечном источнике, либо о равномерно освещенной области.
Кстати, получить серый лист, воспринимаемый по яркости так же, как и шахматный очень просто — уменьшаем размер квадратиков до предела визуального разрешения. Сохраняя геометрию, разумеется. На лазернике однопикельное шахматное поле будет просто черным.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
У меня на работе, кстати, на довольно дорогом (но все-таки ширпотребовском) мониторе NEC MultiSync LCD 2180UX картинка выглядит вполне прельстиво — с расстояния 2 метра — идеально равномерный светло-серый цвет. Означает ли это, что монитор откалиброван под sRGB? Но и мой тест с простой гаммой выглядит тоже хорошо при gamma=2.14 (я использую 16bpc внутри). Означает ли это, что sRGB на самом деле очень незначительно отличается от простой гамма-корекции? Судя по определению, кривая яркости sRGB очень близка к gamma=2.4. Только на самых темных цветах (0...10 из 255) мы имеем отрезок прямой:
Но почему тогда мой тест дает равномерную картинку при gamma=2.14 (точнее сказать, картинка выглядит наиболее равномерной, когда она сделана для gamma=2.14)? При gamma=2.4, окружающий фон выглядит явно светлее черезстрочного белого.
Кстати, на этом же мониторе, яркость и контрастность практически не влияют на равномерность. Только при превышении контрастности 50%, наступает насыщение и, скажем, цвета 220...255 никак не отличаются. Не понимаю, какой смысл "зарезать" диапазон таким способом?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
раз подчеркну, картинка сделана для sRGB, а оно не сводится к простой гамме.
MS>У меня на работе, кстати, на довольно дорогом (но все-таки ширпотребовском) мониторе NEC MultiSync LCD 2180UX картинка выглядит вполне прельстиво — с расстояния 2 метра — идеально равномерный светло-серый цвет. Означает ли это, что монитор откалиброван под sRGB? Но и мой тест с простой гаммой выглядит тоже хорошо при gamma=2.14 (я использую 16bpc внутри). Означает ли это, что sRGB на самом деле очень незначительно отличается от простой гамма-корекции? Судя по определению, кривая яркости sRGB очень близка к gamma=2.4. Только на самых темных цветах (0...10 из 255) мы имеем отрезок прямой:
MS>Но почему тогда мой тест дает равномерную картинку при gamma=2.14 (точнее сказать, картинка выглядит наиболее равномерной, когда она сделана для gamma=2.14)? При gamma=2.4, окружающий фон выглядит явно светлее черезстрочного белого.
Благодаря Вам сделал то, что давно хотел, но руки не доходили. Итак, результат:
Пространству sRGB по метрике L (она в Lab и L*u*v* одинакова) ближе всего соответствует gamma = 2.17. Т.ч. Ваш результат вполне понятен.
Построим градиент от черного к белому и будем менять освещение . Если восприятие нелинейно тогда , градиент как бы начнет изгибаться при изменении освещения .
Опять же того не происходит.
M>Построим градиент от черного к белому и будем менять освещение . Если восприятие нелинейно тогда , градиент как бы начнет изгибаться при изменении освещения . M>Опять же того не происходит.
А вот этим тестом Вы сами ответили на вопрос о популярности гаммы. При степенной зависимости изгиба градиента не происходит — отношения освещенностей в разных точках не меняются. Поправку от степенной зависимости вносят только в очень темных тонах, и это понятно, какой-то порог восприятия должен быть.
Здравствуйте, MichaelP, Вы писали:
M>>Построим градиент от черного к белому и будем менять освещение . Если восприятие нелинейно тогда , градиент как бы начнет изгибаться при изменении освещения . M>>Опять же того не происходит.
MP>А вот этим тестом Вы сами ответили на вопрос о популярности гаммы. При степенной зависимости изгиба градиента не происходит — отношения освещенностей в разных точках не меняются. Поправку от степенной зависимости вносят только в очень темных тонах, и это понятно, какой-то порог восприятия должен быть.
Нет нет , вы что то путаете , попробуйте провести эксперимент мысленный.
M>Нет нет , вы что то путаете , попробуйте провести эксперимент мысленный.
Давайте представим, что в точке, предположим, с координатой 1 у нас интенсивность 1, а в точке 2 — 2. Если взять "естественную" гамму 2, то по восприятию точки будут отличаться в sqrt(2) раза. Увеличим интенсивность в два раза, теперь значение интенсивности 2 и 4. А отношение по восприятию? Те же sqrt(2). И так для любых точек.
Здравствуйте, McSeem2, Вы писали:
MS>Рискну оспорить. Это не гамма монитора, а гамма восприятия (сетчатка глаза плюс обработка мозговой нейросетью). Вот еще одна иллюстрация:
MS>
MS>Разглядывать надо уже с расстояния метров 5-7. Гамма монитора здесь уж точно ни при чем — пиксел либо светится, либо не светится. Все пикселы излучают свет одинаковой (с большой точностью) интенсивности. Можно возразить, что здесь может присутствовать некая "паразитная засветка", но это на CRT — там пиксел накрывает чуть большую площадь, чем ему положено — за счет этого возникает дополнительная нелинейность (на принтере — вообще бардак, там пиксел — это клякса, накрывающая с десяток "пиксело-мест"). Но на LCD — все четко, там если и присутствует некая засветка, то настолько незначительная, что ей можно пренебречь.
Я отошёл и повертел головой. Так вот, цвет средних полосок (вертикальной и горизонтальной) стабильно отличается, вне зависимости от наклона головы.
Так что, это всё-таки особенности монитора. (У меня ЖК Samsung SyncMaster 920T, гамму я ему не настраивал).
Здравствуйте, MichaelP, Вы писали:
MP>Давайте представим, что в точке, предположим, с координатой 1 у нас интенсивность 1, а в точке 2 — 2. Если взять "естественную" гамму 2, то по восприятию точки будут отличаться в sqrt(2) раза. Увеличим интенсивность в два раза, теперь значение интенсивности 2 и 4. А отношение по восприятию? Те же sqrt(2). И так для любых точек.
Ну, строго говоря, на больших уровнях освещенности тоже наступает насыщение. И вот здесь возникает интересный момент — чем определяется суммарная характеристика яркости зрительного восприятия? Ясно, что значительная часть диапазона регулирутся диафрагмой — зрачок подстраивается под некую среднюю освещенность. Единовременно мы видим в ограниченном диапазоне освещенностей, но он все равно весьма широк по сравнению даже с самой совершенной фототехникой (так мне интуитивно представляется). По крайней мере, что-то не верится, что характеристика освещенность-сигнал в сетчатке является линейной. Я не знаю всей механики, но сдается мне, что уже в сетчатке присутствует некий "логарифмизм". Очень уж диапазон широк. Ну люди — ладно. А лягушки, глаза которых регистрируют отдельные кванты? И при этом не слепнут от яркого солнца? Но это уже вопрос вне темы.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, Кодт, Вы писали:
К>Я отошёл и повертел головой. Так вот, цвет средних полосок (вертикальной и горизонтальной) стабильно отличается, вне зависимости от наклона головы. К>Так что, это всё-таки особенности монитора. (У меня ЖК Samsung SyncMaster 920T, гамму я ему не настраивал).
У меня дома — дешевый hp pavilion f1903. Цветопередача — "аццтой". Тем не менее, никакой паразитной засветки не наблюдается. Цвет вертикальных и горизональных средних полос — одинаково серый, примерно соответсвующий RGB(192,192,192);
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.