2011-06-10 15 views
12

Bunun çok özel bir soru olduğunu anlıyorum .. ama işte gidiyor. İki görüntüdeki eşleşmeleri bulmak için SIFT uygulamasını kullanıyorum. Sahip olduğum mevcut uygulama ile, bir görüntüyü 90 veya 180 derecelik bir sürümle eşleştirdiğimde, yaklaşık olarak yarım piksele kadar olan, ancak bir aralık içinde değişebilen eşleşmeleri elde ediyorum. Örneğin, eğer bir eşleşme im1'deki piksel koordinatında (x, y) bulunursa, o zaman karşılık gelen eşleşme 90 derecelik im2 görüntüsünde (x, y + 0.5). 180 derecelik bir görüntü kullanırsam, ofset hem x hem de y koordinatlarında görünür ve 270 derecelik (-90) döndürülen bir görüntü kullanırsam yalnızca x'de görünür.David Lowe's SIFT - Ölçek alanı ve görüntü koordinatları ile ilgili soru (tuhaf sapma sorunu)

1) Her şeyden önce, SIFT'nin döndürülmüş bir görüntüde aynı eşleşen konumu vermesi gerektiğini varsayar. Kesin bir varsayım, döndürmenin doğruladığım resmin piksel değerlerini değiştirmemesidir. (Döndürmek ve bir .pgm olarak kaydetmek için IRFAN View kullanıyorum ve piksel değerleri değişmeden kalır).

2) Bu ofseti vermeyen başka uygulamalarım var.

3) Bu ofsetin programlama ile ilgili olduğunu ve büyük olasılıkla ölçek alanı anahtar nokta koordinatlarından görüntü alanı anahtar nokta koordinatına dönüştürülmesi ile ilgili olduğunu varsayıyorum.

Birinin bu sorunla karşılaştığını veya ölçek alanından görüntü boşluğuna nasıl dönüştürüleceğine dair bir referans gösterebileceğini umuyorum.

+1

İlginç, paylaşmak için kodunuz var mı? –

+1

Sanırım sorunun 'soru' bölümünü unuttun ... – ildjarn

+0

Bu bir kamera görüntüsü mü yoksa tıbbi bir görüntü mü? Piksel boşluklarını hesaba katmanız mı gerekiyor? – nav

cevap

4

Mikola'nın iddialarının aksine, SIFT'den ölçek ve yönelim elde etmek mümkündür. SIFT, ölçeği en büyük DOG ekstremitesi (s) ile bulmaya çalışır ve aynı zamanda baskın bir yönelimi de (r) bulur. Bir SIFT özelliği Her bir konum vektörü

ölçekli alan piksel dönüştürür nasıl olduğunu görmek için (x, y, s, r) VLFeat en implementation deneyin geri döner. Özellikle, tanımlayıcıları çizmek için vl_plotsiftdescriptor'u kullanın. Bu uygulama için piksellere göre s ölçeklerinin nasıl göründüğünü görebilirsiniz. Diğer uygulamaları anlamak için, her iki uygulamada da aynı özelliği bulun ve ölçek faktörünün s farkının nasıl olduğunu görün.

2

İlk genel bir yorum:

SIFT sadece x, piksel koordinatları y konumları ile özellikleri verir. Bu, belirli bir özelliğin tasarımla doğrudan ya da döndürülmesiyle ilgili hiçbir şey söylemez ve aslında SIFT'in belirleyici özelliği, özellik vektörünün bu tür dönüşümler altında değişmez olmasıdır (yani SIFT'nin çalışması budur). ~~ (DÜZENLEME: bu özelliktir yazdığında, WTF düşünüyordum yanlış?) bir 0,5 piksel ofset

önemsiz olduğunu ve bu farkı olası birkaç açıklaması büyük olabilir. Bir ihtimal, iki uygulamanın farklı bir kökeni kullanmasıdır; örneğin bir tanesi kökü ortasına koyarken diğeri bir köşeye koyar. Bu, bildirilen piksel konumlarında 0,5'lik bir fark oluşturabilecek yuvarlamayı etkileyebilir. Diğer bir olasılık ise, kullanılan rotasyon numunelerinin sayısına göre farklılık göstermeleridir; veya belki de düşünülen ölçeklerin sayısına göre. Bu parametrelerin herhangi birinin değiştirilmesi, gözlenen özelliği birkaç piksel kadar etkileyebilir. Elbette, bu tamamen bir spekülasyon, çünkü gerçekte uygulamayı kesin bir şey söyleyecek şekilde görmek zorunda kalacaktı.

Şimdi daha spesifik endişelerini gidermek için:

  1. Bu kötü bir varsayımdır. Doğrusal olarak örneklenmiş görüntüler rotasyonlar altında genel değişmez değildir. 90 derecelik katlar tarafından bile döndürme, SIFT uygulamanızın, 4'ün katları olmayan bir dizi dönüşü örneklemesi durumunda sorunlara yol açabilir. Ancak, yeterli sayıda örnekle, doğru sonuca ulaşmasını bekleyebilirsiniz, ancak hemen hemen hiç kesin (bazı çok özel dejenere durumlar hariç).

  2. Doğru ofseti verdiklerini nereden biliyorsunuz? Hepsi aynı kod tabanının klonları veya portları olabilir ve benzer hatalara sahip olabilirler.

  3. SIFT, uygulamaların arasında değişebilen bazı içsel twiddle faktörlerine dayandığından, neden aynı olmasını beklediğinizi bilmiyorum.

Son olarak, "görsel-uzaya ölçek uzaydan dönüştürmek" ile ne demek emin değilim. Ölçekler, görüntüler için değil, noktalar olarak tanımlanır - ölçek alanı ve görüntü uzayı içindeki koordinatlar arasında 1: 1 haritalama yoktur. Bir ölçek uzay resmini normal bir görüntüye dönüştürmek istiyorsanız, sadece 0 ölçek dilimini kullanın. Bir görüntüyü ölçek alanı temsiline dönüştürmek istiyorsanız, onu çeşitli yarıçaplardan oluşan bir grup Gaussian ile çevirin.

İlgili konular