У вас есть много вариантов обесцвечивания изображения.
Кроме того, обратите внимание, что ненасыщенность изображения не , просто чтобы сделать его черно-белым, но для некоторых приложений вы можете подумать, что они эквивалентны.
Я обновил этот пост с более подробной информацией.
Средний
Это первое, что может студент сделать изображение, чтобы преобразовать в оттенки серого (по крайней мере, то, что я впервые подумал в прошлом!), И это выглядит как ненасыщенность:
level = (R + G + B) / 3
Это не дает плохого результата, это быстро и легко реализовать. Но у него есть большой недостаток: он не соответствует тому, как люди воспринимают светимость.
Luminance
Этот второй метод (Яркость иногда называют Яркостью, Люмой или Интенсивностью) - лучшая модель того, как наши глаза воспринимают яркость. Это основано на факте, что плотность конуса в глазу не является однородной по цветам. Мы воспринимаем зеленый цвет гораздо сильнее, чем красный, а красный сильнее, чем синий.
Поскольку мы не воспринимаем все цвета с одинаковой интенсивностью, средний метод является неточным (по крайней мере, он не дает результата, который выглядит естественным ). Как это сделать? Просто используйте средневзвешенное значение:
level = R * 0.3 + G * 0.59 + B * 0.11
Как вы можете себе представить, существует множество дискуссий об этих ценностях. В первоначальной рекомендации МСЭ-R предложена эта формула:
level = R * 0.2126 + G * 0.7152 + B * 0.0722
Если я не ошибаюсь, Photoshop использует эту функцию для простой функции десатурации (да, это первая версия без заземления):
level = R * 0.299 + G * 0.587 + B * 0.114
Я не думаю, что мы можем заметить много различий, так как в любом случае реккомандация изменилась недавно, посмотрите здесь, в Википедии , чтобы узнать больше об этой формуле.
Хотите узнать больше? Прочитайте эту статью Чарльза Пойнтона: Восстановление гаммы и его FAQ по этой теме.
Desaturation
Каждый пиксель описан с помощью RGB цветовой модели , но насыщенность относится к HSL цветовой модели (в действительности вы можете использовать модели HSL или HSV, когда работает с насыщением). Пожалуйста, прочитайте ссылку для более подробной информации об этих моделях.
Обесцвечивание изображения состоит из следующих шагов:
- Конвертируйте каждый пиксель из RGB в HSL (см. эту статью , если вам нужны подробности).
- Принудительное насыщение до нуля (это должно быть то, что
setSaturation(0)
делает)
- Преобразуйте его обратно в RGB (см. Эту закладку ).
Позвольте мне ввести большое уплотнение этого процесса: вы можете обесцветить цвет, находя среднюю точку между максимумом RGB и минимумом RGB (легкость, вы помните, что цвет в Цветовое пространство RGB , это точка в трехмерном пространстве?). (Упрощенная) формула для получения ненасыщенного изображения:
level = (max(R, G, B) + min(R, G, B)) / 2
De-композиционный
Более простая форма десатурации, иногда называемая локальная максимальная декомпозиция просто выбирает максимальное значение каждого триплета RGB:
level = max(R, G, B);
Как вы можете себе представить, вы можете использовать как локальный максимум, так и локальный минимум (я написал local , потому что он ищет минимум / максимум для каждого пикселя).
Другие методы
Не забывайте, что вы можете очень быстро получить черно-белое изображение (то, что выглядит как ненасыщенное изображение), просто сохранив один канал из триплета RGB (например, зеленый канал) и скопировав это значение для всех каналы).
Иногда учебники Photoshop не используют его функции для обесцвечивания изображения (функция «Обесцвечивание» и палитра «Коррекция»), но для достижения лучших результатов они добавляют слой с однородным цветом (рассчитывается по значениям из раздела Luminance ) и они объединяют этот слой с исходным изображением (найдите учебное пособие и воспроизведите его в коде).