21. januára 2020
Gibbsov jav

Gibbsov jav a kompresia obrázkov

Spomínate si ešte na dobu, keď na internete kolovali fotky, ktoré podliehali ťažkej kompresii, aby nám ušetrili vtedy drahocenné dáta? Pamätáte si, ako zvláštne vyzerali oblasti v okolí kontrastov na týchto fotkách? Možno vás prekvapí, že aj toto, okrem iných vecí, súvisí so spracovaním signálu.

Gibbsov jav je vlastne artefakt, keď meraná veličina má v dôsledku oscilácií prestrelené hodnoty v blízkosti výrazných kontrastov alebo skokov. V prípade obrázka to je intenzita farby, v prípade zvuku alebo elektromagnetického signálu je to amplitúda. Prečo ale vzniká? Odpoveď na otázku spočíva v tom, že funkciu (aj signál je funkcia) rozkladáme do tzv. Fourierovho radu – čo to zhruba je si ihneď povieme.

Fourierov rozklad je rozklad funkcie do súčtu (nie len tak hocijakých) sínusov a kosínusov. Tieto sínusy a kosínusy môžu byť široké alebo úzke, nazvime ich Fourierove komponenty. Napríklad Fourierov komponent sin(2x) je užší ako sin(x). Ak vám to nič nehovorí, možno si to predstaviť v hudobnej analógii – rozdiel medzi sin(2x) a sin(x) je presne jedna oktáva. Ak vám učiteľka klavíra povie „zahraj to o oktávu vyššie“, myslí presne toto.

Takmer každá realistická funkcia sa dá rozložiť do súčtu sínusov a kosínusov rôznych šírok, a teda rôznych frekvencií, alebo v hudbonej analógii – rôznych výšok (v tomto zmysle užší sínus zodpovedá vyššiemu tónu). Tieto šírky by sme mohli nazvať aj „vlnové dĺžky“ a nie je to náhoda, pretože jedna z prvých aplikácii, ktorú Fourierove rady videli, bola vo fyzike vĺn (napríklad aj zvukových).

Ako to ale funguje? Odpoveď nie je taká jednoduchá, ale zhruba si to môžeme predstaviť takto: Vezmime si funkciu (signál), ktorú chceme rozložiť do Fourierovho radu a porovnávajme ju s jednotlivými Fourierovými komponentmi. Ten najpodobnejší nazvime „dominantný“ alebo „hlavný“.
Podobnosť je zo začiatku malá, pridávaním ďalších komponentov sa však zlepšuje. Keď vezmeme druhý, najpodobnejší komponent, potom tretí atď., obvykle sa celkom rýchlo približujeme k funkcii, ktorú rozvíjame. Pre názornú predstavu – funkcii (signálu), ktorá sa mení iba pozvoľna, budú dominovať široké komponenty (napr. sin(x), cos(x)), pričom funkcii, ktorá sa na krátkych úsekoch mení veľmi rýchlo, budú dominovať úzke komponenty (napr. sin(100x), cos(100x)).

V praxi sa dosť často nedá vidieť dopredu (alebo je to náročné zistiť, alebo technicky nerealizovateľné), ktorý komponent je dominantný (t.j. najpodobnejší), a preto si proste povieme, že vezmeme, napríklad „prvých 100 najširších komponent“, prípadne „100 komponent počínajúc sin(101x) a končiac sin(200x)“. Väčšinou to funguje dobre, pretože poznáme rozsah vlnových dĺžok (frekvencií), v ktorom pracujeme.

Takýmto spôsobom sa však vedome dopúšťame zjednodušenia, ktoré sa môže viditeľne prejaviť, ak budeme nútení spracovať signál mimo nášho rozsahu. Napríklad, ak berieme do úvahy len niekoľko najširších komponent alebo spracovávame signál, ktorý má rýchle zmeny na krátkom úseku (t.j. má vysokú frekvenciu), naše spracovanie môže byť veľmi nepresné a málo vierohodné (v najhorších prípadoch až úplne nanič).

Jedným z typických užívateľov Fourierovho rozkladu (v tomto prípade sa to nazýva „diskrétna Fourierova transformácia“) sú algoritmy na kompresiu obrázkov – napríklad jpeg používa jeho kosínusovú obdobu. Veľké kontrasty v obrázku sú vlastne náhle a rýchle zmeny, a teda je to obsah, ktorý zodpovedá úzkym fourierovým komponentom (a teda krátkym vlnovým dĺžkam/vysokým frekvenciám).

Keďže pri kompresii zanedbávame krátke vlnové dĺžky, nemáme takú schopnosť vierohodne reprezentovať drobné detaily a kontrasty, a teda obrázok sa môže javiť rozmazaný a oscilujúci na miestach, kde sa spomínané kontrasty nachádzajú. Toto je Gibbsov jav pri kompresii fotiek a možno ho vidieť na spodnej polovici obrázka – na reprodukciu bolo použitých 150 najširších vlnových dĺžok (150 najnižších frekvencií).

Jedným z veľmi typických príkladov na Fourierov rozklad je obľúbená štvorcová vlna, ktorá je nosnou myšlienkou mnohých digitálnych prístrojov. Na obrázku môžeme vidieť snahu o aproximáciu štvorcovej vlny, kde postupne zvyšujeme počet členov Fourierovho rozkladu – najprv berieme 12 najnižších frekvencií, potom 25 a nakoniec 80. Gibbsov jav vidno ako oscilujúce „ušká“ na miestach veľkých skokov.

Zaujímavým pozorovaním je to, že sa týchto ušiek nevieme zbaviť bez ohľadu na to, koľko komponentov vezmeme do úvahy. Vyplýva to z toho, že pridávaním ďalších členov sa k rozkladanému signálu nepribližujeme rovnomerne – v miestach skokov sa nepribližujeme vôbec, pričom v miestach medzi nimi sa približujeme pomerne rýchlo. Pri štvorcovej vlne sú skoky nekonečne rýchle, preto zodpovedajú nekonečne krátkej vlnovej dĺžke (nekonečnej frekvencii), a teda na to, aby sme sa týchto ušiek zbavili, potrebovali by sme zobrať do úvahy všetkých nekonečne veľa frekvencií, čo samozrejme nebýva v technických možnostiach prístrojov.

Jednou z dôležitých oblastí, kde treba s Gibbsovým javom počítať, je rádiológia (napríklad MRI). Inak by sa mohlo stať, že rádiológ neoboznámený s týmto javom by mohol artefakty chybne vyhodnotiť ako fraktúry či zápaly.

[Adam]

https://radiopaedia.org/articles/gibbs-and-truncation-artifactshttps://en.wikipedia.org/wiki/Gibbs_phenomenonhttp://mathworld.wolfram.com/FourierSeries.htmlhttps://en.wikipedia.org/wiki/Octave

Pridaj komentár