Skip navigation

Fourier transzformáció, frekvenciaszűrők

Transzformációs kódolások

A korábbi anyagokban láttuk, hogy egy képfeldolgozó művelet lehet:

  • pont-operáció, amennyiben az eredménykép képpontjának értéke csak a bemeneti kép adott koordinátáján található képpont értékétől függ;
  • lokális művelet, ha az eredmény képpont értékének számításához figyelmbe vesszük egy lokális környezetében található képpontok értékét.

Transzformáció kódoláson olyan műveleteket értünk, amelyek esetén egy kimeneti képpont értékének számításához a teljes bemeneti kép képpont értékeit felhasználjuk. Ez felfogható úgy is, hogy a képmátrix minden képpont értéke egy bázisképet generál, és ezen bázisképek súlyozott összegeként állítjuk elő az eredményképet.

A képfeldolgozában többféle transzformáció kódolással is találkozhatunk.

  • A diszkrét koszinus transzformáció (DCT) az alapja a JPEG képformátum veszteséges tömörítésének.
  • A Walsh-Hadamard transzformáció, illetve különféle wavelet transzformációk használatosak egyes videótömörítő eljárásokban.
  • A Fourier transzformáció általánosan használt 1- és többdimenziós jelek frekvenciaanalíziséhez.

Ebben a fejezetben a Fourier transzformáció képfeldolgozásban betöltött szerepére látunk alkalmazási példákat.

Komplex számok

A Fourier transzformáció komplex számokkal dolgozik. A komplex számok a valós számok kiterjesztései. Ha a valós számokat egy 1D tengely elemeiként képzeljük el, akkor a komplex számok egy síkot feszítenek ki. A komplex számokról magyar nyelvű bevezetőt ezen az oldalon találunk:

A komplex számok algebrai és trigonometriai alakjának, alapműveleteinek, és a komplex konjugált fogalmának ismeretére lesz szükségünk.

Fontos arra is figyelnünk, hogy a komplex számokat a Numpy és az OpenCV máshogy reprezentálja! Célszerű emiatt csak OpenCV Fourier függvényeket hívnunk, ne keverjük Numpy változatokkal!

Diszkrét Fourier transzformáció

Mivel a számítógépen reprezentált digitális raszterképek diszkrét rácson mintavételezettek és diszkrét értéktartományra kvantáltak, ezért a 2D diszkrét Fourier transzformációra lesz szükségünk.

A transzformáció szinuszoid függvények súlyozott összegére bontja a bemeneti képet. Pontosabban, az eredménye az eredeti képmátrixszal megegyező új diszkrét képmátrix lesz, amelynek az értékei egy-egy szinuszoid függvénynek a kép előállításában játszott szerepének megfelelő súlyát tartalmazzák. Látni fogjuk, hogy az origótól távolodva egyre nagyobb frekvenciájú szinuszoid hullám súlyát találjuk, ezért a DFT eredményt frekvenciatérnek is hívjuk.

A 2D diszkrét Fourier transzformáció (DFT) használatához az alábbi fő lépésekre lesz szükségünk.

  • Az OpenCV-ben a DFT hatékony megvalósítását adó gyors Fourier transzformáció (FFT Fast Fourier Transform) csak meghatározott képmérettel működik. Ha bemeneti képünk ennek nem felel meg, akkor ki kell terjesztenünk a méretét. Az esetleges új sorokat és oszlopokat 0 értékkel töltsük fel.
  • A DFT számításhoz a képünket [0, 1] tartományú float típussá kell alakítanunk.
  • A DFT eredménye egy komplex mátrix lesz. OpenCV esetén egy kétcsatornás képmátrixot kapunk. A [0] csatorna a valós, az [1] a képzetes rész.
  • DFT esetén megegyezés szerint a kép középpontja az origó. Normál kép esetén az origó a bal felső sarok. Emiatt megjelenítéshez a képnegyedek átrendezése szükséges!
  • Mivel a Fourier eredmény a középponttól távolodva rendszerint nagymértékben csökken, ezért megjeleníteni a komplex kép magnitúdójának logaritmusát szokták: log(1 + magn(DFT(I))). Magnitúdó: valós és képzetes érték négyzetösszegéből vont négyzetgyök (= távolság az origótól a komplex számsíkon).
  • Az eredményül kapott komplex (frekvencia)mátrix elemein valamilyen módosítást végzünk, ami a képi megjelenésre hatással lesz.
  • A képtérbe az inverz 2D diszkrét Fourier transzformáció alkalmazásával jutunk. Ezt megelőzően a síknegyedeket vissza kell alakítanunk a bal felső sarok origóhoz! A képi eredmény az inverz DFT [0], vagyis a valós csatornája lesz. Utána pedig ki kell vágnunk az eredményből az eredeti képméretnek megfelelő bal felső részt.

A Fourier transzformáció további jellemzői.

  • A DFT eredményeként az origóban a kép összintegrálját (az összes képpont értékének összegét) kapjuk, ami valós érték, képzetes része 0.
  • Valós képmátrix DFT-je úgynevezett komplex konjugált szimmetrikus lesz. Ez azt jelenti, hogy az origóra szimmetrikus értékek valós része egyenlő, képzetes része pedig ellentétes előjelű, de egyenlő abszolút értékű.
  • Az ilyen komplex konugált szimmetrikus tulajdonságú frekvencia mátrixok inverz DFT-je valós eredményt ad, képzetes rész nélkül. Képfeldolgozó műveletek esetén a DFT eredmény módosításakor megtartjuk ezt a tulajdonságot.

Fourier transzformáció alkalmazási lehetőségei a képfeldolgozásban

A DFT eredményén könnyen tudunk frakvenciaszűréseket végezni.

  • Az origó egy megadott méretű, kör alakú környezetében megtartott, a távolabbi értékek kinullázása aluláteresztő szűrést ad, vagyis a képből eltávolítjuk a magas frekcenciás komponenseket, csak az alacsonyakat tartjuk meg. Látjuk majd, hogy a magas frakcenciás komponensek a nagy kontrasztú élek előállításáért felelnek, vagyis így simítást végezhetünk a képen.
  • A felüláteresztő szűréssel az alacsony frekcenciás komponensektől szabadulhatunk meg, a kép éleinek kiemelésére.
  • A sáváteresztő szűrő csak egy megadott frekvenciatartományt tart meg.

Képen megjelenő periódikus zaj kezelése.

A DFT eredménye használható dekonvolúcióra.

Kihasználhatjuk a konvolúciós tétel következményét.

  • A képtérben végzett konvolúció ekvivalens a frekvenciatérben végrehajtott elemenkénti szorzás eredményével.
  • Ez azt jelenti, hogy ha nagy méretű konvolúciós maszkkal kell dolgoznunk, akkor hatékonyabb lehet a képet és a maszkot DFT-vel frekvenciatérbe transzformálni, ott elvégezni a képpontok szorzását, és inverz DFT-vel visszatérni képtérbe.