图像插值算法.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图像插值算法.docx

CSDNITeye招贤榜新版下载频道用户权限及积分规则详解bShare分享,迅速提升10倍流量图形图像处理-之-高质量的快速的图像缩放 下篇 三次线性插值和MipMap链2007-04-03 16:29477人阅读评论(0)收藏举报图形图像处理-之-高质量的快速的图像缩放下篇三次线性插值和MipMap链HouSisong@263.net 2007.03.13tag:图像缩放、速度优化、定点数优化、近邻取样插值、二次线性插值、三次线性插值、MipMap链、三次卷积插值、MMX/SSE优化、CPU缓存优化摘要:首先给出一个基本的图像缩放算法,然后一步一步的优化其速度和缩放质量;高质量的快速的图像缩放全文分为:上篇近邻取样插值和其速度优化中篇二次线性插值和三次卷积插值下篇三次线性插值和MipMap链正文:A:对于前一篇文章中的二次线性插值、三次卷积插值算法,但它们处理缩小到0.5倍以下的时候效果就会越来越差;这是因为插值的时候自考虑了附近点的原因;如下图:原图近邻取样缩放到0.4倍缩放到0.2倍缩放到0.1倍二次线性插值缩放到0.4倍缩放到0.2倍缩放到0.1倍三次卷积插值缩放到0.4倍缩放到0.2倍缩放到0.1倍可以看出:当缩小的比例很大的时候,插值算法的效果和近邻取样的效果差不多了:( ;一种可行的解决方案就是:缩小时考虑更多的点;但这种解决方案有很多缺点:函数编写麻烦,速度也许会很慢,优化也不容易做;还有一个方案就是预先建立一个缩放好的大小不同的图片列表,每一张图片都是前一张的0.5倍(这种图片列表就是MipMap链),缩放的时候根据需要缩放的比例从表中选择一张大小接近的图片来作为缩放的源图片;该方案的优点:不需要编写新的底层缩放算法,直接使用前面优化好的插值算法;缺点:需要预先建立MipMap链,它需要时间,并且它的储存需要多占用原图片的1/3空间(0.5^2+0.5^4+0.5^6+...=1/3);还有一个不太明显的小问题,就是在一张图片的连续的比例不同的缩放中,选择会从MipMap的一张源图片跳到另一张图片,视觉效果上可能会有一个小的跳跃(我在《魔兽世界》里经常看到这种效应:);一种改进方案就是选择MipMap图片的时候,选择出附近的两张图片作为缩放的源图片;对两张图片单独进行插值(和原来一致)输出两个值,然后把这两个值线性插值为最终结果;还有一个比较大的缺点就是当缩放比例不均匀时(比如x轴放大y轴缩小),缩放效果也不好;(当前很多显卡都提供了MipMap纹理和对应的插值方案,OpenGL和DirectX都提供了操作接口)(三次线性插值和MipMap链其实比较简单,这里只给出关键代码或算法)B: MipMap图片的生成:原图片缩放到0.5倍(宽和高都为原图片的1/2),在把0.5倍的图片缩放到0.25倍,....直到宽和高都为1个像素,如果有一个长度先到1就保持1;缩放过程中,可以可采用前面的缩放插值算法;如果为了速度可以考虑这样的方案,要求原图片的宽和高必须是2的整数次方的数值,缩放时就可以直接将2x2的像素快速合并为一个像素(如果允许原图片宽和高为任何值,可以考虑在合并时引入Alpha通道);C: MipMap链图片的储存方案:MipMap链图片示意图可能的一种物理储存方案(我对每张图片加了一个边框) D: 定义MipMap数据结构:MipMap数据结构可以定义为一个TPicRegion数组和该数组的大小;(MipMap图片的储存参见上面的图示)比如:#include vectortypedef std::vectorTPicRegion TMipMap;//其中,第一个元素TMipMap[0]指向原始图片,后面的依次为缩小图片;E: MipMap的选择函数和偏好:在进行缩放时,根据目标图片缓冲区的大小来动态的选者MipMap中的一幅图片来作为源图片;这就需要一个选择函数;比如:long SelectBestPicIndex(const TMipMap mip,constlong dstWidth,constlong dstHeight){long oldS=mip[0].width*mip[0].height;long dstS=dstWidth*dstHeight;if ( (dstS=oldS) || (mip.size()==1) )return 0;elseif (dstS=1)return mip.size()-1;elsereturn (long)(log(oldS/dstS)*0.5+0.5);}选择函数可以增加一个偏好参数:mip选择偏好:0.5没有偏好,靠近0偏向选择小图片,靠近1偏向选择大图片(质量好一些)float public_mip_bias=0.5; //[0..1] long Sel

文档评论(0)

jackzjh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档