Pro změření vzdálenosti 3D bodu X potřebujeme znát jeho projekce xi z více pozic kamery, tj. pro danou projekci x0 v obraze z počáteční pozice musíme být schopni nalézt v novém obraze z i-té pozice bod xi, který je projekcí stejného bodu X. Obraz samotného bodu nemá dostatek informace, abychom jej mohli opakovaně nalézt, proto pracujeme i s okolím bodu (patch) o ploše řádově stovek pixelů. Úlohu můžeme chápat jako:
Sledování předpokládá pouze omezený pohyb sledovaného patche mezi následujícími obrazy. Tento předpoklad můžeme splnit, protože scéna je statická a pohyb v obraze vzniká změnou pozice kamery, kterou máme pod kontrolou.
Implementujte metodu sledování Kanade-Lucas(-Tomasi) (KLT) podle přednášky KLT. Odvození v přednášce je provedno pro obecnou transformaci W(x;p), kde x je pozice v předchozím obraze a p vektor parametrů transformace. Pak je uveden speciální případ, kdy uvažujeme pouze posunutí (translation) sledované oblasti. V naší úloze posunutí postačuje. Pro lepší orientaci v rovnicích si u každého vektorového/maticového členu uvědomte (případně připište) rozměr vektoru/matice.
Potřebný gradient obrazu získáte např. diskrétní konvolucí (funkce conv2
)
s maskou [1 0 -1]
(platí pro gradient v ose x, pro gradient
v ose y musí být maska transponovaná). Uvědomte si, jak se konvoluce chová
na krajích obrazu – vyhněte se doplňování okrajů obrazu nulami,
gradient na těchto okrajích bude špatně a chyba se promítne do celého
výpočtu. Zkontrolujte gradient vizuálně – měly by být vidět hrany
v odpovídajícím směru.
Odevzdávaná úloha
Není cílem mít perfektní sledování, stačí metoda, která bude za určitých splnitelných podmínek fungovat a tyto podmínky uvést.