2

我正在尝试使用 PIL 的调整大小功能将 32x32 像素图像重新缩放为 28x28。我首先读取像素值全部为 255 或 0 的 PGM 图像(我通过查看文件进行了验证)。但是,当我重新缩放时,一些像素值变为负数。

currIm = Image.open(os.path.join(currSrc,currFile))
currIm2 = currIm.resize((28,28), Image.BICUBIC

imData = numpy.asarray(currIm)
imData2 = numpy.asarray(currIm2)

imData 中的所有值都是 0.0 或 255.0,这是我所期望的。但是,imData2 中的“抗锯齿”像素往往为负值,其值从 0 到 -50 不等,通常在 -30 左右。

为什么会发生这种情况,我该如何解决?就其价值而言, currIm 和 currIm2 都有 mode = 'F' (Float??)

注意:这似乎不是 Image.BILINEAR 插值的问题

4

1 回答 1

2

PIL 实现实际上可能是正确的。

包括双三次在内的一些插值函数容易出现“过冲”。基本上,如果小区域中的值变化足够大,则插值函数可以产生原始范围之外的值。

查看有关Bicubic Interpolation的 Wikipedia 文章。有一个示例图像展示了一些效果和对acutanceringingclipping的引用。

于 2014-05-14T04:41:55.733 回答