Текущее время: Вс июн 16, 2024 3:46 pm

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: RBG, LAB, цвет, яркость...
СообщениеДобавлено: Вс фев 10, 2008 2:46 am 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Сб апр 16, 2005 1:52 am
Сообщения: 2183
Откуда: Москва
Сразу хочу попросить прощения за оффтопиковость. Выписался из больнички после ЗЧМТ - появилось свободное время. И думаю про всякое...
Вот вдруг меня такая тема заинтересовала - "сложение цветов". Насколько корректно манипулировать R, G и B составляющими для "усреднения" цвета?
Для ясности вопроса, предлагаю рассмотреть простячий алгоритм ресайза 2/1: квадрат 2х2 надо усреднить до пиксела. Если мы работаем в LAB, все интуитивно: усредняем A и B для получения результирующего цвета, мудрим с L для всяких шарпящих эффектов (или не мудрим, просто усредняем для простоты). Красно-зеленый квадрат станет коричневым (гмм...) зато его яркость (а именно это и важно!) будет правильной (ибо Lab).
А что с RGB? Красная составляющая ослабнет (из-зи отсутствия таковой в зеленой половине), зеленая - тоже. Суммарно получится некий цвет (да пофиг какой) с непредсказуемой (А ВОТ И ВОПРОС ТОПИКА!) яркостью.

Опытно (визуально) почему-то разницы в подобных преобразованиях RGB/LAB не разглядеть. И тем не менее интересно, можно ли считать сложение r,g,и b приемлемым?


Последний раз редактировалось LAY Пн фев 11, 2008 8:22 pm, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 10, 2008 4:58 am 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Ср окт 05, 2005 3:12 am
Сообщения: 11334
Откуда: Санкт-Петербург
Да, вопрос интересный! :D Вот эксперимент: взял простую RGB-картинку (одна половина поля красная, другая - зурёная), сделал её копию и перевёл в Lab. Потом размыл обе фильтром Gaussian Blur с большим радиусом - и вот, что получилось:
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шарпенинг, ресайз, RBG, LAB...
СообщениеДобавлено: Вс фев 10, 2008 3:58 pm 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Чт дек 20, 2007 8:35 pm
Сообщения: 568
Откуда: Харьков, Украина
LAY писал(а):
Насколько корректно манипулировать R, G и B составляющими для "усреднения" цвета?

Для того, чтобы ответить на этот вопрос, нужно вначале определиться, что есть "коректность" :D

Например, если ввести корректным такие манипуляции, которые эквивалентны оптическим размытиям, то нужно манипулировать RGB каналами, значения в которых линейно пропорциональны экспозиции (освещенности пикселя). Наиболее полно этому соответствуют сырые данные. В меньшей степени - обычные RGB с компенсацией "гаммы".


Последний раз редактировалось Sergei Пн фев 11, 2008 12:38 pm, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шарпенинг, ресайз, RBG, LAB...
СообщениеДобавлено: Пн фев 11, 2008 1:35 am 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Ср окт 05, 2005 3:12 am
Сообщения: 11334
Откуда: Санкт-Петербург
Да, точно - "корректность" может быть разной, смотря с какой стороны смотреть, и что считать главным... Подозреваю, что для большинства особенно важна "естественность" для человека, с учётом особенностей человеческого зрения. Меня лично заинтересовали те процедуры, которые мы привычно применяем при обработке готовых изображений в редакторах (ФШ, например) - и тут оказывается, что элементарное смешение RGB-каналов (как это делается в ФШ-фильтрах) приводит к понятным проблемам со светлотой - а это не есть хорошо! Я лично предпочёл бы нижнюю половинку присланной мною красно-зелёной картинки, а не верхнюю... :roll: Тут уже практические аспекты вылезают в полный рост - например, ежели охота что-то добавить-пририсовать к работе (ну, типа замены фона, превращая её в гибрид фотографии и живописи). Выходит, что, пожалуй, такую работу лучше делать в Lab... Вместе с тем, любопытно - а ведь в отношении хроматизма смешения в моделях RGB и Lab тоже оказываются неэквивалентными, вот:

Красный: 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... :roll: Небольшие ошибки (R<>G), вроде как, связаны с невысокой точностью при переводе из одной модели в другую и обратно (но не только? B67... :? ).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шарпенинг, ресайз, RBG, LAB...
СообщениеДобавлено: Пн фев 11, 2008 12:52 pm 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Чт дек 20, 2007 8:35 pm
Сообщения: 568
Откуда: Харьков, Украина
Lab вроде бы описывает светлоту и цвет лишь приближенно...

Если смешивать каналы с учетом гаммы 2.2, то (R255, G0, B0)+(R0, G255, B0 ) будет примерно (R186, G186, B0 ). Учет гаммы делают не все, потому что это, во-первых, дополнительные операции, а во-вторых - дополнительные округления.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шарпенинг, ресайз, RBG, LAB...
СообщениеДобавлено: Пн фев 11, 2008 3:58 pm 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Сб апр 16, 2005 1:52 am
Сообщения: 2183
Откуда: Москва
Ух!
Тема оказалась еще запутаннее, чем я думал... :shock:

Вот еще картиночка до кучи:

Изображение

Ничего "специального" не делал, просто нарисовал красный пупырик на зеленом в ЛАБе (справа) и РГБ (слева). Увеличил для наглядности.
В РГБ эллипс обрамлен темной каймой, в ЛАБе - светлой.
ИМХО полное безобразие!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 11, 2008 4:31 pm 
Не в сети
Член Макроклуба

Зарегистрирован: Чт май 18, 2006 11:49 pm
Сообщения: 1649
Откуда: Нью-Йорк
Sergei писал(а):
Lab вроде бы описывает светлоту и цвет лишь приближенно...

Если смешивать каналы с учетом гаммы 2.2, то (R255, G0, B0)+(R0, G255, B0 ) будет примерно (R186, G186, B0 ). Учет гаммы делают не все, потому что это, во-первых, дополнительные операции, а во-вторых - дополнительные округления.


Можно подробнее -- какие именно операции? Где об этом подробнее можно почитать? Нужно ли учитывать гамму, работая с Lab?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шарпенинг, ресайз, RBG, LAB...
СообщениеДобавлено: Пн фев 11, 2008 5:02 pm 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Чт дек 20, 2007 8:35 pm
Сообщения: 568
Откуда: Харьков, Украина
Gene писал(а):
Можно подробнее -- какие именно операции? Где об этом подробнее можно почитать? Нужно ли учитывать гамму, работая с Lab?

Если моделировать оптическое смешение цветов, то нужно в расчетах манипулировать интенсивностями каналов. Интенсивность можно получить из цифр канала как I=Imax*(val/255)^gamma. gamma=2.2. val - 8-битное значение одного из каналов.
(На самом деле для sRGB пересчет идет по кусочно заданной функции, но это нюансы)
То есть, по идее, необходимо перед обычными операциями сделать переход к интенсивностям (по заранее протабулированной функции), затем сделать все необходимые операции, потом вернуться от интенсивностей к обычным значениям.
Помимо того, что добавляются преобразования в интенсивность и обратно, эту самую интенсивность нужно хранить (и делать все преобразования) как минимум в 16 бит


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Шарпенинг, ресайз, RBG, LAB...
СообщениеДобавлено: Пн фев 11, 2008 5:18 pm 
Не в сети
Член Макроклуба

Зарегистрирован: Чт май 18, 2006 11:49 pm
Сообщения: 1649
Откуда: Нью-Йорк
Цитата:
Если моделировать оптическое смешение цветов, то нужно в расчетах манипулировать интенсивностями каналов. Интенсивность можно получить из цифр канала как I=Imax*(val/255)^gamma. gamma=2.2. val - 8-битное значение одного из каналов.


Что такое lmax, откуда его взять?

Цитата:
(На самом деле для sRGB пересчет идет по кусочно заданной функции, но это нюансы)
То есть, по идее, необходимо перед обычными операциями сделать переход к интенсивностям (по заранее протабулированной функции), затем сделать все необходимые операции, потом вернуться от интенсивностей к обычным значениям.


Не совсем понятно. Что за протабулированная функция?

Цитата:
Помимо того, что добавляются преобразования в интенсивность и обратно, эту самую интенсивность нужно хранить (и делать все преобразования) как минимум в 16 бит


Ну, при необходимости можно и float... Это несущественное ограничение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 11, 2008 6:57 pm 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Чт дек 20, 2007 8:35 pm
Сообщения: 568
Откуда: Харьков, Украина
Gene писал(а):
Что такое lmax, откуда его взять?

Это яркость свечения пикселя, когда на него 255 подают :)
Если считать во float, можно считать единицей; если в целых - то максимальное значение соотв. типа.

Можно почитать раздел Colorimetric definitions and digital encodings по этой ссылке, там нужная функция описана.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 11, 2008 7:18 pm 
Не в сети
Член Макроклуба

Зарегистрирован: Чт май 18, 2006 11:49 pm
Сообщения: 1649
Откуда: Нью-Йорк
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 по этой ссылке, там нужная функция описана.


Что-то не получается осилить :( Мне бы на пальцах, если возможно :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 11, 2008 7:54 pm 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Чт дек 20, 2007 8:35 pm
Сообщения: 568
Откуда: Харьков, Украина
Gene писал(а):
Раз lmax=1, gamma=2.2, формула для вычисления "истинного" значения цветового канала пиксела получается следующая:

I=Imax*(val/255)^gamma
I=(val/255)^2.2

То есть, практически, нужно разделить текущее значение цвета на максимально допустимое значение (255 или 65535) и возвести в степень 2.2? Для всех каналов одинаково?

Да. Но сейчас постараюсь кусками из ссылки объяснить как это делать строго для sRGB.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 11, 2008 8:35 pm 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Чт дек 20, 2007 8:35 pm
Сообщения: 568
Откуда: Харьков, Украина
Вот более правильно описано:
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 - просто возведение в степень.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн фев 11, 2008 9:17 pm 
Не в сети
Член Макроклуба

Зарегистрирован: Чт май 18, 2006 11:49 pm
Сообщения: 1649
Откуда: Нью-Йорк
2Sergei: Спасибо большое за информацию! Поэкспериментирую :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 12, 2008 3:19 am 
Не в сети
Член Макроклуба
Аватара пользователя

Зарегистрирован: Ср окт 05, 2005 3:12 am
Сообщения: 11334
Откуда: Санкт-Петербург
Сорри - был в "отключке" (на работе пришлось до 22 ч. корпеть... :? ). Да, конечно же - Сергей прав! :D В общем, ежели хотим более-менее корректно размывать-скадывать-делить цвета в ФШ, то надо это делать либо в Lab (при этом результат не идеальный, имхо, получается - особенно на границе зелёного и синего вдруг фиолетовость лезет... :? ), либо в линеаризованном RGB (тут мне результаты экспериментов, честно говоря, понравились более всего!). А ежели в гамма-корректированном RGB фильтр блюрящий применять, то выглядит такое хуже всего... :? Я тестировал на картинке с четырьмя широкими полосами:R-G-B-R.

Как линеаризовать? Очень просто! Надо просто конвертировать картинку в другой цветовой профиль: Edit -> Convert to profile... Там выбрать "Custom RGB..." и в открывшемся диалоговом окошке не менять никаких значений, кроме "Gamma" - ей надо присвоить 1.0. Ну, можно ещё название типа "Linear sRGB" вписать (а то и вообще потом в "Color settings" сохранить этот профиль на будущее... :roll: ). После курочения картинки можно опять применить гамма-коррекцию, преобразовав в старый профиль обратно.

Вот, так оно практически проще, "по-Фотошоповски"! :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Купить Бокалы Zwiesel Glas - официальный магазин.