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

時間 2021-05-06 01:46:45

1樓:

# coding: utf-8

import

cv2def

orb_detect

(image_a

,image_b

):# feature match

orb=

cv2.

ORB_create

()kp1

,des1

=orb

.detectAndCompute

(image_a

,None

)kp2

,des2

=orb

.detectAndCompute

(image_b

,None

)# create BFMatcher objectbf=

cv2.

BFMatcher

(cv2

.NORM_HAMMING

,crossCheck

=True

)# Match descriptors.

matches=bf

.match

(des1

,des2

)# Sort them in the order of their distance.

matches

=sorted

(matches

,key

=lambdax:

x.distance

)# Draw first 10 matches.

img3

=cv2

.drawMatches

(image_a

,kp1

,image_b

,kp2

,matches

[:100

],None

,flags=2

)return

img3

defsift_detect

(img1

,img2

,detector

='surf'

):if

detector

.startswith

('si'

):print

"sift detector......"

sift

=cv2

.xfeatures2d

.SURF_create

()else

:print

"surf detector......"

sift

=cv2

.xfeatures2d

.SURF_create

()# find the keypoints and descriptors with SIFT

kp1,

des1

=sift

.detectAndCompute

(img1

,None

)kp2

,des2

=sift

.detectAndCompute

(img2

,None

)# BFMatcher with default paramsbf=

cv2.

BFMatcher

()matches=bf

.knnMatch

(des1

,des2,k

=2)good=[[

m]form,n

inmatchesifm

.distance

<0.5*n.

distance

]print

"匹配點數量:"

匹配點數量: 13

參考這個,引數自己調整。

2樓:Di Yao

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

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

基於形狀的方法: Frechet, Hausdorff基於分段的方法:One Way Distance, LIP distance

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

附上本人總結的Trajectory Distance slides:

3樓:

4樓:

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

時間翹曲距離(Canonical Warping Distance)

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

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

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

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

A:B:

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

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

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

時間扭曲

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

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

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

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

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

5樓:

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

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

6樓:張華

兩條軌跡是影象還是3D加速度感測器的資料?

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

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

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

7樓:Uncle Leon

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

8樓:「已登出」

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

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

9樓:

本科畢設做過類似的工作,基於加速度感測器的手勢識別,看過乙個方法,用的是旋轉特徵,假設每條曲線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象限這個二元特徵,然後用編輯距離來衡量。。好像是

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

10樓:微笑笑笑

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

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

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

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

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

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

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

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

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

如何在兩條曲線之間上色?

看了一下上面的答案,這裡補充一下Python的matplotlib模組中 fill between 不但可以實現曲線之間的色彩填充,還能夠直接指定在哪些地方進行填充。樓上關於 fill between 的運用是預先設定 boolean 下標來指定具體在哪些地方填充,實際上 fill between ...

如何選擇父母提出的兩條路?

如果是個女生建議選擇第一項,有個穩定的班對於剛畢業的女生來說很重要,最少能滿足你部分的消費,如果公考考上了工作穩定,待遇好,節假日多。如果條件可以配個代步車,上上班,旅旅遊,談談戀愛不要太爽。如果公考失利了,作為乙個女生也不會有太大的壓力,畢竟不要養家餬口。如果是男生我建議選擇第二項自己選擇打工,安...

能否用二次曲線系證明,過極點的兩條割線與曲線交得的四個點組成的四邊形對角線在極點對應的極線上?

Sliark 可以 以下使用齊次座標,並用線性代數符號縮寫過程 設過點 的直線 與二次曲線 交於四個點 交於點 設 方程為 則 退化二次曲線 和 的標準方程可寫作 和 在 和 組成的二次曲線系上,故 的方程可表示為 而 在 關於 的極線上 這件事等價於 這是顯然的 用線性代數符號使得這個問題變得過於...