所以我的问题是:
我有一个图像,该图像是大的(高分辨率),它需要小(低得多的分辨率)。
所以我做了一件天真的事情(杀死所有其他像素),结果看起来很差。
因此,我尝试做一些更智能的事情(使用傅立叶变换进行低通滤波,并在傅立叶空间中重新采样),结果稍好一些,但仍然相当差。
那么我的问题是,有没有一种感知驱动的图像下采样算法(或实现)?
编辑:虽然我知道许多重采样技术,但我的应用程序更关心的是保留感知特征,而不是产生平滑的图像。
edit2:可以肯定地说,我对数字信号处理、卷积、小波变换等有一定程度的熟悉
发布于 2009-11-23 06:44:14
Bicubic interpolation通常被认为是足够好的,但没有完美的解决方案,它取决于人和被重新采样的图片的属性。
相关链接:
我甚至不知道锐度也被称为acutance。
Aliasing是一个在天真的下采样时可能出现的问题。
发布于 2009-11-23 07:08:11
请阅读以下内容:
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-23 06:53:27
帕斯卡是对的。取决于图像和您想要的内容。一些因素:
保留锐化edges
这是your method。
其他一些:
请注意,有时向下重新采样比使用较低分辨率的相机可以获得更清晰的结果,因为在高分辨率图像中会有较低分辨率设备无法检测到的边缘。
附注:许多算法(特别是最近邻算法)可以优化,如果你缩小一个整数(例如,除以4或6)。
https://stackoverflow.com/questions/1780277
复制相似问题