5

当我发现Mathematica提供True以下代码时,我感到很惊讶(在 32 位 Windows XP 和Mathematica 8.0.1):

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

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

4

3 回答 3

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]

在此处输入图像描述

这种差异自始至终都是恒定的,n=510并且等于1/255

Max[p2 - p1] === N[1/255]
Out[1]=True
于 2011-10-15T21:00:23.417 回答
3

看起来像Rasterize将每个像素的 RGB 通道四舍五入到最接近的 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

在此处输入图像描述

因此,光栅化成不同颜色的最小差异应该在 0.000000000000000000000000000 左右...

于 2011-10-15T22:19:58.127 回答
1

这里的有罪派对是光栅化,它会降低颜色精度。获取帮助ImageType[]以查看 Mathematica 确实可以识别其他位深度,但 Rasterize[] 会破坏 Byte 之外的任何内容。

于 2011-12-05T01:11:31.060 回答