Цифровое представление цвета: различия между версиями
Содержимое удалено Содержимое добавлено
Byzantine (обсуждение | вклад) м орфография, викификатор |
|||
Строка 1:
<!--
TODO:
* добавить иллюстрации в раздел Воспроизведение
* переделать Bartleson5x5.png в настоящий png/svg
* отделить низ таблицы?
-->
{{wikipedia|Цветовая модель}}
== Введение ==
[[
[[
'''Цвет'''
Причём есть три основных частоты, «смешивая» которые можно получить ''почти'' все воспринимаемые человеком цвета. Если эти частоты излучаются отдельно (например, лазером), то воспринимаются они как красный, зелёный и синий цвета. Отсюда родилась '''[[wikipedia:RGB color model|RGB]]''' модель. Она очень удобна для технической реализации в устройствах, которые свет излучают (мониторы и проекторы). Так как там из одной точки можно «посветить» тремя цветами разной интенсивности и таким образом, используя только 3 основных цвета, получать почти весь видимый спектр.
Строка 16 ⟶ 17 :
Если на белую стену посветить красным, зелёным и синим прожектором, то на пересечении областей мы получим участки, которые «излучают» сразу два цвета: красный + зелёный = ''yellow'', зелёный + синий = ''cyan'', синий + красный = ''magenta''. В данном случае мы контролируем излучаемый свет, тем самым добавляя основные цвета друг к другу в нужных пропорциях ([[wikipedia:Additive color|аддитивная модель]]).
Но представим ситуацию, когда мы не можем излучать свет самостоятельно. Это случай журналов и картин. В природе естественным является белый свет
Например, смешивая cyan (голубой; поглощает красный, отражает зелёный и синий) и magenta (розовый; поглощает зелёный, отражает красный и синий) мы получаем поверхность, которая поглащает красный и зелёный и, соответственно, отражает только синий. Отсюда появилась цветовая схема [[wikipedia:CMYK color model|CMYK]], которая используется при печати. «K» означает четвёртую, чёрную, краску. Её используют по техническим соображениям.
* [http://hubel.med.harvard.edu/book/b40.htm Color vision.] «Eye, Brain, and Vision», Hubel D.
== Цветовые модели ==
=== XYZ ===
<div class="tright" style="clear:none">[[
<div class="tright" style="clear:none">[[
'''[[wikipedia:CIE 1931 color space|XYZ]]'''
=== XYY ===
Для иллюстраций используют модель '''xyY''', получающуюся из XYZ простыми преобразованиями. При этом трёхмерными изображениями обычно не заморачиваются и компонент яркости отбрасывается. Получающаяся '''xy''' диаграмма имеет одно замечательное свойство: если выбрать на ней три основных (''primary'') цвета, то внутри образуемого ими треугольника окажутся все цвета, которые можно представить при помощи этих праймари. Вообще, это распространяется на любой n-угольник. На этом свойстве и основана RGB модель.
=== RGB и YCbCr ===
'''RGB''' удобна для захвата цветов камерой и воспроизведения их на мониторе или проекторе. Однако для передачи и кодирования сигнала она мало пригодна по нескольким причинам:
# Считается, что человеческий глаз больше замечает изменения яркости, чем цветности. RGB модель не позволяет это использовать.
# Когда появилось цветное телевидение, необходимо было сохранить совместимость с чёрно-белыми телевизорами.
Поэтому для передачи цветного сигнала была разработана модель [[wikipedia:YUV|YUV]], которая использовала один компонент (Y) для передачи яркости (чёрно-белое телевидение) и два дополнительных компонента (UV) для передачи цвета. В цифровом кодировании схожая модель зовётся '''[[wikipedia:YCbCr|YCbCr]]'''.
* [http://www.fho-emden.de/~hoffmann/ciexyz29082000.pdf CIE Color Space], Gernot Hoffman
== Цветовые пространства ==
<div class="tright" style="clear:none">[[
<div class="tright" style="clear:none">[[
[[
'''Цветовое пространство''' (gamut) модели RGB определяется выбором праймари и [[wikipedia:White point|точки белого]]. Часто выбор диктуется некими практическими соображениями, например, наличием в производстве соответствующего люминофора.
=== CIE RGB ===
Это пространство основано на трёх монохроматических цветах. E
=== sRGB ===
Стандарт, созданный HP и Microsoft в 1996 году. Данный стандарт применяется повсеместно: компьютерные мониторы, интернет, принтеры…
* ICC: [http://www.color.org/chardata/rgb/rgb_registry.xalter Three component color encoding registry]
== RGB → YCbCr ==
Преобразование из RGB в YCbCr выполняется по формуле:
Строка 65 ⟶ 66 :
Коэффициенты <math>K_R</math> и <math>K_B</math> (''matrix coefficients'') зависят от используемого цветового пространства и отдельно определяются соответствующими стандартами. При этом стандарты, использующие одинаковые праймари и точку белого, могут декларировать разные коэффициенты преобразования, и наоборот.
== Гамма коррекция ==
Воспринимаемая человеком яркость изображения ([[wikipedia:Lightness (color)|lightness]]) нелинейно зависит от «реальной» яркости ([[wikipedia:Luminance (relative)|luminance]]): тёмные оттенки человек различает лучше чем светлые. Чтобы избежать неравномерных потерь при передаче и кодировании сигнала, линейные значения RGB или YCbCr должны быть преобразованы в нелинейные
В теории гамма коррекция должна производиться после конвертации RGB → YCbCr при записи данных, а обратное преобразование
* [http://www.poynton.com/notes/colour_and_gamma/GammaFAQ.html Gamma FAQ], Charles Poynton
* [http://www.poynton.com/notes/color/GammaFQA.html Gamma FQA], Charles Poynton
* [http://poynton.com/PDFs/Rehabilitation_of_gamma.pdf The rehabilitation of gamma], Charles Poynton
* [[wikipedia:Weber–Fechner law|
== Chroma subsampling ==
[[
Как уже упоминалось, считается, что человек сильнее воспринимает изменения яркости, чем изменения цветности. Так как YCbCr кодирует яркость (Y) и цветность (CbCr) отдельно, то эта особенность человеческого восприятия позволяет сохранять компоненты цветности с меньшим разрешением, чем компонент яркости. Называется это '''chroma subsampling'''.
Расмотрим 2 строки по 4 пикселя в каждой. В обычном случае мы имеем по 4 значения Y для каждой строки, и по 4 значения Cb и Cr для каждой из двух строк. Это описывается соотношением 4:4:4.
В общем виде записывается как ''J:a: b'', где ''J''
Например, «4:2:0»: 4(сэмпла яркости на каждую строку):2(сэмпла цветности на первую строку):0(сэмплов цветности на вторую строку
Несмотря на то, что визуально chroma subsampling почти не заметен, в некоторых случаях при преобразовании обратно в RGB могут возникать видимые артефакты. Проявляются они либо на видео низкого разрешения с текстом (в этом случае перед кодированием стоит сделать апскейл), либо при переходах между некоторыми цветами (чёрный-красный, зелёный-маджента), либо на специальных тестовых изображениях.
* [http://poynton.com/PDFs/Chroma_subsampling_notation.pdf Chroma subsampling notation], Charles Poynton
* [http://dougkerr.net/pumpkin/articles/Subsampling.pdf Chrominance Subsampling in Digital Images], Douglas A. Kerr
* [http://www.glennchan.info/articles/technical/chroma/chroma1.htm Towards Better Chroma Subsampling], Glenn Chan
* [http://www.glennchan.info/articles/technical/chromata/chromata.html Color subsampling], Glenn Chan
== Уровни ==
Для передачи цифрового сигнала чаще всего используется 8 бит на сэмпл. То есть Y, Cb и Cr могут принимать значения 0..255. Однако, из-за аналоговой природы большинства телевизионных стандартов, для видео используется не весь диапазон значений.
Согласно стандартам (BT.601, BT.709) чёрному цвету должно
Соответственно, нормализованные значения R, G, B, полученные из такого сигнала, могут выходить за пределы отрезка [0; 1], образуя так называемые области ''BTB'' (Blacker Than Black
Если для передачи сигнала используется больше 8-ми бит, то дополнительные биты являются младшими. Например, для 10-ти битного сигнала базовыми значениями Y (уровнями чёрного и белого) будут <math>16 \cdot 2^{10 - 8} = 64</math> и <math>235 \cdot 2^{10 - 8} = 940</math>, разрешёнными
* [http://www.spectracal.com/Documents/4%20Legal%20%20sensible%20colours%20(2).pdf Legal, valid, and sensible colors]
* [http://www.spectracal.com/forum/viewtopic.php?f=51&t=1962#p12485
=== Full range ===
Некоторые, изначально цифровые, стандарты (JPEG, M-JPEG, Fraps) используют полный диапазон значений. То есть чёрному соответствует 0, белому
== Воспроизведение ==
Для корректного воспроизведения видео должны быть выполнены следующие шаги:
# Выбор базовых уровней входящего сигнала.
# Chroma upsampling.
# Конвертация YCbCr → RGB с использованием правильных коэффициентов.
# Дополнительная коррекция изображения для конкретного устройства вывода.
* [http://tech.ebu.ch/publications/tech3320 EBU Tech 3320] «User requirements for Video Monitors in Television Production» Annex A
* [http://forum.ixbt.com/topic.cgi?id=62:16225 Тема на iXBT]
=== Выбор уровней ===
В некоторых случаях входящий сигнал может содержать полезную информацию в областях BTB/WTW. Студийные мониторы должны корректно отображать такие цвета. Однако к домашнему оборудованию и условиям просмотра предъявляются гораздо более мягкие требования, и более комфортным может оказаться отображение только уровней 16..235. Иначе говоря, нужно определиться, будете ли вы масштабировать сигнал 16..235 в 0..255 или будете сохранять области BTB/WTW (в которых ничего полезного может и не быть), жертвуя контрастом.
При выполнении YCbCr → RGB преобразования в [[wikipedia:ffdshow|ffdshow]], имеется возможность как автоматического выбора между Full range и TV диапазоном (учитывая и флаг H.264), так и ручной установки уровней Y (количество уровней CbCr изменяется пропорционально).
Также в ffdshow имеется фильтр Levels, позволяющий динамически изменять диапазон при появлении BTB/WTW. Но, так как этот фильтр работает с 8-ми битными значениями, его использование может привести к появлению
Полностью сохранить сигнал в областях BTB/WTW можно также, установив входные уровни YCbCr равными 16..235(240) и уровни вывода RGB равными 16..235. При этом стоит убедиться, что уровни 1..15 и 236..254 нигде не обрезаются.
То, что уровни могут быть изменены сразу в нескольких местах (рендерер, декодер, промежуточные фильтры, настройки видеокарты, шейдеры), может привести к нежелательным последствиям, например, к двойному преобразованию 16..235 → 0..255.
* [http://ffdshow-tryout.sourceforge.net/wiki/video:rgb_conversion ffdshow: RGB conversion]
* [http://www.avsforum.com/avs-vb/showthread.php?t=1240153 AVS Forum thread]
=== Ресайз ===
[[
Ресайз (''resize''
* chroma upsampling;
* соотношение сторон пикселя (''Sample Aspect Ratio'') отличное от 1:1;
* несоответствие разрешения видео разрешению монитора.
То есть, даже если вы смотрите 720p на соответствующем мониторе, вам всё равно необходим качественный метод ресайза для компенсации chroma subsampling. Ресайз, как правило, выполняется рендерером. Наиболее продвинутым в этом плане является [http://forum.doom9.org/showthread.php?t=146228 madVR]. VMR9, EVR Custom и Haali renderer также позволяют в некоторой степени изменять метод ресайза.
=== YCbCr → RGB ===
Коэффициенты преобразования YCbCr → RGB могут отличаться для контента различной природы. Так, для SD видео обычно используются коэффициенты описанные в стандарте BT.601, а для HD
Многие форматы (H.264, MPEG-2, VC-1, Theora, JPEG SPIFF) поддерживают указание matrix_coefficients в виде метаинформации. Однако, наиболее распространён метод выбора коэффициентов на основании разрешения видео. Например, рендереры VMR7 и VMR9 используют BT.601, если высота кадра < 720, а BT.709, если высота ≥ 720. Таким образом, 720p видео, кропнутое по высоте, будет воспроизводиться с неправильными коэффициентами. ffdshow использует более разумные критерии:
* если установлен флаг в потоке H.264, то используются соответствующие коэффициенты;
* для Fraps используется BT.709;
* для JPEG и M-JPEG
* если высота ≥ 600 или ширина > 1024
* если высота < 600 и ширина ≤ 1024
Также компенсировать неверный выбор коэффициентов можно используя шейдеры в [[wikipedia:Media Player Classic|MPC-HC]].
Преобразование в RGB подразумевает предварительный chroma upsampling. Качественно его могут выполнять, например, ffdshow и madVR. Первый делает это программно, второй
[http://developer.apple.com/quicktime/icefloe/dispatch019.html Говорят], что информация о праймари, коэффициентах и гамме может содержаться не только в метаданных, но и в самом потоке: «Some digital video signals can carry a video index (see SMPTE RP
* [http://forum.doom9.org/showpost.php?p=1271416&postcount=2 Chroma upsampling comparison]
* [http://avisynth.org/mediawiki/Colorimetry Colorimetry], avisynth.org
* [http://forum.doom9.org/showthread.php?t=133982 Color coefficients and Colormatrix usage summary], summary of
=== Дополнительный рендеринг ===
[[
В некоторых случаях может понадобиться дополнительная коррекция изображения. Например, изменение цветового пространства и гаммы в соответствии с параметрами монитора. Это можно сделать с помощью [http://forum.doom9.org/showthread.php?t=154719 yCMS] (madVR, [[wikipedia:AviSynth|AviSynth]]) или [[wikipedia:ICC profile|ICC профиля]].
Необходимо понимать, что на восприятие человеком изображения влияет множество вторичных факторов, среди которых:
* Эффект Стивенса (''Stevens effect'')
* Эффект Бартлесона
* Эффект Ханта (''Hunt effect'')
Традиционно для компенсации этих эффектов при воспроизведении используется несколько большее значение гаммы, чем было использовано при съёмке камерой. Так, студийные мониторы, предназначенные для просмотра в тёмном окружении, используют γ ≈ 2.4, в то время как при съёмке используется кривая с показателем 1/γ ≈ 1/2. Для мониторов, используемых в светлых помещениях, подойдёт γ ≈ 2.2 (sRGB).
* [http://poynton.com/notes/PU-PR-IS/ Perceptual uniformity, picture rendering, image state, and BT.709], Charles Poynton
* [http://groups.csail.mit.edu/graphics/classes/6.837/F03/lectures/21%20Color%20II.pdf Color II], MIT lecture presentation
* [http://facweb.cs.depaul.edu/sgrais/color_context.htm Color Context]
== Кодирование ==▼
=== Ресайз ===▼
▲==Кодирование==
▲===Ресайз===
Для правильного ресайза должны использоваться линейные, а не гамма-корректированные значения компонентов. При ресайзе в большее разрешение это не существенно, однако при уменьшении разрешения неверный ресайз может приводить к заметным проблемам.
Строка 173 ⟶ 175 :
Ресайз над линейными компонентами можно производить при помощи [http://forum.doom9.org/showthread.php?t=153589 Dither Tools] ([http://forum.doom9.org/showthread.php?p=1545110#post1545110 пример]) или [http://forum.doom9.org/showthread.php?t=160038 ResampleHQ]. Однако в последнем присутствуют некоторые [http://forum.doom9.org/showthread.php?p=1546299#post1546299 баги].
* [http://avisynth.org/mediawiki/Known_Issues Avisynth known issues], avisynth.org
* [http://forum.doom9.org/showthread.php?t=163349 Weird chroma placement], Doom9 thread
* [http://4p8.com/eric.brasseur/gamma.html Gamma error in picture scaling], Eric Brasseur
=== Коррекция коэффициентов ===
Если при создании рипа производится ресайз из HD в SD, то следует скорректировать значения YCbCr так, чтобы при воспроизведении цвета не искажались из-за ошибочного выбора коэффициентов (для SD традиционно используются BT.601, для HD
При кодировании следует указывать используемые коэффициенты в метаданных (параметр --colormatrix для x264). Эта информация может использоваться либо когда конвертация в RGB производится декодером, либо отдельными связками декодер + рендерер (LAV Video + madVR). В большинстве же случаев, флаг colormatrix игнорируется и коэффициенты выбираются на основе разрешения видео.
Тем не менее, выставленный флаг позволяет понять, корректировались ли коэффициенты.
== Стандарты ==
{| class="wikitable" width="100%" style="table-layout: fixed;"
! width=25% | Standard
! width=20% | Primaries
! width=15% | Matrix coefficients<br
! Transfer characteristics
|-
| rowspan="2" | [http://webstore.iec.ch/webstore/webstore.nsf/artnum/035442 IEC 61966-2-4] (xvYCC)
| rowspan="10" | (0.640;
| xvYCC<sub>601</sub>:<br
| rowspan="2" | <div style="overflow:auto;">
<math>
Строка 204 ⟶ 206 :
</div>
|-
| xvYCC<sub>709</sub>:<br
|-
| [http://store.smpte.org/product-p/rp%200177-1993.htm SMPTE RP 177] Annex B
Строка 244 ⟶ 246 :
|-
| FCC 73.682
| rowspan="4" | (0.67;
| 0.30; 0.11
| rowspan="3" |
|-
| NTSC 1953
Строка 254 ⟶ 256 :
|-
| [http://www.itu.int/rec/R-REC-BT.470-6-199811-S BT.470-6] System M/PAL
| rowspan="2" |
|-
| [http://www.itu.int/rec/R-REC-BT.470-6-199811-S BT.470-6] System B, G, I, …
| rowspan="4" | (0.64;
|-
| [http://www.itu.int/rec/R-REC-BT.1700 BT.1700] 625 PAL/SECAM
|
|-
| [http://www.itu.int/rec/R-REC-BT.601 BT.601-6] 625
Строка 276 ⟶ 278 :
|-
| [http://www.itu.int/rec/R-REC-BT.601 BT.601-6] 525
| rowspan="7" | (0.630;
|-
| [http://www.itu.int/rec/R-REC-BT.1358 BT.1358] 525
|-
| [http://store.smpte.org/product-p/smpte%200170m-2004.htm SMPTE 170M]<br
|-
| [http://store.smpte.org/product-p/smpte%200293m-2003.htm SMPTE 293M]
Строка 302 ⟶ 304 :
|-
| [http://www.itu.int/rec/R-REC-BT.1700 BT.1700] 525 PAL
| (0.630;
| 0.299; 0.114
|
|-
| [http://tech.ebu.ch/publications/tech3213 EBU Tech 3213]
| (0.64;
| colspan="2" align="center" | -
|-
| [http://www.itu.int/rec/T-REC-H.264 H.264] Annex E: Generic film
| Wratten
| colspan="2" align="center" | -
|-
Строка 343 ⟶ 345 :
|}
=== Примечания ===
* BT.709-1 указывал коэффициенты K<sub>R</sub> = 0.2125, K<sub>B</sub> = 0.0721, но в BT.709-2 они были изменены ([http://developer.apple.com/quicktime/icefloe/dispatch019.html
* BT.709 содержит также Part 1 «HDTV systems related to conventional television», которая определяет другие matrix coefficients для 1250/50/2:1 (K<sub>R</sub> = 0.299; K<sub>B</sub> = 0.114). При этом стандарт рекомендует использовать Part 2 при создании нового контента.
* BT.470
* BT.1700 ссылается на SMPTE 170M (2004) для описания NTSC.
* SMPTE 170M упоминает, что, в то время как коэффициенты NTSC 1953 публиковались в виде K<sub>R</sub> = 0.30, K<sub>B</sub> = 0.11, при разработке спецификации использовались именно K<sub>R</sub> = 0.299; K<sub>B</sub> = 0.114.
=== Источники ===
'''Первичные:'''
* Сами стандарты. Не проверены SMPTE 240M, SMPTE 260M, SMPTE 293M, SMPTE 295M, SMPTE RP 145, SMPTE RP 177, NTSC 1953, IEC 61966-2-4.
<!--Ссылки на стандарты.
Просьба не выкладывать в публичные источники, дабы ссылки прожили подольше.
* [http://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-H.264-201003-I!!PDF-E&type=items H.264 2010.03]
* [http://2.dx1.elecfans.com/dm/elec/R-REC-BT.709-5.pdf BT.709-5]
** [http://www.ihdportal.com/ihdportal_forum/attachment.php?aid=42 BT.709-4]
** [http://www.tijbc.com/pruebas-7419/E7829005.pdf BT.709-3]
* [http://www.asicfpga.com/site_upgrade/asicfpga/pds/image_pds_files/BT.601-5.pdf BT.601-5]
** [http://inst.eecs.berkeley.edu/~cs150/Documents/ITU601.PDF BT.601-4]
** [http://www.colour.org/tc8-05/Docs/colorspace/CCIR-601-2.pdf BT.601-2]
* [http://web.archive.org/web/19990210082556/http://icib.igd.fhg.de/icib/tv/ccir/rep_476-1/read.html BT.476-1] Текст закомментирован в коде страницы
* [http://web.archive.org/web/19990503115758/http://icib.igd.fhg.de/icib/tv/ccir/rep_624/read.html BT.624-4]
* [http://2.dx1.elecfans.com/dm/elec/R-REC-BT.470-6.pdf BT.470-6]
** [http://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.470-7-200502-I!!PDF-E.pdf BT.470-7]
* [http://www.docin.com/p-8348288.html SMPTE 274M-2003]
* [http://www.docin.com/p-56719334.html SMPTE 296M-2001]
* [http://edocket.access.gpo.gov/cfr_2007/octqtr/pdf/47cfr73.682.pdf FCC 73.682]
* [http://webs.uvigo.es/servicios/biblioteca/uit/ ITU-R Recommendations (Español)]
* [http://www.colour.org/tc8-05/documents.html CIE TC8-05 Working Documents]-->
'''Вторичные:'''
* [http://www.babelcolor.com/download/A%20review%20of%20RGB%20color%20spaces.pdf A Review of RGB Color Spaces]
* [http://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-H.264-201003-I!!PDF-E&type=items H.264] Annex E
* [http://www.maxim-ic.com/app-notes/index.mvp/id/1184 Understanding Analog Video Signals]
* [http://www.color.org/ICC1v42_2006-05.pdf ICC.1:2004-10], Table 24
* [http://multimedia.cx/mirror/s421m.pdf VC-1 Draft 2005-08-23], Table 10-12
* [http://developer.apple.com/quicktime/icefloe/dispatch019.html Uncompressed Y´CbCr Video in QuickTime Files]
* MSDN: [http://msdn.microsoft.com/en-us/library/bb970322(VS.85).aspx Extended Color Information] ([http://msdn.microsoft.com/en-us/library/ms696997(VS.85).aspx VideoPrimaries], [http://msdn.microsoft.com/en-us/library/ms698715(VS.85).aspx VideoTransferMatrix], [http://msdn.microsoft.com/en-us/library/bb970392(VS.85).aspx VideoTransferFunction])
== Литература ==
* «Digital Video and HDTV: Algorithms and Interfaces», Charles Poynton
* «The Reproduction of Colour» (6th Edition), R.W.G. Hunt ([http://shadrin.rudtp.ru/Personal/Shadrin_ROC.htm перевод] Алексей Шадрин)
* «Video Demystified. A Handbook for the Digital Engineer» (5th Edition), Jack K.
== Ссылки ==
* [http://poynton.com/ Charles Poynton]
* [http://dougkerr.net/pumpkin/articles/ The Pumpkin] a library of selected writings of Douglas A. Kerr
{{Темы|Компьютерная графика}}
|