图像放大算法

http://www.cnblogs.com/celerychen/archive/2010/11/25/3588222.html

一、 图像放大算法

图像放大有许多算法,其关键在于对未知像素使用何种插值方式。以下我们将具体分析几种常见的算法,然后从放大后的图像是否存在色彩失真,图像的细节是否得到较好的保存,放大过程所需时间是否分配合理等多方面来比较它们的优劣。

当把一个小图像放大的时候,比如放大400%,我们可以首先依据原来的相邻4个像素点的色彩值,按照放大倍数找到新的ABCD像素点的位置并进行对应的填充,但是它们之间存在的大量的像素点,比如p点的色彩值却是不可知的,需要进行估算。

1、最临近点插值算法(Nearest Neighbor)

最邻近点插值算法是最简单也是速度最快的一种算法,其做法是將放大后未知的像素点P,將其位置换算到原始影像上,与原始的邻近的4周像素点A,B,C,D做比较,令P点的像素值等于最靠近的邻近点像素值即可。如上图中的P点,由于最接近D点,所以就直接取P=D。

这种方法会带来明显的失真。在A,B中点处的像素值会突然出现一个跳跃,这就是出现马赛克和锯齿等明显走样的原因。最临近插值法唯一的优点就是速度快。

2、双线性插值算法(Bilinear Interpolation)

其做法是將放大后未知的像素点P,將其位置换算到原始影像上,计算的四個像素点A,B,C,D对P点的影响(越靠近P点取值越大,表明影响也越大),其示意图如下。

其具体的算法分三步:

第一步插值计算出AB两点对P点的影响得到e点的值。

对线性插值的理解是这样的,对于AB两像素点之间的其它像素点的色彩值,认定为直线变化的,要求e点处的值,只需要找到对应位置直线上的点即可。换句话说,A,B间任意一点的值只跟A,B有关。

第二步,插值计算出CD两点对P点的影响得到f点的值。

第三步,插值计算出ef两点对P点的影响值。

双线性插值算法由于插值的结果是连续的,所以视觉上会比最邻近点插值算法要好一些,不过运算速度稍微要慢一点,如果讲究速度,是一个不错的折衷。

3、双立方插值算法(Bicubic Interpolation)

双立方插值算法与双线性插值算法类似,对于放大后未知的像素点P,将对其影响的范围扩大到邻近的16个像素点,依据对P点的远近影响进行插值计算,因P点的像素值信息来自16个邻近点,所以可得到较细致的影像,不过速度比较慢。

不过双立方插值算法与双线性插值算法的本质区别不仅在于扩大了影响点的范围,还采用高级的插值算法,如图所示

要求A,B两点之间e点的值,需要利用A,B周围A-1,A,B,B 1四个点的像素值,通过某种非线性的计算,得到光滑的曲线,从而算出e点的值来。

所谓“双”或者叫“二次”的意思就是在计算了横向插值影响的基础上,把上述运算拓展到二维空间,再计算纵向插值影响的意思。

双立方插值算法能够得到相对清晰的画面质量,不过计算量也变大。该算法在现在的众多图像处理软件中最为常用,比如Photoshop,After Effects,Avid,Final Cut Pro等。

为了得到更好的图像质量,在以上的基础上,许多新的算法不断涌现,它们使用了更加复杂的改进的插值方式。譬如B样条(B-SPline), 米切尔(Mitchell)等插值算法,它们的目的是使插值的曲线显得更平滑,图像边缘的表现更加完美。

4、 自适应样条插值极其增强技术( S-Spline & S-Spline XL)

与上述经典的插值方法最大的区别在于, S-Spline 采用了一种自适应技术,那些传统的方法总是依据周围的像素点来求未知点的色彩值,也就是说需要求解的色彩值仅仅依靠该像素点在图像中的位置,而非实际的图像的像素信息,而自适应样条算法还会考虑实际图像的像素信息。 实验表明,经过 S-Spline 算法得到的图像效果要优于双立方插值算法。

现在 S-Spline 算法又出现了增强版 S-Spline XL,新版本的 S-Spline XL 算法较 S-Spline 而言画面的锐度得到进一步增强,物体的轮廓更加清晰,边缘的锯齿现象大大减弱,图像感受更加自然。

二、 图像放大算法 实际测试

现在我们来对以上几种插值算法进行实际测试,看看它们的效果。首先打开原始的图像bird.jpg.这是一个分辨率为360×270的图像。

我们采用 BenVista 公司著名的 PhotoZoom Pro 2 软件,在pc电脑上进行测试,电脑的CPU配置为Inter Core 2 T5500 1.66GHz,分别采用以上5种插值方法把原始图像放大8倍得到5个2880×2160的图像

为了得到最好的图像放大质量,在可选条件下,我们应该使用自适应样条插值增强(S-S pline_ XL)技术来放大图像。

对比以上各图并结合实验数据,我把效果参数列举如下表。

插值类型 主观感受 图像轮廓 总体评价 处理耗时

最临近点插值

N earrst_ N eighbour

马赛克现象严重 不清晰 最差 5秒

双线性插值

B ilinear

图像模糊,不锐利 边缘不清晰,有锯齿现象 6秒

双立方插值

B icubic

图像较模糊,较锐利 锯齿现象有所改善 折中 8秒

自适应样条插值

S-S pline

图像相对清晰,锐利 边缘变得清晰,锯齿现象消失 18秒

自适应样条增强

S-S pline_ XL

图像清晰,锐利 边缘锐利,清晰 最好 20秒
时间: 2024-10-02 20:42:07

图像放大算法的相关文章

图像放大快速算法

图像放大快速算法实现的原理主要有以下两点: 1.横向缩放与纵向缩放分开,而先后顺序取决于缩放前后的图像比例: 若SrcHeight/DstWidth>SrcWidth/DstWidth,则先纵向缩放,否则横向缩放. 2.利用整数运算代替浮点运算,由于是分步缩放,以横向缩放为例,利用二次线性插值公式,再变形一下如下: f(i,j+v) = (1-v)f(i,j) +vf(i,j+1); 其中i为第i行,j为第j列,v表示求得放大后坐标的小数部分. 这里最重要的并没有直接用小数运算,而是通过将小数区

图像美容之眼睛放大算法。

目前,手机上各种图像特效的软件应用App越来越盛行,比较有名如美图秀秀,camare360,美颜相机等,还有一些在某些特定的方向做的比较的优秀的如魔漫相机等.这些软件几乎无一例外的都提供了相当数量的针对人脸进行美化的功能,正是这些最基础的功能吸热了很多热血美女丑女中女的兴趣.以至于几乎我所认识的每个25-35之间的女性朋友都知道美图秀秀,而了解Photoshop的则微乎其微.不过最近听一些朋友谈到,认为手机上的图像软件已经过了开发的鼎盛期,也不晓得到底是不是这样. 作为人脸中最有神的部位眼睛,自

图像缩放算法

图像缩放算法较多,下面仅以最邻近插值算法和双线性插值算法作介绍. 如下图1所示,表示原始图像和缩放以后的图像. 图1 图像缩放(原始图像à缩放图像) 图像缩放就是将原始图像中的点经过某一算法映射到目标图像的点的行为,即要找到目标图像中的点p1对应在原始图像中点p0,简单而言就是找点p0. 假设: 原始图像src的分辨率为(srcW * srcH): 目标图像dst的分辨率为(dstW * dstH). 那么: 原始图像宽与目标图像宽的比例 原始图像高与目标图像高的比例 由 所以,原始图像中的点p

图像缩放算法【转】

转自:http://blog.csdn.net/qq_21792169/article/details/51020005 版权声明:本文为Linux_Google原创文章,转载请加上原创链接. 转载别人的,但是这篇文章写得确实太好了,所以想分享出来,可是原创文章地址找不到了 ,很可惜. 图像缩放算法 摘要:首先给出一个基本的图像缩放算法,然后一步一步的优化其速度和缩放质量: 高质量的快速的图像缩放 全文 分为:      上篇 近邻取样插值和其速度优化      中篇 二次线性插值和三次卷积插值

11、图像缩放算法

正文: 为了便于讨论,这里只处理32bit的ARGB颜色:  代码使用C++;涉及到汇编优化的时候假定为x86平台;使用的编译器为vc2005;  为了代码的可读性,没有加入异常处理代码;  测试使用的CPU为AMD64x2 4200+(2.37G)  和 Intel Core2 4400(2.00G); 速度测试说明:  只测试内存数据到内存数据的缩放  测试图片都是800*600缩放到1024*768; fps表示每秒钟的帧数,值越大表示函数越快 //////////////////////

Photozoom图像放大的技术一二事

平行空间下,未知的可能不仅仅是这个世界,还可能是前所未有的未知的探索.那么对于微小型世界来说,我们就需要借助技术的支撑来发现.photozoom就好比是“电子的放大镜”,对我们清晰图像的放大起到了重要作用. 看过<蚁人>系列电影的朋友都知道,不论是多么微观的渺小世界,我们只要拥有一颗赤诚探索的心,自然也可以发现它的奇妙.因此,photozoom就是在探索微观世界道路上的一款放大神器,活脱脱的一个“电子放大镜”.那么自然也少不了高配的技术加持. 不同的图像需要不同的处理方式.S-Spline M

基于matlab的经典图像边缘检测算法

图像边缘检测算法 (1)Robert算子边缘检测 (2)Sobel算子边缘检测 (3)Prewitt算子边缘检测 (4)LOG算子边缘检测 (5)Canny边缘检测 Matlab的实现. 其实还只是掉包侠,一点算法没有写 争取有空用openCV写一遍 I=imread('1.jpg'); I0=rgb2gray(I); subplot(231); imshow(I); BW1=edge(I0,'Roberts',0.16); subplot(232); imshow(BW1); title('R

图像融合算法(归纳篇)

综合关注几篇的papers的图像融合算法,对整个过程作归纳,与大家分享(^_^).基于sift特征的全景拼接方法的整个过程的大致流程: 对需拼接的图像进行预处理,主要是几何校正和消噪.对于几何校正,因为我们考虑的是视频的实时处理,那么我们只需考虑摄像机的所有运动形式,其中包含8个自由度,可用投影变换来表示.H=[m0 m1 m2;m3 m4 m5;m6 m7 1],考虑到它的算法复杂度已经有n的3次方,我们可以考虑通过控制摄像机的运动方式来减少复杂度,比如令摄像机只有平移旋转和缩放,即仿射变换,

最简单的分形图像生成算法

本文将提供一段完整地生成一幅分形图像文件的C语言代码,并且极为简单.我相信这应该是最简单的分形图像生成算法.大部分的分形图像代码也都很短,但一有递归迭代就难以理解了.而这段代码则很好懂,并且其生成的图像会使人意想不到. #include <iostream> #include <cmath> #include <cstdlib> #define DIM 1000 void pixel_write(int,int); FILE *fp; int main() { fp =