内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

pcl中MomentOfInertiaEstimation解析與實例-創(chuàng)新互聯(lián)

pcl中features模塊又基于慣性矩和偏心率的描述子,也可以求取點云的AABB和OBB包圍盒,在計算的過程中法線一些問題,特此記錄。
針對慣性矩和偏心率這兩個數(shù)據(jù)的應(yīng)用場景還不明確,因此暫時不做討論,主要討論求取OBB時的代碼。

創(chuàng)新互聯(lián)建站主打移動網(wǎng)站、成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護、域名申請、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計。最后,要實現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計,我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。
templatevoid
pcl::MomentOfInertiaEstimation::computeOBB ()
{obb_min_point_.x = std::numeric_limits::max ();
  obb_min_point_.y = std::numeric_limits::max ();
  obb_min_point_.z = std::numeric_limits::max ();

  obb_max_point_.x = std::numeric_limits::min ();
  obb_max_point_.y = std::numeric_limits::min ();
  obb_max_point_.z = std::numeric_limits::min ();

  unsigned int number_of_points = static_cast(indices_->size ());
  for (unsigned int i_point = 0; i_point< number_of_points; i_point++)
  {float x = (input_->points[(*indices_)[i_point]].x - mean_value_ (0)) * major_axis_ (0) +
              (input_->points[(*indices_)[i_point]].y - mean_value_ (1)) * major_axis_ (1) +
              (input_->points[(*indices_)[i_point]].z - mean_value_ (2)) * major_axis_ (2);
    float y = (input_->points[(*indices_)[i_point]].x - mean_value_ (0)) * middle_axis_ (0) +
              (input_->points[(*indices_)[i_point]].y - mean_value_ (1)) * middle_axis_ (1) +
              (input_->points[(*indices_)[i_point]].z - mean_value_ (2)) * middle_axis_ (2);
    float z = (input_->points[(*indices_)[i_point]].x - mean_value_ (0)) * minor_axis_ (0) +
              (input_->points[(*indices_)[i_point]].y - mean_value_ (1)) * minor_axis_ (1) +
              (input_->points[(*indices_)[i_point]].z - mean_value_ (2)) * minor_axis_ (2);

    if (x<= obb_min_point_.x) obb_min_point_.x = x;
    if (y<= obb_min_point_.y) obb_min_point_.y = y;
    if (z<= obb_min_point_.z) obb_min_point_.z = z;

    if (x >= obb_max_point_.x) obb_max_point_.x = x;
    if (y >= obb_max_point_.y) obb_max_point_.y = y;
    if (z >= obb_max_point_.z) obb_max_point_.z = z;
  }

  obb_rotational_matrix_<< major_axis_ (0), middle_axis_ (0), minor_axis_ (0),
                            major_axis_ (1), middle_axis_ (1), minor_axis_ (1),
                            major_axis_ (2), middle_axis_ (2), minor_axis_ (2);

  Eigen::Vector3f shift (
    (obb_max_point_.x + obb_min_point_.x) / 2.0f,
    (obb_max_point_.y + obb_min_point_.y) / 2.0f,
    (obb_max_point_.z + obb_min_point_.z) / 2.0f);

  obb_min_point_.x -= shift (0);
  obb_min_point_.y -= shift (1);
  obb_min_point_.z -= shift (2);

  obb_max_point_.x -= shift (0);
  obb_max_point_.y -= shift (1);
  obb_max_point_.z -= shift (2);

  obb_position_ = mean_value_ + obb_rotational_matrix_ * shift;
}

如上所示,OBB求取的過程就是將點云轉(zhuǎn)換到以中心為坐標(biāo)原點,PCA計算的三個特征向量為軸方向的局部坐標(biāo)系中,然后求取相應(yīng)的AABB包圍盒的過程,但是在文中最后一段

Eigen::Vector3f shift (
    (obb_max_point_.x + obb_min_point_.x) / 2.0f,
    (obb_max_point_.y + obb_min_point_.y) / 2.0f,
    (obb_max_point_.z + obb_min_point_.z) / 2.0f);

  obb_min_point_.x -= shift (0);
  obb_min_point_.y -= shift (1);
  obb_min_point_.z -= shift (2);

  obb_max_point_.x -= shift (0);
  obb_max_point_.y -= shift (1);
  obb_max_point_.z -= shift (2);
  obb_position_ = mean_value_ + obb_rotational_matrix_ * shift;

第一點:
shift是包圍盒的在局部坐標(biāo)系中的中心坐標(biāo),
obb_rotational_matrix_ 是將局部坐標(biāo)系轉(zhuǎn)為全局坐標(biāo)的旋轉(zhuǎn)矩陣,平移矩陣就是中心點坐標(biāo)。
obb_position_ 就是OBB包圍盒中心的全局坐標(biāo)

注意:這里局部坐標(biāo)系和全局坐標(biāo)系的轉(zhuǎn)換關(guān)系要注意,對點云計算協(xié)方差陣,得到的特征向量矩陣是列向量組成的,obb_rotational_matrix_ 就是列向量組成的;
分析:
全局坐標(biāo)->局部坐標(biāo)
RP=Pt,此時的R是特征向量作為行向量組成的,這與得到的特征向量矩陣是轉(zhuǎn)置的關(guān)系
局部坐標(biāo)->全局坐標(biāo)
RtPt=P,此時Rt是R的逆,這才是正確的,但是由于R的轉(zhuǎn)置*R=單位陣,因此使用轉(zhuǎn)置取代求逆操作,也就是說,此時的Rt是特征向量作為列組成的。所以出現(xiàn)
obb_position_ = mean_value_ + obb_rotational_matrix_ * shift;
obb_position_ 就是OBB包圍盒中心的全局坐標(biāo)。

第二點:

obb_min_point_.x -= shift (0);
  obb_min_point_.y -= shift (1);
  obb_min_point_.z -= shift (2);

  obb_max_point_.x -= shift (0);
  obb_max_point_.y -= shift (1);
  obb_max_point_.z -= shift (2);

obb_min_point_和obb_max_point_減去包圍盒中心點坐標(biāo)是什么意思?
經(jīng)過測試發(fā)現(xiàn),減去中心點坐標(biāo)之后,包圍盒的坐標(biāo)是存在問題的
在這里插入圖片描述

如上圖所示,兩個黑色框中的點就是獲取的包圍盒的最小點和大點,這里明顯可以看出,這兩點和顯示的OBB包圍盒沒有關(guān)系,是有問題的。
因此繪制正確的OBB包圍盒時,采用的是給定包圍盒中心的坐標(biāo)和包圍盒的寬度和長度的方法進行繪制。
歡迎留言。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

分享標(biāo)題:pcl中MomentOfInertiaEstimation解析與實例-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://m.rwnh.cn/article2/djehoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)移動網(wǎng)站建設(shè)、品牌網(wǎng)站制作營銷型網(wǎng)站建設(shè)、微信小程序、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
山丹县| 清苑县| 开鲁县| 皮山县| 顺昌县| 松阳县| 辽源市| 陇西县| 昂仁县| 天津市| 丽水市| 出国| 饶河县| 玛沁县| 西和县| 文昌市| 云霄县| 桂阳县| 泰兴市| 科技| 温宿县| 贵溪市| 兴义市| 堆龙德庆县| 普兰店市| 忻城县| 赤峰市| 山东省| 双牌县| 明水县| 樟树市| 阳信县| 宁都县| 新泰市| 平度市| 和平县| 顺义区| 黎川县| 兴文县| 桃园县| 长子县|