Почему оттенки серого работают именно так?

StackOverflow https://stackoverflow.com/questions/5311774

  •  24-10-2019
  •  | 
  •  

Вопрос

Мой первоначальный вопрос

Я читал, что для преобразования пикселя 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 точно отличается от "правильного" способа, которым я читаю, и почему это "неправильно"?

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

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

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

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

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

Это было полезно?

Решение

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

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

Это то, что отличает "научную" трансформацию изображения от "художественного" сочетания полос.

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

Другие советы

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

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

Похоже, что эти коэффициенты заимствованы из старой технологии ЭЛТ и не очень хорошо адаптированы к современным мониторам, поскольку Часто задаваемые вопросы о цвете:

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

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

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

Используя s = 0 в HSL / HSV и преобразование в RGB приводит к R = G = B, so - это то же самое , что делать 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 позже просто изолирует последний компонент.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top