Homografie - A jak ji vypočítat?

Ahoj všichni, jsem zpátky! Jsem nadšený a nemohu se dočkat, až budu psát a publikovat tento blog. Doufejme, že jste nadšeni, že si ji také přečtete.

Foto Antoine Dautry na Unsplash
O mně a této sérii blogů!
Jsem Siddharth. Jsem autonomní strojvedoucí při spouštění elektrického vozidla z Los Angeles, který pracuje na problémech s vnímáním. Rád programuji roboty tak, aby viděli svět kolem nás. Spolu s mým kolegou @Aviralksinghem plánuji napsat tuto sérii blogů, abych vysvětlil nejzákladnější koncepty v počítačovém vidění a robotice spolu s matematikou za nimi, což nám pomáhá provádět percepční úkoly pro technologie, jako jsou autonomní auta nebo rozšířená realita. Toto je můj druhý blog v sérii. Chcete-li se dozvědět více o mně nebo o mém prvním blogu, přečtěte si toto:

Nyní se pojďme ponořit.

Tento blog je o homografii mezi dvěma pohledy. Zahrnovalo by to některé matematické derivace: D. Pokud nemáte příliš mnoho matematiky, můžete tyto části blogu přeskočit. Předpoklady pro tento blog by byly základní počítačové vidění (např. Perspektivní geometrie) a lineární algebra. Většina obsahu je převzata z „Multiview Geometry in Computer Vision“ od Richarda Hartleyho. Rád bych si přečetl kapitolu 13 „Scénická letadla a homografie“ z této knihy, abych získal další informace o tomto tématu.

Zde je několik témat, která by byla zahrnuta v tomto blogu.

  1. Co je to homografie? Je to výpočet pomocí matic perspektivních kamer.
  2. Výpočet homografie pomocí bodových korespondcí.
  3. Homogenní řešení s nejmenším čtvercem.
  4. Rozdíl mezi homografií a základní maticí (pro čtenáře, kteří jsou obeznámeni se základní maticí).

Homografie popisuje projektivní geometrii dvou kamer a světové roviny. Jednoduše řečeno, homografie mapuje obrázky bodů, které leží na světové rovině z jednoho pohledu kamery na druhý. Je to projektivní vztah, protože závisí pouze na průniku rovin s liniemi. Jak je vidět na obrázku níže:

Rovinná homografie

H mapuje body x a x ', přičemž všechny body X (světové body odpovídající x a x') leží na stejné rovině. Předpokládejme, že promítací matice pro dva pohledy jsou

kde s je měřítkový faktor označující nejednoznačnost, když převádíme z obrazového prostoru do světového prostoru v důsledku vlastní ztráty 3D informací. O této dvojznačnosti jsem vysvětlil ve svém předchozím blogu. Pro účely tohoto blogu můžeme předpokládat, že první kamera jako referenční, a proto matice rotace pro první kameru je Identita a překlad je nula. Pomocí výše uvedených rovnic můžeme snadno dojít k závěru

Homografii lze tedy vypočítat pomocí relativní rotace a posunu mezi dvěma kamerami. Často se však stává, že nemáme relativní postavení mezi dvěma pohledy (nebo jinak řečeno, vždy nemáme dvě kalibrované kamery) a přesto jsme povinni vypočítat mapování mezi prvním obrázkem a druhým obrázek rovinných bodů na světě.

Předpokládejme, že chceme inzerovat jakékoli logo (řekněme logo Georgia Tech) na židli během živého televizního vysílání fotbalového utkání.

Takhle

Jak to uděláme? Tento problém můžeme formulovat jako problém s homografií tím, že předpokládáme, že už máme cílový příspěvek s logem. Máme tedy dva pohledy na kameru: jeden je fotoaparát, ze kterého bylo video pořízeno, a druhý je hypotetický fotoaparát, ze kterého byl pořízen obrázek loga. Pohledy v obou z nich mají společnou brankovitou rovinu (světovou rovinu), na které je logo promítáno. Nyní musíme vypočítat mapování mezi těmito dvěma pohledy kamery. Ale protože jedna z kamer je hypotetická, nemůžeme spočítat relativní pozice mezi těmito dvěma fotoaparáty. V tomto případě tedy pro výpočet homografie používáme bodové korespondence. Korespondence bodů jsou dvojice odpovídajících bodů (x, x ') ve dvou pohledech kamery, o kterých už víme. Tyto korespondence můžeme použít k získání mapování, které pak lze použít k výpočtu korespondence pro všechny ostatní body ležící v této světové rovině.

Výpočet homografie pomocí bodových korespondcí

Než se podíváme na to, jak vypočítat homografii pomocí bodových korespondencí, dovolme krátce diskutovat o některých vlastnostech matice homografie. Homografie spojuje body v prvním pohledu s body v druhém pohledu a protože v obou pohledech neexistují žádná omezení, jedná se o matici plného pořadí (= 3). Rovněž je homografie definována až do stupnice (c ve výše uvedené rovnici), tj. Může být změněna nenulovou konstantou bez jakéhokoli ovlivnění projektivní transformace. Homografie má tedy 8 stupňů volnosti, přestože obsahuje 9 prvků (matice 3x3), tj. Počet neznámých, které je třeba vyřešit, je 8. V příkladu pro fotbalové góly bychom potřebovali jen 4 body, protože každý bod má x a y souřadnice a existuje celkem 8 neznámých k vyřešení H pro jedinečné řešení. Tyto čtyři body mohou být čtyřmi rohy branky.

Pokud existuje více než 4 body, byl by to přeceňovaný případ, a proto musíme pro nalezení h použít nejméně čtvercové řešení

Hartley a Zisserman navrhli normalizační krok před výpočtem h, aby se řešení rovnice Ah = 0 stalo stabilnější v přítomnosti šumu a aby se zabránilo správnému výsledku divergence. Cílem je vypočítat transformační matici T a T ', která transformuje x a x' tak, že těžiště těchto bodů je souřadnicový počátek a pevná průměrná vzdálenost od počátku. Po výpočtu H 'z transformovaných bodů můžeme pomocí původní matice získat zpět původní matici

Homogenní řešení nejmenších čtverců

SVD lze snadno vypočítat pomocí knihovny Eigen v C ++. Zde je část kódu, která vypočítává homografii pomocí korespondence.

Celý kód pro promítání loga na branku je k dispozici v mém úložišti githubů:

Rozdíl mezi homografickou maticí a základní maticí

I když jsem ještě o žádném z mých blogů nevysvětlil základní matici, ale kvůli přehlednosti chci stručně vysvětlit rozdíl mezi těmito dvěma maticemi.

Základní matice je také mapování světového bodu mezi dvěma pohledy, ale mapuje obraz bodu v jednom pohledu na epipolární linii v druhém pohledu¹. Bod na druhém pohledu může být na kterémkoli bodě na epipolární linii. Protože existuje bodové omezení pro bod ve druhém pohledu, je to matice s deficitem (= 2) na rozdíl od homografie, která je maticí s plnou hodností. Základní matice je na rozdíl od homografie nezávislá na struktuře scény, která vyžaduje, aby všechny světové body ležely v rovině. Homografie je tedy zvláštním případem základní matice. Homografie se obvykle používá k mapování roviny na jinou rovinu, zatímco základní matice se používá k výpočtu hloubek struktury scény s objekty různé hloubky.

Nyní, když jsme na konci tohoto blogu, doufejme, že to čtenářům poskytne jasné pochopení toho, co je homografie a jak vypočítat matici homografie, aby ji bylo možné použít jako základní součást úžasných projektů počítačového vidění.

Reference

[1] Epipolární geometrie (Stanford University CS 231A) Kenji Hata a Silvio Savarese

https://web.stanford.edu/class/cs231a/course_notes/03-epipolar-geometry.pdf