|||
利用CUDA提供的纹理存储器和GPU内部的纹理流水线单元可以轻松实现各种算法的图像缩放处理,而且纹理流水线单元不占用SP流处理单元的计算资源。
尝试了5种算法(最邻近插值、双线性插值、双立方插值、双立方插值+锐化、双线性插值+快速算法的锐化)用Geforce GTX 285通过CUDA来处理一张DVD画质的样品图片(960×540),使其放大到1920×1080高清分辨率。局部效果如图:
1、最邻近插值
马赛克很严重。是最快的算法,处理时间0.24ms(每秒86亿个像素)。
2、双线性插值(实时3D渲染中常用的纹理插值算法)
没有马赛克,但颜色过渡边缘有少量锯齿。由于GPU纹理流水线本身支持硬件双线性插值,处理速度很快,也是0.24ms(每秒86亿个像素)。
3、双立方插值(Photoshop缩放图像的默认算法)
完全没有了锯齿,但略显模糊。这里采用了快速算法,处理时间0.61ms(每秒34亿个像素)。
4、双立方插值+锐化(3×3拉普拉斯算子)
颜色边缘过渡和字幕的边缘都很清晰,有点像1080p了。是最耗时的算法,处理时间4.5ms(每秒4.6亿个像素)。
5、双线性插值+快速算法的锐化
用了固定为2倍的快速锐化放大算法,有少量锯齿,效果不如双立方插值+锐化,比双线性插值要稍清晰。处理时间1.24ms(每秒17亿个像素)。