Преобразование RGB в монохромный формат
-
08-06-2019 - |
Вопрос
Как мне преобразовать значения RGB пикселя в одно монохромное значение?
Решение
Я нашел одно из возможных решений в Часто задаваемые вопросы о цвете.Тот Самый компонент яркости Y (из Система CIE XYZ) фиксирует то, что больше всего воспринимается людьми как цвет, в одном канале.Итак, используйте эти коэффициенты:
mono = (0.2125 * color.r) + (0.7154 * color.g) + (0.0721 * color.b);
Другие советы
Эта статья MSDN использование (0.299 * color.R + 0.587 * color.G + 0.114 * color.B);
Эта статья в Википедии использование (0.3* color.R + 0.59 * color.G + 0.11 * color.B);
Это недавняя научная статья сравнивает современное состояние преобразования цветных фотографий в оттенки серого, включая простую формулу яркости и более сложные методы.
Это зависит от того, каковы ваши мотивы.Если вы просто хотите преобразовать произвольное изображение в оттенки серого и сделать так, чтобы оно выглядело довольно хорошо, подойдут преобразования в других ответах на этот вопрос.
Если вы преобразуете цветные фотографии в черно-белые, процесс может быть очень сложным и субъективным, требующим специальной настройки для каждого изображения.Чтобы получить представление о том, что может быть связано, взгляните на это Учебник из Adobe для Photoshop.
Копирование этого в коде было бы довольно сложным делом и все равно потребовало бы вмешательства пользователя, чтобы получить результирующее изображение эстетически "совершенным" (что бы это ни значило!).
Как упоминалось также, перевод в оттенки серого (обратите внимание, что монохроматические изображения не обязательно должны быть в оттенках серого) из RGB-триплета зависит от вкуса.
Например, вы могли бы обмануть, извлечь только синий компонент, просто выбросив красный и зеленый компоненты и скопировав вместо них значение blue.Другим простым и в целом приемлемым решением было бы взять среднее значение RGB-триплета пикселя и использовать это значение во всех трех компонентах.
Тот факт, что существует значительный рынок профессиональных и не очень дешевых плагинов для преобразования оттенков серого / монохромного только для Photoshop, говорит о том, что преобразование настолько простое или сложное, насколько вы пожелаете.
Логика преобразования любого изображения на основе RGB в монохромный формат can не является тривиальным линейным преобразованием.На мой взгляд, такую проблему лучше решать с помощью методов "Цветовой сегментации".Вы могли бы добиться "Цветовой сегментации" с помощью кластеризации k-средних.
Смотрите ссылочный пример с сайта MathWorks.
Оригинальная цветная картинка.
После преобразования в монохромный формат с использованием кластеризации k-средних
Как это работает?
Соберите все значения пикселей со всего изображения.Из изображения шириной W пикселей и высотой H пикселей вы получите значения цвета W * H.Теперь, используя алгоритм k-means, создайте 2 кластера (или ячейки) и поместите цвета в соответствующие "ячейки".Эти две группы представляют ваши черные и белые оттенки.
Видео с Youtube, демонстрирующее сегментацию изображений с использованием k-средних? https://www.youtube.com/watch?v=yR7k19YBqiw
Проблемы, связанные с этим методом
Алгоритм кластеризации k-средних подвержен выбросам.Несколько случайных пикселей с цветом, удаленным по RGB от остальной части изображения, могут легко исказить центроиды, что приведет к неожиданным результатам.