DFT kullanarak alt piksel görüntü kaydırma gerçekten nasıl çalışır?


12

Alt piksel kaydırılmış görüntüler oluşturmayı içeren bir uygulama için birkaç görüntü enterpolasyon yönteminin kalitesini değerlendirmeye çalışıyorum. Tüm bu enterpolasyon varyantlarını mükemmel kaydırılmış bir görüntü ile kullanarak bir alt piksel kaymasının sonuçlarını karşılaştırabileceğimi düşündüm, ancak muhtemelen bunu elde etmek mümkün değildir (o zaman enterpolasyona ne gerek olurdu?).

Frekans alanında DFT + kaydırmayı kullanmayı düşünüyordum ve görüntüyü açıkça enterpolasyona kıyasla (nasıl bilinear, bicubic vb. Kullanarak) aslında nasıl çalıştığından emin değilim. Eminim mükemmel bir şekilde kaydırılmış bir görüntü oluşturamaz , ancak parmağımı üzerine koyamam. Alt piksel DFT ile kaydırma enterpolasyon uygulanmasına eşdeğer midir ve eğer öyleyse hangisi? Bu yöntem kullanılarak elde edilen görüntülerdeki piksel değerlerinin sapması nedir? Teşekkürler!

DÜZENLEME: Konuyu düşündükten sonra, FFT'nin harmonikler (sinüs fonksiyonları) açısından orijinal fonksiyonun bir yaklaşımı (daha da çok DFT) olduğundan, bir çeşit trigonometrik enterpolasyon anlamına geleceğini düşündüm. Trigonometrik enterpolasyon olan ayrık veriler için "Fourier serisi enterpolasyon" formülünü hatırlıyorum, ancak bağlı olup olmadığından emin değilim.


Hızlı Fourier dönüşümü (FFT), ayrık Fourier dönüşümü için bir algoritmadır. DFT, harmonikler açısından orijinal fonksiyonun bir yaklaşımı değil, bir sinyalin karmaşık bir üstel dikgen temele yansıtılmasıdır.
Bryan

Tamam, ancak sinyalin kendisi, bazı yoğunluk dağılımının örneklenmiş ve nicelenmiş bir yaklaşımıdır ve DFT, bu teorik dağılıma kıyasla harmonik içeriğe göre sınırlıdır. Tam sinyali IDFT'den geri alabilirsiniz, ancak geri IDFT'lemeden önce ona bir şeyler yaparsanız (kaydırma gibi) bazı önyargılar olacaktır. Yoksa bir şey mi kaçırıyorum?
neuviemeporte

DFT gerçekten de ayrıklaştırılmış girişler alır, ancak nicelenmiş girdilerle sınırlı değildir. Sinyalin ne olduğu önemli değil. İşaret ettiğiniz gibi, tam sinyali geri alabilirsiniz. Ancak, "kaydırarak" ne demek istediğinizden emin değilim. Frekans alanında kaymanın özellikleri iyi bilinmektedir (zaman alanında karmaşık frekans çevirisi). Arzunuz "zaman" alanına kaymaksa, bunun DFT ikilisini düşünmeniz gerekir.
Bryan

1
Diyelim ki bir sinyalin DFT'si üzerinde bir işlem yaparsam (benim durumumda olduğu gibi - Fourier kaydırma teoremini kullanarak "piksel alanında" bir görüntünün alt piksel kaydırması), IDFT @ hotpaw2'nin açıkladığı gibi enterpolasyonlu sonuçlar döndürür Cevap. Bu enterpolasyon kusurludur çünkü sinyal sınırsız değildir ve DFT'nin kendisi, sonlu nicel (0-255) örnek kümesinden hesaplanmıştır.
neuviemeporte

Yanıtlar:


4

Bir DFT / FFT, artı frekans alanına sıfır dolgu ekledikten sonra daha uzun bir IDFT / IFFT, enterpolasyonlu noktalar döndürür. Bu noktalar, orijinal örnekleme hızının yarısının altında kesinlikle bantla sınırlı orijinal veriler için mükemmel bir enterpolasyon olan periyodik bir Sinc çekirdeği kullanılarak enterpolasyon yapılacaktır. Bununla birlikte, veriler dairesel olarak sarılmış gibi hareket edecek ve bu da bazı görüntülerin kenarlarında garip sonuçlar doğurabilir. Bu nedenle, enterpolasyondan önce orijinal kaynağın kenarlarını güzel bir dolgu veya çerçeveleme rengiyle doldurmak isteyebilirsiniz.

2X kadar örneklendirirseniz (IFFT'den önceki uzunluğu iki katına çıkarmak için FFT'yi sıfırla doldurun), enterpolasyonlu noktaları kullanarak yarım piksel kaydırma yapabilirsiniz. Üçüncü piksel kayması için 3X, vb. Kaydırma için, istenen boyutu elde etmek için orijinal noktaları artı fazla enterpolasyonlu noktaları atabilirsiniz.


5
@ hotpaw2: DFT için enterpolasyonlu çekirdek sonsuz ölçüde bir içsel () değildir, aslında DFT ayrık, sonlu bir dönüşümdür. DFT tarafından enterpolasyon, bazı yazarlar tarafından periyodik sinc () olarak da adlandırılan Dirichlet çekirdeği ile evrime eşdeğerdir : en.wikipedia.org/wiki/Dirichlet_kernel
Arrigo

@Arrigo: Kabul et. Düzeltmek için cevap düzenlendi.
hotpaw2

@ hotpaw2: FFT'yi iki kat büyüklüğüne yerleştirdiğimde, IFFT iki kat büyüklüğünde bir rekonstrüksiyon verecektir. Artı ile ne yapacağınızdan emin değil misiniz? Thanks
neuviemeporte

İhtiyacınız olmayan fazlalık noktaları atın. 2X'lik bir örnekte, yeniden yapılandırılmış orijinal noktalarla dönüşümlü olarak, her biri kaydırılır. 3X'lik bir örnekte, orijinallerle dönüşümlü olarak 2 kaydırılmış nokta (1/3 ve 2/3 oranında) elde edersiniz. Vb. Ne kadar çok örnek alırsanız, o kadar fazla fırlatıyorsunuz.
hotpaw2

7

DFT'nin bir görüntüyü kaydırmanıza nasıl izin verdiğini anlamak için ihtiyacınız olan birkaç temel bilgi vardır.

Birincisi, Fourier teoremi: Önce sürekli (yani analog) duruma bakmak muhtemelen daha kolaydır. Bazı fonksiyonlarınız olduğunu düşünün, ona g (t) deyin. Basitlik için, diyelim ki g (t) bir analog ses kaydıdır, bu yüzden sürekli olan ve zamanın bir fonksiyonu olarak anlık basıncı temsil eden tek boyutlu bir fonksiyondur.

Şimdi, g (t) ses kaydımızı temsil edebilmemizin bir yoludur. Diğeri G (f). G (f), g (t) 'nin Fourier dönüşümüdür. Böylece, G (f) == FT (g (t)). G (f), g (t) ile aynı bilgilere sahiptir, ancak bu bilgiyi zaman alanı yerine frekans alanında temsil eder. Fourier Dönüşümleri hakkında bahsetmeyeceğim bazı nit seçici detaylar var.

G (f) 'yi g (t)' de yer alan "frekansların dağılımı" olarak düşünebilirsiniz. Eğer g (t) bir sinüs dalgası (yani saf bir ton) ise, bu tonun frekansı hariç G (f) her yerde sıfır olacaktır. Bu muhtemelen G (f) 'nin genel olarak karmaşık bir işlev olduğunu belirtmek için iyi bir noktadır - yani gerçek ve hayali bir bileşene veya bir büyüklüğe ve faza sahip olduğu düşünülebilecek karmaşık sayılar döndürdüğü anlamına gelir.

δ(w)δ

Tamam, şimdi kemerin altında sürekli FT'ler var.

İşte ikinci görüş: Ayrık Fourier Dönüşümü, örneklenmiş sinyal analog sinyale olduğu gibi Fourier Dönüşümüdür. Bu durumda, "kesikli", işlevin etki alanının (zaman veya frekans) miktarını belirtir, aralık değildir. (Ses kartınızdan aldığınız örneklenmiş dijital sinyal, hem alan adında hem de aralıkta nicelendirilir.)

Ses kartınızdan aldığınız dijital bayt akışı, mikrofondan gelen orijinal sürekli (analog) sinyalin "örneklerini" içerir. Örneklenmiş g (t) 'nin DFT'sini alırsak, yine de bir G (f) elde ederiz. G (f), hatırlayın, g (t) 'de yer alan bilgileri temsil etmenin farklı bir yoludur. Biz itaat Eğer Nyquist teorum eden kesikli G (f) asıl sürekli bir sinyal ile ilgili tüm bilgileri içermelidir, yani örneklenen sinyali analiz etme, g (t), ilk sürekli bir sinyal her "akıllı" içerir. Parantez içinde, G (f) hala karmaşık bir fonksiyondur.

Bu, alt piksel kaydırmanın büyüsünün devreye girdiği yerdir, ancak bu durumda ses sinyalini zaman içinde bir örnekten daha az kaydırmak hakkında yazacağım, çünkü aynı şey.

ebenπ2

Bu , G (t) fazını değiştirerek ses kaydımızı zaman içinde ( örnek süresinin bir kısmı da dahil olmak üzere seçtiğimiz herhangi bir miktarda) değiştirebileceğimiz anlamına gelir . Aslında, bu ifade belki de biraz sıradan. Nicemlenmemiş, örneklenmiş bir sinyal için faz keyfi olarak ayarlanabilir (bu, daha önce alanın niceliği ve aralığının nicelenmesi arasındaki ayrımı yapma nedenimin bir parçasıdır). Bununla birlikte, nicelenmiş örneklenmiş bir sinyal için (örneğin, bayt ses akışımız) niceleme adım boyutu (yani bit sayısı), fazı ayarlayabileceğimiz çözünürlüğü belirler. Ters Fourier Dönüşümü G (f) (veya bu örneklenmiş sinyal için DIFT), yeni g '(t) = DIFT (G (F)) örnek kümesinin tamamı, seçtiğimiz miktar kadar zaman içinde değişecektir.

Bunu piksellerinize uygulamak, burada tartışılan 1 boyutlu FT yerine 2 boyutlu bir FT kullanmak anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.