Mathematica渲染和输出为不同颜色的RGB颜色值的最小差异是什么?

时间:2011-10-15 20:07:11

标签: wolfram-mathematica rendering mathematica-8 mathematica-frontend

Mathematica True提供Rasterize[Graphics[{RGBColor[0, 0, 0], Disk[]}]] === Rasterize[Graphics[{RGBColor[0, 0, 1/257], Disk[]}]] 以下代码时感到惊讶(在32位Windows XP上使用 Mathematica 8.0.1) :

{{1}}

Mathematica渲染和导出为不同颜色的RGB颜色值的最小差异是什么?它是机器依赖的吗?

3 个答案:

答案 0 :(得分:4)

我认为这种行为取决于机器,但我不知道它究竟取决于操作系统。在我的机器上,仅当分母为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

答案 1 :(得分:3)

看起来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左右......

答案 2 :(得分:1)

这里的Guilty派对是Rasterize,它可以消除色彩的精确度。获取有关ImageType[]的帮助,看看Mathematica实际上识别出其他位深度,但Rasterize []会破坏字节之外的任何内容。