博客
关于我
GPU图像处理的基本流程
阅读量:797 次
发布时间:2023-04-05

本文共 1075 字,大约阅读时间需要 3 分钟。

现代GPU提供了顶点处理器和片段处理器两个可编程并行处理部件。在利用GPU执行图像处理等通用计算任务时,要做的主要工作是将待求解的任务映射到GPU支持的图形绘制流水线上。

通常的方法是将计算任务的输入数据用顶点的位置、颜色、法向量等属性或者纹理等图形绘制要素来表达。相应的处理算法则被分解为一系列的执行步骤,并改写为GPU的顶点处理程序或片段处理程序。然后,调用3D API执行图形绘制操作,激活GPU上的片段程序进行处理;最后,保存在帧缓存中的绘制结果就是算法的输出数据。

虽然数字图像处理算法多种多样,具体实现过程也很不相同,但是在利用GPU进行并行化处理时,有一些共性的关键技术问题需要解决,如:数据的加载、计算结果的反馈、保存等。

下面对这些共性的问题进行分析,并提出相应的解决思路。

  • 数据加载
  • 在GPU的流式编程模型中,所有的数据都必须以“流”的形式进行加载处理,并通过抽象的3D API进行访问。在利用GPU进行图像处理时,最直接有效的数据加载方法是将待处理的图像打包为纹理,在绘制四边形时进行加载、处理。同时为了保证GPU上片段程序能够逐像素的对纹理图像进行处理,必须将投影变换设置为正交投影,视点变换的视区与纹理大小相同,使得光栅化后的每个片段(fragment)和每个纹理单元(texel)一一对应。对于图像处理算法中的其他参数,如果数据量很小,则可以直接通过接口函数进行设置;如果参数比较多,也应该将其打包为纹理的形式传输给GPU。在打包的过程中应充分利用纹理图像所具有的R、G、B、A四个通道。

    1. 计算结果的反馈、保存
    2. 应用程序是通过调用3D API绘制带纹理的四边形,激活GPU上的片段程序进行图像处理的。GPU片段着色器的直接渲染输出是一个帧缓冲区,它对应着计算机屏幕上的一个窗口,传统上用来容纳要显示到屏幕的像素,但是在GPU流式计算中可以用来保存计算结果。虽然CPU可以通过3D API直接读写这个帧缓冲区,将渲染处理的结果从帧缓存中复制到系统内存进行保存,但是帧缓存的大小受窗口大小限制,而且由于AGP总线的带宽限制(2.1GB/s),从显存到系统内存的数据传输速度较慢。因此,在进行大规模图像处理任务时,可能需要结合CPU和GPU的资源,采取混合计算方式,以提高处理效率。

      镜像变换 GPU 渲染主要包括以下几个步骤:

      • 设置 1 个输入纹理;
      • 对输入纹理进行纹理采样;
      • 设置变换矩阵;
      • 在顶点着色器中,将输入顶点与变换矩阵相乘;
      • 输出图像数据。

      通过上述步骤,可以实现对输入图像的镜像变换,并将处理结果输出到帧缓存中。

    转载地址:http://pxrfk.baihongyu.com/

    你可能感兴趣的文章
    oracle tirger_在Oracle中,临时表和全局临时表有什么区别?
    查看>>
    oracle where 条件的执行顺序分析1
    查看>>
    Oracle 中的 decode
    查看>>
    oracle 使用leading, use_nl, rownum调优
    查看>>
    oracle 修改字段类型方法
    查看>>
    oracle 内存参数示意图
    查看>>
    Oracle 写存储过程的一个模板还有一些基本的知识点
    查看>>
    UML- 配置图(部署图)
    查看>>
    Oracle 创建 DBLink 的方法
    查看>>
    oracle 创建job
    查看>>
    oracle 创建双向备份,Materialized View 物化视图实现 Oracle 表双向同步
    查看>>
    oracle 创建字段自增长——两种实现方式汇总
    查看>>
    Oracle 升级10.2.0.5.4 OPatch 报错Patch 12419392 Optional component(s) missing 解决方法
    查看>>
    oracle 可传输的表空间:rman
    查看>>
    Oracle 启动监听命令
    查看>>
    Oracle 在Drop表时的Cascade Constraints
    查看>>
    Oracle 在Sqlplus 执行sql脚本文件。
    查看>>
    Oracle 如何处理CLOB字段
    查看>>
    oracle 学习
    查看>>
    oracle 定义双重循环例子
    查看>>