Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Подробный расчет преобразования RGB в уровень серого с помощью Mathematica

Автор вопроса: CiciОтветов: 2

Я старался

ColorConvert[img, "Grayscale"]

чтобы преобразовать RGB в Graylevel. Мне интересен подробный расчет mathematica..

Gray level= square(R^2+G^2+B^2)?

или что-то другое?

  • связанные, хотя и не относящиеся к математике. stackoverflow.com/questions/687261/ agentp 07.01.2015

rgbgrayscalewolfram-mathematica

Ответы

Ответ 1 · рейтинг 2 · agentp

Мы можем получить точные значения, используемые mathematica, составив 3-пиксельное изображение с чистым красным, зеленым и синим цветом и преобразовав его:

 lvec = First@
         ImageData[
           ColorConvert[Image[{{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}}],
             "GrayScale"]]

{0.299, 0.587, 0.114}

Обратите внимание, что это "коэффициенты луны Rec. 601" согласно http://en.wikipedia.org/wiki/Luma_%28video%29

Проверьте это на реальном изображении:

 lena = ExampleData[{"TestImage", "Lena"}];
 lenag = ColorConvert[lena, "GrayScale"];
 ImageData@ImageApply[ lvec.# & , lena ] == ImageData@lenag

Истинный

Ответ 2 · рейтинг 1 · Chris Degnen

См. раздел Как преобразовать цвета в оттенки серого?, чтобы понять, как могут выполняться вычисления.

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

ColorConvert[img, "GrayScale"]

ImageApply[{0.35, 0.45, 0.2}.# &, img]

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы