V této úloze se vrátíme k odhadu homografie z první úlohy, ale korespondence místo ručního označení nalezneme KLT trackerem spuštěnou na více bodech (řádově desítky) prvního obrazu. V nalezených korespondencích budou chybné páry, tzv. outliery. Protože odhad homografie metodou nejmenších čtverců funguje spolehlivě pouze na datech bez outlierů, obalíme ho metodu RANSAC z přednášky pro nalezení řešení podporovaného největší podmnožinou korespondencí.
Stáhněte si obrazy sejmuté AVbotem během posunu
AVbot-translation-sequence.zip,
jméno obrazu odpovídá pozici v milimetrech. Nejdříve začněte s dvojicí obrazů,
mezi nimiž je malý posun (<=10mm). Pokud vám přestanou
fungovat funkce rgb2gray(), im2double()
, použijte pro převod
obrazu na šedotónový jednoduché průměrování přes kanály:
im=mean(double(im)/255,3)
.
n
sledovaných bodů x1
v prvím obraze
x2
v druhém obraze KLT trackerem pro všechny body x1
gradient()
i
uložené v matici
P
[2xN], pak porovnávejte v iteraci i>10
:
norm(P(:,i)-P(:,i-10)) > 2*norm(P(:,i)-P(:,i-1))
x1
↔x2
,
můžete použít první čtyři indexy z permutace randperm()
calcA()
(Ak odpovídá parametrům modelu θk z přednášky)
x1
transformací Ak
a najděte support-set, tj. množinu bodů v toleranci tol
od korespondujících bodů x2
imtransform()
první obraz nejlepší homografií A* a zobrazte na
něm posuny bodů funcí quiver()
vstupní dvojice obrazů 320×240px sejmutá AVbot-em z pozic [0mm,0st] a [20mm,0st] | ||
posun na 35 bodech nalezený KLT trackerem s patchem 45×45px,
výběr support-setu (červené vektory) RANSACem s tolerancí 0.5px
všimněte si, že většina korespondencí byla nalezena špatně, přesto RANSAC našel správný support-set |
||
homografie aplikovaná na první obraz, srovnání s použitím RANSACu
a bez něj (LSE na všech bodech) modré vektory ukazují směr posunu |