PCL - MLS代碼研讀(十二)- addProjectedPointNormal及copyMissingFields函數

PCL - MLS代碼研讀(十二)- addProjectedPointNormal及copyMissingFields函數

前言

PCL - MLS代碼研讀(十)- performProcessing函數PCL - MLS代碼研讀(十一)- computeMLSPointNormal函數這兩篇文章中,時不時能看見到addProjectedPointNormalcopyMissingFields這兩個函數的蹤影。這兩個函數相較於之前介紹過的幾個函數較沒那麼重要,因此在這篇文章中一併介紹。

addProjectedPointNormal

addProjectedPointNormal函數有index,point,normal,curvature四個入參,這個函數會將他們轉成合適的型別後,再新增到projected_points, projected_points_normals, corresponding_input_indices這三個數據結構中。

template <typename PointInT, typename PointOutT> void
pcl::MovingLeastSquares<PointInT, PointOutT>::addProjectedPointNormal (pcl::index_t index,
                                                                       const Eigen::Vector3d &point,
                                                                       const Eigen::Vector3d &normal,
                                                                       double curvature,
                                                                       PointCloudOut &projected_points,
                                                                       NormalCloud &projected_points_normals,
                                                                       PointIndices &corresponding_input_indices) const
{

輸入點point跟輸出點的類型可能不同,所以這裡建立一個新的:

  PointOutT aux;

然後把輸入點point裡的內容複製到PointOutTaux裡面:

  aux.x = static_cast<float> (point[0]);
  aux.y = static_cast<float> (point[1]);
  aux.z = static_cast<float> (point[2]);

如果有RGBA等欄位的話,就複製過去:

  // Copy additional point information if available
  copyMissingFields ((*input_)[index], aux);

更新projected_pointscorresponding_input_indices.indices

  // aux表示投影點
  // corresponding_input_indices要跟projected_points一起看,表示該投影點對應的輸入點的索引?
  projected_points.push_back (aux);
  corresponding_input_indices.indices.push_back (index);

如果compute_normals_為true,則複製法向量及曲率到pcl::Normal的點內,並更新projected_points_normals

  if (compute_normals_)
  {
    pcl::Normal aux_normal;
    aux_normal.normal_x = static_cast<float> (normal[0]);
    aux_normal.normal_y = static_cast<float> (normal[1]);
    aux_normal.normal_z = static_cast<float> (normal[2]);
    aux_normal.curvature = curvature;
    projected_points_normals.push_back (aux_normal);
  }
}

copyMissingFields

如果point_inRGBA欄位,則將他們複製到point_out中。

template <typename PointInT, typename PointOutT> void
pcl::MovingLeastSquares<PointInT, PointOutT>::copyMissingFields (const PointInT &point_in,
                                                                 PointOutT &point_out) const
{
  PointOutT temp = point_out;
  copyPoint (point_in, point_out);
  point_out.x = temp.x;
  point_out.y = temp.y;
  point_out.z = temp.z;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值