Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > 24 bit -> grayscale


Автор: stab 21.6.2003, 13:14
такая проблемка: при переводе в оттенки серого по (r + g + b) / 3, цвета с одинаковой насыщенотью (чисто синий, чисто красный) получаются одинакового по яркости серого цвета.

что интересно фотошоп делает этот перевод, как то подругому:

user posted image user posted image

заметьте, что синий, зеленый и красный не слились хотя имеют одинаковою насыщенность.

вопрос: как это делает фотошоп? и какие еще способы есть кроме (r + g + b) / 3?

Автор: dm9 21.6.2003, 13:54
Составляющие цвета не одинаково чувствуются нашим глазом - поэтому просто складывать нельзя: нужны особые коэффициенты, как вот здесь, например:
http://www.sources.ru/delphi/graphics/convert_color_to_shade_gray.shtml

Автор: stab 21.6.2003, 16:07
dm9 спасибо

Автор: MuToGeN 25.6.2003, 11:10
Код
Gray := Round((0.30 * GetRValue(RGBColor)) +
               (0.59 * GetGValue(RGBColor)) +
               (0.11 * GetBValue(RGBColor )));
А кто-нибудь может объяснить, почему именно 0.30, 0.59 и 0.11 и от чего это зависит?

Автор: PostEr 30.7.2003, 17:58
Это может быть связано с размерами рецепторов и длинами волн красного, зелёного и синего цветов.


Автор: PostEr 31.7.2003, 16:34
Согласно литературе (Е.В.Шикик, А.В.Боресков "Компьютерная графика.Полигональные модели.")...

Колбочки бывают трёх типов, отвеающих за чувствительность к длинным, средним и коротким волнам. Выдаваемое колбочкой значение являетяс результатом интегрировния спектральной функции I(L) с весовой функцией чувствительности. ( Прим. Графики зависимости приведены в книге. ) Видно, что у одной из них пик чувствительности приходится на волны с короткой длиной волны (синий цвет), у другой - на волны средней длины (жёлто-зелёный цвет), а у третьей - на волны с большой длиной волны (кр.цвет).
Таким образом, глаз человека ставит в соответствие спектральной функции I(L) тройку чисел (RGB), получаемую по формулам

R = (интеграл) I(L) PR (L)dL,
G = (интеграл) I(L) PG (L)dL,
B = (интеграл) I(L) PB (L)dL,

...
Одним словом читайте книгу, а основная мысль - наименьшая чувствительность приходится на синий , а наибольшая на жёлто-зелёный smile.gif Всем спасибо за внимание smile.gif)



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)