什么是最好的图像缩放algorithm(质量明智)?
我想找出哪个algorithm是最好的,可以用来缩小栅格图片。 最好的我的意思是提供最好看的结果。 我知道双三次,但有更好的呢? 例如,我听说有些人认为Adobe Lightroom有一些专有的algorithm,比我使用的标准双三次方法产生更好的结果。 不幸的是,我想在我的软件中自己使用这个algorithm,所以Adobe谨慎的商业秘密是行不通的。
添加:
我检查出了Paint.NET,令我惊讶的是,在缩小图片尺寸时,Super Sampling似乎比双三次更好。 这让我想知道插值algorithm是否是完全可行的。
这也让我想起了一个我自己“发明”的algorithm,但从未实现过。 我想它也有一个名字(因为这个小事不可能只是我自己的想法),但是我找不到那些受欢迎的名字。 超级采样是最接近的一个。
这个想法是这样的 – 对于目标图片中的每个像素,计算它在源图片中的位置。 它可能会覆盖一个或多个其他像素。 然后可以计算这些像素的面积和颜色。 然后,为了获得目标像素的颜色,可以简单地计算这些颜色的平均值,将它们的面积作为“权重”添加。 所以,如果一个目标像素将覆盖1/3的黄色源像素和1/4的绿色像素,我会得到(1/3 *黄+ 1/4 *绿)/(1/3 + 1/4)。
这自然是计算密集型的,但它应该尽可能地接近理想,不是吗?
这个algorithm有没有名字?
不幸的是,我找不到原始调查的链接,但随着好莱坞电影摄影师从电影转向数字图像,这个问题出现了很多,所以有人(也许是SMPTE,也许是ASC)聚集了一堆专业摄影师,并向他们展示了镜头已经使用一堆不同的algorithm进行了重新调整。 结果是,对于那些看巨幅电影的专业人士来说,共识是Mitchell (也被称为高质量的Catmull-Rom)是最好的扩大和Sinc是最好的缩小。 但是sinc是一个理论上的filter,可以无限延伸,因此不能完全实现,所以我不知道它们实际上是什么意思。 它可能是指一个截断的sinc版本。 Lanczos是sinc的几个实用变体之一,试图改进它的截断,可能是缩小静止图像的最佳默认select。 但是,像往常一样,这取决于图像和你想要的:缩小线条图来保留线条,例如,你可能更喜欢保留边缘的情况下,在收缩花卉照片时不受欢迎的情况。
在剑桥的Color中有各种algorithm的结果的一个很好的例子。
fxguide的人们汇集了大量关于缩放algorithm的信息 (以及其他许多关于合成和其他image processing的内容),值得一看。 他们还包括testing图像,可能有助于做自己的testing。
现在ImageMagick有一个关于重采样filter的广泛指南,如果你真的想进入它。
有点讽刺的是,关于缩小图像有更多的争议,理论上讲,由于只是丢弃信息,所以可以完美地完成,而不是放大,在那里你试图添加信息,不存在。 但是从Lanczos开始。
Lanczos采样比双三次采样慢,但能够产生更高质量的图像。
(Bi-)线性和(双)立方重采样不仅丑陋,而且在缩小比例小于1/2的因子时是不可靠的。 如果用1/2的因子下采样,那么它们会导致非常糟糕的类似于你所得到的混叠,然后使用最近邻下采样。
就个人而言,我会build议(面积)平均样本大多数下采样任务。 这是非常简单,快速和接近最佳的。 高斯重采样(半径select与该因数的倒数成比例,例如半径5用于下采样1/5)可以给出更好的结果,计算开销更大,并且在math上更合理。
使用高斯重采样的一个可能的原因是,与大多数其他algorithm不同的是,只要您select适合于重采样因子的半径,就可以正确工作(不会引入伪像/混叠),从而实现上采样和下采样。 否则,为了支持这两个方向,需要两个独立的algorithm – 下采样的面积平均值(上采样会降级到最近邻),以及上采样的(双)三立方数值(下降采样会降级到最近邻)。 在math上看到高斯重采样的这个好的性质的一种方法是具有非常大的半径的高斯近似面积平均,而具有非常小的半径的高斯逼近(双)线性内插。
我刚才看到一篇关于Seam刻的Slashdot文章,可能值得一看。
Seam雕刻是由Shai Avidan和Ariel Shamir开发的图像调整algorithm。 该algorithm不是通过缩放或裁剪来改变图像的尺寸,而是通过从图像中智能地移除像素(或者将像素添加到像素)而不重要。
您所描述的algorithm被称为线性插值,是最快的algorithm之一,但不是最好的图像。
这个algorithm有没有名字?
文献中可能将其称为“盒子”或“窗口”重采样。 实际上,你想象的计算量较小。
它也可以用来创build一个中间位图,随后由双三次插值使用,以避免下采样超过1/2的混叠。