Почему оттенки серого работают так, как работают? - PullRequest
20 голосов
/ 15 марта 2011

Мой оригинальный вопрос

Я читал, что для преобразования пикселя RGB в RGB в градациях серого необходимо использовать

r_new = g_new = b_new = r_old * 0.3 + g_old * 0.59 + b_old * 0.11

Я также прочитал и понимаю, чтоg имеет больший вес, потому что человеческий глаз более чувствителен к зеленому.Реализуя это, я увидел, что результаты были такими же, как если бы я установил изображение в 'оттенках серого' в графическом редакторе, таком как Gimp.

Прежде чем я прочитал это, я представил, что для преобразования пикселя в оттенки серогоможно преобразовать его в HSL или HSV, а затем установить насыщенность на ноль (следовательно, удалить все цвета).Однако, когда я сделал это, я получил совершенно другой вывод изображения, даже при том, что ему также не хватало цвета.

Как s = 0 точно отличается от «правильного» способа чтения и почему это «неверно»'?

Текущие результаты, основанные на ответах и ​​других исследованиях

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

  • коэффициенты, определенные в МСЭ-R BT.601 (NTSC?), Равны 0.299r + 0.587g + 0.114b
  • коэффициенты, определенные МСЭ-R BT.709 (новее) равны 0.2126r + 0.7152g + 0.0722b
  • коэффициентам равных третей, (1/3)(rgb), эквивалентным s = 0

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

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

Ответы [ 4 ]

10 голосов
/ 15 марта 2011

Хотя эти коэффициенты преобразования существуют, ничто не связывает вас с их использованием.Пока общая интенсивность каждого пикселя не изменяется, вклад каждого канала может быть любым, в диапазоне от 0 до 100%.

Фотографы, преобразующие изображения в оттенки серого, используют микшеры каналов для настройки уровней каждого канала (RGB или CMYK).В вашем изображении много красного и зеленого, поэтому может быть желательно (в зависимости от вашего намерения), чтобы эти каналы были более высоко представлены в интенсивности уровня серого, чем в синем.

Это то, что отличает "научный«преобразование изображения из« художественной »комбинации полос.

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

4 голосов
/ 15 марта 2011

Интересная статья на эту тему здесь ... "потому что человеческие глаза не определяют яркость линейно с цветом".

http://www.scantips.com/lumin.html

3 голосов
/ 15 марта 2011

Использование s = 0 в HSL / HSV и преобразование в RGB приводит к R = G = B, так же, как и r_old * 1/3 + g_old * 1/3 + b_old * 1/3.

Чтобы понять почему, взгляните на Википедиюстраница , которая описывает преобразование HSV-> RGB.Насыщенность s будет равна 0, поэтому C и X также будут.В итоге R_1,G_1,B_1 будет (0,0,0), а затем добавьте m к окончательным значениям RGB, что приведет к (m,m,m) = (V,V,V).То же самое для HSL, результат будет (m,m,m) = (L,L,L).

РЕДАКТИРОВАТЬ: ОК, просто выяснил, что выше не полный ответ, хотя это хорошая отправная точка.Значения RGB будут одинаковыми, либо L, либо V, но все равно это зависит от того, как изначально были рассчитаны L и V, см. Также Википедия Кажется, что программа / формулы, которые вы использовали для преобразования, использовали решение 1/3 * R + 1/3 * G + 1/3 * B или одно из двух других (hexcone / bi-hexcone).

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

3 голосов
/ 15 марта 2011

Похоже, что эти коэффициенты взяты из старой технологии CRT и плохо адаптированы к современным мониторам, из Color FAQ :

Коэффициенты 0,299, 0,587 и 0.114 правильно рассчитанная яркость для мониторов, имеющих люминофоры, которые были современное введение Телевидение NTSC в 1953 году. все еще подходит для вычисления видео Люма будет обсуждаться ниже в разделе 11. Однако эти коэффициенты не позволяют точно рассчитать яркость для современные мониторы.

Однако не удалось найти правильный коэффициент преобразования.

См. Также Преобразование RGB в монохромный

...