Существует множество способов обесцветить цветное изображение. На самом деле, вероятно, нет единственного «истинного» или «правильного» способа сделать это, хотя некоторые способы более «правильны», чем другие.
Я предполагаю, что ваше изображение в формате RGB (красный-зеленый-синий) (хотя BGR также распространен).
Самый простой способ , который должен работать для большинства фотографий (но не для синтетических изображений), это просто использовать зеленый канал из 3 каналов RGB. Люди наиболее чувствительны к изменениям в зеленой части спектра, поэтому зеленый канал покрывает большую часть видимого диапазона и является хорошим приближением к желаемому изображению в оттенках серого.
Лучший способ создать изображение в градациях серого - использовать средневзвешенное значение для 3 каналов RGB. Выбор равных весов (0,33 * R + 0,33 * G + 0,33 * B) даст довольно хорошее изображение в оттенках серого. Другие выпуклые веса (неотрицательные веса, которые суммируют с 1) дадут различные результаты, некоторые из которых могут считаться более эстетичными, а некоторые могут принимать во внимание параметры восприятия. ( YUV использует эти веса : Y = 0.299*R + 0.587*G + 0.114*B
)
Вы всегда можете преобразовать изображение в другое цветовое пространство, которое имеет только один канал оттенков серого (и 2 "цветных" канала), например HSV (V - это шкала серого), YUV (Y - это оттенки серого) или La b (L - оттенки серого). Различия не должны быть очень большими.
Термин "ненасыщенность" происходит из пространства ВПГ. Если вы преобразуете ваше изображение в HSV, установите для канала S (Насыщенность) все нули и визуализируете изображение, вы получите 3-канальное ненасыщенное «цветное» изображение.
Дублирование этих каналов в градациях серого в RGB даст вам 3-канальное ненасыщенное «цветное» изображение - где все 3 канала RGB идентичны.
Как только вы получите это 3-канальное (RGB) ненасыщенное изображение, вы можете умножить каждый канал на отдельный вес, чтобы раскрасить изображение - изображение в сепию.
Учитывая серый пиксель [v,v,v]
, раскрасить его так: [v*a, v*b, v*c]
, чтобы 0 <= a,b,c <=1
.