Reddy Chatterji gazetesinde anlatıldığı gibi faz korelasyonunu kullanarak görüntü kaydı yapmaya çalışıyorum . Benim durumumda, görüntüler ölçeklenebilir ve birbirine göre çevrilebilir.
Göreceli ölçeği bulma algoritması, anladığım kadarıyla, (bkz: kağıttan akış şeması ):
F1 = DFT(I1)
F2 = DFT(I2)
H1 = Highpass(F1)
H2 = Highpass(F2)
L1 = LogPolar(Magnitude(H1))
L2 = LogPolar(Magnitude(H2))
PC = PhaseCorrelate(L1,L2)
PM = norm(PC)
R = IDFT(PhaseCorr/PM)
P = Peak(R)
Scale = LogBase^P[1]
Ölçek bana görünüşte saçma değerler veriyor (görüntüden görüntüye çılgınca farklı ve asla doğru değil).
Ancak ölçeği göz ardı ederek, aynı faz korelasyon yaklaşımı çeviri için iyi çalışır; bu yüzden log-polar dönüşümümle ilgili bir sorunum olduğundan şüpheleniyorum. Çeviri için çözdüğüm bir örnek - soldaki görüntü orijinal ve sağ kırpılmış ve çevrilmiş - çözüm orignalın üstünde gösterilir:
Log-polar dönüşümü için önce polar alana dönüştüm: burada orijinal görüntü, olduğu resim yarıçapı (yarım genişlik) ve , yönünde örnek sayısıdır . Daha sonra günlük polar alanına dönüştürmek için örnek alıyorum: burada tarif edildiği gibi 1 bu nedenle bütün polar alan boyunca uzanacak şekilde.
Log-polar alanda ile örnek görüntüler (göze batan yanlış bir şey olması durumunda):
Son olarak, bu, görüntülerin faz korelasyon adımından önce geçtiği gerçek dönüşümü gösterir (üst, DFT büyüklüğünden sonra yüksek geçiş filtresi, alt, günlük polar uzayındadır):
LogPolar ve PhaseCorrelate yöntemleri olan OpenCV kullanıyorum. PhaseCorrelate, manuel uygulamam gibi, çeviri için doğru cevabı verirken, bu ölçekte yanlış. OpenCV LogPolar veya kendiminkini kullanmak doğruluğu etkilemediğinden, bir şey eksik olmalıyım.
Herhangi bir yardım mutluluk duyacağız.