[0029] 獲得過冗余字典以后,任意的一個局部結構的特征向量α1,可以被過冗余字典重 構獲得一個新的特征向量α2,用α2中對應的值代替α1中的值,作為重建后的點密度。 為了讓點密度具有連續(xù)性和減少初始點歸屬的影響,在進行稀疏字典訓練和重建前,采用 拉普拉斯算法平滑點密度。
[0030] 步驟四:修復缺失的樹點云
[0031] 把上一步收縮得到的點云和原始的點云合并起來,形成一個新的點云Ρ。為了防止 點云修復過程中造成點的擴散,每一點在沿著主方向運動的同時,沿著軸向進行收縮。最小 化下式(4)和(5),對缺失點云進行修復。
[0032] 如果點i不在骨架上,
[0034] 如果該點在骨架上,
[0035]
[0036] 〇i是點i的主方向,U;是原始點云中i點的位置,P;、P_j分別表示優(yōu)化后點i、j的 坐標,Psi表示收縮后的點在優(yōu)化點云中的坐標,p_j表示點j的點密度,λ表示向著軸向和 原始點收縮的系數(shù),Φ表示向著軸向收縮和向著原始點收縮的比例。力是從點j指向點i 的,所以力的大小和j處的點密度有關,P_表示點i周圍點最大的那個點密度。采用P_ 后會壓制點密度小處的點運動,防止了末端點的擴散,并且鼓勵點密度高處的點運動。在優(yōu) 化中加入了骨架點云,使每一個點在優(yōu)化過程中沿著骨架點云進行運動,可以達到軸向收 縮的效果。在優(yōu)化過程中,骨架上的點較為密集,這些點在優(yōu)化后延伸較大,通過這些點再 拉動與其對應的原始點云,會讓整個點云沿著各自的骨架線方向進行擴散,完成點云的修 復過程。
[0037] 為了防止點云沿著骨架方向收縮過大或者沿著不正確的骨架方向移動,在優(yōu)化過 程中控制點云移動的步長,每次只移動一小段,迭代進行修復和重建過程,直到獲得良好的 樹模型,所以點云缺失的修復需要迭代進行。由于骨架點云是從點云沿著骨架線的收縮得 到的,用以描述樹木主要結構的骨架點云保留了大量的原始點云位置和結構信息,充分利 用骨架點云的這個特點設計了迭代過程。
[0038] (1)當點云經(jīng)過一次修復后,把原始輸入點云、上一步的骨架點云疊加到優(yōu)化后的 點云上,形成新的樹木點云。
[0039] (2)利用前一步獲得的樹骨架,對優(yōu)化后的點云進行收縮,得到新的骨架點云。
[0040] (3)把第(2)步產(chǎn)生的骨架點云、原始點云疊加起來,獲得這些點的連接關系,進 行點云修復。修復后的點云包括了兩部分:一部分是骨架點云運動后的點集,另一部分是原 始點云運動后的點集。
[0041] (4)依據(jù)第(3)步獲得的連接關系,對原始點云運動后的點進行收縮,得到新的骨 架點云。
[0042] 由第(3)步得到的連接關系可獲得第(2)步骨架點云中存在的邊el,即el的兩 端點連接的是第(2)步骨架點的邊,計算el的兩個端點和這一步骨架點以及原始點中任兩 點的距離之和,搜索距離最鄰近的兩個點,這兩個點形成邊e2,將邊e2的權重變成下式 (6) 〇
[0043] we2=ffe2(1-cosθ3/ (del/de2+de2/del)) (6)
[0044] 在(6)式中,del是邊el在邊e2上的投影長度,del是邊e2的長度,We2是邊e2的 權重,θ3是邊el和e2之間的夾角。
[0045] (5)當修改完所有相關邊的權重后,提取新骨架,然后轉到第⑵步,比較相鄰兩 次迭代的骨架點云末端點的移動情況,當所有末端點的運動小于閾值S時,整個迭代結 束。
[0046] 步驟五:重建樹的三維模型
[0047]當獲得樹骨架以后,采用植物生長模型計算每一個節(jié)點的半徑,根據(jù)每個節(jié)點的 半徑,將骨架膨脹成三維樹模型。
[0048] 3、優(yōu)點及功效:提出了樹局部結構平滑點云密度的方法,基于點云密度和點的主 方向,設計了數(shù)據(jù)缺失區(qū)域點云修復的優(yōu)化方程和迭代過程,利用骨架點云驅使點云中的 點沿著骨架線方向邊收縮邊擴散,使得優(yōu)化后的點云不會產(chǎn)生額外的噪聲,不依賴于優(yōu)化 后的點云而采用收縮的骨架繼承相鄰迭代之間的幾何拓撲關聯(lián)關系,充分保留了原始點云 的結構信息。采用植物生長模型計算樹骨架上每一節(jié)點的半徑,根據(jù)每個節(jié)點的半徑,將骨 架膨脹成三維樹模型。與已有樹三維重建方法相比,提出的方法能更精確的修復缺失區(qū)域 的點云,獲得精確的三維建模結果。 四、
【附圖說明】
[0049] 圖1方法的流程示意圖
[0050]圖2存在自遮擋的樹點云建模
[0051] 圖2(a)原始點云
[0052] 圖2 (b)數(shù)據(jù)修復后的點云
[0053] 圖2(c)重建的三維樹模型。
[0054]圖3存在較大數(shù)據(jù)缺失的樹點云建模
[0055] 圖3(a)原始點云
[0056] 圖3 (b)數(shù)據(jù)修復后的點云
[0057] 圖3(c)重建的三維樹模型。
[0058] 圖4樹冠處點較為密集的多棵樹的三維重建
[0059] 圖4 (a)原始點云
[0060] 圖4 (b)數(shù)據(jù)修復后的點云
[0061] 圖4(c)重建的三維樹模型
[0062] 圖5手工刪去部分點后的樹建模和原始點云建模結果的比較
[0063] 圖5(a)原始樹點云
[0064] 圖5(b)原始樹點云的三維建模結果
[0065] 圖5 (c)手工刪除一部分點后的點云數(shù)據(jù)
[0066] 圖5 (d)數(shù)據(jù)修復后的樹點云
[0067] 圖5 (e)數(shù)據(jù)缺失修復后樹點云的三維建模結果。 五、
【具體實施方式】
[0068] 涉及一種基于地面激光雷達點云數(shù)據(jù)自適應構建三維樹木骨架的方法,該方法具 體步驟如下(如圖1):
[0069] 步驟一:初步建立樹木三維幾何結構
[0070] 對于包含多棵樹的地面激光點云,需要先識別樹的株數(shù)及其對應的底部。獲取一 定高度層的點,然后聚類提取單棵樹的點云集合。計算每棵樹點云集合的中點,作為該樹的 底點。對于復雜的區(qū)域需要交互式指定底部來確定樹的棵數(shù)和底點。
[0071] 在樹木點云中,利用k-NearestNeighbor(KNN)算法計算每個點最鄰近的η個點, 一般的,η=50 ;設其中兩點分別為i點和j點,ΚΝΝ算法計算出的最鄰近點i的最相鄰點 包含j,而j的最鄰近不包括i,所以讓i的最相鄰點包含j,且點的相鄰點包含i,點與點 連線形成邊的長度作為該邊的權重,以此構建一個無向圖,通過該無向圖構建最小生成樹 (MST)。用Diikstra算法計算每個底點到MST各點的最短距離,把每個點歸屬到離所對應 底點最近的樹上去。這樣就獲得了一株樹的點云以及其連接方式。
[0072] 步驟二:構建距離最小生成樹
[0073] 從樹木點云中用Dijkstra算法獲得樹的三維結構缺乏相鄰點的信息,而MST也不 能很好描述樹的伸展形狀。樹枝通常是向上生長的,小范圍內(nèi)樹干的分布應該是相對光滑 的,樹上的點被認為是以離根節(jié)點最近的方式連接,并且越相臨的點在同一樹枝上的可能 性越大。采用距離最小生成樹方法(DMst)來構建子樹。DMst的方法流程如下:
[0074] (1)對單株樹的點云構建無向圖,其中頂點集合為V。設每個頂點到根節(jié)點的距離 Ddl],每個頂點到當前DMst(此時,DMst為空)的最小距離為D"st,每