A 2007.01.08-as vizsga

A VIK Wikiből

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


Grafika section

1. Feladat

Adott volt egy homogén lineáris transzformációs mátrix (M), valamint egy ponthalmaz (lásd lentebb), ebből kellett megadni azt az új ponthalmazt, amelyre a trafó leképezi az eredetit. Megoldás menete 5p, számolások 6p.

Az eredeti ponthalmaz egyenlete:

Megoldás


A homogén linearis transzformació pontot pontba, egyenest egyenesbe visz. Az invertálható homogén lineáris transzformáció ezen felül még sikot síkba visz át.

A megadott transzformació [x, y, z, 1] pontból [8x+8, 6y+6, 4z+4, 2]-t csinál.
Legyen [x,y,z] az a pont, ami kielégíti az egyenletet.
Az új pont: [X,Y,Z,1] = [x,y,z,1] * M = [8x+8, 6y+6, 4z+4, 2] = [4x+4, 3y+3, 2z+2, 1]
Így X=4x+4, Y=3y+3, Z=2z+2 és ezekből az x, y, z koordinátákat az X, Y, Z függvényeiként behelyettesítve az egyenletbe megkapjuk az új ponthalmazt:
8(1/4*(X-4)) + 6(1/3*(Y-3)) + 8(1/2*(Z-2)) + 6 = 0
azaz X + Y + 2Z - 8 = 0

-- lightcom - 2007.01.09. -- kdodi - 2007.01.08. -- Definíciót javította Imi - 2007.01.09.


Alternatív megoldás 1

M' az M invertált mátrixa

[X,Y,Z,1] = [x,y,z,1] * M

--> [x,y,z,1] = [X,Y,Z,1] * M' = [e(X,Y,Z), f(X,Y,Z), g(X,Y,Z), h(X,Y,Z)]

(ezen közvetlenül megkapjuk az x, y, z függvényeit, nem kell az inverz függvényeket kiszámítani az előző módszer szerint. Persze ez csak egyszerű ha könnyű az inverz mátrix számítása)

Ha h(X,Y,Z) nem 0 akkor behelyettesítjük az x=e/h, y=f/h, z=g/h változókat az eredeti egyenletbe, így megkapjuk az új egyenletet, amely csak X-t, Y-t, Z-t tartalmaz.

-- lightcom - 2007.01.09.

A megoldás megértéséhez érdemes megnézni a bmetransf.pdf utolsó diáit.

Az invertált mátrix transzponáltja:

-- Yaman - 2007.01.12.


2. Feladat

Mit csinál a pixel (fragment) árnyaló (shader) a megadott OpenGL kód feldolgozásakor? Sum. 11p, nem ide illő megjegyzések -1p!

glDisable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); gluPerspective(fov, (double)width/height, front, back);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); gluLookAt(eyex, eyey, eyez, vrpx, vrpy, vrpz, vupx, vupy, vupz);
glBegin(GL_TRIANGLES);
glTexCoord2f(u1, v1); glVertex4f(x1, y1, z1, w1);
glTexCoord2f(u2, v2); glVertex4f(x2, y2, z2, w2);
glTexCoord2f(u3, v3); glVertex4f(x3, y3, z3, w3);
glEnd();

Itt meg volt adva az OpenGL kód, szokásos függvényekkel, semmi Xtra igazából, volt egy GL_MODULATE a textúra tulajdonságoknál, meg a végén 3 glTexCoord2f(u,v); glVertex3f(x,y,z), tehát egy háromszög volt a szenvedő alany..

Mo.: Ha leírta valaki a pixel shader által elvégzett alapműveleteket korrektül, felesleges mellébeszélés nélkül, akkor nem lehetett gond.
Talán: vertex shadertől megkapjuk a csúcs koordinátáit, és az árnyalás által kiköhögött színértékeket, ehhez hozzáadjuk a textúrából származó színinformációt (pontosabban szorozzuk a 2 színértéket GL_MODULATE miatt), ezek voltak eddig a csúcsok.. a köztes pixelekre pedig lineáris interpolációval számítjuk a színt..

-- Geri - 2007.01.13. Szerintem még érdemes lehet azt is leírni, hogy a fenti kódban a világítás ki van kapcsolva, ezért valószínűleg nem fog árnyalni a program (pontosabban egy színnel árnyal és ahhoz szorozza a textúrát), illetve a GL_DEPTH_TEST miatt a shader lefutása után, a következő pixel feldolgozása előtt eldől hogy látható-e az adott pixel vagy nem (ez azért lehet fontos, mert a Z bufferrel variálhat a pixel shader). (Ha hülyeség javítsátok. Kéne egyébként valami részletes leírás ezekről a lépésekről)

Képfeldolgozás section

3. Feladat

Adott volt egy 3x3-as képrészlet, 9 pixel szürkeskálás értékekkel (8 biten ábrázolunk). 4p



a) Lineáris szűrés 3x3-as tartományon. 2p

Mo.: A középső pixel értékét tudjuk nyilván csak megmondani, mivel a többinek nem ismert a teljes környezete, ezt pedig egyszerű átlagolással, mégpedig

b) Medián szűrés 3x3-as tartományra. 2p

Mo.: Medián szűrés: veszzük a pixel egy adott környezetét (pl. 3x3) és az ebben található fényesség értékeket sorbarendezzük (ez a művelet a ranking), majd kiválasztjuk a középsőt, és ez lesz a szűrt képen a pixel értéke.
Ez már egy kicsit trükkösebb feladat volt, itt ugyanis nem csak a középső pixel új értékét tudjuk megadni, hanem, mivel a medián szűrés sorbarendezi a pixeleket szürkeskála-érték szerint, és a középsőt választja, ezért a középső kereszt (ld. ábra) értéke tutira csupa 9-es lesz. Miért is? Mert ezeknek a környezetében már 5 db kilences van, minekután már tökmind1, milyen pixelek vannak még körülöttük, 9 lesz a sorrendben középső szürkeérték.



4. Feladat

Adott egy kép, amelyre meg kell mondani, milyen képfeldolgozási műveleteket végeztek el rajta. 4p

Itt valamiféle felismerhető tulajdonságok alapján kellett rávillantani a megoldást, ha jól emlékszem adaptív vágás volt.. látható volt rajta, hogy a sötét és világos részek jól elkülönülnek, kiemelkednek, viszont élkiemelés nem lehetett, mivel a nagy valószínűséggel homogén részletek továbbra is "pettyesek" maradtak, és elég zajos volt a kép..

-- LiFeX - 2007.01.08.