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

Я старался

ColorConvert[img, "Grayscale"]

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

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

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


person Cici    schedule 07.01.2015    source источник
comment
связанные, хотя и не относящиеся к математике. stackoverflow.com/questions/687261/   -  person agentp    schedule 07.01.2015


Ответы (2)


Мы можем получить точные значения, используемые 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

Истинный

person agentp    schedule 07.01.2015

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

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

ColorConvert[img, "GrayScale"]

ImageApply[{0.35, 0.45, 0.2}.# &, img]
person Chris Degnen    schedule 07.01.2015
comment
Ага... мы можем определить точный расчет сами.. Так много. - person Cici; 14.01.2015