簡體   English   中英

用於2d路徑比較的Java庫

[英]Java library for 2d path comparison

我有一條2d線(它可以是曲線,帶有環等),還有多條相似的路徑。 我想比較第一條路徑與其余路徑,並確定哪條路徑最相似(如果可能,以百分比表示)。

我想可能會將路徑轉換為位圖,然后使用庫來比較位圖,但這似乎有點過分。 就我而言,我只有一條不間斷的路徑,由點組成,沒有不同的顏色或任何東西。

誰能幫我?

編輯:

所以第一行是黑色的。 我比較所有其他線條。 我想要一個庫或算法可以說:紅線准確度為90%(因為它的形狀幾乎相同,並且接近黑色); 藍線准確度為5% - 此百分比由此示例組成...... - 因為它具有相似的形狀,但它更小並且不接近黑色路徑。

所以相似的標准是:

  • 這些線條彼此之間有多接近
  • 他們有什么樣的形狀
  • 它們有多大

(顏色無所謂)

我知道找不到考慮所有這一切的圖書館是不可能的。 但最重要的比較應該是:它們的形狀和大小是否相同? 我可以自己計算的距離。 在此輸入圖像描述

我可以想到兩種措施來表示兩條線N(定義為點p0,p1 ...... pr之間的直線段)M(在q0,q1,... qs之間具有直線段)之間的相似性。 我假設p0和q0總是比p0和qs更接近。

1)區域

使用N和M之間包含的區域的總和,其中N和M隨着區域變大而更加不同。 要使N和M形成閉合形狀,您應該將p0和q0以及pr和qs與直線段連接起來。 為了能夠計算封閉區域的表面,在N和M的分段之間的交叉處引入新點,以便獲得一個或多個沒有孔或自交叉的簡單多邊形。 這樣一個多邊形的區域相對比較簡單(在網上搜索“多邊形區域計算”),對區域求和,你有(dis)相似度。

2)抽樣

取一個位於N上的預定數量(例如1000)的采樣點O(相對於整條線均勻間隔,或者在N的每個線段上均勻間隔)。 對於O中的每個采樣點o,我們將計算到M上最接近的對應點的距離:結果是這些距離的總和。 接下來,反轉角色:從M獲取采樣點並計算N上每個最接近的對應點,並將它們的距離相加。 這兩者中的哪一個產生最小的總和(它們可能不相同!)是(dis)相似性的度量。
注意 :要找到M上最近的對應點,請找到M中每個直線段的最近點(這是簡單代數,谷歌是“點和直線段之間的最短距離”)。 使用與o距離最小的段的結果。

對照

方法1需要幾個幾何圖元(點,線段,多邊形)和對它們的操作(例如計算交點和多邊形區域),以便實現。 這是更多的工作,但產生更強大的結果,並且更容易針對由許多線段組成的線進行優化。

方法2要求選擇“正確”數量的樣本點,如果線條具有細節較少的交替部分和具有大量細節的部分(即許多線段緊密結合在一起),則可能很難,並且其實施可能很快使用大量采樣點得到(非常)慢(將每個采樣點與每個線段匹配是一個二次運算)。 從好的方面來說,它不需要大量的幾何操作,並且相對容易實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM