三維點雲
文章平均质量分 77
keineahnung2345
这个作者很懒,什么都没留下…
展开
-
Generalized-ICP(GICP)論文研讀
ICP最基本的形式是point-to-point,即以點到點之間的距離作為損失函數;它的一個變種是point-to-plane,改用點到目標點局部擬合平面的距離作為損失函數。本篇介紹的GICP是上述兩者的generalization,它重新定義了自己的損失函數。point-to-point,point-to-plane,甚至plane-to-plane都可以用GICP這個統一的框架表達。原创 2022-02-09 10:19:32 · 3931 阅读 · 9 评论 -
PCL - ICP代碼研讀(二七) - TransformationEstimationPointToPlaneLLS實現
TransformationEstimationPointToPlaneLLS類別中有五個estimateRigidTransformation函數,其中四個是public的,另一個是protected的。前四個public的estimateRigidTransformation都是protected的estimateRigidTransformation的wrapper。原创 2021-10-24 10:01:36 · 1187 阅读 · 0 评论 -
PCL - ICP代碼研讀(二六) - TransformationEstimationPointToPlaneLLS架構
ICP的變種Point-To-Plane相較於經典款的ICP,損失函數由兩點間的距離變成source點到target點法向量所定義平面的距離,其推導詳見ICP變種Point-To-Plane算法推導。PCL中的TransformationEstimationPointToPlaneLLS便是Point-To-Plane ICP算法的具體實現。TransformationEstimationPointToPlaneLLS是TransformationEstimation的子類別,提供了estimateRi原创 2021-10-24 10:00:02 · 1292 阅读 · 0 评论 -
ICP變種Point-To-Plane算法推導
接續ICP(Iterative Closest Point)算法推導,本篇介紹ICP的變種Point-To-Plane損失函數及其求解方法。本文同樣整理自深藍學院三維點雲處理課程的Lecture 9 – Registration。原创 2021-10-21 10:06:59 · 2461 阅读 · 0 评论 -
PCL - ICP代碼研讀(二五 ) - DefaultConvergenceCriteria實現
接續PCL - ICP代碼研讀(二四 ) - DefaultConvergenceCriteria架構,本篇繼續介紹DefaultConvergenceCriteria中hasConverged函數的實現。本篇對應到default_convergence_criteria.hpp這個檔案。原创 2021-10-12 23:16:47 · 870 阅读 · 0 评论 -
PCL - ICP代碼研讀(二四 ) - DefaultConvergenceCriteria架構
DefaultConvergenceCriteria顧名思義,也就是預設的收斂判斷條件。本篇對應到default_convergence_criteria.h這個檔案。原创 2021-10-12 22:19:13 · 985 阅读 · 0 评论 -
PCL - ICP代碼研讀(二三 ) - ConvergenceCriteria架構
ConvergenceCriteria是一個抽象類別,提供了hasConverged介面,用於判斷當前點雲校正算法是否收斂。本篇對應到convergence_criteria.h這個檔案。原创 2021-10-12 21:45:55 · 980 阅读 · 0 评论 -
PCL - ICP代碼研讀(二二 ) - TransformationEstimationSVD實現
TransformationEstimationSVD類別中有五個estimateRigidTransformation函數,其中四個是public的,另一個是protected的。前四個public的estimateRigidTransformation都是protected的estimateRigidTransformation的wrapper。本篇對應到transformation_estimation_svd.hpp這個檔案。原创 2021-10-11 21:28:22 · 1221 阅读 · 0 评论 -
PCL - ICP代碼研讀(二一 ) - TransformationEstimationSVD架構
TransformationEstimationSVD是TransformationEstimation的子類別,提供了estimateRigidTransformation函數的具體實現。本篇對應到transformation_estimation_svd.h這個檔案。原创 2021-10-11 20:15:22 · 1203 阅读 · 0 评论 -
PCL - ICP代碼研讀(二十 ) - TransformationEstimation剛體變換估計
TransformationEstimation是一個抽象類別,提供了多個用於估計剛體變換的介面。本篇對應到transformation_estimation.h這個檔案。原创 2021-10-11 20:07:56 · 444 阅读 · 0 评论 -
PCL - ICP代碼研讀(十九 ) - CorrespondenceRejectorDistance實現
getRemainingCorrespondences函數是CorrespondenceRejector類別的核心,由CorrespondenceRejector的子類別各自實作。它接受original_correspondences作為輸入,使用一定的判斷條件拒絕掉部分點對,最後將結果保存到remaining_correspondences裡。注意到它是一個virtual函數,所以CorrespondenceRejector的各子類別會有不同的實現方式。原创 2021-10-11 13:20:13 · 301 阅读 · 3 评论 -
PCL - ICP代碼研讀(十八 ) - DataContainerInterface和DataContainer
在PCL - ICP代碼研讀(十七 ) - CorrespondenceRejectorDistance架構中,看到CorrespondenceRejectorDistance有個DataContainerPtr類型的成員變數data_container_,它的作用是將target_,tree_,target_cloud_updated_等變數封裝起來。DataContainerInterface提供了一個計算配對分數的介面;而DataContainer繼承自DataContainerInterface,是原创 2021-10-11 10:55:51 · 235 阅读 · 0 评论 -
PCL - ICP代碼研讀(十七 ) - CorrespondenceRejectorDistance架構
CorrespondenceRejectorDistance類別是CorrespondenceRejector的子類別,使用距離點對的距離作為拒絕點對的判斷條件:距離超過max_distance_的點對就會被拒絕。本篇對應到correspondence_rejection_distance.h這個檔案。原创 2021-10-11 10:34:41 · 264 阅读 · 0 评论 -
PCL - ICP代碼研讀(十六 ) - CorrespondenceRejector架構
CorrespondenceRejector會接受點對input_correspondences_當作輸入,然後以一定的條件(由CorrespondenceRejector的各子類別自行定義)拒絕其中部分點對,最後輸出剩下的點對。本篇對應到correspondence_rejection.h這個檔案。原创 2021-10-11 10:21:12 · 444 阅读 · 0 评论 -
PCL - ICP代碼研讀(十五 ) - CorrespondenceEstimation實現
接續PCL - ICP代碼研讀(十四 ) - CorrespondenceEstimation架構,本篇主要介紹correspondence_estimation.h中宣告但未給出實現的determineCorrespondences和determineReciprocalCorrespondences函數。本篇對應到correspondence_estimation.hpp這份檔案。原创 2021-10-10 12:30:56 · 670 阅读 · 0 评论 -
PCL - ICP代碼研讀(十四 ) - CorrespondenceEstimation架構
CorrespondenceEstimation類別繼承自抽象類別CorrespondenceEstimationBase(參考PCL - ICP代碼研讀(十二 ) - CorrespondenceEstimationBase架構),實現了determineCorrespondences和determineReciprocalCorrespondences函數,可以用於估計兩點雲間的配對。本篇對應到correspondence_estimation.h這個檔案。原创 2021-10-10 12:18:23 · 587 阅读 · 0 评论 -
PCL - ICP代碼研讀(十三 ) - CorrespondenceEstimationBase實現
從PCL - ICP代碼研讀(十二 ) - CorrespondenceEstimationBase架構中可以看到,CorrespondenceEstimationBase類別中宣告了成員函數setInputTarget,initCompute和initComputeReciprocal,但是並未給出實作,本篇就是介紹correspondence_estimation.hpp中這些函數的實現。原创 2021-10-10 12:11:30 · 358 阅读 · 0 评论 -
PCL - ICP代碼研讀(十二 ) - CorrespondenceEstimationBase架構
CorrespondenceEstimationBase是一個抽象類別,提供了如CorrespondenceEstimation,CorrespondenceEstimationNormalShooting等用於估計兩點雲間配對的類別的代碼框架。本篇主要對應到correspondence_estimation.h這個檔案。原创 2021-10-10 11:50:55 · 351 阅读 · 0 评论 -
PCL - ICP代碼研讀(十一 ) - Correspondence實現
接續PCL - ICP代碼研讀(十 ) - Correspondence架構,本篇繼續來看Correspondence各函數的實現,本片對應到cppcorrespondence.cpp這個文件。原创 2021-10-10 10:23:58 · 334 阅读 · 0 评论 -
PCL - ICP代碼研讀(十 ) - Correspondence架構
Correspondence結構體表示兩點雲間的一組配對,它的架構主要寫在correspondence.h中。原创 2021-10-10 10:21:46 · 458 阅读 · 1 评论 -
PCL - ICP代碼研讀(九 ) - computeTransform函數
computeTransform函數實現了ICP算法,是icp.hpp的精髓所在。回顧ICP(Iterative Closest Point)算法推導中提到的ICP算法三步驟,第一步是在兩點雲間尋找點對,然後拒絕其中不合理的點對;第二步是估計變換矩陣;第三步是判斷是否收斂。這三步分別對應到以下物件:點對估計器,點對拒絕器(多個),轉換矩陣估計器,收斂條件在以下代碼中,會時不時看到他們的身影。原创 2021-10-06 23:23:13 · 936 阅读 · 2 评论 -
PCL - ICP代碼研讀(八 ) - transformCloud函數
如PCL - ICP代碼研讀(六 ) - IterativeClosestPoint架構中所介紹的,transformCloud函數用於對輸入點雲的XYZ坐標及法向量做剛體變換。本篇中介紹的是IterativeClosestPoint::transformCloud,icp.hpp中還另外定義了一個IterativeClosestPointWithNormals::transformCloud函數,在此略過不述。原创 2021-10-05 23:31:03 · 393 阅读 · 0 评论 -
PCL - ICP代碼研讀(七 ) - determineRequiredBlobData函數
determineRequiredBlobData用於判定是否需要對source點雲和target點雲執行pcl::toPCLPointCloud2,並將結果記錄在need_source_blob_和need_target_blob_這兩個變數裡。原创 2021-10-05 22:58:01 · 238 阅读 · 0 评论 -
PCL - ICP代碼研讀(六 ) - IterativeClosestPoint架構
icp.h裡宣告了IterativeClosestPoint和IterativeClosestPointWithNormals兩個類別,他們兩個都是Registration的子類別。本篇只對IterativeClosestPoint類別著墨。原创 2021-10-03 19:19:56 · 976 阅读 · 0 评论 -
PCL - ICP代碼研讀(五 ) - align函數
接續PCL - ICP代碼研讀(二 ) - Registration架構,本篇主要介紹Registration類別的align函數。computeTransformation這個純虛擬函數用於估計兩點雲間的轉矩矩陣(final_transformation_),並同時對輸入點雲input_做轉換,將結果儲存至output這個點雲中,可以說是校正算法的核心。align函數則是它的wrapper,為computeTransformation函數做好初始化後,再呼叫該函數。原创 2021-10-03 16:52:13 · 1446 阅读 · 1 评论 -
PCL - ICP代碼研讀(四 ) - getFitnessScore函數
接續PCL - ICP代碼研讀(三 ) - Registration初始化,本篇主要介紹Registration類別的getFitnessScore函數。這個函數用於計算source與target間的mse(mean squared error)。PCL中提供了兩個版本的getFitnessScore,分別適用於兩個向量或點雲。原创 2021-10-03 10:50:55 · 3471 阅读 · 5 评论 -
PCL - ICP代碼研讀(三 ) - Registration初始化
接續PCL - ICP代碼研讀(二 ) - Registration架構,這邊繼續來看Registration成員函數的實現。本篇主要關注的是registration/include/pcl/registration/impl/registration.hpp這份文件中與初始化相關的函數。原创 2021-10-03 10:23:02 · 803 阅读 · 0 评论 -
PCL - ICP代碼研讀(二 ) - Registration架構
PCL庫中,所有校正算法都繼承自Registration這個類別。本篇便是介紹此類別的主要架構。原创 2021-10-02 23:19:52 · 925 阅读 · 0 评论 -
PCL - ICP代碼研讀(一) - 整體架構
如ICP(Iterative Closest Point)算法推導中描述的ICP算法,可以分為以下三步 尋找兩點雲間的配對 估計轉換矩陣 判斷收斂與否 在PCL這個庫中,整個校正過程所涉及的檔案也可以依上述步驟來分為以下幾類 校正算法相關 配對相關 轉換矩陣估計相關 收斂判斷相關原创 2021-10-02 21:31:29 · 315 阅读 · 0 评论 -
ICP(Iterative Closest Point)算法推導
本篇整理自深藍學院三維點雲處理課程的Lecture 9 – Registration。推導過程中大量地用到了矩陣跡(trace)及Frobenius norm的性質,建議與矩陣的跡(matrix trace)的特性以及證明及Frobenius norm的特性以及證明對照參看。原创 2021-09-26 10:32:54 · 476 阅读 · 0 评论 -
PCL - MLS代碼研讀(十五)- VOXEL_GRID_DILATION上採樣方法
PCL - MLS代碼研讀(十一)- computeMLSPointNormal函數,PCL - MLS代碼研讀(十三)- RANDOM_UNIFORM_DENSITY上採樣方法及PCL - MLS代碼研讀(十四)- DISTINCT_CLOUD上採樣方法介紹了五種上採樣方法中的四種,本篇介紹的是最後一種上採樣方法VOXEL_GRID_DILATION。原创 2021-09-14 23:35:09 · 644 阅读 · 0 评论 -
PCL - MLS代碼研讀(十四)- DISTINCT_CLOUD上採樣方法
在PCL - MLS代碼研讀(十一)- computeMLSPointNormal函數中已經介紹了NONE和SAMPLE_LOCAL_PLANE上採樣方法,並且在PCL - MLS代碼研讀(十三)- RANDOM_UNIFORM_DENSITY上採樣方法中介紹了RANDOM_UNIFORM_DENSITY上採樣方法,本篇主要介紹五種上採樣方法中的第四種:DISTINCT_CLOUD上採樣方法。...原创 2021-09-13 20:56:50 · 453 阅读 · 2 评论 -
PCL - MLS代碼研讀(十三)- RANDOM_UNIFORM_DENSITY上採樣方法
在PCL - MLS代碼研讀(十一)- computeMLSPointNormal函數中已經介紹了NONE和SAMPLE_LOCAL_PLANE上採樣方法。本篇主要介紹之前略過的RANDOM_UNIFORM_DENSITY上採樣方法。原创 2021-09-13 19:12:48 · 472 阅读 · 0 评论 -
羅德里格斯公式的證明
設旋轉向量長度為θ,⽅向為n,那麽旋轉矩陣R為:R=cosθI+(1−cosθ)nnT+sinθn^R參考Rodrigues’ rotation formula使用旋轉向量對向量v進行旋轉。將向量v拆分成與旋轉軸平行的分量v∥及與旋轉軸垂直的分量v⊥原创 2021-09-05 10:21:51 · 293 阅读 · 0 评论 -
PCL - MLS代碼研讀(十二)- addProjectedPointNormal及copyMissingFields函數
在PCL - MLS代碼研讀(十)- performProcessing函數和PCL - MLS代碼研讀(十一)- computeMLSPointNormal函數這兩篇文章中,時不時能看見到addProjectedPointNormal和copyMissingFields這兩個函數的蹤影。這兩個函數相較於之前介紹過的幾個函數較沒那麼重要,因此在這篇文章中一併介紹。原创 2021-08-31 00:09:18 · 194 阅读 · 0 评论 -
PCL - MLS代碼研讀(十一)- computeMLSPointNormal函數
在PCL - MLS代碼研讀(十)- performProcessing函數中,看到了performProcessing函數調用computeMLSPointNormal函數做計算,得到投影點坐標及法向量。實際上在此函數中,還會根據upsample_method_所指定的上採樣方法做上採樣。原创 2021-08-30 23:55:28 · 425 阅读 · 0 评论 -
PCL - MLS代碼研讀(十)- performProcessing函數
在PCL - MLS代碼研讀(九)- MLS入口 - process函數中,看到了process函數實際上是performProcessing函數的wrapper,真正做事的其實是performProcessing函數。原创 2021-08-30 23:48:16 · 218 阅读 · 0 评论 -
PCL - MLS代碼研讀(九)- MLS入口 - process函數
在PCL - MLS代碼研讀(一)中,我們看到了MLS模塊的入口函數是process,這也是本篇要介紹的內容。原创 2021-08-30 21:28:23 · 410 阅读 · 0 评论 -
PCL - PCLBase代碼研讀(二)- PCLBase實現
接續PCL - PCLBase代碼研讀(一)- PCLBase架構,這邊繼續來看PCLBase成員函數的實現。本篇主要關注的是common/include/pcl/impl/pcl_base.hpp這份文件。原创 2021-08-29 12:26:11 · 380 阅读 · 0 评论 -
PCL - PCLBase代碼研讀(一)- PCLBase架構
PCLBase中定義了幾個成員變量和函數,在PCL的大部分模組中,都會透過繼承PCLBase來使用這些成員變量和函數。surface/include/pcl/surface/mls.h裡定義的pcl::MovingLeastSquares類別就是一個例子。本篇的目的就是大致看一下common/include/pcl/pcl_base.h中定義的pcl::PCLBase類別的架構。原创 2021-08-29 12:21:20 · 437 阅读 · 0 评论