RGB в монохромное преобразование - PullRequest
19 голосов
/ 18 августа 2008

Как преобразовать значения RGB пикселя в одно монохромное значение?

Ответы [ 6 ]

18 голосов
/ 18 августа 2008

Я нашел одно возможное решение в Color FAQ . Компонент яркости Y (из системы CIE XYZ ) фиксирует то, что люди воспринимают как цвет в одном канале. Итак, используйте эти коэффициенты:

mono = (0.2125 * color.r) + (0.7154 * color.g) + (0.0721 * color.b);
7 голосов
/ 18 августа 2008

Эта статья 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);

6 голосов
/ 25 августа 2008

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

5 голосов
/ 18 августа 2008

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

Если вы преобразуете цветные фотографии в черно-белые, процесс может быть как очень сложным, так и субъективным, требующим специальной настройки для каждого изображения. Чтобы получить представление о том, что может быть вовлечено, взгляните на этот учебник от Adobe для Photoshop.

Воспроизведение этого в коде было бы достаточно сложным, и все равно потребовало бы вмешательства пользователя, чтобы получить полученное изображение эстетически "идеальным" (что бы это ни значило!).

4 голосов
/ 25 августа 2008

Как уже упоминалось, перевод в оттенках серого (обратите внимание, что монохроматические изображения не обязательно должны быть в оттенках серого) из RGB-триплета зависит от вкуса.

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

Тот факт, что существует значительный рынок для профессиональных и не очень дешевых плагинов для черно-белых конвертеров в оттенках серого / монохромных для одного только Photoshop, говорит о том, что преобразование настолько простое или сложное, насколько вы пожелаете.

0 голосов
/ 10 июля 2018

Логика преобразования любого изображения на основе RGB в монохромное изображение не является тривиальным линейным преобразованием. На мой взгляд, такую ​​проблему лучше решить с помощью методов «цветовой сегментации». Вы можете добиться «цветовой сегментации» с помощью 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-средних, создайте 2 кластера (или ячейки) и добавьте цвета в соответствующие ячейки. 2 кластера представляют ваши черные и белые оттенки.

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

Проблемы с этим методом

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

...