如何計算兩片點云的歐氏距離
假設(shè)第一片點云為
第二
因為點云在計算中一般使用批處理(batching),所以不妨假設(shè)兩片點云的分別被分成了兩批次.請注意如果將點云分為兩個批次進行處理,那么在每個批次中,只會計算該批次內(nèi)的點云之間的距離。這意味著第一個批次中的點云與第二個批次中的點云之間的距離不會被計算。
對于點云數(shù)據(jù)這樣的張量,
其形狀 [B, N, C],
B - 批次大?。˙atch Size),N - 點的數(shù)量,C - 坐標(biāo)或特征的維度
為了計算每個點與另一個點集中的每個點之間的歐幾里得距離的平方,我們已經(jīng)知道,歐幾里得距離的平方公式是:
所以將距離公式分為三部分(各自平方和以及乘積)
1,首先使用矩陣乘法將兩片點云([B, N, C]
?和?[B, C, M]
)相乘,但為使它們能夠相乘,必須對其中一片點云進行轉(zhuǎn)置(將第二片點云轉(zhuǎn)置為[B, M, C])
2,然后在進行矩陣相乘,并且在相乘的情況下再乘-2.
3,計算每個點的坐標(biāo)的平方和。這意味著我們?nèi)∶總€點的x、y、z坐標(biāo),分別平方它們,然后將它們加在一起。
這是由于PyTorch(以及其他像NumPy這樣的庫)中的廣播機制。廣播允許在形狀不完全匹配的張量上執(zhí)行元素級操作。
要理解廣播,有幾個基本的原則:
如果兩個張量的維度數(shù)不同,小維度張量的形狀會在最左邊用1補齊。
在任何維度上,大小為1的維度會被拉伸或復(fù)制以匹配另一個張量的大小。
如果在任何維度上兩個張量的大小不匹配且其中一個張量在該維度上的大小不為1,將引發(fā)錯誤。
考慮我們的情況:
dist_part1形狀為
[B, N, M]
dist_part2形狀為?
[B, N, 1]
dist_part3形狀為
[B, 1, M]
在這種情況下:
對于第一個維度
B
,兩個張量的大小都是B
,所以沒有問題。對于第二個維度,dist_part2的大小為
N
,而dist_part3的大小為 1。由于dist_part3在這個維度的大小為1,它會被復(fù)制
N
次以匹配dist_part2
。對于第三個維度,dist_part2的大小為 1,而 dist_part3的大小為
M
。同樣,由于dist_part2 在這個維度的大小為1,它會被復(fù)制M
次以匹配dist_part3
。
因此,當(dāng)這三個張量相加時,每個張量都擴展到 [B, N, M]
的形狀,并執(zhí)行元素級加法。
這就是為什么結(jié)果自動變?yōu)?[B, N, M]
形狀的原因。
以上即為兩片點云分兩批次,單獨批次計算每個點云間的歐氏距離的結(jié)果.
