博客
关于我
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/

    你可能感兴趣的文章
    mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
    查看>>
    MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
    查看>>
    MYSQL8.0以上忘记root密码
    查看>>
    Mysql8.0以上重置初始密码的方法
    查看>>
    mysql8.0新特性-自增变量的持久化
    查看>>
    Mysql8.0注意url变更写法
    查看>>
    Mysql8.0的特性
    查看>>
    MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    查看>>
    MySQL8修改密码的方法
    查看>>
    Mysql8在Centos上安装后忘记root密码如何重新设置
    查看>>
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>
    MySQL8,体验不一样的安装方式!
    查看>>
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>
    Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
    查看>>