如何判斷兩條軌跡(或曲線)的相似度?

比如上圖,雖然它們的重合度不高,但是它們的結構是一樣的,應當認為它們是很相似的,請問如何量化的判斷呢?有什麼好的演算法?


有這麼個距離度量...叫

時間翹曲距離(Canonical Warping Distance)

一個點集經過平移,旋轉,放縮後得到的點集與原來的點集的距離為0(時間翹曲意義下).

也就是具有平移不變性,旋轉不變性,標度不變性

--------------------------------------------------------------------------------

雖然這個名字取得很科幻,但是思想很簡單

從1維情況說起:有兩個時間序列比如:

A:{1, 2, 3, 5, 8, 13, 21, 34, 55, 89}

B:{0, 1, 1, 2, 3, 5, 8, 13, 21, 34}

從歐幾里得距離上看不知差到哪邊去了

但是實際上這兩個曲線極其相似(本來就是同一個)...

什麼情況下這兩個時間序列才能相似呢?

時間扭曲

A從1-5花了3時間,B花了5時間..

所以只要扭曲下A在t=1-3時的時間標度就能對齊了!

一維情景大概相當於語音識別中用到的DTW(DynamicTimeWarping)動態時間規劃演算法,用於判斷不同音長,不用音高,不同音調的聲音是否是同一個音節...

二維情景複雜得多,不過也類似看成存在一種時空扭曲使得兩個點集相似就行了...

當然也能作用於更高維度...


謝瑤。。。 @Macrofuns果然驗證了你沒有看我paper的method。。。

做過一個小研究是關於判斷曲線的相似性的,點贊答案1已經基本上解決了題主的問題。使用歸一化後的Fréchet
distance即可。另外也可使用Hausdorff distance,但是使用效果不如前者。

推薦幾篇論文僅供參考:

Alt H, Godau M (1995) Computing the Fréchet
distance between two polygonal curves International Journal of Computational
Geometry Applications 5:75-91. doi:10.1142/S0218195995000064

Fréchet MM (1906) Sur quelques points du
calcul fonctionnel Rendiconti del Circolo Matematico di Palermo (1884-1940)
22:1-72. doi:10.1007/BF03018603

此外,可以使用離散化的方法使用Fréchet distance,以便於實際編程計算,同推薦一篇離散化的文章供參考,裡面有該方法的偽代碼,另matlab也有現成的package,搜搜即可。

Eiter T, Mannila H (1994) Computing discrete
Fréchet distance See Also

最後推薦一個應用該方法的實例,為了解決Fréchet distance中閾值的問題對其進行了標準化從而得到一個相似指數。

Wang J, Xu C, Tong S, Chen H, Yang W (2013)
Spatial dynamic patterns of hand-foot-mouth disease in the People"s Republic of
China Geospatial health 7:381-390

了解有限,對於該方法的代碼實現問題我也存在疑慮,如有問題和了解歡迎探討。


可以使用Fréchet distance 特別是如果你已經有了trajectory.

當然了不會是純粹的Fréchet distance. 要先normalize一下再使用...


判斷兩條軌跡的相似性方法有很多

基於點方法: EDR,LCSS,DTW等

基於形狀的方法: Frechet, Hausdorff

基於分段的方法:One Way Distance, LIP distance

基於特定任務的方法:TRACLUS, Road Network,grid等

附上本人總結的Trajectory Distance slides:


兩條軌跡是圖像還是3D加速度感測器的數據?

圖像的話通常做法是歸一化、提取圖像特徵,然後計算圖像距離,這個距離不是基於拓撲的,

但是通常使用效果非常好。

3D加速度感測器的數據就可以按照拓撲分類。也是通過距離。


基礎是圓弧的相似的判斷。


卷積神經網路 LeNet5

LeCun教授的很多論文是做這個的

1998-Gradient-based learning applied to document recognition


你的軌跡data是什麼樣的?比如每條軌跡由多少個離散的點構成,然後畫出來這條軌跡,這樣的話可以用procrustes distance來計算相似度,從變化角度的方面考慮,當然也可以加入cosine similarity,自己簡單的做個linear的加權。。


本科畢設做過類似的工作,基於加速度感測器的手勢識別,看過一個方法,用的是旋轉特徵,假設每條曲線n個點的坐標你有了,兩兩相連,你就有了n-1條線段了,每兩條線段之間做叉乘,根據正負你就知道線段之間的旋轉趨勢了,共有n-2個值,然後再讓正值為1負值為-1就有了n-2個1,-1串,比如有兩段線段,你算出來分別是:

1,1,1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,-1

1,1,1,1,-1,-1,1,1,-1-1

然後你在想辦法衡量這兩個的相似性。。。

以前看的那篇文獻中好像標記的特徵是從第i象限轉向第j象限這個二元特徵{i,j},然後用編輯距離來衡量。。好像是

我自己的研究最後用的是DTW,動態時間規整,可以衡量兩端持續時間不一樣的曲線的相似性的演算法,前提是你特徵要選的好。。


或許可以參照簽名驗證的方法,通過訓練Siamese Network來學習一個距離度量,或者嘗試一下其他的度量學習(Metric Learning)的方法。

圖片摘自論文:Signature verification using a 「Siamese」 time delay neural network


類聚問題和模式識別問題會講到。

不知道別人會怎麼處理:我的方式是曲線離散化,然後通過計算Hausdor distance評價其匹配度。當然參數設置可能引起評價結果的不同,但是只要能將相似的圖形從一大堆圖形庫中跳出來,目的就達到了。


目前還不是專業的

但是從非專業角度來看看

題主想問的是拓撲結構相似?還是變化趨勢相似?

如果是拓撲結構相似的話,可以試試把端點和交點標記出來,環點特殊標記,然後對應著去比較,至於相似程度可以用最大連續相同拓撲結點數目來衡量。(例如每個點對應一個向量(是否端點,是否環點,鄰接點個數,上級鄰接點向量,下級鄰接點向量),然後依次比較)

如果是變化趨勢相似的話,可以試試用同一組平行線去切割兩個曲線,從而得到兩組點,然後比較這兩組點構成的拓撲結構的相似程度,最後綜合用於切割的平行線的密度來判斷相似程度。


Shape context is enough.

Ref: https://en.m.wikipedia.org/wiki/Shape_context


先給個定義


專業細節方面不懂,只是單純開腦洞,砸個磚頭等玉ヽ(  ̄д ̄;)ノ

所謂的比較結構……我就理解成題主是想要比較線條的走向,但是忽略線條的長度吧?

如果是比較兩個函數,那麼可以考慮比較特定區間的斜率增與減和x/y的變化量

手機沒辦法po圖,如果表述不清……我努力改(#?Д?)

就說樓主說的這個圖吧,很明顯這不是個函數,但是可以將它拆成複數個函數來看

比如那個圈圈之前的部分比較一次,圈圈的下半部分比較一次,以此類推,最後將它量化

只適用於矢量圖像,別的情況可以參考google的以圖搜圖,如果是用於手寫的話還可以將筆畫的順序算入量化計算

具體細節就別問惹,我不懂[○?『Д′?○]

已經做好了被點沒有幫助的準備了


推薦閱讀:

如何證明三角形兩邊之和大於第三邊?
U3d開發中大部分事件都是用數學進行計算判定的嗎?
為什麼對球的體積公式進行求導會得到球的表面積公式?
為什麼星系的邊緣會「翹」起來?
什麼是包絡線?包絡線又是如何繪製的?

TAG:遊戲開發 | 演算法 | 數學 | 幾何學 | 拓撲學 |