我想找出可用于缩小光栅图片尺寸的最佳算法。最好的我的意思是给出最好看的结果的那个。我知道双三次,但还有更好的吗?例如,我从一些人那里听说 Adobe Lightroom 有某种专有算法,可以产生比我使用的标准双三次算法更好的结果。不幸的是,我想自己在我的软件中使用这个算法,所以 Adobe 严密保护的商业 secret 不会这样做。
添加:
我查看了 Paint.NET,令我惊讶的是,在缩小图片尺寸时, super 采样似乎比双三次采样更好。这让我想知道插值算法是否是可行的方法。
它还让我想起了我自己“发明”但从未实现过的算法。我想它也有一个名字(因为这种微不足道的东西不可能是我一个人的主意),但我在流行的名字中找不到它。 super 采样是最接近的。
想法是这样的——对于目标图片中的每个像素,计算它在源图片中的位置。它可能会覆盖一个或多个其他像素。然后就可以计算这些像素的面积和颜色。然后,要获得目标像素的颜色,只需计算这些颜色的平均值,将它们的面积添加为“权重”。所以,如果一个目标像素将覆盖 1/3 的黄色源像素和 1/4 的绿色源像素,我会得到 (1/3*yellow + 1/4*green)/(1/3+ 1/4).
这自然是计算密集型的,但它应该尽可能接近理想状态,不是吗?
这个算法有名字吗?
最佳答案
不幸的是,我找不到原始调查的链接,但是随着好莱坞电影摄影师从电影转向数字图像,这个问题出现了很多,所以有人(可能是 SMPTE,可能是 ASC)召集了一群专业电影摄影师和向他们展示了使用一系列不同算法重新缩放的镜头。结果是,对于这些看大电影的专业人士来说,一致认为 Mitchell(也称为高质量 Catmull-Rom)是放大和sinc的最佳选择strong> 是缩小规模的最佳选择。但是 sinc 是一个理论上的滤波器,它会趋于无穷大,因此无法完全实现,所以我不知道他们所说的“sinc”实际上是什么意思。它可能指的是 sinc 的截断版本。 Lanczos 是 sinc 的几个实用变体之一,它试图改进截断它,并且可能是缩小静止图像的最佳默认选择。但和往常一样,这取决于图像和您想要什么:缩小线条图以保留线条,例如,在这种情况下,您可能更喜欢强调保留边缘,这在缩小花朵照片时是不受欢迎的。
在 Cambridge in Color 中有一个很好的各种算法结果的例子。 .
fxguide 的人们放在一起 a lot of information关于缩放算法(以及许多其他关于合成和其他图像处理的东西)值得一看。它们还包括可能对您进行自己的测试有用的测试图像。
现在 ImageMagick 有一个 extensive guide on resampling filters如果你真的想进入它。
具有讽刺意味的是,关于缩小图像存在更多争议,这在理论上是可以完美完成的事情,因为你只是丢弃信息,而不是关于放大,你试图在其中添加信息那不存在。但从兰佐斯开始。
关于algorithm - 什么是最好的图像缩小算法(质量方面)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/384991/