5

所以这是我的问题:

我有一个图像,该图像很大(高分辨率),它需要很小(分辨率低得多)。

所以我做了天真的事情(杀死所有其他像素),结果看起来很糟糕。

所以我尝试做一些更智能的事情(使用傅里叶变换的低通滤波和傅里叶空间中的重新采样),结果稍微好一点,但仍然很差。

所以我的问题是,是否有一种感知动机的图像下采样算法(或实现)?

编辑:虽然我知道许多重采样技术,但我的应用程序更关心保留感知特征,而不是产生平滑的图像。

edit2:可以肯定地假设我对数字信号处理、卷积、小波变换等有一定程度的熟悉

4

6 回答 6

5

读这个:

http://www.dspguide.com/

好的,读起来还不错。但是了解过滤器设计会很方便。

一般来说,将图像从 W1 x H1 缩放到 W2 x H2 的过程,其中 W1、W2、H1、H2 是整数,是找到新的 W3、H3,使得 W1 和 W2 是 W3 的整数因子,并且 H1 和 H2 是H3 的整数因子,然后用零填充原始图像(用于分隔原始图像的像素),使其现在的大小为 W3 x H3。由于图像中的不连续性,这会引入高频,因此您对图像应用低通滤波器,然后将滤波后的图像抽取到新的大小 (W2 x H2)。听起来您可能已经在尝试这样做,但是可以在时域中进行过滤,因此傅立叶变换并不是真正必要的。

在实践中,我刚刚描述的过程已经过优化(您会注意到,当将卷积滤波器应用于放大图像时,大多数项将为 0,因此您可以避免算法中的大部分乘法运算。例如,并且由于您最终会丢弃许多过滤后的结果,因此您不需要计算这些结果,因此基本上,您最终会为目标图像中的每个像素进行少量乘法和加法运算。诀窍是找出哪些系数使用。)

我相信,ffmpeg 项目中的 libswscale 会做这样的事情。看看这个:

http://gitorious.org/libswscale

正如其他人指出的那样,(您显然已经注意到)抽取图像会引入混叠伪影。我不能确定您的重采样实现,但根据您使用的窗口大小和其他实现细节,该技术有一些有趣的陷阱。

于 2009-11-22T23:08:11.020 回答
2

双三次插值通常被认为足够好,但没有完美的解决方案,它取决于人和被重新采样的图片的属性。

相关链接:

我什至不知道锐度也被称为锐度

混叠是天真的下采样时可能发生的问题。

于 2009-11-22T22:44:14.160 回答
1

帕斯卡是对的。取决于图像,以及你想要什么。一些因素:

  • 保留锋利的边缘
  • 保留颜色
  • 算法速度

这是你的方法

其他一些:

请注意,与使用较低分辨率的相机相比,有时重新采样可以获得更清晰的结果,因为高分辨率图像中会有一些边缘无法被较低分辨率的设备检测到。

旁注:如果您按整数缩小(例如除以 4 或 6),可以优化许多算法(尤其是最近邻算法)。

于 2009-11-22T22:53:27.057 回答
1

推荐的 ImageMagick“通用”下采样方法在这里讨论:http ://www.imagemagick.org/Usage/filter/nicolas/#downsample

于 2013-01-31T17:19:40.900 回答
0

您可以尝试内容感知调整大小算法。见:http ://www.seamcarving.com/

于 2009-11-22T22:50:58.030 回答
0

Paint MonoPaint.NET的 OS 分支)在此处实现图像下采样的超级采样算法: http ://code.google.com/p/paint-mono/source/browse/trunk/src/PdnLib/Surface.cs?spec =svn59&r=59#1313

于 2011-11-26T06:09:13.047 回答