所以这是我的问题:
我有一个图像,图像很大(高分辨率),它需要很小(分辨率低得多)。
所以我做了天真的事情(杀掉所有其他像素),结果看起来很差。
所以我尝试做一些更聪明的事情(使用傅里叶变换进行低通滤波并在傅立叶空间重新采样),结果稍微好一些,但仍然相当差。
所以我的问题是,是否有一个感知动机的图像下采样算法(或实现)?
编辑: 虽然我知道一些重采样技术,但我的应用程序更关注的是保留感知功能,而不是产生流畅的图像。
edit2:我可以安全地假设我对数字信号处理,卷积,小波变换等有一定的了解。
答案 0 :(得分:5)
阅读本文:
好的,这是一个很好的阅读。但是理解滤波器设计会很方便。
通常,将图像从W1 x H1缩放到W2 x H2(其中W1,W2,H1,H2为整数)的过程是找到新的W3,H3,使得W1和W2是W3和H1的整数因子H2是H3的整数因子,然后用零填充原始图像(用于分隔原始图像的像素),使其现在尺寸为W3×H3。由于图像中的不连续性,这会引入高频,因此您应对图像应用低通滤波器,然后将滤波后的图像抽取为新的尺寸(W2 x H2)。听起来你可能正在尝试这样做,但过滤可以在时域中完成,因此傅里叶变换不是必需的。
实际上,我刚刚描述的过程已经过优化(您会注意到,当对卷标图像应用卷积滤波器时,大多数项将为0,因此您可以避免算法中的大多数乘法运算,例如。由于你最终丢弃了许多过滤后的结果,你不需要计算那些,所以你最终会对目标图像中的每个像素进行一些乘法和加法。基本上就是诀窍。要使用哪些系数。)
我相信ffmpeg项目中的libswscale会做这样的事情。看看:http://gitorious.org/libswscale
正如其他人指出的那样,(并且您显然已经注意到)抽取图像会引入锯齿伪像。我无法确定您的重采样实现,但该技术有一些有趣的问题,具体取决于您使用的窗口大小和其他实现细节。
答案 1 :(得分:2)
Bicubic interpolation通常被认为是足够好的,但没有完美的解决方案,它取决于人和被重采样的图片的属性。
相关链接:
我甚至不知道锐度也被称为acutance。
Aliasing是一个天真地下采样时可能会出现的问题。
答案 2 :(得分:1)
这是your method。
其他一些人:
请注意,有时重新取样可以比使用较低分辨率的相机获得更清晰的效果,因为高分辨率图像中的边缘无法被低分辨率设备检测到。
旁注:如果要按整数缩小(例如除以4或6),可以优化许多算法(尤其是最近邻)。
答案 3 :(得分:1)
推荐的ImageMagick“通用”下采样方法在这里讨论:http://www.imagemagick.org/Usage/filter/nicolas/#downsample
答案 4 :(得分:0)
您可以尝试内容感知调整大小算法。请参阅:http://www.seamcarving.com/
答案 5 :(得分:0)