MacroClub.Ru https://macroclub.ru:443/club/ |
|
RBG, LAB, цвет, яркость... https://macroclub.ru:443/club/viewtopic.php?f=4&t=1645 |
Страница 1 из 2 |
Автор: | LAY [ Вс фев 10, 2008 2:46 am ] |
Заголовок сообщения: | RBG, LAB, цвет, яркость... |
Сразу хочу попросить прощения за оффтопиковость. Выписался из больнички после ЗЧМТ - появилось свободное время. И думаю про всякое... Вот вдруг меня такая тема заинтересовала - "сложение цветов". Насколько корректно манипулировать R, G и B составляющими для "усреднения" цвета? Для ясности вопроса, предлагаю рассмотреть простячий алгоритм ресайза 2/1: квадрат 2х2 надо усреднить до пиксела. Если мы работаем в LAB, все интуитивно: усредняем A и B для получения результирующего цвета, мудрим с L для всяких шарпящих эффектов (или не мудрим, просто усредняем для простоты). Красно-зеленый квадрат станет коричневым (гмм...) зато его яркость (а именно это и важно!) будет правильной (ибо Lab). А что с RGB? Красная составляющая ослабнет (из-зи отсутствия таковой в зеленой половине), зеленая - тоже. Суммарно получится некий цвет (да пофиг какой) с непредсказуемой (А ВОТ И ВОПРОС ТОПИКА!) яркостью. Опытно (визуально) почему-то разницы в подобных преобразованиях RGB/LAB не разглядеть. И тем не менее интересно, можно ли считать сложение r,g,и b приемлемым? |
Автор: | Sergei [ Вс фев 10, 2008 3:58 pm ] |
Заголовок сообщения: | Re: Шарпенинг, ресайз, RBG, LAB... |
LAY писал(а): Насколько корректно манипулировать R, G и B составляющими для "усреднения" цвета?
Для того, чтобы ответить на этот вопрос, нужно вначале определиться, что есть "коректность" ![]() Например, если ввести корректным такие манипуляции, которые эквивалентны оптическим размытиям, то нужно манипулировать RGB каналами, значения в которых линейно пропорциональны экспозиции (освещенности пикселя). Наиболее полно этому соответствуют сырые данные. В меньшей степени - обычные RGB с компенсацией "гаммы". |
Автор: | Dima DD [ Пн фев 11, 2008 1:35 am ] |
Заголовок сообщения: | Re: Шарпенинг, ресайз, RBG, LAB... |
Да, точно - "корректность" может быть разной, смотря с какой стороны смотреть, и что считать главным... Подозреваю, что для большинства особенно важна "естественность" для человека, с учётом особенностей человеческого зрения. Меня лично заинтересовали те процедуры, которые мы привычно применяем при обработке готовых изображений в редакторах (ФШ, например) - и тут оказывается, что элементарное смешение RGB-каналов (как это делается в ФШ-фильтрах) приводит к понятным проблемам со светлотой - а это не есть хорошо! Я лично предпочёл бы нижнюю половинку присланной мною красно-зелёной картинки, а не верхнюю... ![]() Красный: R255, G0, B0 = L54, a81, b70 Зелёный: R0, G255, B0 = L88, a-79, b81 Смесь RGB: R128, G128, B0 = L52, a-8, b53 - занижена светлота (средняя светлота: L=(54+88 )/2=71), что отчётливо видно на верхней половинке моей иллюстрации. Смесь Lab: L71, a1, b76 = R196, G170, B0 - а тут красный канал завышен? По крайней мере, тона верхней и нижней половинок тоже чётко различаются. Ежели взять смесь, полученную из RGB, и поднять её светлоту до средней по версии Lab: L71, a-8, b53 = R179, G176, B67 - этот цвет заметно "холоднее", чем при смешении в Lab... ![]() ![]() |
Автор: | Sergei [ Пн фев 11, 2008 12:52 pm ] |
Заголовок сообщения: | Re: Шарпенинг, ресайз, RBG, LAB... |
Lab вроде бы описывает светлоту и цвет лишь приближенно... Если смешивать каналы с учетом гаммы 2.2, то (R255, G0, B0)+(R0, G255, B0 ) будет примерно (R186, G186, B0 ). Учет гаммы делают не все, потому что это, во-первых, дополнительные операции, а во-вторых - дополнительные округления. |
Автор: | LAY [ Пн фев 11, 2008 3:58 pm ] |
Заголовок сообщения: | Re: Шарпенинг, ресайз, RBG, LAB... |
Ух! Тема оказалась еще запутаннее, чем я думал... ![]() Вот еще картиночка до кучи: ![]() Ничего "специального" не делал, просто нарисовал красный пупырик на зеленом в ЛАБе (справа) и РГБ (слева). Увеличил для наглядности. В РГБ эллипс обрамлен темной каймой, в ЛАБе - светлой. ИМХО полное безобразие! |
Автор: | Gene [ Пн фев 11, 2008 4:31 pm ] |
Заголовок сообщения: | |
Sergei писал(а): Lab вроде бы описывает светлоту и цвет лишь приближенно...
Если смешивать каналы с учетом гаммы 2.2, то (R255, G0, B0)+(R0, G255, B0 ) будет примерно (R186, G186, B0 ). Учет гаммы делают не все, потому что это, во-первых, дополнительные операции, а во-вторых - дополнительные округления. Можно подробнее -- какие именно операции? Где об этом подробнее можно почитать? Нужно ли учитывать гамму, работая с Lab? |
Автор: | Sergei [ Пн фев 11, 2008 5:02 pm ] |
Заголовок сообщения: | Re: Шарпенинг, ресайз, RBG, LAB... |
Gene писал(а): Можно подробнее -- какие именно операции? Где об этом подробнее можно почитать? Нужно ли учитывать гамму, работая с Lab? Если моделировать оптическое смешение цветов, то нужно в расчетах манипулировать интенсивностями каналов. Интенсивность можно получить из цифр канала как I=Imax*(val/255)^gamma. gamma=2.2. val - 8-битное значение одного из каналов. (На самом деле для sRGB пересчет идет по кусочно заданной функции, но это нюансы) То есть, по идее, необходимо перед обычными операциями сделать переход к интенсивностям (по заранее протабулированной функции), затем сделать все необходимые операции, потом вернуться от интенсивностей к обычным значениям. Помимо того, что добавляются преобразования в интенсивность и обратно, эту самую интенсивность нужно хранить (и делать все преобразования) как минимум в 16 бит |
Автор: | Gene [ Пн фев 11, 2008 5:18 pm ] |
Заголовок сообщения: | Re: Шарпенинг, ресайз, RBG, LAB... |
Цитата: Если моделировать оптическое смешение цветов, то нужно в расчетах манипулировать интенсивностями каналов. Интенсивность можно получить из цифр канала как I=Imax*(val/255)^gamma. gamma=2.2. val - 8-битное значение одного из каналов. Что такое lmax, откуда его взять? Цитата: (На самом деле для sRGB пересчет идет по кусочно заданной функции, но это нюансы) То есть, по идее, необходимо перед обычными операциями сделать переход к интенсивностям (по заранее протабулированной функции), затем сделать все необходимые операции, потом вернуться от интенсивностей к обычным значениям. Не совсем понятно. Что за протабулированная функция? Цитата: Помимо того, что добавляются преобразования в интенсивность и обратно, эту самую интенсивность нужно хранить (и делать все преобразования) как минимум в 16 бит Ну, при необходимости можно и float... Это несущественное ограничение. |
Автор: | Sergei [ Пн фев 11, 2008 6:57 pm ] |
Заголовок сообщения: | |
Gene писал(а): Что такое lmax, откуда его взять?
Это яркость свечения пикселя, когда на него 255 подают ![]() Если считать во float, можно считать единицей; если в целых - то максимальное значение соотв. типа. Можно почитать раздел Colorimetric definitions and digital encodings по этой ссылке, там нужная функция описана. |
Автор: | Gene [ Пн фев 11, 2008 7:18 pm ] |
Заголовок сообщения: | |
Sergei писал(а): Это яркость свечения пикселя, когда на него 255 подают ![]() Если считать во float, можно считать единицей; если в целых - то максимальное значение соотв. типа. Раз lmax=1, gamma=2.2, формула для вычисления "истинного" значения цветового канала пиксела получается следующая: I=Imax*(val/255)^gamma I=(val/255)^2.2 То есть, практически, нужно разделить текущее значение цвета на максимально допустимое значение (255 или 65535) и возвести в степень 2.2? Для всех каналов одинаково? Цитата: Можно почитать раздел Colorimetric definitions and digital encodings по этой ссылке, там нужная функция описана.
Что-то не получается осилить ![]() ![]() |
Автор: | Sergei [ Пн фев 11, 2008 7:54 pm ] |
Заголовок сообщения: | |
Gene писал(а): Раз lmax=1, gamma=2.2, формула для вычисления "истинного" значения цветового канала пиксела получается следующая:
I=Imax*(val/255)^gamma I=(val/255)^2.2 То есть, практически, нужно разделить текущее значение цвета на максимально допустимое значение (255 или 65535) и возвести в степень 2.2? Для всех каналов одинаково? Да. Но сейчас постараюсь кусками из ссылки объяснить как это делать строго для sRGB. |
Автор: | Sergei [ Пн фев 11, 2008 8:35 pm ] |
Заголовок сообщения: | |
Вот более правильно описано: http://brucelindbloom.com/Eqn_XYZ_to_RGB.html http://brucelindbloom.com/Eqn_RGB_to_XYZ.html Там r,g,b - "линейные" значения, пропорциональные интенсивности, а R,G,B - значения из файла. И те, и другие нормированы так, что максимальные значения - единица. Т.е. восьмибитные значения - это R,G,B умножить на 255. Итого, для sRGB - кусочно заданная функция, а для других RGB - просто возведение в степень. |
Автор: | Gene [ Пн фев 11, 2008 9:17 pm ] |
Заголовок сообщения: | |
2Sergei: Спасибо большое за информацию! Поэкспериментирую ![]() |
Автор: | Dima DD [ Вт фев 12, 2008 3:19 am ] |
Заголовок сообщения: | |
Сорри - был в "отключке" (на работе пришлось до 22 ч. корпеть... ![]() ![]() ![]() ![]() Как линеаризовать? Очень просто! Надо просто конвертировать картинку в другой цветовой профиль: Edit -> Convert to profile... Там выбрать "Custom RGB..." и в открывшемся диалоговом окошке не менять никаких значений, кроме "Gamma" - ей надо присвоить 1.0. Ну, можно ещё название типа "Linear sRGB" вписать (а то и вообще потом в "Color settings" сохранить этот профиль на будущее... ![]() Вот, так оно практически проще, "по-Фотошоповски"! ![]() |
Страница 1 из 2 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |