Лучший алгоритм оттенков серого - PullRequest
1 голос
/ 06 февраля 2011

Я пытаюсь создать спектральное изображение с постоянным значением серой шкалы для каждой строки.Я написал какой-то фантастически медленный код, который в основном пробует 1000 различных вариаций между черным и белым для данного оттенка, и находит тот, у которого значение шкалы серого наиболее близко соответствует целевому значению, в результате получается следующее изображение:

FarbenKugel

На экране моего ноутбука (HP) наблюдается очень заметное «падение» около синего пика, когда синие пиксели в нижней части изображения выглядят намного ярче, чем соседние пурпурные и голубые пиксели.На моем втором экране (Acer, у которого намного лучший цветовой дисплей) провал меньше, но все же есть.

Я использую следующую функцию для вычисления аппроксимации оттенков серого цвета:

Math.Abs(targetGrey - (0.2989 * R + 0.5870 * G + 0.1140 * B))

Когда я преобразую изображение в оттенки серого с помощью Paint.NET, я получаю идеальный градиент от черного к белому, так что часть кода по крайней мере работает.

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


РЕДАКТИРОВАТЬ: проблема, как представляется, в основном калибровка монитора.Не, повторяю нет, проблема с кодом.

Ответы [ 2 ]

1 голос
/ 06 февраля 2011

Вывод выглядит корректно, если использовать преобразование в оттенках серого (которое, я считаю, является стандартным для цветовых пространств sRGB).

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

Если ваша цель - получить визуально привлекательное спектральное изображение, то я бы предложил изменить вашу функцию, чтобы сделать веса R, G, B более равными, и посмотреть, понравится ли вам то, что вы получите.

1 голос
/ 06 февраля 2011

Мне интересно, связано ли это с тем, как наши глаза интерпретируют цвета, а не с экранными артефактами.

Тем не менее ... Я использую экран очень высокого качества (Dell Ultrasharp,IPS), которая имеет невероятную цветопередачу, и я не уверен, что вы подразумеваете под "падением" в синий пик.Так что либо я просто не замечаю этого, либо мой экран не отображает ту же картинку и делает ее более точной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...