图形图像处理-之-高质量的快速的图像缩放 补充 使用SSE2优化

 

       图形图像处理-之-高质量的快速的图像缩放 补充 使用SSE2优化
                          
HouSisong@GMail.com    2011.04.12

 

tag: 图像缩放,速度优化,线性插值,三次卷积插值,SSE2,scale,bilinear,bicubic,StretchBlt

 

摘要:
  本文章对线性插值和三次卷积插值(bicubic)的实现做了一些新的优化尝试;
使用了SSE2的128bit寄存器及相关指令;并预先建立SSE2用到的缩放系数表;
实现的结果在我的i7电脑上比以前的版本分别快出145%和75%!
线性插值的速度是StretchBlt的13倍!

 

正文:
(请先看看我的blog里<高质量的快速的图像缩放>的前3篇文章!)
支持SSE2指令集的CPU越来越多,CPU的SSE2实现性能也好了很多(以前不比MMX好多少),
而且软件在64位模式的时候不再支持MMX,所以尝试了SSE2的缩放优化,效果不错!

 

速度测试说明:
  只测试内存数据到内存数据的缩放
  测试图片都是800*600缩放到1024*768,单线程;fps表示每秒钟的帧数,值越大表示函数越快.

 

速度测试对比: (CPU:i7 920 内存:DDR3 1333 3通道)

 

(windows)
StretchBlt  近邻取样           869.09 fps
StretchBlt  线性插值            44.46 fps //SetStretchBltMode(dc,4);?

 

PicZoom0:                       95.69 fps
PicZoom1:                      158.35 fps
PicZoom2:                      332.78 fps
PicZoom3:                     1172.79 fps
PicZoom3_float:                874.13 fps
PicZoom3_Table:               1158.30 fps
PicZoom3_SSE:                 1908.40 fps
PicZoom_Bilinear0:              28.80 fps
PicZoom_Bilinear1:              56.09 fps
PicZoom_Bilinear2:              97.09 fps
PicZoom_Bilinear_Common:       119.83 fps
PicZoom_Bilinear_MMX:          180.12 fps
PicZoom_Bilinear_MMX_Ex:       237.34 fps
PicZoom_ftBilinear_Common:     118.67 fps
PicZoom_ftBilinear_MMX:        213.68 fps
PicZoom_ThreeOrder0:             6.11 fps
PicZoom_ThreeOrder_Common:      25.38 fps
PicZoom_ThreeOrder_MMX:         52.32 fps

 

(SSE2的实现)
PicZoom_ftBilinearTable_SSE2:  588.24 fps
PicZoom_ThreeOrderTable_SSE2:   93.24 fps


 

 

PicZoom_ftBilinearTable_SSE2实现代码如下:


 


 

PicZoom_ThreeOrderTable_SSE2实现代码如下:

 

 

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值