这个算法已经在我脑海中存在了很长一段时间,但我找不到任何地方描述它。虽然它是如此简单,但我不可能是唯一一个想到它的人。它的工作原理如下:
你从一张图片开始。比如说,7x7px:
您需要将其重新采样,例如 5x5px:
所以你要做的就是取每个新方块的平均颜色:
这不是最近邻,因为它只采用一个像素的颜色,而不是碰巧覆盖源像素的分数像素的颜色。它也不是双线性、双三次、lanczos 或其他任何插值。
那么——这是什么?在我看来,直觉上这应该是“数学上完美”的重采样算法,尽管由于我没有“数学上完美”的定义,所以我无法证明或反驳这一点。
最后但并非最不重要的一点是,“数学上完美”并不总是“最好看”,所以我想知道它与其他主流图像重采样算法(双三次、lanczos)在“质量”方面相比如何?当然,这是一个主观术语,所以我真的很感兴趣这个算法和其他算法之间是否存在显着差异,大多数人都会同意这一点。
附:我已经可以告诉你一些事情 - 对于像素艺术来说,它不会是“最好看的”,如此处所示;有专门的算法(2xSAI 等);而且它对于放大图片来说也不是最好的——插值法会胜出。但是对于缩小图片...?
更新1:嗯,刚刚知道超采样 http://en.wikipedia.org/wiki/Supersampling。这似乎是它的一个变体,具有网格类型的样本排列,其中样本数量针对源图像和目标图像的分辨率进行了优化。
首先我要说的是我不知道你的算法的正式名称。我知道Paint Shop Pro很早就将其称为“双线性”,但在版本8中由于指出该算法与双线性的经典定义不符而被迫将其重命名为“加权平均”。
大多数调整大小算法可以在两个独立的通道中应用,一个在 X 方向,一个在 Y 方向。这不仅更高效,而且使描述和推理不同算法变得更加容易。从现在开始,我将在一维中工作,并假设您可以推断到二维。
您的输入由 7 个像素组成,我们将给出坐标 0、1、2、3、4、5、6。认识到这一点很有用像素不是一个小正方形 http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15869-f11/www/readings/smith95_pixelsquare.pdf在这种情况下,但这只是一个点。要创建输出,您需要来自点 0.2、1.6、3.0、4.4、5.8 的插值。为什么不是 0.0、1.5、3.0、4.5、6.0?假设您将输入和输出的大小加倍为 14x14 和 10x10:坐标现在为 0.0、1.44、2.89、4.33、5.78、7.22、8.67、10.11、11.56、13.0。从第二个像素开始,结果会有所不同,这是不可接受的。所有点的间距应为 7/5,坐标为 0.2、1.6、3.0、4.4、5.8、7.2、8.6、10.0、11.4、12.8。
让我们比较一下用过滤器表示的常见调整大小算法,看看它们与您的算法有何不同。
通用形式的第一个示例称为框或平均滤波器。但是,当盒式过滤器的宽度恰好为 1.0 时,就会发生神奇的事情:输入中的一个像素将落入盒内并被赋予权重 1.0,而输入中的所有其他像素将被赋予权重 0.0 。这使得它相当于最近邻算法。
我们的第二个示例通常称为帐篷过滤器。当宽度恰好为 2.0 时,它又变得很特别,它变成了线性插值;应用在 2D 中,称为双线性。
第三个示例是三次过滤器,当应用于 2D 时称为双三次过滤器。该公式有不同的变体,本示例使用 Mitchell 和 Netravali 建议的公式。
虽然高斯滤波器不常用于调整大小的应用程序,但我将其添加到此处进行比较。
最后我们达到了你的算法。它是平均和双线性的结合,是一个平顶的帐篷。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)