33PVR 2007 - DU-03 - Přenesení objektu mezi obrazy

Zadání

Vstup: Naše známá sekvence fotografií, ve které přibyl první obrázek vyfocený z kostkou.

Teď vám navíc můžeme prozradit, že obrázky byly vyfoceny kamerami s konstantní maticí K intrinsických (vnitřních) parametrů. Tj. při snímání jsme nehýbali se zoomem ani zaostřením, hýbal se pouze fotoaparát jako celek. To lze dosáhnout tím, že zamkneme zaostřování - lepší foťáky tuto možnost mají.

Výstup: Sekvence stejných obrázků, ve kterých bude vložena kostka. Tj. vyrobíte obrázky "02+kostka.jpg" až "17+kostka.jpg", které se budou mít k obrázkům "02.jpg" až "17.jpg" jako se teď má "01+kostka.jpg" k "01.jpg". Správnou pozici rohů kostky spočítáte z korespondencí získaných v úloze DU-02 dle návodu níže. Správnou texturu přenesete na strany kostky pomocí algoritmů z úlohy DU-01.

Úkolem je napsat automatický algoritmus v MATLABu, který toto udělá.


Termíny

Ti, co mají zkoušku v předtermínu, odevzdají na (libovolném) cvičení před termínem zkoušky. Např. má-li někdo zkoušku 31. května, odevzdá nejpozději 29. května (je-li z paralelky 104, přijde v úterý).

Podrobný postup řešení

  1. Zvolte souřadnou soustavu scény a spočítejte intrinsické (vnitřní) parametry K první kamery. To uděláte následujícně:

    1. Myší naklikejte viditelné rohy kostky v prvním obrazu. Jejich projekce v obrazu v homogenních souřadnicích označme vi.

    2. Zvolte (libovolně až na otočení, posunutí a měřítko) 3D souřadnice odpovídající těmto rohům kostky. Tím zvolíte souřadnou soustavu scény. Např. můžete zvolit jeden roh jako [0,0,0]' (nehomogenní vektor) a délku hrany kostky rovnou jedné. Tyto body v homogenních souřadnicích označme Yi.

    3. Spočítejte projekční matici M první kamery z rovnice &lambdai vi = M Yi. To uděláte podobným způsobem, jakým jste počítali homografii ze čtyřech korespondencí v úloze DU-01, tj. vyřešením homogenní lineární soustavy rovnic. Zatímco jste pro homografii potřebovali 4 korespondence, zde jich budete potřebovat 6 (přesněji pět a půl, ale prakticky 6).

      Nezapomeňte na normalizaci: aby to dobře chodilo, musíte vynásobit body vi vhodnou maticí, aby jejich délka byla zhruba 1. To se udělá nejlépe tak, že se osy obrázku transformují tak, že uprostřed je nula a obrázek má šířku a výšku jedna. Příklad: Je špatně, kdyz homogenní souřadnice obrazových bodů vstupujících do kalibrace jsou např. [220,634,1]; musíte je transformovat tak, aby byly např. [-0.4,0.8,1].

    4. Projekční matici M rozložíte podle vzorečku M = K R [I | -T], kde K je (trojúhelníková) matice vnitřních parametrů, R je rotační matice (tj. RR'=I) vyjadřujíci rotaci soustavy kamery vůči soustavě scény, a T je (nehomogenní) vektor posunutí mezi soustavou kamery a soustavou scény. Písmeno I označuje jednotkovou matici 3x3.

      Tento rozklad uděláte pomocí RQ-rozkladu, obdobného známému QR-rozkladu v lineární algebře. QR-rozklad je k dispozici v MATLABu, RQ-rozklad se liší pouze přehozením matic a musíte ho udělat pomocí QR-rozkladu a např. maticové inverze.

    Důležitá poznámka. Matice K je dosti citlivá na přesné naklikání rohů kostky. Přesněji, nejcitlivější je hlavní bod, daný (nehomogenním) vektorem K([1 2],3). Naneštěstí, P3P algoritmus (viz dole) potřebuje, aby matice K byla určená dostatečně přesně. Tedy je kritické naklikat rohy kostky přesně a použít všech 7 viditelných rohů. Pro kontrolu (po vydělění matice K skalárem K(3,3)): K(1,1) a K(2,2) mají být zhruba stejné, K(1,2) zhruba nulový, a K([1 2],3) zhruba ve středu obrázku. Pokud se to nepodaří, zkuste jedno z následujícího: Za nic z toho neručíme!

    Po splnění tohoto úkolu tedy máme spočítané vnitřní parametry první kamery K a rohy kostky Yi. Víme, že i ostatní kamery mají ty samé vnitřní parametry K. Víme, že body Yi určují soustavu souřadnou scény, která (přirozeně) bude také ta samá pro všechny obrázky.

  2. Spočítejte rovinu obrázku s Rumcajsem (v souřadné soustavě scény). Tuto rovinu spočítáte z toho, že v ní leží tři dolní rohy kostky.

    Rovinu representujte sloupcovým homogenním 4-vektorem A. Pokud bod X (také sloupcový homogenní 4-vektor) leží v rovině A, platí A' X = 0. Z toho rovinu spočítáte pomocí SVD.

  3. Z korespondencí, které máte z úlohy DU-02, vyberte 3 body X1, X2, X3 s následujícími vlastnostmi: Projekce těchto bodů v t-tém obrazu sekvence označme ut1, ut2, ut3 (homogenní 3-vektory).

    Spočítejte 3D souřadnice těchto bodů, reprezentované homogenními 4-vektory X1, X2, X3. To uděláte tak, že protnete rovinu A a paprsky z kamery odpovídající bodům u11, u12, u13.

  4. Pro každý obraz t=2...17 spočítejte vnější parametry Rt, Tt. To lze udělat ze tří bodů X1, X2, X3 a z jejich projekcí ut1, ut2, ut3, při znalosti vnitřních parametrů K. Tento problém se jmenuje "P3P problém" (point-three-point problem).

    Řešení P3P problému není zcela snadné, neb vede na soustavu tří kvadratických rovnic o třech neznámých. Řešení bylo popsané na přednášce PVR v pátek 27.4. Zde jsou z ní slajdy a zde je článek ze kterého slajdy vychází (nešířit!).

    Všimněte si: Může být až 16 reálných řešení pro Rt, Tt (viz slajdy). Vyberte správné řešení takto:

    Toto je dále popsané také ve slajdech.

  5. Pomocí Rt, Tt přenesete rohy kostky z prvního obrazu do všech ostatních.

  6. Pomocí algoritmu z DU-01 přenesete texturu z obrazu 01+kostka.jpg do ostatních obrazů. K tomu se vám nejspíše bude hodit matlabská funkce 'poly2mask'.

Upozornění

Oproti DU-02 bude potřeba méně programování, ale bude třeba rozumět geometrii. Je třeba každý kousek kódu pečlivě testovat a být zcela jistý/á, že je správně. Opět, kdo si nechá úlohu na poslední chvíli, nemá šanci to stihnout (čímž nesplní podmínky pro absolvování předmětu). Proto doporučujeme průběžnou kontrolu implementovaných výsledků v následujících třech cvičeních takto: