2011-06-10 65 views
12

我意識到這是一個高度專業化的問題..但是這裏就是這樣。我正在使用SIFT的實現來查找兩個圖像上的匹配。在目前的實現中,當我匹配90或180度版本的圖像時,我會得到一直保持半個像素左右的匹配,但它在一定範圍內變化。因此,例如,如果在im1中的像素座標(x,y)處發現匹配,則其90度旋轉圖像im2中的相應匹配處於(x,y + 0.5)處。如果我使用180度的圖像,那麼偏移量將出現在x和y座標中,並且只有在使用270度(-90)旋轉圖像時纔會出現在x中。David Lowe的SIFT - 關於尺度空間和圖像座標的問題(奇怪的偏移問題)

1)首先,我假設SIFT應該在旋轉的圖像中給我相同的匹配位置。隱含的假設是旋轉不會改變我確認的圖像的像素值是真實的。 (我使用IRFAN View旋轉並保存爲.pgm,像素值保持不變)。

2)我有其他的實現不給這個抵消。

3)我假設這個偏移是編程相關的,並且可能與從尺度空間關鍵點座標到圖像空間關鍵點座標的轉換有關。

我希望有人遇到這個問題,或者可以指出我如何從尺度空間轉換爲圖像空間的參考。

+1

有趣的是,你有任何代碼可以分享嗎? – 2011-06-10 20:52:15

+1

我想你忘了你的問題的'問題'部分... – ildjarn 2011-06-11 02:05:19

+0

這是一個攝像頭圖像還是醫學圖像?您是否需要考慮像素間距? – nav 2011-06-11 08:51:14

回答

4

與米科拉的主張相反,可以從SIFT中獲得規模和方向。 SIFT試圖找到具有最大DOG極值的標度(s),並且還找到了主導方向(r)。對於SIFT特徵的每個位置矢量返回(X,Y,S,R)

要了解如何尺度空間轉換爲像素,嘗試VLFeat的implementation。特別是,使用vl_plotsiftdescriptor來繪製描述符。你可以看到這個實現如何相對於像素進行縮放。要找出其他實現,請在兩種實現中找到相同的功能,並查看比例因子s的不同之處。

2

首先一般性評論:

SIFT只是給你一個x,在像素座標Y位置的功能。它沒有直接告訴你任何關於給定特徵的尺寸或旋轉的設計,實際上它是SIFT的定義特徵,即在這些類型的變換下特徵向量是不變的(即這就是SIFT工作的原因)。 ~~(編輯:這是錯誤的,跆拳道是我在想什麼時,我寫這個?)

0.5像素的偏移量是微不足道的,並且可能有大量的這種差異可能的解釋。一種可能性是這兩種實現使用不同的原點座標;例如一個把原點放在中間,而另一個把它放在一個角落。這可能會影響舍入,這可能會導致報告的像素位置出現0.5的差異。另一種可能性是它們在所使用的旋轉樣品的數量上有所不同;或者也許根據所考慮的數量。改變這些參數中的任何一個都可能會影響觀察到的特徵多達幾個像素。當然,這完全是純粹的猜測,因爲人們必須真正看到實現才能說明任何明確的。

我們可以解決您的更多具體問題:

  1. 這是一個壞的假設。直線採樣的圖像在旋轉下通常不是不變的。即使以90度的倍數旋轉也會導致問題,如果您的SIFT實現採樣的旋轉數不是4的倍數。但是,如果有足夠的樣本,您可以預計它會在附近獲得的正確結果,但它幾乎不會準確(除非在一些非常特殊的退化情況下)。

  2. 你怎麼知道他們給出正確的抵消?它們可能都是相同代碼庫的克隆或端口,可能有類似的錯誤。

  3. 我不知道爲什麼你會期望它是相同的,因爲SIFT依賴於一些內部旋轉因素,這些因素可能因實現而有所不同。

最後,我不確定你的意思是「從尺度空間轉換爲圖像空間」。縮放空間是爲圖像定義的 - 不是點 - 並且縮放空間和圖像空間中的座標之間不存在1:1映射。如果您只是想將比例空間圖像翻譯爲常規圖像,只需採用0比例切片即可。如果您想將圖像轉換爲比例空間表示,請使用一系列不同半徑的高斯進行卷積。