




Я нашел одно возможное решение в Цвет FAQ. составляющая яркости Y (от Система CIE XYZ) улавливает то, что больше всего воспринимается людьми как цвет в одном канале. Итак, используйте эти коэффициенты:
mono = (0.2125 * color.r) + (0.7154 * color.g) + (0.0721 * color.b);
Перед применением коэффициентов необходимо ЛИНЕЙНИЗИРОВАТЬ значения sRGB, а затем повторно применить гамму.
Эта статья 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);
Я думаю, что они оба неверны для этого приложения, поскольку они применяются к значениям RGB с гамма-коррекцией.
Это на самом деле то же самое
Это зависит от ваших мотивов. Если вы просто хотите преобразовать произвольное изображение в оттенки серого и сделать так, чтобы оно выглядело довольно хорошо, подойдут преобразования в других ответах на этот вопрос.
Если вы конвертируете цветные фотографии в черно-белые, этот процесс может быть как очень сложным, так и субъективным, требуя определенной настройки для каждого изображения. Чтобы понять, что может быть задействовано, взгляните на этот руководство от Adobe для Photoshop.
Воспроизведение этого в коде было бы довольно сложным и все же потребовало бы вмешательства пользователя для получения конечного изображения эстетически «идеального» (что бы это ни значило!).
Этот недавняя научная статья сравнивает современные достижения в преобразовании цветных фотографий в оттенки серого, включая простую формулу яркости и более сложные методы.
Как уже упоминалось, перевод в оттенки серого (обратите внимание, что монохроматические изображения не обязательно должны быть в градациях серого) из триплета RGB зависит от вкуса.
Например, вы можете обмануть, извлечь только синий компонент, просто отбросив красный и зеленый компоненты и скопировав вместо них синее значение. Еще одно простое и в целом приемлемое решение - взять среднее значение RGB-триплета пикселя и использовать это значение во всех трех компонентах.
Тот факт, что существует значительный рынок профессиональных и не очень дешевых плагинов для преобразования оттенков серого / монохромный только для Photoshop, говорит о том, что преобразование настолько просто или сложно, как вы хотите.
Логика преобразования любого изображения на основе RGB в монохромное изображение - нетривиальное линейное преобразование. На мой взгляд, такую проблему лучше решить с помощью техники «цветовой сегментации». Вы можете добиться «цветовой сегментации» с помощью кластеризации k-средних.
См. Справочный пример с сайта MathWorks.
Оригинальная картинка в цветах.
После преобразования в монохромный с использованием кластеризации k-средних
Как это работает?
Соберите все значения пикселей со всего изображения. Из изображения шириной W пикселей и высотой H пикселей вы получите значения цвета W * H. Теперь, используя алгоритм k-means, создайте 2 кластера (или бункера) и поместите цвета в соответствующие «бункеры». 2 группы представляют ваши черные и белые оттенки.
Видео на Youtube, демонстрирующее сегментацию изображений с использованием k-средних?https://thewikihow.com/video_yR7k19YBqiw
Проблемы с этим методом
Алгоритм кластеризации k-средних чувствителен к выбросам. Несколько случайных пикселей с цветом, расстояние RGB которого далеко от остальной части толпы, могут легко исказить центроиды, что приведет к неожиданным результатам.
Я думаю, вы имеете в виду оттенки серого. Монохромный означает, что изображение одного оттенка и остается цветным.