| 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/ |
|