当前位置: 首页 > news >正文

CANNOpsCV光栅化算子

Rasterizer

【免费下载链接】ops-cv本项目是CANN提供的图像处理、目标检测相关的算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-cv

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT×
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品×
Atlas 推理系列产品×
Atlas 训练系列产品×

功能说明

  • 算子功能:实现光栅化计算。根据给定的三维空间中的点和面,获取屏幕中每个像素点的最小深度及其对应的面片索引,并计算该面片的重心坐标透视矫正插值。

  • 计算公式: $findices$记录每个像素点最小深度对应的面索引,$barycentric$记录每个顶点相对于$findices$中记录的面的重心坐标透视矫正插值。 计算过程中使用的Z-Buffer记录每个像素点$(x, y)$的最小深度$z_{\min}(x, y)$以及该深度对应的三角形面片索引$\text{face_idx}(x, y)$。

    计算过程如下: 对空间中的每个三角形面片$f$:

    1. 将$f$的三个顶点坐标$v_0$,$v_1$,$v_2$转换为屏幕坐标$v_{s0}$,$v_{s1}$,$v_{s2}$

    2. 根据$v_{s0}$,$v_{s1}$,$v_{s2}$计算包围$f$的矩形范围

    3. 对矩形内每个像素点$v_i = (x_i, y_i)$,执行以下操作:

      a. 计算像素中心坐标$v_c$
      b. 计算$v_c$相对于三角形$f$的重心坐标$(\alpha, \beta, \gamma)$
      c. 根据$(\alpha, \beta, \gamma)$判断$v_c$是否在三角形内部。若$v_c$不在三角形内部,则处理矩形内下个像素点,否则执行下述步骤
      d. 使用$(\alpha, \beta, \gamma)$和$v_{s0}$,$v_{s1}$,$v_{s2}$得到当前像素的深度值depth
      e. 若启用了深度先验;否则,直接执行下一步“Z-Buffer更新”

      • 使用深度先验图计算深度阈值depth_thres
      • 如果depth < depth_thres,处理矩形内下个像素点,否则执行下述步骤

      f. Z-Buffer更新:

      • 若$depth < z_{\min}(x_i, y_i)$:

      $$ \quad z_{\min}(x_i, y_i) \gets \text{depth} \ \quad \text{face_idx}(x_i, y_i) \gets f $$

      • 若$depth = z_{\min}(x_i, y_i)$:

      $$ \quad \text{face_idx}(x_i, y_i) \gets \min(\text{face_idx}(x_i, y_i),\ f) $$

    按上述步骤对空间中所有的三角形面片进行处理后,对大小为$height * width$的屏幕上每个像素点$v_i = (x_i, y_i)$:

    1. 取Z-Buffer中$v_i$对应的面片索引$f_{idx}$,$findices (x_i, y_i) \gets f_{idx}$
    2. 将$f$的三个顶点坐标$v_0$,$v_1$,$v_2$转换为屏幕坐标$v_{s0}$,$v_{s1}$,$v_{s2}$
    3. 计算$v_i$的中心点坐标$v_c$
    4. 计算$v_c$相对于三角形$f$的重心坐标$(\alpha, \beta, \gamma)$
    5. 使用$(\alpha, \beta, \gamma)$计算透视矫正插值$(\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma})$
    6. $barycentric(x_i, y_i) \gets (\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma})$

    以下是涉及的各种具体计算方法:

    • 顶点$v = (x, y, z, w)$转换为屏幕坐标$v_s = (x_s, y_s, z_s)$

      $$ x_s = (x / w * 0.5 + 0.5) * (width - 1) + 0.5\ y_s = (0.5 + 0.5 * y / w) * (height - 1) + 0.5\ z_s = z / w * 0.49999 + 0.5 $$

    • 点$v$相对于三角形$(v_0, v_1, v_2)$的重心坐标$(\alpha, \beta, \gamma)$

      1. 分别计算计算三角形$(v_0, v_1, v_2)$、$(v_0, v, v_2)$和$(v_0, v_1, v)$的有向面积$area$、$beta_tri$和$gamma_tri$
      2. 若$area$为0,则$\alpha = \beta = \gamma = -1$, 否则

      $$ \beta = beta_tri / area\ \gamma = gamma_tri / area\ \alpha = 1 - \beta - \gamma $$

    • 由顶点$v_0 = (x_0, y_0, z_0)$,$v_1 = (x_1, y_1, z_1)$和$v_2 = (x_2, y_2, z_2)$组成的三角形的有向面积

      $$ area = (x_2 - x_0) * (y_1 - y_0) - (x_1 - x_0) * (y_2 - y_0) $$

    • 结合重心坐标$(\alpha, \beta, \gamma)$和三角形屏幕坐标$v_0 = (x_0, y_0, z_0)$, $v_1 = (x_1, y_1, z_1)$和$v_2 = (x_2, y_2, z_2)$计算像素点$v = (x, y)$的深度$depth$

      $$ depth = \alpha * z_0 + \beta * z_1 + \gamma * z_2 $$

    • 结合深度图$d$,遮挡截断$occlusion_truncation$计算点$v = (x, y)$的深度阈值$depth_thres$

      $$ depth_thres = d(x, y) * 0.49999 + 0.5 + occlusion_truncation $$

    • 根据重心坐标$(\alpha, \beta, \gamma)$判断顶点是否在三角形内 如果$\alpha >= 0$且$\beta >= 0$且$\gamma >= 0$则点在三角形内(包括在三角形边上),否则点不在三角形内。

    • 结合重心坐标$(\lambda_0, \lambda_1, \lambda_2)$以及三角形的三个顶点坐标$v_0 = (x_0, y_0, z_0, w_0)$,$v_1 = (x_1, y_1, z_1, w_1)$和$v_2 = (x_2, y_2, z_2, w_2)$计算透视矫正插值$(\lambda_0^{corrected}, \lambda_1^{corrected}, \lambda_2^{corrected})$

      $$ \lambda_i^{corrected} = \frac{\lambda_i / w_i} { \sum (\lambda_j / w_j)} $$

参数说明

  • 参数说明

    参数名输入/输出/属性描述数据类型数据格式
    v输入表示空间中顶点坐标的输入张量,对应公式描述中的`v`,size为2。FLOAT32ND
    f输入表示空间中面片的输入张量,对应公式描述中的`f`,size为2。INT32ND
    d可选属性
    • 表示深度图的输入张量,用于计算深度阈值,此参数不生效。
    • 默认值为空。
    FLOAT32ND
    height输入
    • 表示屏幕高度。
    • 默认值为0。
    INT64-
    width输入
    • 表示屏幕宽度。
    • 默认值为0。
    INT64-
    occlusion_truncation输入
    • 遮挡截断,用于计算深度阈值,此参数不生效。
    • 默认值为0.0。
    DOUBLE-
    use_depth_prior输入
    • 表示是否应用深度先验,此参数不生效。
    • 默认值为0。
    INT64-
    findices输出表示屏幕中每个像素点最小深度对应的面片索引,对应公式描述中的`findices`,size为2。INT32ND
    barycentric输出表示屏幕中每个像素点基于最小深度的面片,求解得到的重心坐标透视矫正插值的输出张量,对应公式描述中的`barycentric`,size为2。FLOAT32ND

约束说明

  • 仅支持useDepthPrior为0的输入场景,参数d、occlusionTruncation、useDepthPrior在实际计算中不生效。

调用说明

调用方式样例代码说明
aclnn接口test_aclnn_rasterizer通过aclnnRasterizer接口方式调用Rasterizer算子。

【免费下载链接】ops-cv本项目是CANN提供的图像处理、目标检测相关的算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-cv

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/784571/

相关文章:

  • 2026年国产影像仪推荐:五大品牌综合解析 - 科技焦点
  • 从零开始使用Taotoken模型广场为你的应用选择合适的模型
  • 2026年湖南数控机床设计与非标机床定制全链条服务深度指南 - 年度推荐企业名录
  • 口碑最好的隔离防晒霜排行榜,5款宝藏防晒 油痘肌都能放心用 - 全网最美
  • Calico IPIP CrossSubnet 与 IPIP 默认模式对比
  • CANN/pypto concat操作
  • 2026年湖南数控机床设计与非标机床定制全链条解决方案对标指南 - 年度推荐企业名录
  • 告别重装烦恼:用再生龙Clonezilla 3.0.1给Windows/Linux系统做个‘时光机’(附保姆级图文流程)
  • 统信UOS上玩Steam游戏,从显卡驱动到Proton配置的保姆级避坑指南
  • 如何彻底告别手动刷课:Autovisor智慧树自动化学习终极指南
  • React 19 + Firebase 实战:构建毕业惊喜留言板 Web 应用
  • 农业器械供应商哪家好? - 中媒介
  • 济南名表流转测评:谁执牛耳?五家头部平台分级解析,揭秘行业标杆与特色品牌 - 奢侈品回收测评
  • 2026年5月9日成都市场盛世钢联镀锌管价格行情 - 四川盛世钢联营销中心
  • 2026年湖南数控机床设计与非标机床定制行业深度横评指南 - 年度推荐企业名录
  • 化妆学校怎么选不踩坑?2026西安正规实力机构盘点,学化妆不踩雷 - 深度智识库
  • AI董事会成员:技术架构、实施路径与法律伦理挑战
  • CANN/pyasc标量比较API文档
  • 解耦密集融合:多模态数据融合的核心原理与医疗AI实践
  • 湘潭宝妈必看!2025年高端幼儿园选购指南:九华合芯灵幼儿园深度评测与五大推荐 - 品牌策略师
  • 潍坊本地CPPM官方授权报名中心及联系方式 - 众智商学院课程中心
  • 通义千问3-Reranker-0.6B实操手册:Gradio界面+预填示例零基础体验
  • 2026佛山收的顶旧款闲置名包全品类回收,专业团队上门评估交易 - 奢侈品回收测评
  • 2026年大学生必考证书权威指南:顺应行业趋势的职业发展风向标 - 速递信息
  • SAP ERS自动清账的‘坑’与优化:系统日期、会计期间不一致怎么办?
  • 首次使用Taotoken从注册到完成第一个API调用的全流程指引
  • 口碑最好的隔离防晒霜排行榜,口碑榜单不翻车 5款防晒闭眼入 - 全网最美
  • 2026年5月9日成都市场盛世钢联螺旋管价格行情 - 四川盛世钢联营销中心
  • 徐州本地CPPM官方授权报名中心及联系方式 - 众智商学院课程中心
  • 如何为永久在线的crm网站接入大模型客服,使用Taotoken多模型聚合能力