Вопрос

Как мне преобразовать значения 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.

https://www.mathworks.com/examples/image/mw/images-ex71219044-color-based-segmentation-using-k-means-clustering

Оригинальная цветная картинка.

Picture with colours

После преобразования в монохромный формат с использованием кластеризации k-средних Picture after converting to monochrome using k-means clustering

Как это работает?

Соберите все значения пикселей со всего изображения.Из изображения шириной W пикселей и высотой H пикселей вы получите значения цвета W * H.Теперь, используя алгоритм k-means, создайте 2 кластера (или ячейки) и поместите цвета в соответствующие "ячейки".Эти две группы представляют ваши черные и белые оттенки.

Видео с Youtube, демонстрирующее сегментацию изображений с использованием k-средних? https://www.youtube.com/watch?v=yR7k19YBqiw

Проблемы, связанные с этим методом

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top