Budapesti Műszaki Főiskola Neumann János Informatikai Főiskolai Kar Szoftvertechnológia Intézet
TUDOMÁNYOS DIÁKKÖRI DOLGOZAT
HÁROMDIMENZIÓS FEJMODELL ANIMÁLÁSA KAMERAKÉP ALAPJÁN
Szerzők:
Markovics Mátyás műszaki informatika szak, III. évfolyam Szőke Imre műszaki informatika szak, III. évfolyam
Konzulens:
Vámossy Zoltán főiskolai docens
Budapest, 2005
Tartalomjegyzék 1. 2. 3.
Tartalmi kivonat ........................................................................................................... 3 Bevezetés ...................................................................................................................... 4 Irodalom áttekintése ..................................................................................................... 5 3.1. Modellezési technikák ........................................................................................... 5 3.2. Animációs technikák ............................................................................................. 7 3.3. Arckeresés - Face Detection .................................................................................. 8 3.3.1. Tapasztalati arckereső eljárás ........................................................................ 9 3.3.2. Mintaillesztés arckeresési eljárásként.......................................................... 10 3.3.3. Állandó jellemzőkön alapuló arckereső eljárások ....................................... 10 3.3.4. Szín alapú arckeresők .................................................................................. 11 3.3.5. Videó alapú arckeresők ............................................................................... 11 3.3.6. Külalak alapú eljárások ............................................................................... 12 4. Rendszerterv ............................................................................................................... 13 4.1. Cél megfogalmazása............................................................................................ 13 4.2. Technikák kiválasztása ........................................................................................ 13 4.2.1. Modellalkotás .............................................................................................. 13 4.2.2. Animáció ..................................................................................................... 14 4.2.3. Arckeresés ................................................................................................... 14 4.3. Modulok kialakítása ............................................................................................ 15 4.4. Megvalósítás SW és HW környezete, felhasznált komponensek........................ 15 5. Kiválasztott technikák bemutatása, értékelése, megvalósítása................................... 16 5.1. Modellalkotás ...................................................................................................... 16 5.1.1. Karaktermodellezés poligonokkal ............................................................... 16 5.1.2. Textúra leképzés .......................................................................................... 27 5.1.3. Textúra készítése ......................................................................................... 31 5.2. Animáció ............................................................................................................. 38 5.2.1. Parametrikus görbék .................................................................................... 38 5.2.2. Parametrikus felületek ................................................................................. 44 5.2.3. Szabadformájú deformáció (Free Form Deformation, FFD) ...................... 45 5.3. Képfeldolgozás .................................................................................................... 46 5.3.1. Képpiramisok .............................................................................................. 46 5.3.2. Objektumkövetés ......................................................................................... 48 6. Összefoglalás .............................................................................................................. 50 7. Megoldandó feladatok ................................................................................................ 50 8. Elérhetőség ................................................................................................................. 50 9. Irodalomhivatkozások ................................................................................................ 51 10. Ábrajegyzék................................................................................................................ 52
2
1. Tartalmi kivonat A dolgozat áttekinti az emberi fej számítógépen történő modellezésnek és animálásának technikáit, illetve az arckereső eljárások változatait. Részletesen ismerteti az élő kameraképre is jól alkalmazható arcminták alapján kereső algoritmusokat, a fejmodell készítés lépéseit egy 3D-s grafikai szoftvereszközt (Alias Maya) alkalmazva, és a szabadformájú deformációnak nevezett animációs technikát. A projekt demonstrálni kívánja az elmélet gyakorlati alkalmazhatóságát, azaz a végső cél egy olyan program megvalósítása, amely valós időben megjelenít egy fejet DirectX segítségével, és kamerakép alapján animálja azt.
3
2. Bevezetés Az emberi arc 3D modellezése széles körben alkalmazható. Főbb alkalmazási területek az arcsebészet, a rendőrség, kommunikáció, szórakoztatóipar. Ezeken, a területeken egy kamerával párosult rendszer nagy érdeklődésre tehet szert. Ha a kamera képből meghatározhatóak az animációs paraméterek, nagyon jól használható alkalmazás jöhet létre a kommunikáció és a szórakoztatóipar területén. Videokonferencia Kis sávszélességű hálózatok esetén, amikor nincs mód megfelelő mozgókép átvitelére, megoldást jelenthet a 3D-s modell animálásához szükséges adatok közvetítésese. A kapcsolat felvételekor átküldjük az arc jellemzőit, majd a kommunikáció közben csak a mimikák változásainak paramétereit kell elküldeni. Filmipar Az egyik legnagyobb motiválója a háromdimenziós karakter animációnak a reklám és filmipar. Az új és hatásosabb reklámokhoz, filmekhez, új modelleket, effekteket és animációkat kell tervezni, hogy jobban lekösse a vásárló, a közönség figyelmét. A fejlesztések általában időigényesek, ezért is törekszenek új, hatékonyabb módszerek megalkotására. Kamera kép alapján történő animáció nagyban gyorsítaná a fejlesztéseket. Mivel a fej sokszor van figyelem központjában, annak gyors és hatékony animálása meglehetősen nagy előre lépést jelent. Játékfejlesztés A számítógépes játékok egy kulcsfontosságú eszköze az arc animáció. Amit a történet közvetítésére, jelenetek összekapcsolására használnak. Különösen fontos a realisztikus modellezés a kalandjátékoknál, mint például a Grim Fandango[14], ahol az események legnagyobb részét a beszélgetés teszi ki. A kamera képet, az előző példákhoz képest más megközelítésben, bemeneti eszközként használva, a játékok sokkal élet közelibbé válnak.
4
3. Irodalom áttekintése
3.1.
Modellezési technikák
Modellezés alatt a valós világ objektumainak leképezését értjük, jelen esetben a számítógép virtuális világába. A modellezés során a megoldandó feladat számára fontos információkat rögzítjük a lényegteleneket, pedig elhagyjuk. Lemásolni egy élő embert és belehelyezni a számítógép virtuális világába, meglehetősen izgalmas. Azonban egy élő ember arcának lemásolása olyan gyakorlati korlátokba ütközik, mint mennyi időbe telik, míg eredményt látunk, mennyire bonyolult, és költséges eszköz szükséges és mennyire felel meg a valóságnak a kapott alakzat. A leggyakrabban használt modellezési eljárások hat kategóriába sorolhatók:
Lézeres szkennelés [15] Lézerfénnyel végigpásztázzuk az alakzatot, amin az megtörik. A fénysugár deformációjából számolható ki a 3D-s koordináták. A legpontosabb eljárásnak mondható, ugyanakkor speciális és költséges eszköz szükségeltetik hozzá. Csík generátor és kamera [16] A lézeres szkenneléshez hasonlóan ez a módszer is a strukturált megvilágítás kategóriájába tartozik. A lézercsík helyett egy árnyékcsíkot (vagy akár többet és színeset is) vetítünk a tárgyra. A lézer szkenneléshez képest viszonylag olcsó, szerényebb teljesítményű, ami az alkalmazott eszközök függvénye. Sztereólátás Két megfelelően beállított kamerával sztereó kép készül. Az eljárás a geometriai kapcsolatot használja ki a sztereó képek között, hogy visszakapjuk a felület mélységét, ami gyakran zajos adatot eredményez. Videó szekvencia [9] Képfolyamra kell szert tenni, amihez olcsó és teljesen passzív érzékelő szükséges, mint például egy hagyományos videokamera. Az egymás utáni képekből következtetünk az alakzat térbeli elhelyezkedésére. Minél több képkockánk van, annál jobb eredményt kapunk.
5
Általános modell és képek [7] Már meglévő 3D-s modellt (például fej modellt) és pár képből kinyert némi információt használ fel ez a módszer. Az általános modell gondoskodik a 3D geometriáról. Két vagy több képen észleljük a jellegzetes pontokat (például az arc legkarakterisztikusabb pontjait), amely alapján az általános modellt a kívánt alakzatúra deformálunk. Csak meghatározott objektumok modellezését teszi lehetővé. Közvetlen mérésen alapuló modellalkotáshoz viszonyítva kevésbé részletes modellt biztosít, ami megteremti a valós idejű feldolgozás lehetőségét. Zajra kevésbé érzékeny. 3D-s modellező program Számos 3D-s modellező és animáló program létezik a piacon. Léteznek szerényebb teljesítményű ingyenes és borsos árú professzionális termékek (mint például a Maya [17] vagy a 3ds MAX [18]). A geometriát felület-primitívek (pl. háromszög) összeillesztésével, felosztásával, pontjainak áthelyezésével, összevonásával kapjuk meg. Ebbe a kategóriába sorolnám továbbá az interaktív deformációt is. Ezen eljárás során egy összetett felületből indulunk ki (pl. egy általános fej modell), majd, mint az agyagszobrászat során, a felületet simogatva, nyomogatva kapjuk meg az egyedi alakzatot. A modellező programok nemcsak a geometria elkészítését, hanem textúrák, anyagjellemzők, fényforrások és további effektek megadását is lehetővé teszik. A modell elkészítése rengeteg időt, éles szemet, gyakorlatot és némi művészi beállítottságot igényel. Ugyanakkor nem garantálható, hogy a valódi és a virtuális arc teljes mértékben megegyezzen.
6
3.2.
Animációs technikák
Arc animáción az arc helyének, helyzetének (pl. fej elfordítása), geometriájának (pl. mosolygás) időbeli megváltozását értjük. A leggyakrabban használt arc animációs technikák öt kategóriába sorolhatók: Közvetlen paraméterezéses animáció (direct parameterization animation) Az arcot egy B-spline felület reprezentál. Az arc mozgását pedig a B-spline felület vezérlőpontjainak közvetlen áthelyezésével érik el. Közvetlen paraméterezéses animációt még az animációk kezdetén alkalmaztak, amit a kevesebb számítási igény támasztott alá. Közvetlen kapcsolat megtalálása egy képen látható arckifejezés és a B-spline vezérlőpontjai között meglehetősen nehéz. Kulcskeret animáció (key frame animation) A kulcskeret animációban a mozgástervezés a jellemző pozíciók felvételével kezdődik. Egyes időpillanatokhoz megadjuk az objektumok paramétereit, más néven a kulcspontot. Ezen kulcspontokat felhasználva az objektum paramétereire egy-egy folytonos göbét illesztünk. Ennek megfelelően a kulcskeretek közötti időpontokban az őt határoló két kulcskeret közötti közbülső, átlagolt értéket számolunk. Kulcskeret animáció széles körben alkalmazott. Mozgáskövető animáció (performance-driven animation) A mozgást egy élő embertől veszik. Az ember arcának jellegzetes pontjaira úgynevezett „markereket”, jelölőket, helyeznek el. Egy vagy több kamera rögzíti az arc mimikáját, majd a markerek pályagörbéiből számolják ki az animációs mozgásgörbéket. A feldolgozás megkönnyítése érdekében a markerek a környezettől jelentősen eltérnek. Mozgáskövető animáció szép, valósághű mozgást biztosít, azonban az ehhez szükséges keretrendszer elkészítése bonyolult, időigényes. Izom alapú animáció (muscle-based animation) Az izom alapú megközelítést szokták még anatómiai vagy fizikai modell alapú megközelítésnek is hívni. A csontok, az izmok és a bőr tulajdonságait, közöttük fennálló kapcsolatot szimulálják. Az izom alapú animáció kiváló eredményt szolgáltathat, ugyanakkor meglehetősen összetett, számításigényes. Inkább elméleti modell, mintsem széles körben használt gyakorlati megvalósítás. Pszeudo-izom alapú animáció (pseudomuscle-based animation) Az izom működésének utánzásán alapul. Az izomműködés eredményére koncentrál, mintsem annak biológia szimulálására. A módszer a szabadformájú deformációt (FFD) használja. Egy izomnak egy deformáló test (pl. téglatest) felel meg. A deformáló test vezérlőpontjainak áthelyezésével, súlyuknak megváltoztatásával szimuláljuk az aktuális izom által az arc geometriáján okozott deformációt. Ahogy egy valódi izom deformálná a bőrt, úgy deformálja az FFD az érintett arc régiót. A deformáció paramétereinek időbeli változtatásával jön létre az animáció. [8] A pszeudo-izom alapú animációval is létrehozható valószerű animáció, kevesebb számításigénnyel, ugyanis ez az eljárás csak a „felszínre”, a bőrre koncentrál. Ugyanakkor figyelembe kell venni, hogy a pszeudo-izmok nem megfelelő elhelyezése, paraméterezése irreális alakzatot, animációt eredményezhet. 7
3.3.
Arckeresés - Face Detection [1]
Napjainkban már jó technikák és eredmények vannak ezen a területen, mégsem lehet mondani, hogy a probléma megoldott, mivel egyik sem tökéletes. Mégis számos felismerő és felügyeleti rendszer használja ezt a széles körben alkalmazható eljárást, amely jó alapot ad az automatikus cél felismerő, vagy az általános objektumkereső rendszereknek. Mivel az arc egy nagyon változó objektum, ezért olyan nehézségek tárulnak elénk, mint a fej póz (profil, fejjel lefele, frontális nézet) változása, szerkezeti összetevők (szakáll, bajusz, szemüveg) hiánya vagy megléte, személyfüggő arckifejezések, illetve az arc alakjának változása a kamera tengelykörüli forgása esetén. De nehézségek adódnak még más forrásból is. Például, ha az objektumot más tárgyak eltakarják, vagy ha rosszak a képkészítés körülményei, amit többnyire a világítás (színválaszték, fényerő), kamerajellemzők (érzékelő és lencse tulajdonságai), valamint a felbontás befolyásol. Definíció Emberi arcok azonosítása és pozícionálása tekintet nélkül azok méretére, sík és térbeli helyzetére, irányultságára és megvilágítására. Adott tehát egy tetszőleges kép, határozzuk meg, hogy található-e arc a képen, és ha igen, akkor hol helyezkedik el. Kapcsolódó problémák Az arckeresés nem egy önálló kutatási terület, hanem az arccal kapcsolatos kérdések részhalmazát képzi. A témakörbe tartozik az arc helyének meghatározása, ami tulajdonképpen egy leegyszerűsített arckereső, azzal a feltétellel, hogy egy és csak egy arc van a képen. Ide sorolható az arcon lévő érzékszervek (szem, száj, orr, fül) keresése azok meglététének és helyének meghatározása, az arckifejezések, hangulat felismerése, a fejtartás követése, ugyanakkor egy személy, annak arca alapján történő azonosítása, ami az előzőekhez viszonyítva összetettebb probléma. Az utolsó kivételével minden probléma szorosan kapcsolódik a projekthez, ezért vélem szükségesnek magával az arckereséssel való foglalkozást. Felmerülő kérdések
Kép, képek forrása Általános arc leírási módja Keresési stratégia
A továbbiakban röviden áttekintésre kerülnek az arckereső eljárások.
8
3.3.1. Tapasztalati arckereső eljárás Mint a címben is olvasható az arc leírásának módja az emberi tapasztalatok szabályokba foglalása, melyek főleg az arc elemeinek kapcsolatát írják le. Ezek a szabályok általában kimondják, hogy az arc középső részén hasonlóak az intenzitás értékek, illetve, hogy a középső és felső részén található intenzitás értékek átlagának különbsége közel azonos. Gyakran támaszkodnak az érzékszervek (szem, száj, orr) helyzetére, az arc szimmetrikus tulajdonságára. Ezeket, az összefüggőségek irányítják a keresési algoritmust. Első lépésként vizsgáljuk meg az arc középső részén lévő intenzitás értékeket, majd számoljunk horizontális és vertikális gyakoriság eloszlást, a vízszintes és a függőleges intenzitásérték-összegek abszcissza és ordináta tengelyekre való kivetítésével. Alkalmazzunk lokális hisztogram kiegyensúlyozást és él detektálást, keressünk arcjellemzőket (szem, szemöldök, száj, orr, orrlyuk). n
HI( x) = ∑ I ( x, y) y=1
m
VI ( x) = ∑ I ( x, y) x=1
Ahol HI(x) a horizontális, VI(y) a vertikális összegekből alkotott függvény, I(x, y) pedig az intenzitás értéket adja meg (x, y) helyen.
Jól működik egyszerű háttér esetén. A hatékonyság növelésére könnyen állíthatóak fel új szabályok az arcjellemzők és a közöttük lévő kapcsolatok alapján. Viszont figyelni kell a tapasztalat szabályokra fordításánál, mert erős szabályok esetén nem lesz találat, gyenge szabályok esetén pedig túl sok a hamis találat lehet. Nehéz tehát általánosítani, több emberre, pozícióra, vagy bonyolult háttérre hatékony eljárást készíteni, mert ekkor túl sok eset lehetséges, így a variációk felsorolása szinte lehetetlen.
9
3.3.2. Mintaillesztés arckeresési eljárásként Ez egy kézi kódolású, tehát nem tanuló rendszer. Él, vagy tartomány alapján előredefiniált, arcjellemzők szerint deformálható mintát tárol. Olyan egyszerű összefüggések alapján keres, mint az arc tartományainak egymáshoz viszonyított fényerők aránya (a szem általában sötétebb, mint az arc többi része), vagy az arc elemeinek (száj, haj, szemöldök), színskálán elfoglalt helyének különbözősége. Ahhoz, hogy ez az egyszerű eljárás jó eredményt adjon, a minta kezdeti értékének a képen az archoz közeli helyen kell lennie. Szintén nehéz a több pózos megvalósítást megoldani.
3.3.3. Állandó jellemzőkön alapuló arckereső eljárások Az eljárás során, olyan strukturális összetevőket gyűjtünk, melyek különböző fejtartás, kamera nézőpont, megvilágítás esetén is állandóak maradnak. Arcelemeket keresünk (szem, szemöldök, orr, orrlyuk, száj) a képen. Törekszünk állandó jellemzőket (él, forma, szín, minta, intenzitás) találni. Ezeket, a jellemzőket megpróbáljuk csoportosítani. Elsőként megfogalmazzuk több kezelni kívánt eset alapján Gauss határértékszűrőkkel, mit szeretnénk arcjellemzőként kezelni. Betanítjuk a helyzetek kezelését, a választott jellemzők távolságának Gauss eloszlásával. Gauss szűrőt alkalmazunk a képre, végül véletlen gráf illesztés módszerével megkeressük az arcvonások geometriai elrendezését, és ezzel együtt lefutatjuk a keresést is. A jellemző pontok kereséséhez a Gauss függvény második deriváltját használjuk, majd az ezekhez, a pontokhoz közeli éleket régiókba rendezzük. Ellenőrzésként a pontokat és a régiókat kiértékeljük a Baysian-hálón. Így egy fejtartásra és az irányultság változására érzéketlen rendszert kapunk, de nehézségekbe ütközünk nagy mértékű, rossz minőségű képek és összetett háttér esetén.
10
3.3.4. Szín alapú arckeresők Vezérelt megvilágítási viszonyok esetén érdemes használni, egyébként kevésbé praktikus. Modellt alkotunk a bőrszínre és ezeket, a részeket kiemeljük a képből. s[rgb ] Ts n[ rgb] P (rgb | ¬skin) = Tn P (rgb | skin) ≥θ P( rgb | ¬skin) P (rgb | skin) =
Jelentős az eltérés lehet a bőr és a nem bőr modellek között, ezért elemzésre hisztogramos módszer javasolt. Sok lehet a hibás, zajos eredmény (testrész, bőrszín tónusú képrészlet), mivel környezet és világításfüggő, ennek elkerülésére további feldolgozás javasolt. Viszont könnyű implementálni, hatásos lehet korlátozott környezetben, fejtartás, arckifejezés és forgás független.
3.3.5. Videó alapú arckeresők Annyival lehet ez az eljárás hatékonyabb, mint az előzőek, hogy nem kell elemezni, csak a mozgó képkockákat, ezeket általában az időben egymás utáni képkockák különbsége, vagy a háttérmodell kivonása adja meg. Elsőször elöl és oldalnézetre alkalmazható, valószínűség alapú keresőt, majd megfigyelésen alapuló állapot becslő eljárást használunk. P f = ( I , x, y , s )
S t = ( xt , yt , S t ,θ t )
P p = ( I , x, y , s )
Z t = ( Pf , Pp ) Ahol xt, yt, St,θt rendre pozíciók, méret és helyzetszög
11
3.3.6. Külalak alapú eljárások A mintaillesztéssel ellentétben, ebben a megvalósításban a minták nem előre határozottak, hanem képekből jönnek létre. Itt a minták helyett szabályokat, keresési stratégiákat kell előre meghatározni. Általánosságban ezek az eljárások matematikai statisztikai számításokra, és gépi tanulásra épülnek. A betanult jellemzők eloszlás minták, vagy diszkrimináns függvény alakban vannak jelen. Abban tér el az eddigi képkereső eljárásoktól, hogy felbontható egy előkészítési szakaszra, és egy elemzési szakaszra. Az előkészítési szakaszban a rendszer megtanulja, hogy mi az, az arc és mi alapján ismeri fel. Az elemzési eljárás esetén, pedig megmondja, hogy a paraméterként kapott kép tartalmaz-e arcot. Jellemző, hogy a betanítás a gyakorlatban sok időt és szakértelmet igényel, elmélete, pedig igen bonyolult matematikán alapszik. A képek elemzése a betanításnál jóval gyorsabb, ennek ellenére gyakran célszerű csökkenteni a képméretet a számítási és keresési hatékonyság érdekében. Így gyors és hatékony eljárás jöhet létre, mely akár több fejtartás és irányultság kezelésére is kiterjeszthető. Ehhez azonban rengeteg pozitív és negatív példát kell gyűjteni, különböző méretben, helyzetben. A jó eredményeket a hatékony gépi tanuló algoritmusok biztosítják. Első lépésként rengeteg mintát kell gyűjteni, olyan képeket, amelyeken látható arc és ellen példaként olyanokat, amelyeken nem található arc. Ezeket a szakirodalom pozitív és negatív mintáknak nevezi. A mintaképek ábrázolására két módszer használatos, holisztikus és blokkos. A holisztikus esetben rácsos szerkezetű képet kell elképzelni, ami az intenzitás értékek vektorával van ábrázolva. A blokkos ábrázolás esetében, a kép szerkezetileg átfedő és nem átfedő részekre van bontva. Ezután az úgynevezett előfeldolgozás következik, úgymint a képek normalizálása, azonos méretre igazítása, a megvilágításból adódó eltérések kiszűrése. Ahhoz, hogy még több pozitív és negatív minta legyen, egyszerű eljárásokkal felszaporítható a minták halmaza. Hatásos módszer, a rendszer az igazítási-hibákra való felkészítésére. Pozitív virtuális minták készítéséhez használható tükrözés, forgatás, átméretezés. A negatív minták gyűjtésére kedvelt eljárás az öntöltés, mely nagyon jól növeli a rendszer teljesítményét. Az öntöltés során a hibás pozitív (arcnak vélt) eredmények hozzáadódnak a negatív minta készlethez. Ha már elegendő minta létrejött, azok elemzésével olyan szabályokat kell létre hozni mely alapján egyértelműen eldönthető, hogy egy vizsgált kép tartalmaz-e arcot, vagy sem. Ezek a szabályok a keresési stratégiák, felállításukhoz nagy matematikai apparátusra van szükség. Megközelítések a keresési stratégiák felállítására
Eigenfaces Eloszláson alapuló eljárás Neurális Hálózatok több rétegű perceptonokkal Elsődleges összetevők elemzése (PCA), Faktoranalízis Naive Bayes osztályozók Hidden Markov modell Sziták ritka hálózata (SNoW) Adaboost
12
4. Rendszerterv
4.1.
Cél megfogalmazása
Egy olyan program megvalósítása a cél, amely valós időben megjelenít egy háromdimenziós fotórealisztikus fejet, és kamerakép alapján animálja azt.
4.2.
Technikák kiválasztása
4.2.1. Modellalkotás Lézeres szkennelés, csík generátor és kamera, sztereólátás, videó szekvencia mind mérésen alapuló modellalkotási technikák. A felsorolás csökkenő sorrendben kifejezi a megvalósításhoz szükséges hardver eszközök árát, beszerezhetőségének nehézségeit és pontosságát is. Eltekintettünk ezen modell készítési technikáktól egyrészt a beszerezhetőségük, másrészt pedig a szolgáltatott eredmények miatt. A mérésen alapuló technikák eredménye ugyanis zajos, esetenként hiányos és nagy poligonszámból álló modellek, melyek közvetlenül nem használhatók valós idejű animációhoz. Általános modell és képek használata azon egyszerű okból nem valósítható meg, ugyanis feltételez egy már meglévő általános modellt. 3D-s modellező programra esett a választás, de ne gondoljuk hogy azért, mert "csak ez maradt". E grafikus programok segítségével egy egész virtuális világot meg lehet tervezni. Nem csak fejről, hanem bármilyen más valós vagy elképzelt objektumról készíthető modell. Segítségükkel olyan részletes modellek állíthatók elő, amelyek szükségleteinknek, animációs feltételeinknek megfelelők. Továbbá bárki által hozzáférhetőek, ugyanis még a professzionális programoknak is létezik ingyenesen használható, teljes funkcionalitással bíró oktató változata.
13
4.2.2. Animáció Kijelenthető, hogy az anatómiai alapú modellezés közelíti a legjobban a biológiai modellt. Evidens, hogy a bőrt a csont tartja az izmokon, kötőszöveteken keresztül és az is hogy, több izomköteg állítja elő a mozdulatok számos kombinációját. E modell jó szolgálatot tenne például az arcsebészetnél. Belátható azonban, hogy a megoldandó feladatnak megfelelő modellt célszerű választani, ugyanis például egy videokonferencia esetén teljesen felesleges a koponya alakjának, az izmok elernyedtségének, stb. számítása, amikor minket csak a felszín érdekel. Érdemesebb tehát egy kevésbé számításigényes, ugyanakkor hasonló eredményt nyújtó modell alkalmazása, hisz ez jobban illeszkedik az adott feladat elvárásaihoz. A projekt céljainak legjobban a pszeudo-izom alapú animáció felel meg valószerű megjelenése és relatíve kevesebb számításigénye miatt. A választott animációs modell jól illeszkedik a kiválasztott arcmodellezési technikához és a többi tárgyalt modellezési módszer kimenetül szolgáló geometriai modellhez is illeszthető. A pszeudo-izom alapú technika a szabadformájú deformációra épül, amit modellezés folyamata során is szoktak használni. Ennek segítségével könnyen, szemléletesen, interaktívan új alakzatokat formálhatunk meglévő modellünkből. Használatával új figurákat adhatunk karakterünknek, melyek akár a kulcskeret animáció forrásául is szolgálhat.
4.2.3. Arckeresés A külalak alapú tanuló arckereső eljárások megközelítései közül az egyik legelterjedtebb az Adaboost[2,3], mely nagyon egyszerű, de igen nagyszámú szabályok kombinációjából épít döntési fát, és ennek segítségével értékeli ki a vizsgálandó képet. Ha minden szabály teljesül, akkor a kép tartalmaz arcot, viszont, ha csak egy szabály nem teljesül a fa struktúrában, akkor a keresés nem folytatódik tovább. Így egy igen hatékony rendszer jön létre, mellyel akár folyamatos kamera képen is végezhető vizsgálat. Az implementáció során is ez az eljárás került alkalmazásra. A hatékonyság megőrzése érdekében az openCV[6] függvény könyvtárban megvalósított változatot használtuk fel.
14
4.3.
Modulok kialakítása
A célkitűzésből látható, hogy megoldandó probléma két nagyobb feladatra bontható. Ez a modellalkotás és az animáció. A modellalkotás folyamatát a piacon megtalálható kész programok segítik, így e rész megtervezésétől eltekinthetünk. Az animációt azonban két jól elkülönülő részre bonthatjuk. Nevezzük ezeket képfeldolgozó és megjelenítő modulnak. A képfeldolgozó modul feladata kamerakép alapján animációs paraméterek meghatározása és átadása a másik modulnak. A megjelenítő modul feladata a létrehozott modell betöltése és animációja. A képfeldolgozó modul kidolgozása Markovics Mátyás, a megjelenítő modul elkészítése pedig Szőke Imre feladata.
4.4. Megvalósítás SW és HW környezete, felhasznált komponensek A fejlesztés Microsoft Windows operációs rendszerre készül. A futtatáshoz Microsoft .NET Framework és DirectX 9.x szükséges. Hardver szükséglete mindössze egy webkamera, amennyiben kamerakép alapú animációt szeretnénk. A fej modell létrehozásához az Alias Maya programot, a textúra létrehozásához Adobe Photoshop alkalmazást használjuk fel. Az implementálás Microsoft Visual Studio .NET 2003 fejlesztőeszköz segítségével C++ nyelven történik. A képfeldolgozási és kamerakezelési feladathoz az Intel OpenCV, a háromdimenziós megjelenítéshez a Microsoft DirectX függvénykönyvtárakat használjuk.
15
5. Kiválasztott technikák bemutatása, értékelése, megvalósítása 5.1.
Modellalkotás
A fej szerkezetének kialakításához a Maya nevű 3D-s grafikus szoftver eszközt használjuk fel. A konkrét irodalom bemutatása előtt szükséges ismertetni néhány alapfogalmat. Kitolás (extrude) Poligon felszín mozgatása olyan módon, hogy az éleinél új poligon felszínekkel legyenek körülvéve, egy kifele terjedő felületet létrehozva. A módszert a modell részeinek felépítésére használjuk. Hatásosan "növeszthetünk" egy felszínt egy felületből (vagy egy felületbe). Poligon felszín/él/vertex (polygon face/edge/vertex) A poligon felületet kitevő három komponens. A vertex egyetlen pont a térben, X, Y és Z koordinátákkal meghatározva. Az él egyszerűen a két vertex közötti vonal. Amikor három él zárt területet határoz meg, poligon háromszögről beszélünk. Poligon háromszögek összessége adja a poligon felszínt. Felosztás (subdivide) A poligon feldarabolása, hogy új felszíneket hozzunk létre részletek hozzáadása vagy további szerkesztés céljából. Példány (instance) A duplikált objektumok beállíthatók példánynak. Ebben az esetben az egyik objektumon végrehajtott változás mindkét objektumon tükröződik.
5.1.1. Karaktermodellezés poligonokkal [10] alapján Modellezésünk során a Maya Smooth Proxy opcióját használjuk. Ez az egyesek által "dobozmodellezésnek" nevezett módszer lehetővé teszi, hogy egyetlen dobozból összetett alakzatokat hozzunk létre csúcspont-, felszín- és élszerkesztések sorozatával, esetenként a poligonokat kitolva vagy felosztva, ha további részletekre van szükségünk. Mielőtt elkezdenénk a karaktermodellezést, néhány lépést kell tennünk, hogy egyszerűsítsük a folyamatot. A legtöbb létrehozandó 3D-s karakter, akárcsak a való világ élőlényei, szimmetrikusak. Ahelyett, hogy a modell mindkét oldalát megváltoztatva próbálnánk a módosításokat tökéletesen szimmetrikusan végrehajtani, a Maya képes a szerkesztéseket automatikusan a karakter másik oldalára tükrözni. A módszer idő takarít meg, és biztosítja a tökéletes szimmetriát is. Ha a természetesebb megjelenés érdekében apró változtatásokat, akarunk hozzáadni az egyes oldalakhoz, ezt is megtehetjük egyszerűen a karakter szimmetrikus vonásainak befejezése után.
16
Simított kocka létrehozása 1. Kiindulásként hozzunk létre egy poligon kockát. (Create\Polygon primitives\Cube) 2. Amíg a kocka ki van jelölve, válasszuk a Polygons\Smooth Proxy tulajdonság menüpontot. Az alapértelmezett beállításokat használva kattintsunk a Smooth (simítás) gombra. Egy kockába ágyazott, gömbszerű objektum jelenik meg a jelenetben. A gömbszerű objektum a simított kocka, amely közvetlenül nem szerkeszthető. A külső objektum szerkesztésével módosíthatjuk a belsőt. A külső objektum félig átlátszó volta segít, hogy lássuk a külső objektumon végrehajtott szerkesztésnek a belső objektumra kifejtett hatását. 3. Miközben az eredeti külső kocka ki van választva, kattintsunk az Állapotablak Outputs szakaszában a létrehozott simított objektumunkra ([A1]. ábra). Itt beállíthatjuk a simítás lineáris vagy exponenciális voltát, illetve szintjét. Minél magasabb szintet állítunk be, annál simább, nagyobb poligonszámú objektumot kapunk.
[A1]. ábra – A Smooth Proxy opció hatására létrejön a simított objektum.
17
1. 2. 3. 4.
Szimmetria megvalósítása Nyissuk meg a Kijelölőt (Window\Outliner), és láthatjuk a két objektumot egyetlen csoportba ágyazva - ez a Smooth Proxy lépéskor jött létre. Kibontva a csoportot, két elemet találunk pCube1 és pCube2 néven. Dupla kattintással nevezzük át a pCube1-et ketrecre, a pCube2-őt simítottra. A karakter szimmetrikus bal felének létrehozásához duplikálni fogjuk a kockát. Először mozgassuk el az alakzatot jobbra, azaz az Állapotablak X irányú eltolás részébe írjunk 0.5-öt. Ezután nyissuk meg a kocka azon oldalát, amely a tükrözött oldalhoz kapcsolódik. Ehhez jelöljük ki és töröljük a kocka azon felszínét, amely a jelenet origójához a legközelebb van. Ennek hatására a simított kocka is nyitottá vált az egyik oldalán ([A2]. ábra).
[A2]. ábra – A simított kocka egyik oldalának nyitva kell lennie.
18
5. A felületek tengelypontja el van tolva az origóból, a két létrehozott objektum közepére van állítva. Mivel duplikálni és tükrözni akarjuk a simított kockát, oda kell mozgatni a tengelypontot, ahova az objektumok tükrözve lesznek, ezért illesszük a tengelyt a 0,0,0 pontba, az origóba. W hatására eltolási módba, majd az Insert gomb lenyomására tengely szerkesztési módba kerülünk. Ha befejeztük az origóba való eltolást, nyomjuk meg ismét az Insert gombot a tengely szerkesztési módból való kilépéshez. 6. Jelöljük ki a simított objektumot, és duplikáljuk (Edit\Duplicate Option Box). A tulajdonság ablakban állítsuk vissza az alapbeállításokat, majd az X irányú skálázást mínusz 1-re, illetve az alakzat típusát példányra (instance) változtassuk. Kattintsunk a duplikálás gombra. Egy duplikált objektumot kell látnunk az eredeti mellett. A két objektum együtt egy kapszula formát alkot. Nevezzük át a duplikált objektumot simított és tükrözöttre. 7. A ketrec egyik élének eltolásával megbizonyosodhatunk hogy a simított és tükrözött objektumunk is követi a változásokat ([A3]. ábra).
[A3]. ábra – A ketrec élének helyváltoztatását a tükrözött objektum is követi.
19
Kép betöltése támpontként A karakterünk formálását a modellről készített fotók, vagy kézzel rajzolt vázlatok segíthetik. Ezt a technikát használva sok időt és energiát spórolunk meg. Mielőtt képsíkként betöltenénk az elöl- és oldalnézeti képet a Mayába, ellenőriznünk kell, hogy amennyire csak lehet ugyanolyan méretűek legyenek. Azt akarjuk, hogy a modell elöl- és oldalnézete arányos legyen, hogy a két nézetet váltogatva használhassuk a karakter formázásra. Amennyiben nem megfelelőek a képek korrigáljuk azokat valamilyen képszerkesztő program segítségével. 1. Jobb egérgombbal az elölnézetre kattintva tegyük azt aktívvá. A kép importálásához kattintsunk a View\Image Plane\Import Image panel menüpontra. Válasszuk ki az elölnézethez kapcsolódó képfájlunkat. 2. Az attribútum szerkesztőt megnyitva (CTRL-A) lehetőség nyílik a képsík szélességének, magasságának és pozíciójának megváltoztatására, amennyiben az alapbeállítások nem megfelelőek. 3. Tegyük aktívvá az oldalnézetet (jobb egérgomb), majd ismételjük meg az elölnézetnél használt eljárást, de most az oldalnézethez kapcsolódó fájlt töltsük be. 4. A jobb átláthatóság érdekében változtassuk meg a panelek elrendezését (Panels\Layouts\Three Panes Split Right) és kapcsoljuk ki a rácsot (Display\Grid). Az eredmény [A4]. ábrán látható.
[A4]. ábra – A nézetablakok a betöltött képsíkokkal.
20
Poligon felszínek kitolása 1. Mozgassuk a létrehozott poligon objektumainkat a nyak kiindulópontjához. 2. Most elkezdünk felszíneket kitolni a ketrec objektumból, hogy elkezdjen formálódni a fej alakja. Ehhez jelöljük ki a ketrecet, majd felette kattintva jobb egérgombbal válasszuk ki a Felszín (Face) menüpontot. Ennek hatására felszíneket jelölhetünk ki. Tegyük is meg a ketrec tetejével, és toljuk ki (Edit Polygons\Extrude Face). Ennek hatására megjelennek a manipulátorkezelők, melyekkel az új felszín forgatását, méretét és helyzetét állíthatjuk be. Az első kitoláshoz mozgassuk a felszínt felfelé ([A5]. ábra). A szerkesztés folyamata során ügyeljünk, hogy X irányba ne mozgassuk el a felszínt, mert el fog különülni a tükrözött másolattól. 3. Ismételjük meg az előző lépést még kétszer. 4. A perspektív nézetben látjuk, hogy a kitolások két elkülönülő, kocka alapjából induló oszlopot hoztak létre. Ez a kitolás alatt létrehozott új felszínek miatt van. A problémát könnyű orvosolni, egyszerűen jelöljük ki a létrejött három felesleges felszínt majd Backspace-t nyomva töröljük ki ([A6]. ábra).
[A5]. ábra – A ketrec felső felszínét kitoltuk.
[A6]. ábra – Két oszlop közötti felszínek kitörlésével az oldalak összeolvadnak
5. A következő lépés a kocka elején lévő felületek kitolása, és Z irányba való mozgatásuk, amíg el nem érik a karakter fejének elejét. Használjuk az oldalnézet referenciaképét segítség képen ([A8]. ábra). 6. Váltsunk perspektív nézetre és töröljük a felesleges felületeket a két simított oldal között.
21
[A8]. ábra – Oldalnézetben láthatjuk az új kitolásokat az arc eleje felé mozogni.
22
Poligon felszínek hasítása A poligon hasító eszköz használatával részleteket adhatunk karakterünkhöz, ugyanis ez az eszköz lehetővé teszi egy felszín két külön felszínre való osztását. A fej durva körvonalából kiindulva olyan részleteket adhatunk hozzá, mint a szemek vagy a száj. Ez a módszer elsősorban a vizuális, interaktív modellezők számára hasznos, akik az agyaggal dolgozó szobrászhoz hasonlóan alakítják a felületeket. Be lehet állítani az illesztési mágnesek számát, amely egy él azon felosztásainak számára vonatkozik, amelyek vonzzák az eszközt. Ha az illesztési mágnesek 2-re vannak állítva, egy élt könnyedén feloszthatunk 1/3 és 2/3 arányban, mivel az élen két egyenlően elhelyezett mágnes lesz. Az illesztési tolerancia az illesztési pontokhoz való vonzást állítja be. Minél magasabbra állítjuk, annál erősebb az illesztési hatás. 1. A szemöldökvonal, illetve a szem és a száj körüli területek létrehozásához pontokat helyezünk el (Edit Polygons\Split Polygon Tool), amelyek a poligon él elejét és végét definiálják. Amikor a poligon élek valamelyikére kattintunk egy a pontot jelképező zöld négyzet jelenik meg. A bal egérgomb nyomva tartása mellett mozgassuk a pontot az él mentén a kívánt pozícióba. Ezután egy másik élen helyezhetünk el újabb pontot. A pontok elhelyezése után nyomjuk meg az Enter-t, és az új éleink felosztják az összes felszínt, amelyeket metszenek ([A9]. ábra).
[A9]. ábra – A Négynézetes mód használatával jobban látjuk, hova helyezzük el a felszíneket felosztó pontokat.
23
2. A szükségesnek tartott felosztások után az egér jobb gombjával kattintsunk a ketrec felett és válasszuk a Csúcspont (Vertex) menüpontot. Ennek hatására lehetőség nyílik az egyes csúcspontok egyedi módosítására. Egyedi és csoportos kijelöléseket követően az eltolási eszközt használva mozgassuk a pontokat a kívánt pozícióba, a fej körvonalának megfelelően ([A10]. ábra). 3. További részletek hozzáadása érdekében ismételjük az 1-es és 2-es pontot szükség szerint.
[A10]. ábra – A csúcspontok áthelyezésével előáll a modell durva körvonala. Az ismertetett felszínek kitolása, hasítása, törlése és csúcspontok áthelyezése segítségével hozhatjuk létre a karakterünk szemét, száját, orrát és finomíthatjuk a megjelenés részletgazdagságát ([A11]. ábra). Az elérhető eredménynek csak a kreativitás, művészi érzék és az idő szabhat határt.
24
[A11]. ábra – Maya a 3D világa című könyvben bemutatott lény végső modellje.
25
Értékelés, saját megvalósítás A poligon modellezést általában nem hajló, hanem kemény élű felületekhez alkalmazzák, vagy olyan helyzetekben, ahol számít a poligonok száma. A projektünk valós idejű animációt kíván megvalósítani, melyhez jó illeszkedik a bemutatott technika. Erőssége ennek a modellezési mechanizmusnak, hogy csak ott adunk hozzá részleteket, ahol arra szükség van. További előnye a bemutatott Smooth Proxy technika, amely ugyanabból a végső alakzatból (ketrec) különböző poligonszámú simított felületet képes előállítani, így könnyen mérlegelhetünk a sebesség és a megjelenés szépsége között. Egy gyengébb teljesítményű gépen egy alacsonyabb poligonszámú modellen hajtjuk végre az animációt, míg egy erősebb gépen élvezhetjük a magasabb poligonszámból adódó simább felületet, anélkül hogy bármely esetben az animáció sebességének kárára menne a modell megjelenése. Továbbá az is elmondható, hogy a poligon modellek könnyen, gyorsan szerkeszthetők, és jól néznek ki, ha megfelelően hozzák létre és módosítják őket. Az irodalomkutatásnak megfelelően, a referencia képek ([A12]. ábra) alapján sikeresen elkészült a fej geometriai modellje ([A13]. ábra).
[A12]. ábra – A felhasznált referencia képek.
[A13]. ábra – Az eredményül kapott modell.
26
5.1.2. Textúra leképzés A textúra leképezés célja, hogy a háromdimenziós pontokhoz színeket rendeljen. A színeket egy képfájlban tároljuk, amit gyakran csak textúra néven illetünk. Minden csúcsponthoz tartozik egy kétdimenziós lebegőpontos szám, amely kijelöli a képtérben a hozzá tartozó színértéket. Az uv koordináták értelmezési tartománya [0,0]-tól [1,1]-ig terjed, ahol a [0,0] a textúra bal alsó, a [1,1] a textúra jobb felső értékét jelöli. Így képmérettől független leképezést kapunk. A textúra koordinátákat a háromdimenziós pontok vetítésével kapjuk meg. Sík vetítésen alapuló textúra leképezés [13] alapján Legelőször jelöljük ki a polygon modellünket és töröljük az uv pontokat, hogy tiszta munkaterülettel induljunk. Kattintsunk \Edit Polygons\Texture\Delete uvs menüpontra. Az objektum felett jobb gombot nyomva váltsunk át felület (face) kijelölési módba. Ezt követően jelöljük ki mindazokat a felületrészeket, amelyeket az első, frontális vetítési síkhoz tartozónak gondolunk ([A14]. ábra). Ezt követi a kijelölt háromdimenziós pontok síkra való leképezés. Menjünk a \Edit Polygons\Texture\Planar mapping\ menüponthoz és kattintsunk a tulajdonságablakra (option box). Bizonyosodjunk meg róla, hogy a vetítés irányának a kamera van beállítva, így a projekció a kijelölt ablaknak megfelelően fog végbemenni. Ezt követően jobb gombbal válasszuk ki az elölnézetet (front view), majd nyomjuk meg a projekt gombot. Ezt követően megkaptuk az első vetítési síkunkat ([A15]. ábra).
[A14]. ábra – Elölnézeti sík kiválasztása
[A15]. ábra – Elölnézeti sík vetítés után az UV textúra szerkesztő ablakban
A következőkben bemutatásra kerül az UV pontok létrehozását segítő munkafolyamat. A perspektív nézetben váltsunk át objektum kijelölésre és jelöljük ki az összes felületet. Menjünk a Show\Isolate select\View selected menüpontra a perspektív panelen. Minden, amit nem jelöltünk ki rejtve lesz, de jelen esetben mivel mindent kijelöltünk semmi változást nem 27
fogunk észrevenni. Ezen lépések után már csak azon felületeket jelöljük ki, amelyeket sík vetítés során fel akarunk használni. Projekciónál kiválasztjuk a megfelelő vetítési síkot, majd a perspektív nézetnél Show\Isolate select\Remove selected objects menüpontra kattintunk. Ennek hatására a perspektív nézetben eltűnnek a már vetítésre került felületek ([A16]. ábra). Ezen munkamódszer megkönnyíti a vetítésre váró felületek kijelölését.
[A16]. ábra – Elölnézeti felületek elrejtve, [A17]. ábra – Az elölnézeti és oldalnézeti oldalsó pedig kijelölés alatt. vetítés eredménye. Az oldalsó felületek síkra való vetítése után ([A17]. ábra) a textúra szerkesztő ablakban méretezzük szükség szerint az UV pontokat és mozgassuk a megfelelő pozícióba. Az UV pontok szerkesztéséhez nyomjunk jobb gombot és válasszuk az UV felbukkanó menüpontot. A pontok kijelölését követően lehetőség nyílik az egyes pontok eltolására (W), elforgatására (E) és méretezésére (R) is. Az összetartozó élek egyesítése érdekében váltsunk át él kijelölési módba. Jobb gomb a textúra szerkesztési ablakon és az Edge felbukkanó menüre kattintunk. Kijelöljük az összevonni kívánt éleket, majd Polygons\Sew UVs menüpont választjuk. ([A18]. ábra) Az ismertetett lépéseket hajtjuk végre a fej hátulsó, oldalsó és az áll körüli részére is ([A19]. ábra).
[A18]. ábra egyesítése.
–
Az
összetartozó
élek [A19]. ábra – A végső UV térkép.
28
A textúra koordinátákat lebegőpontos számként tárolják, ahol az értéktartomány 0 és 1 közé esik. Ennek érdekében bizonyosodjunk meg róla, hogy minden textúra koordinátánk megfelel ennek a kritériumnak. Amennyiben nem, jelöljük ki az összes pontot és méretezzük át. A következő lépés a textúra létrehozása, megfestése. Az egyes részletek (pl. száj) megfelelő helyzetének azonosításához az UV térképet használjuk fel. Polygons\UV snapshot… menüpont elkészíti számunkra a megfelelő méretű képet az UV térképről. Megnyitjuk a képet a Photoshop programunkban, majd hozzáadunk a képhez még egy réteget. Erre a rétegre rajzoljuk meg a színeket, amik a modellünkön fog megjelenni. Miután elkészültünk ([A20]. ábra), a hozzáadott részletek függvényében mentsük el kisebb vagy nagyobb felbontásban. Ajánlatos kettő többszöröseit választani a kép szélességének és magasságának pl. 512x512. Lépjünk vissza a Maya-ba, jelöljük ki a fej modellt. Jobb gomb lenyomása után kattintsunk Materials\Materials attributes felbukkanó menüpontra. Az attribútum szerkesztőben a szín opciónál válasszuk ki az elkészült textúra képet ([A21]. ábra).
[A20]. ábra – A megrajzolt textúra.
[A21]. ábra – A textúrázott modell.
29
Értékelés, saját megvalósítás Tisztában kell lenni azzal, hogy egy háromdimenziós fejet nem lehet információvesztés nélkül a síkra kiteríteni. Az információvesztés textúrázás esetén torzításban nyilvánul meg, azaz a színek eloszlása nem egyenletes. Pl. ugyanakkora négyzetre más és más méretű képrészlet esik, elmosódnak a színek vagy épp hirtelen változás következik be a színátmenetben. A bemutatott eljárás megfelelő eredményt ad kézzel festett textúrák esetén ugyanis homogén színek estén a torzítás hatása nem észrevehető. A projektünk a valósághűség növelése érdekében fotókat használ textúrának, amin könnyebben észrevehető a torzítások hatása. Ugyanakkor tisztában kell lenni azzal is, hogy az elkészült geometriai modell csak közelíti a fényképen láthatót, így ez is további pontatlanságot eredményez. Az ismertetett problémák kiküszöbölése miatt volt szükség a bemutatott eljárást kiegészíteni az egyes textúra koordináták kézzel történő pontosítására. Továbbá a fejtető részen az elmosódás elkerülése érdekében nem vontuk össze az azonos éleket. Az eredményül kapott textúra koordinátákat szemlélteti [A22]. ábra.
[A22]. ábra – Elkészített modell UV térképe
30
5.1.3. Textúra készítése [12] alapján A modellünkről készített néhány képből indulunk ki, melyeket Photoshop programmal fogunk feldolgozni. A képek megfelelőek, ha magas felbontásúak, több szögből készített és a modell megfelelően meg van világítva ([A23]. ábra). Lehetséges a textúra elkészítése csak egy frontális, egy oldalsó és egy hátsó képből is, de több képpel könnyebben érhetünk el folyamatos átmenetet a képek között.
[A23]. ábra – Forrásképek
31
Képek egyesítése A frontális képből indulunk ki. Átméretezzük a vásznat, hogy legyen elég hely a textúra többi részének is ([A24]. ábra). Vízszintesen 600%-ra függőlegesen 120%-re méretezzük, hogy biztosra menjünk.
[A24]. ábra – A megnövelt rajzterület közepére helyezett elölnézeti fotó. Ezután beillesztjük az egyik 45 fokos képet ([A25]. ábra). Ha nem áll rendelkezésre ilyen kép, akkor kihagyjuk. Kezdjük a baloldali képpel.
[A25]. ábra – 45 fokos kép beillesztése. Az új réteg átlátszóságát körülbelül 60%-ra állítjuk, így láthatjuk az alatta lévő réteget is. Ezután eltoljuk az új réteget, úgy hogy a szem belső sarka átfedésben legyen az alatta lévő réteg megegyező részével. Átméretezzük a képet, hogy a további arcjellemzők (áll és a haj vonala) is illeszkedjenek ([A26]. ábra).
32
[A26]. ábra – A képréteg átlátszóságának állítása segít a pozícionálásban és a méretezésben. A képek helyzetének megfelelő beállítása az egyik legfontosabb lépése textúra létrehozásának. Ügyeljünk tehát, hogy a megfelelő részek átfedésben legyenek. Az oldalsó kép illesztéséhez nincs szükségünk a 45 fokos képre, ezért ennek a láthatóságát kikapcsoljuk ([A27]. ábra). Az oldalsó kép esetén a függőleges magasságot a szem külső sarka határozza meg.
[A27]. ábra – A profil kép illesztése. Az oldalsó kép áttetszőségét 100%-ra állítjuk, majd hozzáadjuk a hátulról készített képet ([A28]. ábra). A helyes pozíció meghatározásához a fül helyzetét és a haj alsó vonalát használhatjuk. Amennyiben szükséges, használjunk forgatást is.
[A28]. ábra – Hátulról készített kép hozzáadása.
33
A fentebb ismertetett lépéseket hajtjuk végre a másik oldalra is ([A29]. ábra).
[A29]. ábra – Mindkét oldalon végrehajtott lépések eredménye. Kikapcsoljuk az összes réteget, kivéve a 45 fokosat és a frontálisát, melynek az áttetszőségét 0%-ra állítjuk. Ezután radír eszközt, és simító ecsetet használunk 50%-os átlátszatlansággal. Letöröljük a 45 fokos képből a szükségtelen részeket, és az ecset segítségével finom átmenetet képezünk a képek illeszkedésénél ([A30]. ábra). Időnként az átlátszóság változtatásával ellenőrizzük, hogy mely részeket kell még eltávolítani, összemosni. A szem, orr és száj részeket a frontális képből vegyük.
[A30]. ábra – Két réteg megfelelő kombinálása. Ismételjük a technikát a többi képre is ([A31]. ábra).
[A31]. ábra – Az összes réteg összemosása. 34
A homlok feletti haj régiót ki kell még egy kicsit terjeszteni és az orca részt simítani. Ezek hagyományos fotóretusálási munkák, amit itt nem részletezünk. Továbbá a rétegek szín/kontraszt beállításait illeszteni kell egymáshoz az optimális réteg vegyítés érdekében. A végső képet úgy vágjuk és méretezzük, hogy a szélessége kétszer olyan nagy legyen, mint a magassága. Játékok textúrázása esetén kb. 512x256, más média esetén magasabb felbontás, pl. 1024x512 pixel ajánlott. Az eredményül kapott textúrát az [A32]. ábra szemlélteti.
[A32]. ábra – Retusálás és vágás után előálló textúra.
35
Értékelés, saját megvalósítás A bemutatott textúra készítő eljárás folyamatos átmenetet biztosít a képek között. A megfelelően elkészített textúra esetén nem látható a képek összeillesztésének határai. További előnye a módszernek, hogy az összekapcsolódó éleket nem mossa el, hanem a képrétegek él közeli területeinek átlátszóságának állításával éri el a folyamatos színátmenetet, így minden részen éles képet biztosít. Nagy felbontású forrásképekből kiindulva részletes textúrát kapunk, azonban lehetőség van kisebb felbontásúra alakítani a képet, így mérlegelhetünk a sebesség és a részletesség között. Lehetőség van egy képfájlban ugyanazt a képet különböző részletezettség mellett tárolni. Ha a modellünket közelről nézzük, akkor a nagyobb felbontású képet feszítjük rá, ha távolabbról szemléljük, akkor elegendő a kisebb felbontás, ugyanis nem lesz észrevehető a különbség. Ezen technikát alkalmazva a megjelenés színvonalának csökkenése nélkül érhetünk el sebességnövekedést. Az ismertetett kiváló technikát mindössze, annyi saját tapasztalattal egészítenék ki, hogy a forrásképek minősége nagyban meghatározza az utómunkálatok mennyiségét és természetesen a végső kép minőségét. Tökéletes forrásképeket nem lehet készíteni, ugyanis akármennyire ügyelünk a fényviszonyok beállításával, valahova biztos vetülni fog árnyék. Ezen árnyékokat a képünkről el kell távolítani, ugyanis hamis árnyék érzetet kelthet saját programba való ágyazás esetén. [A32]. ábra áll körüli részénél észlelhető árnyékot a saját megvalósítás során eltüntettük ([A33]. ábra).
[A33]. ábra – A saját készítésű textúra.
36
Az eredmény modell és értékelése Minden modell felállításának az a célja, hogy a modell tárgyáról fontosnak tartott információkat megtartsuk, a lényegteleneket pedig elhagyjuk. Így egy jobban, gyorsabban vagy épp könnyebben kezelhető rendszert kapunk. Az egyszerűbb kezelhetőség ára az, hogy minden modell csak közelíti a valóságot. A modell jósága, azaz hogy mennyire közelíti meg az eredetit, esetünkben konkrét számokkal nem fejezhető ki, szubjektív. Tényszerűen azonban megállapítható, hogy a legkorszerűbb technikákat sajátítottuk el és alkalmaztuk. Az eredmény ([A34]. ábra) egyedül a készítő szépérzékén és nem a technikai tudásán múlt.
[A34]. ábra – A textúrával renderelt végső modell.
37
5.2.
Animáció
Pszeudo-izom alapú animáció az izom működésének utánzásán alapul. Az izomműködés eredményére koncentrál, mintsem annak biológia szimulálására. A módszer a szabadformájú deformációt (FFD) használja. Egy izomnak egy deformáló test (pl. téglatest) felel meg. A deformáló test vezérlőpontjainak áthelyezésével, súlyuknak megváltoztatásával szimuláljuk az aktuális izom által az arc geometriáján okozott deformációt. Ahogy egy valódi izom deformálná a bőrt, úgy deformálja az FFD az érintett arc régiót. A deformáció paramétereinek időbeli változtatásával jön létre az animáció. Szabadformájú deformáció (FFD) [11] alapján Az FFD (Free Form Deformation) egy geometriai deformációs technika, amit általában modellalkotásban használnak, de animációs technikaként is kiválóan alkalmazható. Az FFD, magyarul szabadformájú deformáció, könnyű megértéséhez célszerű a parametrikus görbékből kiindulni, majd a dimenziószám növelésével fokozatosan eljutunk a célunkig.
5.2.1. Parametrikus görbék
Törtvonal A törtvonal egyike a legegyszerűbb görbéknek. Egyszerűsége ugyanakkor megteremti a lehetőséget az elvek megértésének, általános következtetések levonásának, ezáltal megkönnyítve az áttérést az egy dimenziós görbéről, a síkra majd a térre. Egy törtvonal egy olyan egyenlettel definiálható, amelyet a törtvonal pontjai elégítenek ki. Egy 3 dimenziós törtvonal explicit formában megadva:
x = x(t) y = y(t) z = z(t) t ∈ [0, 1] Az egyenlet értelmezése Ha egy [0,1] intervallumbeli t értéket behelyettesítünk az egyenletbe, akkor a törtvonal egy adott pontjának x, y, z koordinátáit kapjuk meg. Ha a t paraméterrel bejárjuk a [0,1] intervallumot, akkor a törtvonal összes pontját meglátogatjuk. ([A35]. Ábra)
38
Például egy r0[x0, y0, z0]-tól r1[x1, y1, z1]-ig tartó 3D-s szakasz egyenlete:
x = x 0 * (1 - t) + x 1 * t y = y 0 * (1 - t) + y1 * t z = z 0 * (1 - t) + z1 * t t ∈ [0,1] Vektor alakban felírva:
r (t) = r0 * (1 - t) + r1 * t
r1
r(0)
r1 r(1/2)
r0 t=0
r1
r(1)
r0
r0 t = 1/2
t=1
[A35]. ábra - Szakasz egyenletének szemléltetése A szakasz pontjait úgy állítjuk elő, hogy a szakasz végpontjait (vezérlőpontjait) a paraméterektől függően súlyozzuk, majd a részeredményeket összeadjuk. R0-hoz tartozó súlyfüggvény (1-t), r1-hez t tartozik. A görbe alakjáért a vezérlőpontokon kívül ezen függvények felelősek. Fontosságukat nevük is hangsúlyozza, ők a bázisfüggvények. Ennek megfelelően az egyenlet a következő formában is felírható:
r (t) = B 0 * r0 + B1 * r1 Továbbá egyszerűsíthetjük az egyenlet alakját, ha az összegek kiírása helyett a ∑ jelölést alkalmazzuk: n
r (t) = ∑ Bi * ri i =0
Az előzőekben ismertetett elvek általános görbék előállítását is lehetővé teszik. A felhasználó a görbe alakját néhány vezérlőponttal és a hozzá tartozó súlyfüggvénnyel definiálja. A megadott súlyfüggvényektől függően a görbe interpolációs vagy approximációs jellegű. Ha a görbe minden vezérlőponton átmegy, akkor interpolációs, ha csak közelíti azokat, akkor csupán approximációs.
39
Bézier görbe A törtvonal folytonos ugyan, de meglehetősen szögletes ([A2]. ábra). Simább görbére van szükségünk, ahol nemcsak a görbe, hanem annak magasabb rendű deriváltjai is folytonosak. Simább görbe létrehozásához magasabb renden folytonos bázisfüggvényeket kell keresni, mégpedig olyan típusút, ahol a bázisfüggvények összege 1. Ilyen például a Bézier görbe bázisfüggvénye (i = 0, 1, 2, …, m)
B
Bezier i ,m
⎛m⎞ m −i = ⎜⎜ ⎟⎟ ∗ t i ∗ (1 − t ) ⎝i⎠
A Bézier görbe szép görbült ([A36]. ábra), m-szer deriválható, de az egyes bázisfüggvények a teljes paramétertartományban pozitívak, így egy vezérlőpont szinte minden helyen érezteti a hatását. A görbe tehát nem vezérelhető lokálisan, ami megnehezíti a finom beállításokat, hiszen egy vezérlőpont módosítása a vezérlőponttól messze is kihat nemcsak annak közvetlen környezetében. Továbbá minél több vezérlőpontunk van, a görbénk egyre jobban approximációs jellegű lesz, azaz egyre kevésbé közelíti meg a vezérlőpontokat.
[A36]. ábra - Törtvonal és a Bézier görbe
40
B-spline Célunk az, hogy egy görbült és lokálisan vezérelhető görbét kapjunk. Nyilvánvaló, hogy a két kritériumot teljesen egy időben nem lehet kielégíteni. A teljes lokális vezérelhetőséget a törtvonal a szögletesség árán valósította meg, míg a Bézier görbe íveltsége a lokális vezérelhetőség kárára ment. Ezen két görbe típus a két szélső érték a lokális vezérelhetőség és a görbültség tengelyén. A következő görbetípusunk, a B-spline, kompromisszumot kötve mindkét szempontot szem előtt tarja. A törtvonal szögletességén javít anélkül, hogy a lokális vezérelhetőségről teljesen lemondana. B-spline bázisfüggvényei Lineárisan növekvő tartományban (tt - ti) / (ti+K-1 - ti)
Lineárisan csökkenő tartományban (ti+K - tt) / (ti+K - ti+1)
Ahol, tt ∈ [0,1], K a szintek száma (fokszám + 1), ti az i-edik csomóvektor, m a vezérlőpontok száma. A szakirodalom a spline elnevezést gyakran csak a harmadfokú, azaz kétszeresen folytonos, görbékre alkalmazza ([A37]. Ábra). Ugyanakkor érdemes tudni, hogy ha a fokszámmal bejárjuk a [0,m-1] intervallumot, akkor a konstans vezérlőpontoktól eljuthatunk a Bézier görbéig (megfelelő csomóvektorokat felvéve).
[A37]. ábra - Másodfokú NUBS görbe Harmadfokú NUBS görbe A görbe alakját a vezérlőpontokon és a bázisfüggvényen kívül a csomóvektorok értékei befolyásolják még. Egyenletes B-spline (Uniform B-spline) görbének nevezzük azt a görbét, amelyre igaz, hogy a csomóértékek közötti távolság egységnyi. Ha megengedjük, hogy a vezérlőpont párok közötti paramétertartomány eltérő legyen, akkor nem egyenletes B~spline-ról (Non Uniform B-spline) vagy röviden NUBS-ről beszélünk.
41
Az egyenletes B-spline az összes vezérlőpontot közelíti ([A38]. ábra), míg a NUBS görbe esetén elérhetjük, hogy a görbe a végpontokat interpolálja ([A37]. ábra).
[A38]. ábra - Egyenletes B-spline Előfordulhat, hogy bizonyos vezérlőpontok fontosabbak a többinél, és az szeretnénk, hogy a görbe jobban közelítse azt. Ez úgy tehetjük meg, hogy az egyes bázisfüggvényeket a vezérlőponthoz tartozó súllyal vesszük figyelembe ([A39]. ábra). Természetesen továbbra is fennáll, hogy a súlyfüggvények összegének egyet kell adni. Ebből következik, hogy egyik súly a többi kárára növelhető. Tehát a görbe egyenlete: n
r (t ) =
∑w ∗B
NUBS i
i
i =0
n
∑w ∗B i =0
i
(t ) ∗ ri
NUBS i
(t )
Az új görbetípust nem egyenletes racionális B-spline-nak vagy röviden NURBS-nek (Non Uniform Rational B-spline) nevezzük. A súlyok bevezetésének köszönhetően szabadabban alakíthatjuk a görbénket, továbbá a másodfokú implicit egyenlettel megadható görbéket (például kör, ellipszis, parabola, hiperbola stb.) a legalább harmadfokú NURBS-ök segítségével tökéletesen pontosan leírhatjuk, a többi görbével viszont csak approximáljuk.
42
w3=1
w3=3 w4=1
w4=1
w5=1 w2=1
w1=1
w5=1 w2=1
w1=1
[A39]. ábra - Az eredeti NURBS görbe és a súly változtatásának hatása
43
5.2.2. Parametrikus felületek A parametrikus felületek kétváltozós függvények. r (u, v) ahol u, v ∈ [0,1] A parametrikus görbékhez képest az egyetlen eltérés, hogy most nem a számegyenes egy intervallumát, hanem az egységnégyzetet képezzük le az alakzat pontjaira, ezért a parametrikus függvényben két független változó szerepel. A felületet leíró függvényt a véges számú rij vezérlőpont és a hozzá tartozó bázisfüggvény megadásával kapjuk. Parametrikus felület egyenlete: n
m
r (u , v ) = ∑∑ Bij (u , v ) ∗ rij i =0 j =0
A görbével való összehasonlítás után a következő megállapításra juthatunk: A vezérlőpontok most 2D-s rácsot alkotnak A kétváltozós bázisfüggvényeket úgy kapjuk, hogy a görbéknél megismert bázisfüggvények u-val és v-vel paraméterezett változatait összeszorozzuk. Tehát a parametrikus felület egyenletét a következő formában is felírhatjuk: n
m
r (u , v ) = ∑ ∑ Bi (u ) ∗ B j (v ) ∗ rij i =0 j =0
NURBS felületet kapunk, ha a bázisfüggvényeknek választjuk ([A40]. ábra.).
Bi(u)
és
Bj(v)
függvényeket
NURBS
A NURBS felületet a vezérlőpontok mozgatásával, illetve a hozzájuk rendelt súlyok állítgatásával alakíthatjuk. Egy vezérlőpontot úgy is elképzelhetünk, mint egy kis mágnest, amely maga felé húzza a felületet. Egy mágnes erejét, a többi rovására a súlyok növelésével fokozhatjuk. Egy mágnes a hatását csak a környezetében fejti ki. A környezet nagysága a fokszám függvényében változik. Például egy harmadfokú NURBS esetén egy mágnes 16 tartományra hat, azon kívül nem.
[A40]. ábra - Egy 5 * 5-ös vezérlőráccsal definiált kétszeresen és háromszorosan folytonos NURBS felület. 44
5.2.3. Szabadformájú deformáció (Free Form Deformation, FFD) A görbéknél a vezérlőpontok egy sorozatot alkottak, amelyeket egyváltozós súlyfüggvényekkel szoroztunk. A felületeknél a vezérlőpontokat egy kétdimenziós rácsba szerveztük és két, különböző változóval paraméterezett súlyfüggvények szorzataival súlyoztunk. Most pedig a vezérlőpontok egy háromdimenziós rácsot alkotnak, amelyek három, különböző változóval paraméterezett súlyfüggvények szorzataival súlyozunk. A súlyfüggvények mindhárom esetben ugyanazok. A háromdimenziós tér pontjait leíró egyenlet: n
m
l
r (u , v, w) = ∑∑∑ Bi (u ) ∗ B j (v ) ∗ Bk ( w) ∗ rijk i =0 j =0 k =0
A deformációhoz tekintsünk egy p pontot, és fejezzük ki azt a deformációs rács paramétereivel, azaz oldjuk meg a p = r(u, v, w) egyenletet, és számítsuk ki az up, vp, wp koordinátákat! A deformációt a deformációs vezérlőpontok elmozdításával irányítjuk ([A41]. ábra). A p pontunk új helyét a fenti egyenlet alkalmazásával kaphatjuk meg, ha abba behelyettesítjük a régi up, vp, wp koordinátákat és a megváltozott vezérlőpontokat.
[A41]. ábra - A vezérlőpontok áthelyezésének hatása a felületre Értékelés, saját megvalósítás A szabadformájú deformáció segítségével nemlineáris transzformációkat, bonyolult alakváltozásokat idézhetünk elő. Vezérlőpontok áthelyezésével, könnyen és interaktívan változtathatjuk modellünk alakját. Nagy előnye, hogy pár vezérlőponttal képesek vagyunk a poligonháló több ezer csúcspontját vezérelni, ezzel időt és energiát spórolva meg. Mint ahogy a szemléltető ábrákon láthattuk, sikerült megvalósítani a szabadformájú deformációt. Az átültetés hatékonyságát bizonyítja, hogy a modellünket képes valós időben animálni. 45
5.3.
Képfeldolgozás
5.3.1. Képpiramisok [4] A képpiramis technika széles körben alkalmazható a képfeldolgozásban, a megvalósított rendszer szinte minden eljárásnál használja a sebesség növelésére. A képpiramis egy kép többszöri másolatából épül fel, nagyon hatásos képtartományok ábrázolására. Minden szintje negyed akkora, mint az előtte lévő szint, a legalacsonyabb szint a legnagyobb felbontású, a legfelső pedig a legkisebb. Gauss piramis Jelölje az eredeti képet I, a legalsó szintet g0. A g1 szint az előző szint súlyozott átlagából számítható ki. g l (i , j ) =
2
2
∑ ∑ w( m , n ) g
m = −2n = −2
l −1
( 2i + m,2 j + n)
, ahol i és j a kiszámolandó képpont koordinátái, w(m,n) pedig az ablak m-edik oszlopának n-edik eleme, 5*5-ős ablak méretnél Ebből is látszik, hogy az eredmény negyede lesz a forrás képnek, ezért ezt a műveletsort REDUCE-nak, azaz csökkentésnek nevezik. g l = REDUCE [ g l −1 ] A w(m,n) maszk közelítheti a Gauss görbét, ekkor felbontható tényezőire.
w(m, n) = wˆ (m) wˆ (n) Az egy dimenziós wˆ (m) maszkra teljesülnie kell a következőknek:
Legyen wˆ (0) = a, wˆ ( −1) = wˆ (1) = b, wˆ ( 2) = wˆ ( −2) = c.
1. szimmetrikus, wˆ (i ) = wˆ (−i ) 2. összege 1, a + 2b + 2c = 1 3. az adott szint súlya hozzáadódik a következő szint súly értékéhez, a + 2c = 2b wˆ (0) = a, 1 , 4 1 a wˆ ( 2) = wˆ ( −2) = − . 4 2
Ezeket, a feltételeket felhasználva wˆ ( −1) = wˆ (1) =
Egy kétdimenziós 5*5-ös ablak lehet a következő:
1 1 2 1 1
1 2 4 2 1
2 4 8 4 2
1 2 4 2 1
1 1 2 1 1
/52 46
Laplace piramis
A REDUCE mellett létezik egy EXPAND műveletsor is, ami növeli a kép méretet, egy M+1 méretű képből 2M+1 méretű képet állít elő. g l , n = EXPAND [ g l ,n −1 ] Ez a következőként számolható:
g l ,0 = g 0 g l ,n (i, j ) =
2
2
∑ ∑ w( p, q) g
p = − 2. q = − 2
l , n −1
(
i− p j−q , ) 2 2
, ahol gl,n az EXPAND által meghatározott l szinten lévő kép (gl), n-edszer felnagyított képe, a w(p,q) pedig az ablak elemeit jelöli.
Vegyük észre, hogy ez a kifejezés csak akkor értelmezhető, ha
i− p j−q , egész értékek. 2 2
A Laplace (L) kép, a piramis egymást követő szintjein lévő képek különbségeként áll elő, úgy, hogy a felsőbb szinte lévő képet felnagyítjuk. Az Ll az eredeti kép és az arra alkalmazott két (csökkentő és növelő) Gauss függvény különbségét fejezi ki. Ll = g l − EXPAND [ g l +1 ] = g l − g l +1,l
Az eredményként kapott hatás ekvivalens a Lapalace operátoréval, és főleg él detektálásnál hasznos.
Kerületi feltételek
Mind a REDUCE, mind az EXPAND műveletnél észre kell venni, hogy a kép kerülete mentén, forráspontok hiányában, számítási problémák lépnek fel, melyek a forrás kép határa mentén történő kivetítéssel orvosolhatóak. Gl ( −1, j ) = 2Gl (0, j ) − Gl (1, j ) Gl ( −2, j ) = 2Gl (0, j ) − Gl ( 2, j )
47
5.3.2. Objektumkövetés Mivel a fejet nem csak felismerni, hanem követni is kell annak mozgását, ezért szükség van objektumkövető eljárásra is. Az OpenCV függvény könyvtárban erre is található kielégítő megoldás, de mégis had következzen itt néhány mondat a működési elvről. Egy követési eljárásnak két fontos paramétere van a pontosság, és az ellenálló képesség. Az előbbi teljesítéséhez al-pixeles (sub-pixel) pontosságot használ az eljárás, amely képi koordináta rendszer valós számokra történő kiterjesztését jelenti. x = x0 + α x y = y0 + α y , ahol az egész értékek és a ]0;1[ intervallum valós értékeinek összege adja a képpont értékét. A kép mérettől való függetlenség eléréséhez, az ellenálló képesség növeléséhez pedig a képpiramisokat. 1 2 1 2 4 2 1 2 1 /16 Az elmozdulás értékét mindig a legmagasabb szinten számítja ki, és előre megbecsüli az alacsonyabb szinten bekövetkezett elmozdulást.
ε (d ) = ε (d , d ) = L
L
L
L x
L y
u xL + ω x
∑
u yL + ω y
∑ (I
L
( x, y ) − J L ( x + g xL + d xL , y + g yL + d yL )) 2
x = u xL −ω x y = u yL −ω y
, ahol x és y kép koordináták, I az eredeti kép, J a már elmozdult kép, d az elmozdulás, g a képpiramis, L a képpiramis szintje, u a vizsgált képpont, w pedig az ablakméretet jelöli A tényleges elmozdulás is ezen a becsült érték legalacsonyabb szintig történő kiterjesztéséből kerül meghatározásra. A teljes eljárás részletes leírása és pszeudo kódja megtalálható [5] az irodalomban.
48
Megvalósítás
A rendszer első lépésként elindítja a kamera képen az arckereső eljárást. Amennyiben az arcot talál a képen, meghatároz egy befoglaló téglalapot ([A42]. ábra). Az arc befoglaló téglalapjának X és Y irányú változása alapján lehetséges a modellt az említett irányokba eltolni a virtuális térben. A tesztelés során azonban kiderült, hogy gyakran a fej minimális oldalra fordítása során is elveszíti a fej követését, illetve a befoglaló téglalap folyamatosan "pulzál" mozdulatlan fej esetén is, amely a modell kellemetlen ugrálását vonja maga után. Az említett problémák kiküszöbölése érdekében mindössze egyszer futtatjuk le az arckeresést, majd a befoglaló téglalap által meghatározott képrészen kontúr pontok lettek elhelyezve ([A43]. ábra). E kontúr pontok kerülnek átadásra az objektumkövető eljárásnak. A pontok követése során megkapott elmozdulások iránya és nagysága alapján X és Y irányba toljuk a virtuális térben a modellt. A továbbfejlesztett eljárásnak három előnye is van. Egyrészt megszűnt a modell zavaró ugrálása, másrészt nem veszíti szem elől az arcot, ha elfordul a fejét. Az utolsó ugyanakkor nem elhanyagolható szempont pedig, hogy gyorsabb működést produkál.
[A42]. ábra – Arc befoglaló téglalapja
[A43]. ábra –Kontúr pontok a téglalapon belül Értékelés
Sikeresen megtalálja a kamerába néző arcot, majd orientációtól függetlenül képes követni azt. Egy arckereső és követő eljárástól mindössze az X és Y irányú eltolási animációs paraméterek várhatók el, ugyanis ezen eljárások célja az arc pillanatnyi helyének a meghatározása a képen. Az arc befoglaló keretének ismeretében azonban tovább lehet lépni az egyes arckifejezések felismerésére, ami továbbfejlesztés célját képezi.
49
6. Összefoglalás Az arckeresés, modellezés és animációs irodalom ismertetése mellett elkészült egy alkalmazás, mely az ismertetett irodalmat a gyakorlatban is szemlélteti. A lehetőségek keretei között törekedtünk az általánosságra, így elmondható hogy a részletesen bemutatott modellezési, animációs és objektumkereső technikák más alkalmazási keretek között is megállják a helyüket. Az elkészült alkalmazásra is elmondhatók az előbbiek, ugyanis tetszőleges modellt tartalmazó fájl betölthető a programunkba, majd ott végrehajtható a deformáció és végül szabványos formátumban elmenthető az eredmény modell. A képfeldolgozó modul esetén is elmondható, hogy nem csak arc keresésére, követésére alkalmas, hanem bármely előzőleg betanított objektumra alkalmazható.
7. Megoldandó feladatok Jövőbeni elképzeléseink között szerepel az animációs rendszer továbbfejlesztése. A kamerából nyert képen az arc megtalálásán túl arckifejezéseket kívánunk detektálni, illetve az életszerű animációkat támogató keretrendszert létrehozni.
8. Elérhetőség A szerzők bármilyen észrevételt szívesen fogadnak a következő címeken: Markovics Mátyás:
[email protected] Szőke Imre:
[email protected] A dolgozat és a folyamatosan fejlesztett alkalmazás honlapja a következő címről érhető el: http://www.starfleet.hu/iar/2005_2006/FHM
50
9. Irodalomhivatkozások [1] Ming-Hsuan Yang, Member, IEEE, „Recent Advances in Face Detection” ICPR 2004 http://vision.ai.uiuc.edu/mhyang (2005-11-04) [2] Rainer Lienhart, Alexander Kuranov, Vadim Pisarevsky „Empirical Analysis of Detection Cascades of Boosted Classifiers for Rapid Object Detection” MRL Technical Report, May 2002, revised December 2002 http://www.lienhart.de/MRL-TR-May02-revised-Dec02.pdf (2005-11-04) [3] Paul Viola and Michael J. Jones. „Rapid Object Detection using a Boosted Cascade of Simple Features” IEEE CVPR, 2001. http://research.microsoft.com/~viola/Pubs/Detect/violaJones_CVPR2001.pdf (2005-11-04) [4] Mubarak Shah, „Fundamentals of Computer Vision”, Computer Science Department, University of Central Florida Orlando, FL_32816, December 7, 1997, Pages 81-85. [5] Jean-Yves Bouguet. „Pyramidal Implementation of the Lucas Kanade Feature Tracker”. The paper is included into OpenCV distribution. [6] Open Computer Vision Library. http:/sourceforge.net/projects/opencvlibrary/ (2005-11-04) [7] Won-Sook Lee, N. Magnenat-Thalmann, "Fast Head Modeling for Animation", Journal Image and Vision Computing, Volume 18, Number 4, pp. 355-364, Elsevier, 1 March, 2000. http://www.miralab.unige.ch/papers/28.pdf (2005-11-04) [8] Kalra P, Mangili A, Magnenat-Thalmann N, Thalmann D, “Simulation of Facial Muscle Actions Based on Rational Free Form Deformations”, Proc. Eurographics’92, pp. 59-69, NCC Blackwell,1992. http://ligwww.epfl.ch/~thalmann/papers.dir/EG92.FFD.pdf (2005-11-04) [9] H. Gupta, A. Roy-Chowdhury, R. Chellappa, „Contour based 3D Face Modeling From A Monocular Video”, British Machine Vision Conference, 2004. http://www.ee.ucr.edu/~amitrc/face3D_BMVC2004_Final.pdf (2005-11-04) [10] Jim Lammers, Lee Gooding, „Maya a 3D világa”, Perfact-Pro Kft., 2003. [11] Dr. Szirmay-Kalos László, Antal György, Csonka Ferenc, „Háromdimenziós grafika, animáció és játékfejlesztés”, Computerbooks, 2003. [12] Munin, „Creating face/head textures for human(oid) game characters” http://worldforge.org/project/newsletters/October2002/CreateHeadTexture (2005-11-04) [13] Isham Padron, „Ugly Character UV Map Tutorial” http://www.eliteops.com/sama/uv_tutorial/ (2005-11-04) [14] LucasArts: Grim Fandango http://www.lucasarts.com/products/grim/default.htm (2005-11-04) 51
[15] 3D Scanners http://www.3dscanners.com/ (2005-11-04) [16] 3D-SHAPE GmbH http://www.3d-shape.com/home/home_e.php (2005-11-04) [17] Maya www.aliaswavefront.com (2005-11-04) [18] 3ds MAX http://www4.discreet.com/3dsmax/ (2005-11-04)
10. Ábrajegyzék [A1–11] Maya a 3D világa [10] – 7. fejezet ábrái alapján [A12] Saját készítésű fotó [A13] Maya [17] programból készült képernyőmentés [A14–21] Ugly Character UV Map Tutorial [13] ábrái [A22] Maya [17] programból készült képernyőmentés [A23–32] Creating face/head textures for human(oid) game characters [12] ábrái [A33] Saját fotók alapján készített kép [A34] Maya [17] programból készült képernyőmentés [A35] Háromdimenziós grafika, animáció és játékfejlesztés [11] 3.11-es ábra alapján [A36–43] Saját programból készült képernyőmentés
52