2010-07-01 95 views
1

我從圖像獲取數據測量。我的意思是輪廓掃描數據。 (沿着一條線拍攝的圖像強度值) 而我想要的是從另一幅圖像的行中獲取數據並將它們進行比較。 我想知道他們是否相似。 例如,我得到:如何比較兩個波形數據?

int data1[N]; 
int data2[N]; 

我想比較它們。如果它們不相似,我想知道這些數據中最長的部分,它們是相似的。例如,如果我們從0到N - 1, 的索引來查看數據1和數據2,但它們可能在索引100 ... N - 56處它們幾乎相同,可能會發生這種情況。 通過相似性我的意思是:如果我們以wave的形式表示data1和data2,那麼相似性意味着它們表現幾乎相同,但有時可能會有所不同。我的意思是波浪的形式幾乎相似。

回答

1

顯然確切的實施將是東西比我在下面說明更復雜,但也許它會提供一個出發點:

既然你正在談論的圖像亮度,可以適當正常化兩套的原始強度數據。 (這樣,您應該能夠識別data1始終爲data2值的三分之二的東西)。我可能會先將(例如)100的值指定給源圖像的最強烈部分,並將0最不強烈 - 調整所有其他值以適應該比例。

對數據進行歸一化處理後,下一步可能與使用一些簡單比較(例如Abs(data1[n] - data2[n]) < SomeThreshold)通過歸一化數組迭代一樣簡單。每次比較通過增加「匹配長度」。如果匹配長度爲零,您可能還需要設置「起始索引」變量。當比較失敗時,更新「最佳匹配」信息,然後將「長度」計數器重置爲零。

我會推薦使換出比較函數變得容易。我不確定,但如果你想要做某種類型的圖像匹配,我不會感到驚訝,如果你必須使用更復雜的比較機制(例如,你可能需要閾值「漂移」例如,如果基本圖像相同,但其中一個已經過後處理以使一面比原始面更亮)。

+0

我照你所說的做了,但問題是閾值在圖像間不同。甚至可能在不同的掃描線上有所不同。 它不能設置爲唯一值。 – erjik 2010-07-01 05:18:27

+0

啊!我誤解了你原來的問題,並認爲你只對掃描線的一個子集感興趣(例如,你試圖通過比較每個(例如)第10行和/或列的比較來更快地比較圖像。你正試圖比較整個圖像,然後你需要正常化這兩個圖像 我不驚訝的閾值不能設置爲一個簡單的值 - 正如我在最後一段中提到的,根據您的需要,您可能會(顯然是這樣)需要更復雜的東西 – 2010-07-01 12:13:22

+0

我提出的簡單閾值的主要問題是,如果你試圖比較的所有圖像都具有相似的動態範圍,那麼它纔會起作用,如果情況並非如此,但您仍想使用一個簡單的閾值,您可能需要根據其中一個圖像的動態範圍(例如[最大強度 - 最小強度]的3%)來初始化閾值 順便說一句......如果圖像2部分旋轉或不同大小,我描述的機制將無法正常工作。如果是這種情況,您可能需要某種基於特徵的比較。 – 2010-07-01 12:27:07