Home Software Articles Photos

Digital reconstruction of cartoon movies based on genetic algorithms (unfinished, 2002)

What is done

Contact

started writing about module2 in Czech, unfinished

Vyrovnání globálního kolísání jasu v sekvencích obrázků

Úvod/Abstrakt

V sekvencích obrázků se mohou z různých důvodů objevovat nežádoucí globální fluktuace jasu. Protože informace potřebná k jejich detekci a odstranění leží v srovnání jasů týchž objektů na různých snímcích, s využitím nezávislé komponenty sledování pohybu budeme porovnávat histogramy oblastí z obou snímků, které obsahují stejné objekty. Transformaci jasu zkonstruujeme s pomocí genetického algoritmu jako splajn nejlépe odpovídající námi zvoleným kritériím.

Vyrovnávání jasu

Konstrukce jasové transformace

Globální transformaci jasu (kde jas je reálné číslo 0..1) definujeme jako neklesající funkci tl:R->R procházející body [0,0] a [1,1]. Jasovou transformací Tl:snímek->snímek pak rozumíme nahrazení všech pixelů s jasem j pixelem odpovídající barvy s jasem tl(j). Barevnou složkou snímků se dále nezabýváme, pracujeme pouze s jasem. Nežádoucí globální transformace jasu se kterými se můžeme v praxi setkat jsou velmi různorodé, jednoduchá gamma korekce není dostatečným opravným prostředkem. Chceme použít co nejrobustnější funkci schopnou postihnout co nejvíce změn jasu, ke kterým může například při tvorbě filmu, degradaci filmového matriálu a digitalizaci filmu dojít, u které ale půjde (v případě, že očekáváme pouze jednoduché transformace) snadno regulovat určitá míra hladkosti a jednoduchosti. f tedy budeme reprezentovat jako splajn procházející několika body, z nichž pouze krajní [0,0] a [1,1] jsou pevné. Zbylé body najde genetický algoritmus tak, aby maximalizoval optimalitu transformace (viz kritéria optimality níže). V naší implementaci jsme použili Fritsch-Carlsonův splajn, nicméně i jiné splajny dávaly srovnatelné výsledky. Jako optimální počet bodů, kterými splajn prochází, se v případě animovaného filmu Rumcajs ukázalo číslo pět (tj. tři pohyblivé).

Kritéria optimality

Popíšeme tři schémata umožňující posoudit kvalitu jasové transformace Tl.

Vyhlazení histogramů

U dostatečně velkých obrázků nemá náhodný šum v texturách vliv na podobnost histogramů. Ovšem při našich geometrických transformacích dochází ke změně charakteristik textur a šumu, při bilineární interpolaci jsou extrémní jasy v textuře interpolovány s jasy sousedních pixelů s neextrémními jasy, takže textura transformovaného snímku obsahuje užší spektrum hodnot jasu. Následné měření podobnosti histogramů usnadní vyhlazení histogramů - taková transformace histogramů, po které budou histogramy původního snímku i transformovaného snímku s redukovaným šumem opět podobné. Vyhlazování implementujeme jako iterační proces, ve kterém pro každé j malou část počtu pixelů s jasem j histo[j] přesuneme do histo[j-1] a histo[j+1]. Krok opakujeme dokud poměr SUM histo[j]-(histo[j-1]+histo[j+1])/2 k počtu zpracovávaných pixelů překračuje zadanou míru hrubosti histogramu (pro histogram o 256 prvcích nad obrázky v TV rozlišení se osvědčilo 0.01).

Zvýraznění minoritních extrémů v histogramu

V delších pásmech jasů, které se ve snímcích Tg(Fa) a Fb téměř nevyskytují (neobydlená pásma), by mohly být i zcela chybné transformace považovány za správné a ojedinělé pixely daných jasů by byly nesprávně transformovány. Proto po vyhlazení transformujeme histogramy tak, aby byly nízké lokální extrémy zvýrazněny a vysoké potlačeny - hist[i] nahradíme výrazem (log(hist[i]+100)-log(100))*1000. Uvedená transformace pomáhá najít takovou transformaci, která i drobný lokální extrém v neobydleném pásmu namapuje na korespondující extrém v druhém histogramu.

Preference jednoduché transformace

Pokud se v neobydleném pásmu nevyskytují žádné vhodné lokální extrémy, kterými by se optimalizační proces řídil, nelze o průběhu transformační funkce rozhodnout. Oprávněně však lze očekávat, že správná transformace je ve většině případu spíše jednoduchá hladká křivka s minimem inflexních bodů. Do kritéria optimality tedy zahrneme penaltu abs(tl(i-1)+tl(i+1)-2*tl(i)) / (Tg(Fa).hist[i]+Tl(Fb).hist[i]+10) * 2000000 pro i=0..255 penalizující "klikatost" křivky a podporující její "hladkost" v neobydlených pásmech (čitatel vyjadřuje klikatost, jmenovatel obydlenost).

Pásmo tolerovaného šumu

Pokud se korespondující pixely porovnávaných snímků Tg(Fa) a Tl(Fb) (Tl je zde dosud nejlepší nalezená jasová transformace, na začátku výpočtu identita) výrazně liší (abs(p1-p2)>DELTA), téměř jistě leží v oblasti, kde se snímky liší. Takové pixely nezahrnujeme do porovnávání snímků (do histogramů). V případě, že rozdíl není velký (abs(p1-p2)<=DELTA), mohou pixely ležet v pro nás podstatné oblasti, kde se snímky svým obsahem shodují; odchylka pak bývá způsobena pouze drobnými nepřesnostni Tg a šumem v textuře, který jsme se rozhodli ještě tolerovat.

Zužování pásma tolerovaného šumu

Při stanovení šířky pásma šumu (DELTA) hrají roli dva faktory. Chceme aby program dokázal zdetekovat co největší transformace jasu (např. změnu jasu 100/255 na 150/255, chceme vysoké DELTA). Zároveň chceme, aby program rozeznal oblasti, kde se snímky liší, a nezahrnul je do výpočtu místo toho aby vyrovnával jas tak aby se podobaly (chceme nízké DELTA). Na začátku výpočtu tedy nastavíme vysoké DELTA (50) a po určitých počtech generací genetického algoritmu ho snižujeme až na hodnoty kolem 10. Zužování pásma postupně omezuje prostor v kterém se mohou úspěšně pohybovat alternativní jasové transformace generované genetickým algoritmem, pásmo se pokaždé zúží kolem dosud nejlepší nalezené jasové transformace. Pro zvýšení efektivity výpočtu nepracujeme vždy s celými snímky ale pouze s jejich histogramy, které při každé změně DELTA aktualizujeme.

Využití pixelů mimo tolerovaný šum

V situaci, kdy zcela ignorujeme pixely Tg(Fa) a Tl(Fb), které spolu nekorespondují, tj. do výpočtu není zahrnut objekt pohybující se nad statickým pozadím, např. jediný tmavý objekt nad jinak světlým pozadím, se může stát, že pro histogramy ztratíme rozhodující oblasti palety, široká pásma histogramů zůstanou neobydlená. Kritérium optimality transformace by pak vůbec nezahrnovalo jak transformovat jas tmavého pohybujícího se objektu. Proto paralelně s histogramy respektujícími pásmo tolerovaného šumu pracujeme i s histogramy zahrnujícími i pixely překračující toleranci. Výsledky zjištěné nad těmito histogramy se stávájí součástí výsledného kritéria optimality s vahou 0.33 (výsledky zjištěné nad dosud popisovanými histogramy obsahujícími pouze pixely z pásma tolerovaného šumu mají váhu 0.67).

Zpracování sekvence

Sekvence je posloupnost snímků F1 až FN taková, že mezi snímáním Fn a Fn+1 nedošlo k výraznému pohybu nebo zoomu kamery a oba snímky obsahují podobné objekty v popředí i podobné pozadí. Náš systém postupně vyrovnává jas snímků F2 až FN s referenčním snímkem Fref. Referenčním snímkem se na začátku výpočtu stává snímek F1. V případě, že společná část snímků Fref a Fn má příliš malý průnik (kamera se např. posunula o polovinu šířky snímku) a n>ref+1, novým referenčním snímkem se stane Fn-1, u kterého jsme jas již vyrovnali. V případě, že společná část snímků Fref a Fn má příliš malý průnik a n=ref+1, mezi snímky Fn-1 a Fn jsme nalezli rozhraní sekvencí.

Budoucí práce

Záměrné pomalé změny jasu

V situaci kdy objekt náhle zřetelně změní jas nevzniká žádná komplikace, výše popsaný optimalizační postup nebere náhle změněný objekt v potaz a vygeneruje korektní transformační funkci. Pokud je ale záměrná změna jasu pomalá, systém změnu může eliminovat jako chybu. Při hledání transformace jasu snímku F(n+k) vůči referenčnímu snímku Fn systém zcela eliminuje změnu jasu pro malá k, tj. třeba pro snímky Fn+1 až Fn+15. Snímek Fn+16 a další už ale obsahují natolik odlišný jas, že je považován za záměrnou změnu a není korigován vůbec. V sekvenci, která je výstupem programu, pak záměrná plynulá změna jasu začne až o 16 snímků později a to skokem. V současné implementaci není problém ošetřen.

Pohyb nad širokou scénou

Pokud kamera v jednom záběru odjede do strany o n šířek snímku, zpracování celé sekvence si vyžádá minimálně 2*n změn referenčního snímku. Protože jas celé sekvence přizpůsobujeme jasu prvního snímku, vyžádá si korekce jasu posledního snímku složení minimálně 2*n nezávisle detekovaných jasových transformací (k poslednímu snímku vzdálenému o n*šířka_snímku se dostaneme přes minimálně 2*n referenčních snímků vzdálených vždy nejvýše o šířka_snímku/2). Všechny drobné chyby jasových transformací se skládáním násobí, takže pro rostoucí n bude výsledek divergovat. V takových situacích by bylo provizorním řešením zpracovat sekvenci nezávisle po menších částech.

Související komponenty

Celý implementovaný systém nyní zahrnuje tyto komponenty Neinteraktivní systém je možné dále vyvíjet a rozšířit o interakci, která by umožnila ruční korekce chyb zejména v komponentě sledování pohybu kamery.

Závěr

Popsali jsme systém vyrovnávající jas v sekvencích obrázků a implememtovali jeho verzi optimalizovanou pro korekce jasu ve starých animovaných filmech. Systém je plně automatický, neinteraktivní, nicméně nezávislá komponenta detekce pohybu vyžaduje před nasazením v praxi další výzkum, případně možnost interaktivního opravování chyb systému. Přechod na obecný filmový materiál je možný s dostatečně vyspělou komponentou sledování pohybu.