原创 PCL通過有序點雲創建深度圖像

#include <iostream> #include <boost/thread/thread.hpp> #include <pcl/common/common_headers.h> #include <pcl/range_imag

原创 PCL點雲分割-歐式距離分割

歐幾里得算法使用鄰居之間距離作爲判定標準,而區域生長算法則利用了法線,曲率,顏色等信息來判斷點雲是否應該聚成一類 找到空間中某點p10,有kdTree找到離他最近的n個點,判斷這n個點到p的距離。將距離小於閾值r的點p12,p13,p14

原创 PCL點雲條件濾波

 條件濾波器通過設定濾波條件進行濾波,有點分段函數的味道,當點雲在一定範圍則留下,不在則捨棄。 #include <iostream> #include <pcl/point_types.h> #include <pcl/filters

原创 opencv Mat類型轉換成PCL類型

pcl::PointCloud<pcl::PointXYZ>::Ptr ImageUtils::cvMatToPcl(cv::Mat &mat) { pcl::PointCloud<pcl::PointXYZ>

原创 PCL點雲分割-區域生長法

我概括的來說,就是從曲率小的面播種,從種子的位置出發,開始往四周搜索點,然後比對點於點之間的曲率和法線方向,如果差距小於閾值就視爲同一個cluster。如果一個cluster無法再蔓延,在剩下的點雲裏再找曲率小的面播種,然後繼續重複直到遍

原创 PCL點雲配準-正態分佈變換

正態分佈變換算法是一個配准算法(確定兩個大型點雲(都超過100,000個點)之間的剛體變換),它應用於三維點的統計模型,使用標準優化技術來確定兩個點雲間的最優的匹配,因爲其在配準過程中不利用對應點的特徵計算和匹配,所以時間比其他方法快。

原创 通過VTK顯示PCL點雲

void showPointCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr pointCloud){ if(pointCloud->points.size() == 0){ w

原创 根據2D圖像mask分割點雲塊

前段時間做項目,其中一個步驟是根據深度學習識別出來的mask分割mask對應的點雲塊,然後計算點雲塊的位置和姿態,以供機器人抓取 這裏點雲和mask都是mat格式,根據2D圖像的mask分割點雲塊的關鍵函數式opencv中的copyTo函

原创 Qt界面Vtk交互

vtk事件,Qt槽 vtkEventQtSlotConnect* _connections = vtkEventQtSlotConnect::New(); // update coords as we mouse pressed thro

原创 Qt知識

1.QT自繪事件 在QWidget中做自繪一般就是重寫void paintEvent(QPaintEvent * event)函數,然後在這個函數裏利用QPainter類進行繪製 2.MOC 全稱是 Meta-Object Compile

原创 基於Qt、vtk和pcl實現在Qt編寫完的UI上操作點雲

通過深度學習算法學習點雲塊的位置和姿態,首先需要通過標註工具把點雲塊的位置和姿態標註出來,然後送到深度學習模型中進行學習,但是現在市面上只有2D圖像的標註工具,沒有開源的3D標註工具,這裏介紹下3D標註工具的簡單實現步驟 1.相機採集2D

原创 行列式

1.行列式的定義 行列式是由一些數據排列成的方陣經過規定的計算方法而得到的一個數。當然,如果行列式中含有未知數,那麼行列式就是一個多項式。它本質上代表一個數值,這點請與矩陣區別開來。矩陣只是一個數表,行列式還要對這個數表按照規則進一步計算

原创 通過VTK顯示STL模型

void showStlModel(const std::string& modelPath){ vtkSmartPointer<vtkSTLReader> stlReader = vtkSmartPointer<vtkSTLR

原创 PCL點雲配準-ICP

標準ICP算法是一種點集對點集配準方法(基於點-點距離的算法),標準的ICP算法需要粗配,滿足距離足夠近這一條件之後才能進行精確配準。 選取目標點雲P和源點雲Q,按照一定的約束條件,找到最鄰近點(pi,qi),然後計算出最優R和t(旋轉和

原创 通過有序點雲創建深度圖像

#include <iostream> #include <boost/thread/thread.hpp> #include <pcl/common/common_headers.h> #include <pcl/range_imag