【CUDA-BEVFusion】可视化源文件src/common/visualize.cu (一)

CUDA-BEVFusion中,src/common/visualize.cu 源文件的当前部分代码class ImageArtistImplement主要实现了3D边界框(Bounding Box)的投影和可视化功能,使用了CUDA加速的图像绘制库(cuOSD)来在图像上绘制3D边界框和相关的文本信息。

一、src/common/visualize.cu 部分源码

// 定义字体文件路径
#define UseFont "tool/simhei.ttf"
// 定义最大距离(未在代码中使用)
#define MaxDistance 50
// 定义图像缩放插值系数的位数
#define INTER_RESIZE_COEF_BITS 11
// 定义图像缩放插值系数的缩放因子
#define INTER_RESIZE_COEF_SCALE (1 << INTER_RESIZE_COEF_BITS)
// 定义类型转换的位数
#define CAST_BITS (INTER_RESIZE_COEF_BITS << 1)

// 定义Box3DInfo类型,用于存储3D边界框的投影信息
// 包括:投影角点坐标、类别ID、置信度分数、深度值
typedef std::tuple<std::vector<nvtype::Float2>, int, float, float> Box3DInfo;

// 将3D边界框投影到图像平面
std::vector<Box3DInfo> transformation_predictions(const nvtype::Float4* viewport_4x4,
                                                  const std::vector<Prediction>& predictions) {
   
  if (predictions.empty()) return {
   }; // 如果预测结果为空,直接返回空列表

  const int number_of_corner = 8; // 3D边界框的角点数量
  std::vector<Box3DInfo> output; // 存储投影结果的列表
  output.reserve(predictions.size()); // 预分配内存

  // 3D边界框的8个角点在局部坐标系中的偏移量
  const nvtype::Float3 offset_of_corners[number_of_corner] = {
   
      {
   -1, -1, -1}, {
   +1, -1, -1}, {
   +1, +1, -1}, {
   -1, +1, -1},
      {
   -1, -1, +1}, {
   +1, -1, +1}, {
   +1, +1, +1}, {
   -1, +1, +1}};

  // 遍历每个预测结果
  for (size_t idx_predict = 0; idx_predict < predictions.size(); ++idx_predict) {
   
    auto& item = predictions[idx_predict]; // 当前预测结果
    float cos_rotation = cos(item.z_rotation); // 计算旋转角度的余弦值
    float sin_rotation = sin(item.z_rotation); // 计算旋转角度的正弦值

    std::vector<nvtype::Float2> box3d; // 存储当前边界框的投影角点
    box3d.reserve(number_of_corner); // 预分配内存

    // 获取视口变换矩阵的行
    nvtype::Float4 row0 = viewport_4x4[0];
    nvtype::Float4 row1 = viewport_4x4[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值