基于GPU并行处理的图像HAAR小波分解.pptVIP

  • 5
  • 0
  • 约1.64千字
  • 约 12页
  • 2016-10-08 发布于重庆
  • 举报
基于GPU并行处理的图像HAAR小波分解

理论基础 程序实现 实现效果 实现效果 L/O/G/O 基于GPU并行处理的图像 HAAR小波分解 报告人:王欣博 1014203044 同组成员:窦汝鹏1014203030 实现背景 并行计算 CUDA Nvidia公司维护的GPU编程架构,包括显卡驱动及运行时函数 ,目前最通用的GPU计算工具 MKL Intel支持的并行计算算法库,速度很快,被很多项目所应用 OpenCl 最有影响力的开源GPU计算工具,AMD显卡基本是以OpenCl为默认开发工具 OpenBlas 开源的并行算法库,与MKL速度不相上下 显卡计算优劣势 优势 劣势 程序架构与以往的串行结 构有较大不同,不易掌握 调试不方便 对于大量重复性运算速 度很快 除了速度快还是速度快 GPU实现优势 GPU实现劣势 不适用与需要做大量控制 及数据读写的操作 我们的目标 我们选用CUDA来进行小波分解的GPU实现 查看实现效果,并与别人的效果进行比对 针对CPU代码与GPU代码运行速度进行比较 实现HAAR小波分解。 GPU实现 试验效果 结论对比 我们用串行代码来实现Haar小波分解 CPU实现 HAAR小波:在图像中可以理解为卷积核为[-1 1],[1 1]的一维卷积,不同组合的死副图像形成该尺度下的尺度变换 HAAR小波应用:应用于图像压缩,可将图像变为稀疏矩阵 算法设计 Haar小波分解实际上是对图像做两次1D卷积,卷积核为时域部分的L:[1 1]和频域部分的H:[-1 1]。进行一次小波分解会出来四张图片,分别为LL,LH,HL,HH,即x轴L,y轴L。。。等等 卷积函数具有很高的可并行性,非常适合显卡运算。我们将图像分成若干16*16的block,每个block对应于显卡中的一个block,即256个线程,每个线程通过共享内存实现和卷积核的加权运算。 这里由于haar小波的卷积核非常小,为了避免数据传递延时,我们这里采用纹理内存的方式实现数据快速访问。将输入图像与一个纹理绑定,每个block中线程的位置,搜索纹理内存中对应的像素,并进行求和或减法。 程序实现 利用opencv接口读取图像 将图像变为float型数据,并导入自己定义的图像结构 这里我们设计每个block有16*16个线程 实现卷积的具体函数 编译并查看效果 编写wrapper函数 编写核函数 设计线程 数据转换 导入图像 Steps 进行核函数调用,并完成数据传递 分析运行速度 核函数: __global__ void CGHaarRow(float *d_Result, int dataW, int dataH, int midSize) __global__ void CGHaarColumn ( float *d_Result, int dataW, int dataH, int midSize) wrapper函数: Core::CGDwtHaar_CUDA(CGImagefloat *ImgDst, CGImagefloat *ImgIn) 图像数据: CG::Core::CGImagefloat *ImgIn = new CG::Core::CGImagefloat(m_Image.cols, m_Image.rows); 线程设计: dim3 gridSize((ImgIn-width + 16 - 1) / 16, (ImgIn-hight + 16 - 1) / 16); dim3 blockSize(16, 16); 原始图像 尺度为1的分解 尺度为2的分解 尺度为3的分解 CPU与GPU代码速度比较 CPU GPU 尺度1:2ms 尺度3:3ms 尺度1:5ms 尺度3:20ms CPU小波分解运行时间 GPU小波分解运行时间 尺度2:3ms 尺度2:11ms L/O/G/O Thank You!

文档评论(0)

1亿VIP精品文档

相关文档