2. 解碼
3. opencl演算法
4. 演算法實現
5. 參考文獻
點雲壓縮的八叉樹演算法
通過迴圈遞迴的方法對大小2n×
2n×2
n2^n\times 2^n \times 2^n
2n×2n×
2n的八叉樹空間8等分劃分,最多剖分n
nn次。
在完成逐層劃分之後,對資料編碼,編碼方式為:假設點雲座標p(x
,y,z
)p(x,y,z)
p(x,y,
z)和樹中節點(a,
b,c)
(a,b,c)
(a,b,c
)相對應且樹中任乙個節點都與乙個最小包圍盒cub
emin
cube_
cubemi
n一一對應 oct
:(a,
b,c)
↔cub
emin
(1)oct:(a,b,c)\leftrightarrow cube_ \tag
oct:(a
,b,c
)↔cu
bemi
n(1
) 乙個座標點對應乙個oct節點,而乙個oct節點可能對應多個座標點。利用該特性可以刪除多餘的點。
節點編碼為m=m
n−1⋯
m2m1
m0
m=m_\cdots m_2m_1m_0
m=mn−1
⋯m2
m1
m0為節點在n
nn層的節點序號。
首先利用空間座標計算出節點索引值:
a=int\left( \frac}\right)\\ b=int\left( \frac}\right)\\ c=int\left( \frac}\right) \tag\end
⎩⎪⎪⎪⎨⎪
⎪⎪⎧
a=in
t(λx
x−x
min
)b=
int(
λyy
−ymi
n)
c=in
t(λz
z−z
min
)(
2)使用無符號整數表示a,b
,c
a,b,c
a,b,
c a=a_a_\cdots a_0\\ b=b_b_\cdots b_0\\ c=c_c_\cdots c_0 \tag\end
⎩⎪⎨⎪⎧
a=an
−1a
n−2
⋯a0
b=bn
−1b
n−2
⋯b0
c=cn
−1c
n−2
⋯c0
(3)
節點序號m
im_i
mi和ai,
bi,c
ia_i,b_i,c_i
ai,bi
,ci
之間的關係可以表示為:
m i=
ai+b
i⋅2+
ci⋅4
(4)m_i=a_i+b_i\cdot 2+c_i \cdot 4 \tag
mi=ai
+bi
⋅2+
ci⋅
4(4)
若知道八叉樹某一節點序號m
im_i
mi,利用m
im_i
mi和ai,
bi,c
ia_i,b_i,c_i
ai,bi
,ci
之間的關係得出:
a i=
(mim
od2)
,bi=
[(mi
/2)m
od2]
,ci=
[(mi
/4)m
od2]
(5)ai=(m_i\ mod\ 2),b_i=[(m_i/2)\ mod\ 2],c_i=[(m_i/4)\ mod\ 2] \tag
ai=(mi
mod
2),b
i=[
(mi
/2)m
od2]
,ci
=[(m
i/4
)mod
2](5
) 由(2)進行量化,去除重複座標,然後直接編碼為:
m =c
n−1b
n−1a
n−1⋯
c0b0
a0
(6)m=c_b_a_\cdots c_0b_0a_0 \tag
m=cn−1
bn−
1an
−1⋯
c0b
0a0
(6)
量化是按座標點迴圈
整數排序→
\rightarrow
→去除重複點
[1] 三維點雲資料精簡與壓縮的研究_唐林
[2] massively parallel kd-tree construction and nearest neighbor search algorithms
octomap點雲壓縮
如果點雲檔案比較大,可以利用octomap庫對點雲進行壓縮。octomap以八叉樹結構對點雲進行組織,是一種有失真壓縮,定義不同的解析度可以儲存不同尺度的資料。這裡以rabbit.pcd檔案為例,分別將點雲儲存為文字格式 txt 二進位制格式 bin 八叉樹格式 ot 八叉樹二進位制模式 bt 對比...
點雲 PCL點雲濾波與實現
目錄 直通濾波器 passthrough 條件濾波 conditional removal 球半徑濾波器 radiusoutlinerremoval 4 統計濾波器 statisticaloutlierremoval 5 體素降取樣 voxelgrid 均勻取樣 uniform sampling i...
PCL 八叉樹的應用 點雲壓縮
點雲由龐大的資料集組成,這些資料集通過距離 顏色 法線 等附加資訊來描述空間的三維點。此外,點雲還能以非常高的速率被建立出來,因此需要占用相當大的儲存資源,一旦點雲需要儲存或者通過速率受限制的通訊通道進行傳輸,提供針對這種資料的壓縮方法就變得十分有用。pcl 提供了點雲的壓縮功能,它允許編碼壓縮所有...