Преобразование RGB в монохромный

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


person Ashwin Nanjappa    schedule 18.08.2008    source источник
comment
Я думаю, вы имеете в виду оттенки серого. Монохромный означает, что изображение одного оттенка и остается цветным.   -  person golopot    schedule 17.06.2017


Ответы (6)


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

mono = (0.2125 * color.r) + (0.7154 * color.g) + (0.0721 * color.b);
person Ashwin Nanjappa    schedule 18.08.2008
comment
Перед применением коэффициентов необходимо ЛИНЕЙНИЗИРОВАТЬ значения sRGB, а затем повторно применить гамму. - person Myndex; 20.06.2019

В этой статье 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);

person Mark Cidade    schedule 18.08.2008
comment
Я думаю, что оба они неверны для этого приложения, поскольку они применяются к значениям RGB с гамма-коррекцией. - person Jason Sundram; 23.11.2011
comment
Это на самом деле то же самое - person user877329; 10.12.2015

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

person palm3D    schedule 25.08.2008

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

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

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

person Carl Russmann    schedule 18.08.2008

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

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

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

person Henrik Paul    schedule 25.08.2008

Логика преобразования любого изображения на основе RGB в монохромное изображение - нетривиальное линейное преобразование. На мой взгляд, такую ​​проблему лучше решить с помощью техники «цветовой сегментации». Вы можете добиться «цветовой сегментации» с помощью кластеризации k-средних.

См. Справочный пример с сайта MathWorks.

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

Исходное изображение в цветах.

Картинка с цветами

После преобразования в монохромный с использованием кластеризации k-средних  Изображение после преобразования в монохромное изображение с использованием кластеризации k-средних

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

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

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

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

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

person Sau001    schedule 10.07.2018