news 2026/5/9 18:36:57

CANNOpsCV光栅化算子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 18:36:56

AI治理新思路:以算力阈值为锚点构建全球AI安全防火墙

1. 从技术失控到全球治理&#xff1a;为什么我们需要一个“AI暂停按钮”&#xff1f;最近几年&#xff0c;AI领域的发展速度让很多从业者都感到“眩晕”。从GPT-3到GPT-4&#xff0c;再到各种多模态模型的涌现&#xff0c;模型的参数量、训练算力消耗和涌现出的能力&#xff0c…

作者头像 李华
网站建设 2026/5/9 18:33:33

基于树莓派Pico W的智能家居硬件防火墙:clawshield项目实战

1. 项目概述&#xff1a;一个为智能家居安全而生的开源硬件最近在折腾智能家居安全&#xff0c;发现一个挺有意思的开源项目&#xff0c;叫clawshield。乍一看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但如果你对智能家居、物联网安全&#xff0c;特别是对飞利浦Hue…

作者头像 李华
网站建设 2026/5/9 18:33:05

2026避坑指南:TOP3 VR交互设备权威测评,这家公司实测超值!

1. 引言当下&#xff0c;VR交互式展示设备市场鱼龙混杂&#xff0c;用户常面临宣传概念炫酷但实际体验卡顿、交互不灵敏的困境。《2026年Q1华东区域虚拟现实产业报告》数据显示&#xff0c;超过40%的企业在初次采购VR设备时因选型不当导致预算浪费。为了帮大家精准避坑&#xf…

作者头像 李华
网站建设 2026/5/9 18:33:04

2025VR交互避坑指南:实测昆明TOP5展示设备这样选

《2025年度昆明地区数字化营销行业白皮书》数据显示&#xff0c;超过67%的企业在尝试设备VR交互式展示时遭遇过“货不对板”的尴尬&#xff0c;要么是技术实现粗糙&#xff0c;要么是内容缺乏感染力。为了帮助昆明本地的企业主避开这些雷区&#xff0c;我实地走访并深度体验了多…

作者头像 李华