Любое цветовое пространство RGB должно быть связано с эталонным цветовым пространством CIE XYZ [4]. Для CIE XYZ известно соответствие между значением коэффициентов (x,y,z) пикселя и фактическим значением яркости эталонных источников света, смешением которых добиваются получения нужного воспринимаемого цвета. Для каждого RGB-изображения явно или неявно такое преобразование в XYZ должно быть определено, иначе оно может быть корректно показано только на том мониторе, на котором создавалось. Назовем такую информацию цветовым профилем изображения [2, 6]. Если такой профиль есть у монитора, то путем преобразования RGBimage → XY Zimage и затем преобразования XY Zimage → RGBdisplay монитора можно получить на другом мониторе цвета, соответствующие исходным (с учетом ограниченной цветопередачи).
В системе XYZ координата Y по определению соответствует воспринимаемой яркости цвета (Luminance [9]). Таким образом, чтобы получить из RGB монохромное изображение с учетом воспринимаемых человеком яркостей, необходимо преобразовать каждый пиксель в XYZ и взять координату Y в качестве результата. Известно, что преобразование между любыми аддитивными цветовыми системами линейное (в силу линейности восприятия цвета целовеком [7]), а, значит, может быть описано матрицей M3×3, такой, что

Коэффициенты (0.3,0.59,0.11) — это округленная до второго знака строчка из матрицы преобразования MNTSC из системы NTSC RGB (стандарт для американского телевидения) в XYZ, а “типичная” формула
|
|
(1) |
вычисляет воспринимаемую яркость Y для изображения, закодированного в NTSC RGB. Полная матрица преобразования выглядит так[1]:

Большинство цифровых изображений на данный момент соответствуют стандарту sRGB [3,5], разработанному для компьютерных мониторов, поэтому типичная формула неверна!
Более корректным будет преобразование для sRGB (см. матрицу MsRGB в [1]): Y = 0.21R + 0.72G + 0.07B . Но наиболее правильным будет использование профиля изображения, если он доступен.
Необходимо обратить внимание, что RGB-изображения имеют нелинейную кодировку яркости, так называемую гамма-коррекцию [8] Cgamma = Clinear1∕γ, где γ является также частью профиля изображения (для sRGB можно считать гамму равной 2.2, хотя на практике функция несколько сложнее [3, 5]). А преобразование в черно-белое необходимо проводить в линейном пространстве, поэтому перед преобразованием надо выполнить гамма-преобразование, обратное гамма-коррекции Clinear = Cgammaγ. Таким образом, корректное преобразование из цветного sRGB-изображения в монохромное выглядит так (цвета изображения лежат в диапазоне [0,255]):

Как видно из рисунка 1, разница между преобразованиями (1) и (2) имеется и она может быть существенной для требовательных приложений.
|
|
|
|
|
|
(а) |
(б) |
(в) |
(г) |
Рис. 1: Пример преобразование цветного в черно-белое изображение. (а) Исходное изображение (б) “Типичное” неверное преобразование (в) sRGB-преобразование (г) Линейная разница (x15)
Ссылки
[1] http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
[3] http://www.w3.org/Graphics/Color/sRGB.html
[4] http://en.wikipedia.org/wiki/CIE_1931_color_space
[5] http://en.wikipedia.org/wiki/SRGB
[6] http://en.wikipedia.org/wiki/ICC_profile
[7] http://en.wikipedia.org/wiki/Grassmann%27s_law_%28optics%29
[8] http://en.wikipedia.org/wiki/Gamma_correction
[9] http://en.wikipedia.org/wiki/Luminance_%28relative%29
| Прикрепленный файл | Размер |
|---|---|
| rgb2gray_article.pdf | 419.46 кб |