Какая минимальная разница в значениях цветов RGB, которые Mathematica отображает и экспортирует как разные цвета? - PullRequest
5 голосов
/ 16 октября 2011

Я был поражен, когда обнаружил , что Mathematica дает True для следующего кода (в 32-битной Windows XP с Mathematica 8.0.1):

Rasterize[Graphics[{RGBColor[0, 0, 0], Disk[]}]] === 
 Rasterize[Graphics[{RGBColor[0, 0, 1/257], Disk[]}]]

Какая минимальная разница в значениях цветов RGB, которые Mathematica отображает и экспортирует как разные цвета?Это зависит от машины?

Ответы [ 3 ]

4 голосов
/ 16 октября 2011

Я считаю, что это поведение зависит от машины, но я не знаю, как именно оно зависит от ОС.На моей машине он оценивается в True только тогда, когда знаменатель равен 511.

n = 257; 
While[(Rasterize[Graphics[{RGBColor[0, 0, 0], Disk[]}]] === 
    Rasterize[Graphics[{RGBColor[0, 0, 1/n], Disk[]}]]) != True, 
 n++]; 
Print@n

Out[1]=511

Существует разница между двумя изображениями для n<511

p1 = ImageData@Rasterize[Graphics[{RGBColor[0, 0, 0], Disk[]}]];
p2 = ImageData@Rasterize[Graphics[{RGBColor[0, 0, 1/257], Disk[]}]];
ArrayPlot[p1 - p2]

enter image description here

Эта разница постоянна на всем протяжении до n=510 и равна 1/255.

Max[p2 - p1] === N[1/255]
Out[1]=True
3 голосов
/ 16 октября 2011

Похоже, Rasterize округляет каналы R G B каждого пикселя до ближайшего 8-битного значения (до ближайшего 1/256).

image = Image[{{{0, 0, .2/256}, {0, 0, .7/256}, {0, 0, 1.2/256}, {0, 
     0, 1.7/256}}}, ImageSize -> 4]
ImageData@image
Rasterize@image
ImageData@Rasterize@image

enter image description here

Таким образом, минимальная разница при растеризации в разные цвета должна составлять около 0,000000000000000000000000000 ...

1 голос
/ 05 декабря 2011

Виновной стороной здесь является Растеризация, которая снижает точность цветопередачи. Получите справку по ImageType[], чтобы увидеть, что Mathematica фактически распознает другие битовые глубины, но Rasterize [] разрушает все, что угодно, кроме байта.

...