21 May

Восемь цветов радуги: о цвете с точки зрения математики

Smart Engines corporate blogAlgorithmsImage processingMathematics
Больше пяти лет мы публикуем на Хабре статьи на различные темы компьютерного зрения. Чаще всего они связаны с распознаванием документов, потому что нам всегда очень не терпится поделиться с вами всем крутым и новым, что мы сделали в Smart IDReader. Хотя мы честно стараемся изложить наши знания в «универсальном» ключе, чтобы вы, наши читатели Хабра, могли легко их использовать в своих проектах и стартапах. Сегодня мы решили пойти дальше и представить широкой аудитории фундаментальный математически стройный материал на тему цвета, изложенный простыми словами.

Определение цвета


Одним из самых удачных определений цвета можно считать определение Шрёдингера: цвет – это общее свойство света различного спектрального состава вызывать одинаковое зрительное ощущение. Важным в этом определении является понимание цвета не как некоторого абсолютного свойства света, а как феномена, зависящего от наблюдателя: если два луча света вызывают у наблюдателя одинаковые ощущения, то и цвет одинаковый, а иначе – разный.

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

Мы знаем из курса физики благодаря Ньютону, что в белом свете существует радуга. Её проявляет дисперсия преломления света в призме или на взвеси, которая возникает в воздухе при грибном дожде. Происходит это следующим образом: призма направляет свет разных длин волн в разных направлениях, и мы видим почти монохроматическое (т. е. единственной длины волны) излучение по каждому из направлений. Перебирая разные направления, мы видим свет разной длины волны, что вызывает у нас ощущение перехода от фиолетового цвета через синий, желтый и далее в красный. Каждому из цветов радуги прямо соответствует определенная длина волны, но это не значит, что отдельные длины волн можно приписать всем вообще цветам.

Как работает сенсор


Поскольку цвет зависит от восприятия наблюдателя, давайте разберемся, что такое сенсор. Сенсор – это тот орган, который поставляет наблюдателю исчерпывающую зрительную информацию. Для человека это глаз, а для робота – RGB-камера. Цветовой сенсор характеризуется набором светочувствительных элементов различных типов. В глазу, в условиях яркого света, активны три типа колбочек: «синие», «красные» и «зеленые», каждый из которых имеет свою спектральную чувствительность. Спектральная чувствительность – функция величины отклика на один квант, то есть на одну порцию света определенной длины волны. К примеру, «синяя» колбочка наиболее чувствительна к длине волн в районе 450 нанометров. Можно считать, что при падении излучения любого спектра на маленькую площадку сетчатки глаза, с этой области сетчатки идет три сигнала, три неотрицательных величины, которые показывают, насколько на этой площадке возбудились в среднем «синие», «красные» и «зеленые» колбочки. Таким образом, сетчатка человека или светочувствительная матрица камеры проецирует спектральный сигнал в трехмерное цветовое пространство, координаты в котором обозначаются $R$, $G$ и $B$. Началом координат («нулем») в нем будет отсутствие излучения – ситуация, когда ни один из трех видов рецепторов не возбудился.

Цветность


Расстояние от нуля в цветовом пространстве называется яркостью, это мощностная характеристика. Если мы возьмем источник света и будем увеличивать его мощность, соответствующая ему точка в цветовом пространстве RGB будет удаляться от нуля по прямой, проходящей через начало координат. Главная диагональ, то есть те значения троек, в которых цветовые компоненты равны $(R=G=B)$ – это ахроматическая ось, на ней лежат серые цвета.

Для дальнейшего разбора «уберем» из цвета яркость. Для этого центрально спроецируем (с центром проекции в нуле) всё цветовое пространство на любую плоскость, не проходящую через ноль. Все точки цветового пространства, отличающиеся только яркостью, спроецируются в одну и ту же точку плоскости. Мы получим плоскость цветности, а пару координат на этой плоскости будем называть цветностью, то есть той частью цвета, которая не связана с мощностью излучения.

Сколько цветов в радуге?


Рассмотрим теперь всевозможные цвета, воспринимаемые человеческим глазом, и зададимся вопросом: как будет выглядеть это множество, если спроецировать его на плоскость цветности?

Для этого пробежим сначала все значения длин волн видимого спектра (от 380 до 700 нанометров) и нанесем соответствующие им точки (чистые спектральные цвета) на плоскость цветности. Мы получим изогнутую кривую (см. рисунок в самом начале статьи), называемую спектральным локусом.

Математикам будет интересно заметить, что в RGB-пространстве спектральный локус представляет собой замкнутую каплевидную кривую с единственным изломом в начале координат, которая при центральном проецировании с центром в том же самом начале координат превращается в незамкнутую кривую на плоскости цветности.

Поскольку сенсор обеспечивает линейную проекцию всевозможных спектров в видимом диапазоне в цветовое пространство, то любые достижимые комбинации (R, G, B) могут быть получены как выпуклая комбинация («смесь») тех реакций, которые порождаются чистыми цветами. Это касается и проекций на плоскость цветности. Таким образом, физически достижимы цвета, лежащие в выпуклой оболочке спектрального локуса. А, поскольку спектральный локус человека не имеет вогнутостей, то он дополняется до выпуклой оболочки одним единственным отрезком, соединяющим его концы. Получившуюся фигуру принято называть цветовым треугольником, хотя, как мы видим, угла у этого «треугольника» на самом деле всего два, а вместо третьего – закругление в районе 520 нанометров. Итак, цветности всех видимых человеком цветов составляют цветовой треугольник – выпуклую криволинейную фигуру с двумя вершинами.

Рассмотрим теперь точку пересечения ахроматической оси в RGB-пространстве с плоскостью цветности. Эта точка будет называться нейтральной и соответствовать белому цвету. Каждое направление от нейтральной точки до границы цветового треугольника задает цветовой тон. Цвет точки на границе называется насыщенным цветом данного тона, а все точки между нейтральной и насыщенной могут быть получены как смесь этого насыщенного цвета с белым в разных пропорциях.

Как видно из рисунка, большинство насыщенных цветов – это чистые спектральные цвета, то есть точки спектрального локуса, соответствующие монохромному излучению разных цветов радуги от 380 до 700 нанометров. Однако на прямолинейном отрезке границы цветового треугольника от 700 до 380 нанометров мы видим насыщенные цвета, которым не соответствует ни один чистый цвет спектра. Это пурпурные цвета, называемые неспектральными. Пурпурным цветам нельзя поставить в соответствие никакую одну длину волны, но они могут быть получены как реакция сенсора на смесь волн красного и фиолетового диапазонов.

Можно ли увидеть пурпурный цвет в радуге? Мы уже разобрались, что в одиночной радуге его нет. Но иногда на небе бывает видны двойные радуги различной природы. Среди них – отраженная радуга над поверхностью воды при очень низком солнце. В такой радуге после фиолетового цвета опять идет красный, оранжевый и так далее. А на стыке красного и фиолетового можно увидеть их смесь – пурпурный цвет. Получается, что в отраженной радуге может быть восемь цветов!

Как увидеть несуществующие цвета


У тех, кто внимательно следил за рассуждениями, может возникнуть вопрос: а что с той частью плоскости цветности, которая находится вне цветового треугольника? У этих точек могут быть даже вполне положительные координаты $(R, G, B)$. Это – цвета? Может ли человек увидеть цвет, не вызываемый никакими спектральными излучениями, попавшими в его глаз? Трудно сказать, но возможно – да. К примеру, когда на голову падает кирпич, и возникают «птички» и «звёздочки», то вполне вероятно, что часть цветов, которые он при этом видит, физически недостижимы. Все потому, что в момент механического воздействия на нейроны головного мозга сигналы в них имеют достаточно случайный характер, и при этом может возникнуть такая комбинация сигналов, которая никогда не возникает в результате воздействия излучений на глаз человека. Аналогично можно предположить, что человек может видеть несуществующие цвета во сне.

Стандартный наблюдатель


Как было замечено выше, цветовое пространство зависит от наблюдателя. Если сенсоры двух наблюдателей дают разные отклики на излучение одинакового спектра, то и построенное ими цветовые пространства (а также – и цветовые треугольники) получатся разными. Поэтому для численных экспериментов был зафиксирован стандартный наблюдатель, кривые чувствительности рецепторов которого, как считается, хорошо моделируют человеческую биохимию и восприятие.

Также у стандартного наблюдателя кривые чувствительности нормированы так, что если возбудить все три типа светочувствительных элементов источником, который имеет одинаковую спектральную яркость на каждую из длин волн, то $R-$, $G-$ и $B-$реакции сенсора будут равны между собой. Это означает, что белый дневной свет (который как раз содержит все длины волн с примерно одинаковой спектральной яркостью) попадает на ахроматическую ось цветового пространства.

О чем знает каждая девушка


Важными следствиями того, что цветовое восприятие человека трехмерно, а спектральный мир бесконечномерный, являются метамерия излучения и метамерия окрасок.

Рассмотрим два разных белых света – дневной и люминесцентный. В отличие от дневного, мощность люминесцентного света не распределена по всему спектру, а сосредоточена в нескольких узких его участках. Однако эти участки подобраны так, чтобы отклики «синих», «красных» и «зеленых» колбочек были равны между собой, т. е. так, чтобы наблюдатель воспринимал свет как белый.





Таким образом, мы видим, что и там, и там наблюдатель фиксирует белый цвет, хотя исходные спектры при этом не имеют ничего общего – это и называется метамерией. Именно понятие метамерии скрыто в определении Шрёдингера: зафиксировав сенсор, мы факторизуем пространство спектров таким образом, что какие-то спектры начинают характеризоваться одной и той же реакцией сенсора (и, соответственно, мы говорим, что они имеют одинаковый цвет), а какие-то – разной (мы говорим, что их цвет различается). Различить «два белых света» тем не менее можно – пропустив люминесцентный свет через призму, мы увидим «рваную» радугу.

На этом чудеса не заканчиваются. Могут существовать две окраски (обязательно с разными спектральными характеристиками), которые, отражая дневной свет, будут приводить к одинаковой реакции сенсора, а отражая люминесцентный – к разной. Или, наоборот. Т. е. для одних и тех же окрасок при одном освещении будет возникать метамерия, а при другом – нет. И в этом нет никакой психологии, лишь математика. И речь идет о вполне жизненных ситуациях. Наверное, каждая девушка знает, что не стоит подбирать купленные отдельно юбку и кофточку при люминесцентном освещении, в надежде, что они подойдут друг другу при естественном, хотя и не знает, почему.

Все это уже слегка запутывает, но мы еще не добрались до самого страшного.

Так что же такое цвет?


Главная путаница в том, что мы называем цветом три разные вещи.

Во-первых, мы называем цветом ощущение окраски. Когда мы ищем рубашку в темном шкафу, мы говорим «я вижу красную рубашку», а не «я вижу черную рубашку», хотя, по сути, в темноте отраженное от рубашки излучение настолько слабо, что выглядит скорее черным. Красный цвет в данном случае – это характеристика красителя, нанесенного на ткань рубашки. Математически окраска может быть задана как спектральная характеристика – функция отражающей способности в зависимости от длины волны.

Во-вторых, цветом можно назвать ощущение освещенности, создаваемой источником света. Например, мы различаем, когда у человека зеленый цвет лица, а когда на лицо просто падает зеленый свет. Освещенность задается спектральной функцией интенсивности излучения в зависимости от длины волны.

И в-третьих, есть цвет в колориметрическом значении, то есть ощущение того излучения, которое «прилетело» к нам в глаз. Поскольку мы всегда наблюдаем отраженный свет, то это излучение источника света, отразившегося от наблюдаемого предмета и при этом изменившегося. Его спектральная функция по законам физики есть произведение спектральных функций освещенности и окраски:

$F(\lambda)=S(\lambda)\cdot\Phi(\lambda),$


где $F\left(\lambda\right)$ — спектральная функция попадающего в глаз излучения, $S\left(\lambda\right)$ — спектральная функция источника света, $\Phi\left(\lambda\right)$ – спектральная характеристика окраски объекта.

Цветовая константность


У человека известен механизм цветовой константности – способность зрительной системы оценивать окраски при различном освещении. Это эволюционно важный навык: к примеру, обезьяне надо знать, покраснел ли фрукт или это свет заката упал на него. Для решения этой задачи зрительная система человека, получая даже разные сигналы от сенсоров, может тем не менее счесть две окраски одинаковыми, но по-разному освещенными. Это феномен более высокого порядка, чем метамерия. Он относится к области высшей нервной деятельности и до сих пор в достаточной степени не изучен.

Как мы говорили, можно считать, что от каждой точки поля зрения в мозг поступает 3 числа – реакции «синих», «красных» и «зеленых» рецепторов-колбочек. Их значения задаются как интеграл по длине волны:

$\vec{c}=\int_{0}^{\infty}{F\left(\lambda\right)\cdot\vec{\chi}\left(\lambda\right)d\lambda}=\int_{0}^{\infty}{S\left(\lambda\right)\cdot\Phi\left(\lambda\right)\cdot\vec{\chi}\left(\lambda\right)d\lambda},$



где $\vec{c}$ – вектор реакции сенсора $(R, G, B)$, $\vec{\chi}\left(\lambda\right)$ – вектор-функция чувствительностей «колбочек» трех типов.

Вычисление такого интеграла происходит физически, когда свет отражается от предмета, а затем электрохимически, когда свет вызывает отклик рецепторов сетчатки, в результате чего образуются три числа, характеризующие цвет.

Для определения окраски объекта зрительная система человека решает обратную задачу: для каждой точки изображения из этих трех чисел и, возможно, известных системе собственных характеристик, извлекается информация о спектральных распределениях отражающей способности и яркости освещения.

Эти две функции входят под интеграл как произведение, поэтому задача их определения выглядит форменным издевательством. Тем не менее, можно утверждать, что цветовая константность у человека работает. Разработка же алгоритмов цветовой константности для технического зрения является актуальной научной задачей.

Куда применить эти знания?


У нас в Smart Engines серьезная экспертиза не только в распознавании документов и проверки подлинности. Мы постоянно участвуем в заказных проектах на различные темы компьютерного зрения. Так, описанная в статье теория цвета применялась в рентгеновской области для того, чтобы сортировать алмазную руду в Якутии. Излучение, проходящее через породу, регистрировалось двумя детекторами, чувствительными к разным диапазонам длин волн. Оказалось, что все алмазы имеют одну и ту же цветность, отличную от цветности пустой руды. Такое «окрашивание» позволило легко выявлять алмазы, неотличимые от руды другими способами.

Статья подготовлена по материалам публичной лекции Дмитрия Николаева, к.ф.-м.н., технического директора ООО «Смарт Энджинс Сервис» под редакцией к.ф.-м.н. Сергея Гладилина.
Tags:Цветовая константностьобработка изображенийсенсорытеория цветаалгоритмыматематикаматематика на пальцах
Hubs: Smart Engines corporate blog Algorithms Image processing Mathematics
+10
2.5k 34
Comments 7