algorithm - 感知图像下采样

标签 algorithm image downsampling

所以这是我的问题:

我有一张图片,该图片很大(高分辨率),需要小一点(分辨率低得多)。

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

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

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

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

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

最佳答案

读这个:

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

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

关于algorithm - 感知图像下采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780277/

相关文章:

python - 此递归 python k 组合生成器函数的时间复杂度

arrays - 通过抽取或提取 Swift 中的每个第 n 个元素进行下采样收集的有效方法

c# - 用单个值填充数组的最快方法

algorithm - 范围树 : why not save space by default?

image - 如何将图像添加到 primefaces 菜单栏?

c# - System.Drawing.Graphics Drawimage 将IOS拍摄的图片旋转90度

Python - 使用重新采样而不使用平均值/均值进行下采样

image-processing - 如何使用 VGG16 或 InceptionV3 的高分辨率图像

algorithm - 无环无向断开图的单条最短路径

javascript - 使用 javascript/css 切片图像