Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
SVEUČILIŠTE U SPLITU
FAKULTET ELEKTROTEHNIKE, STROJARSTVA I BRODOGRADNJE
DIPLOMSKI RAD
TRODIMENZIONALNA
REKONSTRUKCIJA TERENA POMOĆU
BESPILOTNE LETJELICE
Marko Lovrić
Split, rujan 2015.
S V E U Č I L I Š T E U S P L I T U
FAKULTET ELEKTROTEHNIKE,
STROJARSTVA I BRODOGRADNJE
Diplomski studij: Automatika i sustavi
Oznaka programa: 210
Akademska godina: 2014./2015.
Ime i prezime: MARKO LOVRIĆ
Broj indeksa: 834-2013
ZADATAK DIPLOMSKOG RADA
Naslov: TRODIMENZIONALNA REKONSTRUKCIJA TERENA POMOĆU
BESPILOTNE LETJELICE
Zadatak: Realizirati softversku podršku za trodimenzionalnu rekonstrukciju površine objekta
iz serija visokorezolucijskih snimki načinjenih pomoću bespilotne letjelice.
Koristiti žiro-stabiliziranu kameru te pohranjivati poznate GPS koordinate i
orijentaciju letjelice. Izvršiti snimanje objekta (cesta složene konfiguracije),
rekonstruirati površinu ceste i usporediti dobivene rezultate sa podacima dostupnim
iz GIS sustava.
Prijava rada: 06. 03. 2015.
Rok za predaju rada: 18. 09. 2015.
Rad predan:
Predsjednik
Odbora za diplomski rad: Mentor:
Prof. dr. sc. Jadranka Marasović Prof. dr. sc. Vladan Papić
SADRŽAJ
1. UVOD ................................................................................................................................ 1
1.1. GPS ............................................................................................................................. 2
2. DJI PHANTOM 2 VISION+ ......................................................................................... 7
2.1. UAV ............................................................................................................................. 7
2.2. DJI .............................................................................................................................. 7
2.3. Primjena UAV dronova .......................................................................................... 11
3. KAMERA ......................................................................................................................... 13
3.1. Epipolarna geometrija, esencijalna matrica i fundametalna matrica ............... 18
3.2. Kalibracija kamere .................................................................................................. 21
3.3. Rektifikacija .............................................................................................................. 22
3.4. Triangulacija (kod rektificiranog sustava) ............................................................ 23
3.5. Dekompozicija P matrice ........................................................................................ 25
4. BOJA I ATRIBUTI BOJE .............................................................................................. 26
4.1. Spektar vidljivog svjetla .......................................................................................... 27
4.2. Prostor boja .............................................................................................................. 28
4.3. RGB prostor boja ..................................................................................................... 28
4.4. HSV prostor boja ..................................................................................................... 29
5. MJERENJE ...................................................................................................................... 31
5.1. Kalibracija kamere .................................................................................................. 32
5.2. Testna okruženja ...................................................................................................... 35
5.3. Dekompozicija P matrica igrališta ......................................................................... 42
5.4. Generiranje početne P matrice za cestu ................................................................ 43
5.5. Greške sa pomakom markera ................................................................................ 46
6. REKONSTRUKCIJA CESTE ....................................................................................... 48
6.1. Slikavanje .................................................................................................................. 48
6.2. Rekonstrukcija ......................................................................................................... 49
6.3. Izdvajanje ceste ........................................................................................................ 53
7. ZAKLJUČAK .................................................................................................................. 59
SAŽETAK ......................................................................................................................... 60
KLJUČNE RIJEČI .......................................................................................................... 60
LITERATURA ................................................................................................................. 61
POPIS OZNAKA I KRATICA ...................................................................................... 62
DODATAK ....................................................................................................................... 64
Kod programa za ispravljanje distorzije .............................................................. 64
Kod programa za detekciju točaka sa manualnim odabirom točaka ............... 64
Kod programa za rekonstrukciju kocke ............................................................... 66
Kod programa za generiranje matrica P i rekonstrukciju ceste ....................... 67
Kod programa za filtriranje ceste ......................................................................... 73
1
1. UVOD
Svakodnevnim razvojem tehnologije, došli smo u vrijeme kada je upravljanje bespilotnim
letjelicama postala normalna stvar. Okruženi smo raznim vrstama letjelica koje se koriste u razne
svrhe, od profesionalnih do upotrebe za zabavu. Tržište je postalo u zadnjih par godina
ogromno, što se može vidjeti na primjeru izdanih patenata od strane IFI CLAIMS od 1994.
godine do 2014. godine. Prva upotreba bespilotnih letjelica u povijesti se dogodila sredinom
19. stoljeća kada je Austria poslala bespilotne balone sa bombama u napad na Veneciju.
Bespilotne letjelice, u današnjem obliku, nastavljaju se razvijati početkom 20. stoljeća, koristeći
se kao mete za vojnu obuku.
Slika 1.1. Broj izdanih patenata za UAV letjelice po godinama
Cilj diplomskog rada je koristiti gotov sustav bespilotne letjelice i kamere, upravljane
daljinskim upravljačem, snimiti seriju slika terena uz poznat nagib kamere, te time
pojednostaviti način rekonstrukcije. Zatim pomoću programske podrške izdvojiti cestu iz slika,
izdvojiti zajedničke točke na slikama, napraviti trodimenzionalnu rekonstrukciju terena. Potom
prikazati rezultat u 3D prostoru te usporediti sa nekim od referentnih sustava.
Točno određen način uzimanja slika sa letjelicom omogućit će, uz kontrolirane parametre, lakše
proračune za rekonstrukciju točaka u 3D prostoru.
U poglavljima će biti opisana korištena letjelica, način rada kamere, ispravljanje distorzije
kamere, načini manipuliranja RGB slikom, način rekonstruiranja točaka iz više slika, te način
na koji se obavilo slikanje terena a potom kako su rekonstruirane određene točke ceste te
prenešene u trodimenzionalni prostor.
2
Želi se prikazati jedan od mogućih upotreba UAV letjelica, u ovom slučaju za rekonstrukciju
terena, profila ceste, iznad kojeg kojeg leti, kao i mapiranje terena iz zraka. Naknadno je
moguće proširenje rada na način da se automatizira proces, od uzimanja slika, do obrade.
Slika 1.2. Primjer uporabe UAV letjelice za rekonstrukciju naseljenog područja
Sustavi koji mapiraju teren sa UAV letjelicama već postoje, i njihovi parametri su poznati u
svakom segmentu, od nagiba kamere, nagiba letjelice, točnih pozicija letjelice i zahtjevnih
algoritama rekonstrukcije. U ovom radu neki od parametara će biti predviđeni prethodnim
testiranjem kamere, te će se samo slikanje pojednostavniti i na taj način kontrolirati određeni
parametri da bi rekonstruiranje bilo što više pojednostavljeno. Sustavi koji mapiraju su jako
skupi, te koriste skuplje i kamere i letjelice od sustava korištenog u radu.
1.1. GPS
GPS je kratica za Global Positioning System. To je mreža satelita koja kontinuirano odašilje
kodirane informacije, s pomoću kojih je omogućeno precizno određivanje položaja na Zemlji.
3
GPS se temelji na skupini satelita Ministarstva obrane SAD-a koji stalno kruže oko Zemlje.
Sateliti odašilju vrlo slabe radio signale omogućujući GPS-prijamniku da odredi svoj položaj
na Zemlji. Zanimljivo je da GPS zapravo nastao prije osobnih računala. Dizajneri su
prvenstveno imali na umu vojnu primjenu. Između ostalih primjena, GPS-prijemnici pomažu
navigaciji, rasporedu trupa i artiljerijskoj vatri. Na sreću, izvršna odluka iz 1980. dozvolila je
upotrebu GPS-a i civilima. Sada svatko može uživati u GPS-u! Mogućnosti su gotovo
neograničene.
U osnovi, GPS omogućuje da se zabilježe položaji točaka na Zemlji i pomogne navigacija do
tih točaka i od njih. GPS se može upotrebljavati svugdje osim na mjestima gdje je nemoguće
primiti signal, a to su mjesta unutar zgrada, u tunelima, spiljama, garažama i drugim podzemnim
lokacijama te ispod vode.
Slika 1.3. Vizualizacija putanja GPS satelita oko zemlje
Primjene na tlu su raznovrsnije. Znanstvenici često rabe GPS zbog njegove mogućnosti
preciznog mjerenja vremena, ali i zbog velikog broja drugih primjena. Geodeti upotrebljavaju
GPS da bi povećali opseg svoga rada. GPS nudi veliku uštedu smanjenjem vremena potrebnog
za geodetsku izmjeru. Također, može dati zadivljujuću točnost. GPS-prijamnici mogu dati
točnost bolju od jednog metra. Profesionalni sustavi mogu dati točnost reda veličine centimetra!
Postoje tri segmenta GPS-a, NAVSTAR (Ministarstva obrane SAD-a) sastoji se od:
- svemirskog segmenta (sateliti)
- kontrolnog segmenta (zemaljske stanice), stanice koje "kontroliraju" GPS-satelite,
odnosno upravlja njima prateći ih i dajući im ispravljene orbitalne i vremenske
informacije
- korisničkog segmenta (korisnici i njihovi GPS-prijamnici).
4
GPS-prijamnik treba znati dvije stvari ako namjerava raditi svoj posao. Mora znati gdje su
sateliti (njihov položaj) i koliko su daleko (udaljenost). Pogledajmo najprije kako GPS-
prijamnik zna gdje su u prostoru smješteni sateliti. GPS-prijamnik od satelita prikuplja dvije
vrste kodiranih informacija. Jedan tip informacija, podaci iz almanaha, sadrže približni položaj
satelita. Ti se podaci kontinuirano prenose i spremaju u memoriju GPS-prijamnika tako da on
zna orbite satelita i gdje bi koji satelit trebao biti. Kako se sateliti miču uokolo, podaci iz
almanaha se periodički ažuriraju novim informacijama.
Svaki satelit može putovati malo izvan orbite, pa zemaljska stanica za praćenje prati orbite
satelita, njihovu visinu, položaj i brzinu. Zemaljska stanica za praćenje šalje orbitalne
informacije glavnoj kontrolnoj stanici, koja šalje satelitima ispravljene podatke. Ti ispravljeni
i egzaktni podaci o položajima nazivaju se "efemeride", vrijede do šest sati i šalju se GPS-
prijamnicima u obliku kodiranih informacija.
Kad GPS-prijamnik zna precizan položaj satelita u prostoru, još treba znati koliko su oni daleko
kako bi mogao odrediti svoj položaj na Zemlji. Postoji jednostavna formula koja kaže
prijamniku koliko je pojedini satelit daleko: Udaljenost od satelita jednaka je brzini emitiranog
signala pomnoženoj s vremenom koje treba da signal dođe do prijamnika (brzina x vrijeme
putovanja = udaljenost). Koristeći osnovnu formulu za određivanje udaljenosti, prijamnik već
zna brzinu. To je brzina radio valova - oko 300 000 kilometara u sekundi (brzina svjetlosti), s
malim kašnjenjem zbog prolaska signala kroz Zemljinu atmosferu.
Sada GPS-prijamnik treba odrediti vremenski dio formule. Odgovor leži u kodiranom signalu
koji satelit odašilje. Emitirani kod naziva se "pseudoslučajni kod" jer sliči signalu šuma. Satelit
generira pseudoslučajni kod, a GPS-prijamnik generira isti kod i nastoji ga prilagoditi kodu
satelita. Prijamnik tada uspoređuje dva koda da bi odredio koliko treba zakasniti (ili pomaknuti)
svoj kod kako bi odgovarao kodu satelita. To vrijeme kašnjenja (pomaka) množi se s brzinom
svjetlosti da bi se dobila udaljenost.
Sat vašeg GPS-prijamnika ne mjeri vrijeme tako precizno kao satovi satelita. Stavljanje
atomskog sata u vaš prijamnik učinilo bi ga mnogo većim i skupljim! Zato svako određivanje
udaljenosti treba još ispraviti za iznos pogreške sata GPS-prijamnika. To je razlog što se
određivanjem udaljenosti zapravo dobije "pseudoudaljenost". Da bi se odredio položaj na
5
temelju pseudoudaljenosti, treba pratiti najmanje četiri satelita i uz pomoć računanja ukloniti
pogrešku sata GPS-prijamnika.
Sad kad imamo oboje, položaje satelita i udaljenosti, prijamnik može odrediti svoj položaj.
Pretpostavimo da smo 19 000 kilometara udaljeni od nekog satelita. Naš položaj bit će negdje
na zamišljenoj sferi (lopti) kojoj je satelit u središtu i polumjer 19 000 kilometara.
Slika 1.4. Položaj na zemlji je u sferi GPS satelita
Pretpostavimo nadalje da smo 20 000 kilometara od drugog satelita. Druga sfera siječe prvu u
zajedničkoj kružnici. Ako dodamo treći satelit, na udaljenosti 21 000 kilometara, imat ćemo
dvije zajedničke točke u kojima se sijeku sve tri sfere.
Slika 1.5. Položaj na zemlji je u sferi 3 GPS satelita
6
Iako su moguća dva položaja, oni se znatno razlikuju po koordinatama. Za odluku o tome koja
od dviju zajedničkih točaka daje stvarni položaj, trebat će unijeti približnu visinu u GPS-
prijamnik. To će omogućiti prijamniku da izračuna dvodimenzionalni položaj (geografsku
širinu i dužinu). Nadalje, uz pomoć četvrtog satelita, prijamnik može odrediti i trodimenzionalni
položaj (geografsku širinu, dužinu i visinu). Pretpostavimo da je udaljenost od četvrtog satelita
18 000 kilometara. Sad imamo situaciju da četvrta sfera sječe prve tri u jednoj zajedničkoj točki
[1].
GPS u radu je potreban jer je dodan u exif slike, pomoću čega je poznata koordinata svake slike
iz serije pa je moguće odrediti točan položaj i pomak svake slike sa točnošću od nekoliko
centimetara, što je potrebno za kvalitetnu 3D rekonstrukciju.
7
2. DJI Phantom 2 Vision+
2.1. UAV
UAV (bespilotna letjelica) je letjelica bez pilota, koja je upravljana samostalno pomoću
sklopova unutar letjelice ili od strane pilota preko kontrolera. UAV je za razliku od projektila,
napajano zračno vozilo koja ne nosi čovjeka, koristi aerodinamiku za uzgon, može biti
samostalno upravljana ili upravljana preko kontrolera, može biti proširena ili smanjena te nositi
smrtonosne ili nesmrtonosne terete. ICAO (Organizacija međunarodnog civilnog
zrakoplovstva) klasificira UAV letjelice kao:
- Autonomna letjelica,
- Daljinski upravljana letjelica.
Povijesno, prve UAV letjelice bile su daljinski upravljane, ali sve se više koriste autonomne
UAV letjelice. UAV letjelica se primjenjuju u vojsci, specijalnim postrojbama, civilnim
udrugama, filmskoj industriji, tehnološkom sektoru, transportu kao i civilnom sektoru zadnjih
godina. Najčešće se koriste za stvari koje je lakše, brže i jeftinije odraditi od korištenja ostalih
vrsta letjelica, aviona i helikoptera. Korištenje UAV letjelica je definirano zakonskim propisima
pojedine zemlje [2].
2.2. DJI
DJI je kineska kompanija iz Shenzhena osnovana 2006.g.. Proizvode komercijalne i
rekreacijske UAV letjelice za fotografiju i video. Proizvode kamere, platforme za letenje,
kontrolere za multirotorske letjelice, gimbale i glavne stanice na zemlji. Proizvodi se koriste
industrijski, profesionalno i amaterski.
DJI je proizveo seriju quadocoptera nazvanih Phantom, koji je evoluirao na integrirani sustav
letjelice, kamere, WI-FI konekcije, kontrolera i mobilnog uređaja. Uglavnom je namijenjen za
fotografiju i video. Postoje letjelice oznake Phantom od 1 do 3. Phantom 2+ sustav koristi
kameru i gimbal, koji su napravljeni kompletno od strane DJI kompanije. Gimbal je sustav
sastavljen od senzora položaja i nagiba te od motora koji održava stabilnost nekog objekta
kompenzirajući male pomake, nagibe i trenja. Tijelo Phantom 2+ letjelice je napravljeno od
kompozitnih materijala, a na krajevima X okvira su motori na kojima su navijeni dva para
8
propelera. Sustav može nositi više vrsta kamera ali konkretno u Phantom 2 Vision+ seriji koristi
se kamera FC200, veličine senzora 1/2,3“. Rezolucija kamere je 14Mpx. Mpx je oznaka
razlučivosti ili rezolucije, kojom se definira mogućnost razaznavanja sitnih detalja kojom se
opisuje kakvoća slike. FOV FC200 kamere je 140° za slike, što je određeno fizičkom izvedbom
leće i veličinom senzora. FOV (Field of view) je oznaka za područje, koje je vidljivo kamerom
u bilo kojem trenutku.
Slika 2.1. DJI Phantom 2 Vision+
Specifikacije letjelice korištene u diplomskom radu [3]:
Letjelica Baterija DJI 5200mAh LiPo
Težina (sa propelerima i baterijom) 1242g
Točnost letenja Ver: 0.8m; Hor: 2.5m
Maksimalna brzina uspona i spuštanja Uspon: 6m/s; Spuštanje: 2m/s
Maksimalna brzina letenja 15m/s teoretska, 6m/s realna
Dijagonalna udaljenost između motora 350mm
Gimbal Radna struja Static : 750mA; Dynamic : 900mA
Točnost kontrole ±0.03°
Kontrolirani raspon Pitch : -90°-0°
Maksimalna kutna brzina Pitch : 90°/s
Kamera Veličina senzora 1 / 2,3“
Rezolucija / Efektivni broj pixsela 4384×3288 / 14Mpx
Vidno polje (za slike) 140°
9
Upravljač Radna frekvencija 5.728 GHz-5.85 GHz
Komunikacijska udaljenost CE: 400m, FCC: 800m
Osjetljivost prijamnika -93dBm
Snaga odašiljača CE: 25mW, FCC: 100mW
Radni napon 3.7V
Pojačivač Radna frekvencija 2412-2462MHz
Komunikacijska udaljenost 500-700m
Snaga odašiljača 20dBm
Potrošnja 2W
DJI Phantom 2+ koristi baterije na bazi litija, LiPo (Lithium-Polymer). To su baterije vrlo velike
gustoće energije, dvostruko veći od NiMH, te veći nazivni napon. Nema potrebu za periodičnim
pražnjenjem, te se može puniti u bilo kojem trenutku s obzirom koliko je energije ostalo u njoj.
Nedostaci su osjetljivost na hladnoću i dosta kratak životni vijek. S ovom baterijom DJI Phantom
može letjeti oko 20-25 min.
Koristi se DJI Naza-M V2 kontroler koji je spojen na glavnu ploču, na kojoj se nalaze i svi ostali
konektori. Naza kontroler može upravljati letjelicama sa 4, 6 i 8 propelera. Sastoji se od Main
kontrolera, IMU, PMU, GPS, kompasa, LED indikator modula. Main kontroler je mozak letjelice,
odgovoran za spajanje i kontrolu svih modula letjelice. U njemu se nalazi logika upravljanj ovisno
o tipu letjelice i ovisno o ostalim spojenim modulima. PMU (Power Supply module) spušta napon
na 5V potreban za kontroler. IMU modul je kombinacija žiroskopa, akcelerometra i barometra
potrebnog za mjerenja letjelice. GPS modul radi geomagnetska očitanja za precizno mjerenje
GPS koordinata letjelice. Preko LED modula se obavlja svjetlosna indikacija raznih stanja
letjelice. Na Naza kontroler također je spojen i gimbal kamere te dovedeni upravljački signali
i signali za kontrolu kamere [4].
10
Slika 2.2. DJI Naza-M V2 kontroler
Letjelica je pogonjena preko ESC modula (Electronic stability control) sa 2212 Motorima sa
920kv (920 okretaja po voltu bez opterećenja). Na isti ESC modul su izlazi za vanjske LED
indikatore stanja.
Upravljanje kretanja letjelice se vrši preko upravljača sa dva jostick-a, dva prekidača S1 i S2 te
potenciometrom za nagib kamere. S1 služi za opciju automatskog povratka na točku gdje je
letjelica poletjela, a S2 za prebacivanje načina letenja u mod sa GPS održavanjem ili letenje
bez GPS održavanja letjelice. Potenciometar za nagib kamere služi za Pitch kontrolu nagiba
kamere od 0° do -90°.
Slika 2.3. Način rada upravljača i kretanja letjelice
11
DJI Phantom 2 Vision+ koristi FC200 kameru koja je spojena na gimbal koji stabilizira 3 osi.
Slika 2.4. FC200 kamera sa gimbalom koji stabilizira 3 osi.
Gimbal se uključenjem letjelice kalibrira po vertikalnoj i horizontalnoj osi, te u letu dobiva iz
Naza kontrolera signale kojima kompenzira kretnje letjelice. Rezultat je stabilizacija snimki ali
i kvalitetnije fotografije, mogućnost okidanja slika manjim brzinama. Koristi se 1 / 2,3“ veličina
CMOS senzora.
2.3. Primjena UAV dronova
U današnje vrijeme primjena UAV letjelica je jako velik i zanimljiv, osim vojne uporabe neki
od zanimljivih primjena su [5]:
- Istraživanje oluja - NASA i NOAA (National Oceanic and Atmospheric
Administration) provode već duži niz godina testove upotrebe UAV letjelica za
istraživanje evoluiranja oluja. Poslije se analiziraju podaci iz samog središta oluje
bez stavljanja ljudi u neposrednu opasnost.
- Fotografiranje i snimanje događanja - sve više se UAV letjelice, malih dimenzija,
koriste u snimanje raznih događanja, sportskih, društvenih, javnih. Tome je uvelike
pridonio najveći proizvođač UAV letjelica DJI, koji je i korišten radu.
- Zaštita životinja - vlada SAD-a (točnije The Department of the Interior) već koristi
UAV letjelice za zaštitu prirode i životinja koje je nastanjuju. UAV letjelice nose
termalne kamere pomoću kojih obavljaju kontrolu populacije. Moguće je čak pratiti
migracije životinja na teškim terenima.
- Poljoprivreda - sve više se UAV letjelice koriste i u poljoprivredi, od nadziranja do
kontrole usjeva. Čak trendovi pokazuju da bi poljoprivreda mogla postati
12
dominantno tržište komercijalne upotrebe UAV letjelica. Moguće je pomoću
kamera na UAV letjelicama kontrolirati usjeve na način da se primjećuju male
promjene u bojama, te pomoću algoritma moguće je rano otkrivanje dijelova
pogođenih nametnicima i slično. Pomoću UAV letjelica moguće je povećanje
prihoda i smanjenje troškova u poljoprivredi.
- Potraga i spašavanje - UAV letjelice sve se više koriste i u kriznim situacijama za
potragu i spašavanje. 2013 godine u Kanadi, prvi put je spašen život osobi uslijed
automobilske nesreće. Pronađen je uslijed nesreće, pomoću UAV letjelice sa
ugrađenom night-vision tehnologijom, kojom je moguće vidjeti u tamnim uvjetima,
noći.
13
3. KAMERA
Kamera je senzor korišten u procesu vizualne odometrije. Iz tog razloga ključno je imati dobro
razumijevanje o tome kako kamera radi i kako možemo matematički modelirati način prikaza.
Kamera je uređaj koji projicira točke iz 3D prostora u 2D sliku. Matematički opis tog
projiciranja daje nam model idealne kamere (pinhole camera). Idealna kamera je
pojednostavljen matematički model fizičke kamere bez leća koja se sastoji od kutije koja na
jednoj strani ima malenu rupicu. Svjetlost iz scene prolazi kroz rupicu i projicira obrnutu sliku
na suprotnoj strani kutije. Kako bi izbjegli nepotrebnu obrnutu sliku u modelu se obično ravnina
projekcije postavlja ispred centra projekcije umjesto iza [6]. Kao na slici 3.1.
Slika 3.1. Geometrija idealne kamere
C je projekcijski centar kamere. Žarišna duljina f je udaljenost ravnine slike od centra projekcije
koje se u modelu postavlja u ishodište koordinatnog sustava svijeta. Projekcijska os je pravac
okomit na ravninu slike koji prolazi točkom C. Sjecište projekcijske osi i ravnine slike naziva
se projekcijska točka P. Perspektivnom projekcijom neka točka svijeta T projicira se u točku t
ravnine slike. Matematički model idealne kamere je [6]:
s(𝑢𝑣1) = [
𝑓 0 0 00 𝑓 0 00 0 1 0
] (
𝑋𝑌𝑍1
) = 𝑍 [
𝑓𝑋
𝑍𝑓𝑌
𝑍
1
] (3.1)
14
[𝑢𝑣1] = [
𝑓𝑋
𝑍𝑓𝑌
𝑍
1
] (3.2)
gdje je:
u,v koordinate 2D točaka u koordinatnom sustavu slike
s informacija o udaljenosti (s = Z) koja se gubi projekcijom
Parametar žarišta f igra ulogu skaliranja točaka slike što se manifestira kao uvećavanje slike. U
ovako normaliziranom 2D sustavu slike (slika 3.1.) centralna točka slike P nalazi se na
ishodišnoj koordinati (0 ; 0)T . No u realnoj kameri fotoosjetljivi senzor obavlja diskretizaciju
analognog signala i slika se konačno sastoji od konačnog broja piksela gdje je sada praktičnije
ishodišnu koordinatu postaviti u jedan od kutova slike pa se obično piksel u gornjem lijevom
kutu slike označava koordinatama (0 ; 0)T. Proširimo sada trenutni model kamere tako da
translatiramo sliku kako bi se gornji lijevi piksel slike našao na centralnoj osi projekcije
uvodimo translacijske parametre cx i cy [6].
s(𝑢𝑣1) = [
𝑓 0 𝑐𝑥 00 𝑓 𝑐𝑦 0
0 0 1 0
] (
𝑋𝑌𝑍1
) = 𝑍 [
𝑓𝑋
𝑍+ 𝑐𝑥
𝑓𝑌
𝑍+ 𝑐𝑦
1
] (3.3)
[𝑢𝑣1] = [
𝑓𝑋
𝑍+ 𝑐𝑥
𝑓𝑌
𝑍+ 𝑐𝑦
1
] (3.4)
U realnoj kameri centar fotosenzora obično zbog nepreciznosti izvedbe nije savršeno poravnat
s centralnom osi leće pa i ovu nepreciznost možemo također modelirati pomoću parametara cx
i cy.
Slika 3.2. Translacija centralne točke
15
Matrica modela koja sadrži intrinsične parametre kamere poznata je i kao matrica kamere K i
ona opisuje linearnu transformaciju normaliziranih koordinata projekcije u koordinate slike.
𝐾 = [𝑓 0 𝑐𝑥 00 𝑓 𝑐𝑦 0
0 0 1 0
] (3.5)
Model možemo proširiti kako bismo uključili mogućnost gibanja kamere u odnosu na točke ili
obrnuto, gibanje točaka u odnosu na kameru. Uvedimo stoga transformacijsku matricu Rt u
model koja će rotirati i traslatirati točke prije njihovog projiciranja na ravninu slike.
𝑅𝑡 = [
𝑟11 𝑟12 𝑟13 𝑡1𝑟21 𝑟22 𝑟23 𝑡2𝑟31 𝑟32 𝑟33 𝑡30 0 0 1
] (3.6)
Novi model kamere glasi:
s(𝑢𝑣1) = [
𝑓 0 𝑐𝑥 00 𝑓 𝑐𝑦 0
0 0 1 0
] [
𝑟11 𝑟12 𝑟13 𝑡1𝑟21 𝑟22 𝑟23 𝑡2𝑟31 𝑟32 𝑟33 𝑡30 0 0 1
](
𝑋𝑌𝑍1
) (3.7)
Ili pojednostavljeno možemo pisati
P = K*[R|t] (3.8)
P je matrica kamere, ili još možemo pisati i
𝜁𝑡 = 𝑃𝑇 (3.9)
gdje je:
𝜁 udaljenost točke T od projekcijske ravnine
t (u,v,1)T
Parametri rotacije i translacije uvedene matrice Rt nazivaju se i ekstrinsičnim parametrima
kamere. Bitno je napomenuti da uvedena matrica Rt modelira isključivo gibanje točaka u
odnosu na kameru koja se uvijek nalazi u ishodištu koordinatnog sustava svijeta i gleda u
16
pozitivnom smjeru z osi. Ako želimo modelom opisati gibanje kamere tada na mjesto matrice
Rt upisujemo inverznu transformaciju gibanja kamere. Budući da je kamera fiksirana u
ishodištu koordinatnog sustava, na taj način ćemo promatrane točke pomaknuti u položaj u
kojem bi se našle ako se kamera giba sa koordinatnim sustavom svijeta.
Ekstrinsična matrica opisuje položaj kamere u stvarnom svijetu, u kojem smjeru je okrenuta.
Sadrži dvije komponente, rotacijsku matricu i translacijski vektor [7].
[R|t] = [
𝑟11 𝑟12 𝑟13 𝑡1𝑟21 𝑟22 𝑟23 𝑡1𝑟31 𝑟32 𝑟33 𝑡1
] = [𝐼 𝑡0 1
] 𝑥 [𝑅 00 1
] =
= [
1 0 0 𝑡10 1 0 𝑡20 0 1 𝑡30 0 0 1
] 𝑥 [
𝑟11 𝑟12 𝑟13 0𝑟21 𝑟22 𝑟23 0𝑟31 𝑟32 𝑟33 00 0 0 1
] (3.10)
Ova matrica pokazuje kako transformirati koordinate u 3D svijetu u koordinate kamere. Važno
je napomenuti da ekstrinsični parametri opisuju kako je 3D svijet transformiran relativno u
kameru.
Trenutni model je pojednostavljena matrica realne kamere budući da ne modelira neke fizikalne
pojave uzrokovane lećom. Jedna od tih pojava je fokus ili oštrina slike. Svi objekti projicirani
idealnim modelom kamere će biti oštrog fokusa bez obzira na njihovu udaljenost od kamere. U
realnom slučaju kamera će proizvesti oštru sliku samo za one objekte koji su u određenom
rasponu udaljenosti od kamere gdje je taj raspon određen žarištem i svojstvima leće. No fokus
nas ne brine pretjerano jer ga uvijek možemo podesiti unaprijed na dovoljan raspon udaljenosti
ovisno o zahtjevima problema kako bi svi objekti u slici bili razumne oštrine. Stoga je zaključak
da nema potrebe uključiivati fokus u ovaj model kamere.
Ono što nas daleko više zanima je fizička pojava distorzije leće do koje dolazi kod praktičnih
izvedbi kamera s lećama i nju moramo uključiti u naš model kamere. Naime, leće su u
kamerama potrebne kako bi se dobila oštra slika jer one savijaju zrake svjetlosti kako bi ih
fokusirale na projekcijsku površinu slike. Sposobnost leće da prelama zrake ovisi o tome kako
zraka pogodi leću. Upravo zato što ovo svojstvo nije konstantno i ovisi o mjestu upada zrake
na leću dolazi do problema koji se manifestira kao efekt radijalne distorzije ili izobličenja slike.
17
Efekt radijalne distorzije simetričan je s obzirom na udaljenost od optičkog centra, tj. savijanje
svjetla je slabije ili jače (ovisno da li je riječ o konveksnoj ili konkavnoj leći) na rubovima leće
nego na mjestima bližim optičkom centru leće. Slika 3.3. prikazuje učinak izobličenja
uzrokovan konveksnom lećom.
Slika 3.3. Slika sa radijalnom distorzijom i ispravljenom distorzijom
Distorzija se najčešće modelira kao suma radijalne i tangencijalne komponente izobličenja.
Kako je u pravilu učinak radijalne distorzije znatno više izražen od učinka tangencijalne
distorzije, obično se radijalna distorzija modelira s većim brojem parametara. Sljedeći izrazi
opisuju relaciju između izobličenih (xd; yd) i neizobličenih (xu; yu) koordinata slike u kojima je
efekt distorzije uklonjen [11]:
xd = xu (1 + κ1 r2 + κ2 r
4 + κ3 r6) + dx (3.11)
yd = yu (1 + κ1 r2 + κ2 r
4 + κ3 r6) + dy (3.12)
r2 = xu2 + xu
2 (3.13)
a parametri tangencijalne distorzije dx i dy dani su sa:
dx = 2τ1xuyu + τ2 (r2 + 2 xu
2) (3.14)
dy = 2τ2xuyu + τ1 (r2 + 2 yu
2) (3.15)
Ovaj model distorzije određen je s tri parametra za radijalnu distorziju (κ1, κ2, κ3) te dva
parametra za tangencijalnu distorziju (τ1, τ2). Ovi parametri također spadaju u intrinsične
parametre kamere s matricom kamere K. Bitna razlika je jedino u tome da matrica K sadrži
18
linearne intrinsične parametre dok parametri distorzije spadaju u nelinearne intrinsične
parametre pa ih kao takve ne možemo ugraditi u matricu K.
3.1. Epipolarna geometrija, esencijalna matrica i fundametalna matrica
Epipolarna geometrija (engl. epipolar geometry) je unutarnja projekcijska geometrija između
dva pogleda koja ne ovisi o strukturi prizora već samo o unutarnjim parametrima kamera te
njihovoj relativnoj poziciji. Slika 3.4. prikazuje shemu epipolarne geometrije. Za svaku kameru
sada postoji zasebni centar projekcije Cl i Cr. Točka M iz svijeta ima projekcije ml i mr. Epipol
el (er) je definiran kao slika centra projekcije druge kamere Cr (Cl). Ravnina koju formiraju
točke M, el i er (ili M, Cl i Cr) naziva se epipolarna ravnina, a linije mlel i mrer epipolarne linije
[6].
Slika 3.4. Slika epipolarne ravnine
Točka M koju vidimo projiciranu na desnu (ili lijevu) projekcijsku ravninu može se u stvarnosti
nalaziti bilo gdje uzduž linije koja izlazi iz točke Cr i prolazi kroz mr, s obzirom da s jednom
kamerom nije moguće odrediti udaljenost do točke. Projekcija te linije na lijevu ravninu zapravo
je epipolarna linija qlel. Drugim riječima, projekcija svih mogućih lokacija točke jedne slike je
linija koja prolazi kroz korespondentnu i epipolarnu točku druge slike.
19
Za bilo koju točku jedne slike vrijedi da njena korespondentna točka u drugoj slici leži na
epipolarnoj liniji. Taj je uvjet poznat pod nazivom epipolarno ograničenje (engl. epipolar
constraint). To pak znači da je umjesto dvodimenzionalne pretrage za korespondencijama
dovoljna jednodimenzionalna pretraga, čime se znatno smanjenje sloţenost, a i omogućava
odbacivanje velikog broja lažnih korespondencija.
Da bismo matematički opisali epipolarno ograničenje potrebno je uvesti pojmove esencijalne i
fundamentalne matrice. Esencijalna matrica E sadrži informacije o translaciji i rotaciji koje
vežu dvije kamere u prostoru, odnosno daje nam vezu između točaka ml i mr u normiranom
koordinatnom sustavu slike (u kojem je žarišna duljina f = 1). Fundamentalna matrica F sadrži,
uz informacije koje sadrži esencijalna matrica, i intrinsične parametre obje kamere. Ona
povezuje točke ml i mr iz lijeve i desne slike.
Da bi dobili esencijalnu matricu E, promatramo dvije normalizirane kamere koje projiciraju
istu točku M iz 3D svijeta na svoje ravnine slike (slika 3.4.).Neka koordinate točke M budu za
prvu kameru m1 = (x1, y1, z1) i u koordinatnom sustavu druge kamere m2 = (x2, y2, z2). Ako su
kamere normalizirane, korespodentne koordinate točke u slikama nakon perspektivne
projekcije su:
𝑚1 = [𝑢1𝑣11] =
1
𝑧1 [
𝑥1𝑦1𝑧1] (3.16)
𝑚2 = [𝑢2𝑣21] =
1
𝑧2 [
𝑥2𝑦2𝑧2] (3.17)
Jedno od svojstava normaliziranih kamera je da su njihovi koordinatni sustavi u relaciji preko
translacije i rotacije, pa se transformacijom mogu prebacivati iz jednog sustava u drugi, na
način:
x2 = R (x1 – t) (3.18)
gdje je:
- R rotacijska matrica dimenzije 3 x 3
- t translacijski vektor dimenzije 3
20
Esencijalna matrica je sada definirana:
E = R [t]x (3.19)
gdje je:
- [t]x matrična reprezentacija vektorskog produkta s vektorom t
Matrična reprezentacija vektorskog produkta je uvijek antisimetrična matrica i detaljnije je
opisana u izrazu [6]:
t x a = [t]x a = [0 −𝑡3 𝑡2𝑡3 0 −𝑡1−𝑡2 𝑡1 0
] [
𝑎1𝑎2𝑎3] (3.20)
dokažimo da točka x2 u drugoj (desnoj) kameri je pomaknuta za esencijalnu matricu:
x2T E x1 = (R (x1 – t) )T R [t]x x1 (3.21)
= (x1 – t) T R T R [t]x x1
= (x1 – t) T [t]x x1
= x1 T [t]x x1 - t
T [t]x x1
= 0
Ako predpostavimo da su z1 i z2 uvijek veći od nule (inače se točke nebi ni vidjele na kameri),
vrijedi:
x2T E x1 =
1
𝑧2 x2
T E 1
𝑧1 x1 = y2
T E y1 = 0 (3.22)
gdje je:
- y2T E y1 epipolarno ograničenje
Pošto esencijalna matrica sadrži sve informacije o geometriji jedne kamere u odnosu na drugu,
no nikakve informacije o samoj kameri, a nas zanimaju koordinate u pikselima slike, kako
bismo prosnašli vezu između piksela jedne slike s odgovarajućom epipolarnom linijom na
drugoj slici, moramo iskoristiti intrisične parametre kamere (3.5). Zato točku y u
normaliziranim koordinatama supstituiramo točkom y' u koordinatnom sustavu kamere s
intrisičnim parametrima K te vrijedi: y' = Ky -> y = K-1y'.
21
Jednadžbu za esencijalnu matricu možemo proširiti za rad s nenormaliziranim koordinatama
slike:
y'2T (K2
-1) T E K1-1 y'1 = 0 (3.23)
Te ovo proširenje opisuje fundamentalnu matricu F:
F = (K2-1) T E K1
-1 (3.24)
Pa jednadžba (3.24) postaje: y'2T F y'1 = 0 (3.25)
3.2. Kalibracija kamere
Kalibracija je postupak kojim saznamo intrisične i ekstrinsične parametre kamere:
- intrisični parametri
linearni – matrica kamere K (3.5)
nelinearni – radijalna (κ1, κ2, κ3) i tangencijalna (τ1, τ2) distorzija leće
- ekstrinsični parametri, međusobni položaj između kamera
rotacijska matrica R (3.10)
translacijska matrica t (3.10)
Promatra se kamerom neki objekt poznate geometrije, npr. uzorak šahovske ploče, poznatih
dimenzija kvadrata. Pogodan je zbog jednostavnosti izrade i lakoće detektiranja rubova
bazičnim metodama sa minimalnom greškom. Ako ulaznom algoritmu damo poznate dimenzije
tada parametri kalibracije će biti u istoj mjernoj jedinici.
Snima se veći broj slika, od 10 do 20, iz različitih pozicija, da bi ekstrinsični parametri između
slika se što više razlikovati. Uz poznate parametre kalibracijskog objekta, dobiju se intrisični
parametri kamere, te ekstrinsični parametri između kamere i plohe kalibracijskog uzorka, za
svaku sliku. 3D točke kutova kalibracijskog uzorka optimalno se projiciraju na poznate 2D
koordinate na ravninu slike.
22
3.3. Rektifikacija
Nakon što se kalibracijom doznaju intrisični parametri lijeve i desne kamere, te ekstrinsični
parametri njihovog međusobnog položaja, može se provesti rektifikacija slike. Najprije se mora
ukloniti efekt distorzije, zatim odrediti transformacija slike koja bi se dobila ako bi projekcijske
ravnine kamere ležale u istoj ravnini paralelno jedna uz drugu na istim visinama (slika 3.5.). To
se može postići tako da se epipolovi lijeve i desne kamere postave u beskonačnosti po X osi
[8].
Slika 3.5. Rektifikacija stereo sustava
Nakon retifikacije, intrisični parametri lijeve i desne kamere su jednaki (ako koristimo istu
kameru), kao i centralne točke ravnine slike (cx, cy), tako da se ista točka iz 3D svijeta projicira
na istu visinu za obe kamere. Uzimajući to u obzir, model kamere idealnog stereo sustava
možemo opisati na idući način [6]:
s(𝑢𝑣1) = [
𝑓 0 𝑐𝑥 00 𝑓 𝑐𝑦 0
0 0 1 0
]
(
[
𝑟11 𝑟12 𝑟13 𝑡1𝑟21 𝑟22 𝑟23 𝑡1𝑟31 𝑟32 𝑟33 𝑡10 0 1 1
](
𝑋𝑌𝑍1
) − (
𝑡𝑏000
)
)
(3.26)
Jedini dodatak u odnosu na ranije opisani model jedne kamere (3.7) je parametar tb koji se
jedino razlikuje u modelu lijeve i desne kamere opisanog modela. Ako odlučimo lijevu kamere
staviti u ishodište svijeta tada je tb = 0 za lijevu kameru. Za desne kameru će tada parametar tb
biti jednak odmaku između kamera (eng. baseline).
23
Prednost rektificiranog sustava u odnosu na nerektificirani je da korespodencije značajki
pretražujemo samo u jednoj dimenziji, te samim time ne moramo računati epipolarne pravce za
svaku značajku kao u slučaju nerektificiranog sustava. Druga prednost je da je postupak
triangulacije, koji je opisan u sljedećem odjeljku, bitno jednostavniji.
3.4. Triangulacija (kod rektificiranog sustava)
Triangulacija je postupak određivanja koordinata točke u 3D prostoru iz njenih projekcija na
dvije ili više slika. Nužno je poznavati parametre projekcijske funkcije kamere koja točku
preslikava iz 3D prostora u 2D prostor. Ove parametre dobivamo pomoću prethodno opisanog
procesa kalibracija kamere.
Promatramo najjednostavniji slučaj triangulacije kada su projekcijske ravnine paralelne, i
pomak desne kamere je samo po translacijskoj osi X (slika 3.5.) [8].
Slika 3.5. Triangulacija između dvije kamere translatirane samo po osi X
Model sa slike 3.5. se još zove i standardni model sa parametrima:
- Cl i Cr su dvije pinhole kamere, sa paralelnim projekcijskim ravninama, sa zejdničkom
fokalnom duljinom f
- pravac između centra kamera je okomit na optičku os kamera, a b je udaljenost između
kamera
24
- XZ je ravnina na kojoj leže optičke osi obe kamere, XY ravnina je paralelna na ravnine
slike od obe kamere, X os prolazi kroz centar lijeve kamere kao i ishodište koordinatnog
sustava projekcije kamere (X,Y,Z)
- x1 i x2 točke su točke na ravnini slike
Oznaka d = x1 - x2 predstavlja horizontalnu udaljenost između korespondentnih značajki u
lijevoj i desnoj slici, a nazivat ćemo je ubuduće disparitet.
Koordinate u 3D svijetu dobijemo triangulacijom, po formulama:
Z = ( b * f ) / (x1 - x2) (3.27)
X = x1 * Z / f (3.28)
Y = y1 * Z / f (3.29)
Bitno svojstvo kod diskretizacije perspektivne projekcije koje u realnoj kameri obavlja senzor
jest da vrijednosti dispariteta nelinearno ovise o trianguliranoj udaljenosti tj. za manje
vrijednosti dispariteta udaljenost triangulirane značajke eksponencijalno raste što je vidljivo na
slici 3.6. Možemo si to vizualizirati lako budući da znamo da će se sve značajke istog dispariteta
triangulirati u istu ravninu na nekoj udaljenosti što je ilustrirano na slici 3.6. Na slici vidimo da
je udaljenost između ravnine u koju će se triangulirati sve značajke dispariteta 7 i ravnine kod
dispariteta 6 veća od udaljenosti između ravnine dispariteta 6 i ravnine 5. To je svojstvo
perspektivne projekcije koje ne možemo izbjeći, naprosto se bliži objekti kod perspektivne
projekcije projiciraju u lijevu i desnu sliku s većim disparitetima pa je stoga i informacija o
njihovoj dubini sačuvana uz manje šuma. To si lako možemo vizualizirati na slici 3.6. [8].
To znači da će i greška triangulacije biti veća za udaljenije značajke i da će izravno ovisiti o
odmaku između kamera stereo sustava te širini rezolucije same kamere.
25
Slika 3.6. Prikaz ovisnosti dispariteta o udaljenosti
3.5. Dekompozicija P matrice
U linearnoj algebri, QR dekompozicija matrice je rastavljanje matrice na ortogonalnu i
trokutastu matricu. QR dekompozicija realne kvadratne matrice A je rastavljanje matrice A kao
[9]:
A = QR (3.30)
gdje je:
Q ortogonalna matrica (QT Q = I)
R gornja trokutasta matrica
Općenito, možemo rastaviti P matricu kamere, veličine m x n (m >= n) kao produkt K matrice
kamere, veličine n x n, R matrice rotacije kamere, veličine m x n i t translacijskog vektora,
veličine 1 x n:
P = K R t (3.31)
26
4. BOJA I ATRIBUTI BOJE
Boja se može definirati kao psihofizikalni fenomen induciran svjetlom ili osjećaj koji u mozgu
izaziva svjetlost emitirana od nekog izvora ili reflektirana s površine nekog tijela. Doživljaj
boje ovisan je o tri faktora:
• spektralnom sastavu svjetla koje pada na promatrani predmet,
• molekularnoj strukturi materijala s kojeg se svjetlo reflektira ili koje ga propušta i
• čovjekovim osjetom boje, kroz oči i mozak.
Smisao za boje razmjerno se nedavno pojavio u povijesti ljudskog roda. Djeca i primitivni
narodi razlikuju vrlo malo boja, ili ih barem teško imenuju. Stari narodi bili su vrlo siromašni
u označavanju i imenovanju boja, no s razvojem industrije boja i tkanina, tiskarstva, kozmetike
itd., razvijao se i taj smisao. Izvorno su boje nazivane prema predmetima za koje su bile
karakteristične. Za prosječnog čovjeka i danas boja ima svojstvo predmeta: ljubičica je
ljubičasta, naranča narančasta itd. Postoje tri atributa koji uže definiraju svaku boju:
• ton boje ili tonalnost boje,
• zasićenost ili saturacija,
• svjetlina ili luminancija.
Ton boje označava vrstu boje, boju samu po sebi. Definira se kao kromatska kvaliteta boje,
odnosno kvaliteta kojom se jedna boja razlikuje od druge. Da bi se objasnili pojmovi zasićenost
i svjetlina, najprije je potrebno boje podijeliti u dvije osnovne skupine. U prvoj skupini nalaze
se prave boje, kao što su crvena, narančasta, žuta, zelena, plava itd., koje se nazivaju
kromatskim bojama, ili jednostavno bojama. Slika 4.1. prikazuje kromatske boje. U drugoj
skupini nalaze se crna, siva i bijela, koje se nazivaju akromatskim bojama, ili jednostavno
nebojama. One čine skalu koja seže od crne, preko sive, do bijele. Slika 4.2. prikazuje
akromatske boje. Neke od kromatskih boja su tamnije ili svjetlije od drugih i moguće je
uspoređivati svaki stupanj njihove svjetline sa svjetlinom sive akromatske boje. Ta se osobina
naziva svjetlina ili luminancija. To je relativna količina svjetla (bilo koje valne dužine) koju
boja prividno emitira. To je kvaliteta kojom se razlikuje svjetla boja od tamne boje. Slika 4.3.
prikazuje svjetlinu boje. Ako se neka kromatska boja miješa s akromatskom bojom jednake
svjetline, svjetlina boje ostajeista. Nastala promjena u kvaliteti, odnosno čistoći boje, ovisi o
relativnoj količini ovih dviju komponenata. Ta se osobina naziva zasićenost ili saturacija. To je
stupanj do kojeg se boja čini čistom. Slika 4. prikazuje zasićenost boje.
27
Slika 4.1. Kromatske boje
Slika 4.2. Akromatske boje
Slika 4.3. Svjetlina boje
Slika 4.4. Zasićenost boje
4.1. Spektar vidljivog svjetla
Svjetlo je elektromagnetsko zračenje koje se opaža vidnim osjetnim sustavom. To je energija
zračenja, nastala atomskim promjenama u fizikalnoj strukturi materije, koja se rasprostire od
svog izvora u svim smjerovima i širi u obliku valova. Slika 4.5. prikazuje vidljivi spektar
elektromagnetskog zračenja. Ono na što se obično misli kada se kaže "svjetlo" jest bijelo
svjetlo. Ono što se obično percipira kao bijelo svjetlo nije homogeno – to je mješavina svih
valnih dužina vidljivog spektra od 400 nm do 700 nm u približno jednakim omjerima. Padne li
takvo svjetlo na komad bijela papira, on će reflektirati sve valne dužine, pa će i svjetlo što se
od njega reflektiralo izgledati bijelo. Ako neki predmet apsorbira sve valne dužine, a ni jednu
ne reflektira, izgledati će crn. Apsorbira li neki predmet sve valne dužine, osim one koja
predstavlja osjet crvene boje, te samo nju reflektira, takav će predmet izazvati u čovjekovim
osjetilima osjet crvenog. Koje će valne dužine svjetla biti apsorbirane a koje reflektirane ovisi
o molekularnoj strukturi materijala na koje svjetlo pada. Klasični spektar razlikuje sedam boja:
crvenu, narančastu, žutu, zelenu, plavozelenu, plavu i ljubičastu. Slika 4.6. prikazuje klasičan
spektar od sedam boja. Broj boja i njihovih nijansi u prirodi je neizmjeran, budući da veoma
mala promjena valne dužine stvara novu i drukčiju boju.
28
Slika 4.5. Vidljivi spektar elektromagnetskog zračenja
Slika 4.5. Klasični spektar od sedam boja
4.2. Prostor boja
Prostor boja ili model boja je način pomoću kojeg se definiraju, stvaraju i vizualiziraju boje.
Boja je najčešće definirana pomoću 3 koordinate (parametra). Ti parametri određuju poziciju
boje unutar prostora boja koji se koristi. Postoji mnogo prostora boja i svaki se koristi za
različite namjene. Neki prostori boja su linearni, što znači da će određeni iznos promjene
podražaja izazvati isti iznos promjene u percepciji te boje. Mnogi prostori boja nisu linearni.
Neki prostori boja su intuitivni za korištenje, odnosno lako je pomoću parametra u njima
izabrati boju. Drugi prostori boja nisu intuitivni, odnosno pomoću parametra je vrlo teško ili
gotovo nemoguće u njima izabrati boju. Neki prostori boja vezani su uz uređaj na kojem su
definirane boje i za njih se kaže da su ovisni o uređaju (engl. device dependent). Kada se boje
definirane u tim prostorima koriste na nekom drugom uređaju, više nisu iste kao na uređaju gdje su bile
definirane.
4.3. RGB prostor boja
RGB prostor boja definiran je pomoću tri aditivna primara: crvene, zelene i plave boje. Svaka
boja u tom prostoru boja nastaje zbrajanjem pojedinih komponenata te tri boje. RGB model
29
predstavljen je pomoću kocke, gdje crvena boja predstavlja x-os, zelena boja y-os, a plava boja
z-os. Slika 12. prikazuje model RGB prostora boja. Taj se prostor boja najčešće koristi u
računalima. Svaka boja najčešće je predstavljena sa 8-bita, odnosno vrijednostima od 0 do 255
(256 vrijednosti). To daje ukupno 2563 = 16777216 mogućih boja. U različitim računalnim
programima za obradu slike najčešće se navodi podatak o 16 milijuna boja ili naziv engl. true
color. Najčešće se taj prostor boja normira na vrijednosti od 0 do 1. RGB prostor boja
jednostavan je za računalo, ali nije prikladan za čovjeka. Crvena, zelena i plava komponenta
međusobno su korelirane tako da je čovjeku vrlo teško izborom tih komponenata definirati
željenu boju u RGB prostoru boja. Stoga se najčešće koriste neki drugi prostori boja kao što su
npr. HSV (HSI, HSB) ili HSL prostor boja.
Slika 4.6. Model RGB prostora boja
4.4. HSV prostor boja
HSV prostor boja stvorio je A. R. Smith 1978. Taj prostor boja definiran je s tri koordinate:
tonom boje (engl. hue), zasićenjem boje (engl. saturation) i svjetlinom boje (engl. value,
intensity, brightness). Ton boje predstavljen je kutom od 0° do 360°. Zasićenost boje ima
vrijednost od 0% do 100%. Svjetlina boje ima vrijednost od 0% do 100%. HSV prostor boja
predstavljen je pomoću valjaka. Često se taj prostor boja prikazuje kao stožac ili šesterostrana
piramida, jer je percipirana promjena zasićenja boje od 0% do 100% manja za tamne boje (one
koje imaju manju vrijednost svjetline) nego za svijetle boje (one koje imaju veću vrijednost
svjetline). Da bi se nadoknadila ta razlika u percepciji, valjak se izobličuje u stožac. Slika 4.7.
prikazuje model HSV prostora boja kao stožac. Pokazalo se da je u ovom prostoru boja čovjeku
30
daleko lakše (intuitivnije) definirati i izabrati boju nego u RGB prostoru boja. Često se
vrijednosti tona, zasićenja i svjetline boje normiraju na vrijednosti od 0 do 1 [10].
Slika 4.7. Model HSV prostora boja predstavljen pomoću stošca
HSV prostor boja se dosta koristi kod računalne obrade zbog lakše kontrole nad slikom. RGB
prostor boja je pogodniji za vizualno predstavljanje. HSV prostor boja pogodniji je za računalnu
uporabu jer su parametri kojim se upravlja, tonom boje (engl. hue), zasićenjem boje (engl.
saturation) i svjetlinom boje (engl. value, intensity, brightness), lakše dobiti željene parametre.
Jedan od primjera može se vidjeti na slici 4.8. gdje je pomoću HSV slike, i kanala H (ton boje)
u par koraka izdvojena cesta.
Slika 4.8. Izdvajanje ceste pomoću HSV prostora boja
31
5. MJERENJE
Pošto se želi testirati odabrana metoda slikanja sa letjelicom kao i rekonstruiranja terena,
poznavajući prethodne opisanu teoriju, kod odabira proizvoljne dionice ceste moraju se
zadovoljiti neki od kriterija. Pazilo se da oko dionice bude gusta vegetacija zbog lakšeg
izdvajanja ceste. Bitno je da okolno raslinje bude što niže, da što manje baca sjene na cestu.
Cesta bi trebala imati zakrivljena skretanja kao i nagib tako da se može testirati uz 2D
rekonstruiranje i rekonstruiranje visine. Jedan od bitnih čimbenik je da visina treba biti fiksna
što se postiže pomoću barometra unutar IMU modula, pošto se mora slikati dionica u jednom
ravnom preletu. Odabire se visina od 50 m tako da s obzirom od FOV-a kamere od 140° i
naknadnim ispravljanjem distorzije ostane dovoljno preklapanja slika. Sljedeće što se moralo
paziti da nagib kamere bude okomito u odnosu na ravninu površine zemlje, što zbog odličnog
stabiliziranja gimbal kamere letjelice nije bio problem. Idući čimbenik je dovoljna površina
preklapanja slika, za što se odabire da slikanje bude svako 10 do 15 m.
Ovom metodom želi se postići novi način slikanje UAV letjelicom koji do sada nije bio
primijenjen. UAV letjelica se koristi kao neka vrsta izvidne letjelice, koja će preletom iznad
neke dionice ili planinske staze, bez poznavanja veličina, P parametara kamere, uz GPS
pozicioniranje i izračun udaljenosti između slika, moći rekonstruirati dionicu. Novost je da
poznavanjem teorije kamere, P matrice se mogu generirati za svaku sliku, i potom uz zajedničke
točke, moguće je rekonstruirati teren. To se želi ovom realizacijom dokazati.
Realizacija podrazumijeva:
- kalibraciju kamere za dobivanje K parametara kamere
- slikanje testnog okruženja za rekonstrukciju sa kontroliranim parametrima
- ispravljanje slika testnog okruženja
- rekonstrukcija testnog okruženja sa kontroliranim parametrima
- dobivanje P matrice te analiziranje dobivenih podataka
- slikanje odabrane ceste uz kontrolirane parametre
- ispravljanje slika ceste
- poluatomatsko traženje zajedničkih točaka
- rekonstrukcija sredine ceste sa generiranim matricama
- analiziranje podataka
- grafičko izdvajanje ceste pomoću filtera iz serije slika te traženje sredine
32
5.1. Kalibracija kamere
Kalibracija kamere je izvedena pomoću kalibracijske ploče uzorka šahovnice, širine kvadrata
85mm. Tražili su se intrisični parametri kamere, matrica K (3.5). Kalibracijski objekt, ploča, je
slikana na način da se nalazi pod različit kutovima i da što više prekriva površinu slike. Bitno
je i da se nalazi u sva četiri kuta slike, tako da se zahvati što je više moguće svaki dio leće, da
bi kasnije ispravljanje distorzije bilo točnije ali i računanje parametara radijalne distorzije (3.10
– 3.14).
Korišten je toolbox „Camera Calibrator“ iz Matlab programa. Program traži 10 do 20 slika.
Ubačena je serija od 19 slika, koje se mogu vidjeti na slici 5.1. Program je automatski kod
provjere izbacio 3 slike, one kod kojih je kalibracijski objekt bio loše slikan, pa nije uspio
detektirati sve dodire kvadrata.
Slika 5.1. Korištene slike kalibracijskog objekta za računanje parametara kamere
Jedina varijabla koja je ubačena na početku je širina kvadrata kalibracijskog objekta, tako da se
dobije pravilni omjer ispravljenih slika. Program potom analizira svaku sliku te jednostavnim
metodama otkriva dodirne točke crnih i bijelih kvadrata, te izbacuje prikaz na provjeru.
33
Slika 5.2. Program nalazi detektirane dodirne točke na provjeru
Nakon toga analiziraju se koordinate detektiranih točaka i kalibrira se kamera te program nalazi
parametre kamere i izbacuje rezultate. Parametri kamere eksportiraju se kao objekt koji sadrži
parametar radijalne distorzije, tangencijalne distorzije, skew parametar, intrisične parametre
kao matricu, žarišnu duljinu, trnanslacijske parametre cx i cy. Program izbacuje i ekstrinsične
parametre kao sliku, koji u ovom slučaju i nisu bitni u izračunu. Za daljnji tijek, koristi se objekt
parametara kamere, sa imenom cameraParams.mat.
Slika 5.3. Rezultat kalibracije kamere, srednja greška u pikselima i vizualizacija ekstrinsičnih
parametara serije slika
34
Kao što se može vidjeti, srednja greška ukupne serije slika za dobivanje parametara kamere je
6,13 piksela, što je razumljivo s obzirom da je jako velika radijalna distorzija korištene kamere.
Može se uočiti i najveća veličina greške u izračunatim točkama kod slike 16, što ako se pogleda
vizualizacija slikanja (Slika 5.3.) je isto razumljivo, jer je kalibracijski objekt bio blizu ruba
slike, gdje je radijalna distorzija najveća, a samim time, i teži proračun ispravljanja distorzije.
Potom je za vizualnu provjeru ispravljanja distorzije napisan kod koji koristi dobivene
parametre te izbacuje rezultat koji se vidi na slici 3.3. Uočavanjem ispravljenih zakrivljenih
linija može se zaključiti da parametri zadovoljavaju daljnje korištenje.
Korišteni MATLAB kod je:
Ispravljena_slika = undistortImage(Slika,cameraParams);
Dobiveni parametri kalibracije kamere su:
𝐾 = [𝑓 0 𝑐𝑥0 𝑓 𝑐𝑦0 0 1
] = [2314.63534 0 2216.39516
0 2308.45338 1630.936690 0 1
]
Slika 5.4. Radijalna komponenta distorzije
35
Slika 5.5. Tangencialna komponenta distorzije
5.2. Testna okruženja
Nakon kalibracije leće bilo je potrebno naći pogodno testno okruženje za slikavanje uz
kontrolirane parametre. Testno okruženje se koristi za testiranje ispravljanja distorzije a potom
rekonstruiranje terena uz poznate zajedničke točke u prostoru, da bi se dobile P matrice kamere.
Prvi kalibracijski objekt je mali uredski stol sa nadodane dvije pomoćne grede sa ugrađenih 12
markera (poznata predefinirana mjesta – kalibracijsko W), Slika 5.6..
Slika 5.6. Skica slikavanja testnog okružja
36
Svi markeri su snimljeni letjelicom (kamerom) u kontroliranim uvjetima sa velikom točnošću
pomaka letjelice od točno 20 cm. Naknado je dobiveno pravo središte markera ispravljeno za
pogrešku uzrokovane distorzijom leće (radijalna i tangencijalna). Iz poznatih položaja markera
na slikama kamere (9) dobivene su matrice kamera P1 – P5. Koristeći se istim matricama, i iz
poznatog položaja testnog markera na slikama kamera rekonstruiran je položaj markera u 3D
prostoru.
Korišten je MATLAB kod:
P1=CalibNormDLT(x1',Matrica');
P2=CalibNormDLT(x2',Matrica');
x_3d1=Reconstruction(P1,P2,x1',x2')';
Izračunata je srednja vrijednost pogreške (ukupna, x y z smjer) i standardne devijacije. Na slici
5.7. prikazan je histrogram distribucije ukupnih pogrešaka.
mean -0,0084mm std 1,0618mm (ukupno)
mean 0,0085mm std 1,2277mm (x os)
mean 0,0156mm std 1,3647mm (y os)
mean 0,0012mm std 0,5814mm (z os)
Slika 5.7. Histogram distribucije pogreške
37
Analiza je pokazala da se 90% rezultata nalazi unutar 4 mm pogreške. Test je pokazao dobru
točnost mjerenja položaja markera u 3D prostoru. Točnije mjerenje u navedenim uvjetima nije
bilo moguće zbog nemogućnosti točnijeg pozicioniranja markera u prostoru. Distorzije leća su
u znatnoj mjeri prevladane, i tek su primjetne na samim rubovima mjernog područja. Problem
koji je primijećen je pogreška uzrokovana djelomičnim zaklanjanjem markera, što za posljedicu
ima ''pomicanje'' markera za nekoliko mm. Prilikom mjerenja svi markeri bi trebali biti vidljivi
i nezaklonjeni, te je zbog toga uzeto 9 markera od 12 za proračun.
Slika 5.8. Slike iz točke 2, serije za kalibraciju kocke
Nakon što je dokazana učinkovitost metode rekontrukcije u idealnim uvjetima potrebno je naći
testno okruženje u realnim uvjetima i veličinama. Odabrano je igralište, zbog veličine i
povoljnih objekata za traženje zajedničkih točaka uz mogućnost točnog mjerenja. Slikavanje je
obavljeno na način da je kamera bila na fiksnoj visini, stolici. Usmjerena je prema zidu koji je
udaljen 50 m, tako da se simulira udaljenost ceste. Gimbal je stabilizirao kameru tako da se
isključe rotacijski parametri kamere. Izmjereno je šest točaka od 5 m na paralelnoj liniji u
odnosu na zid na kojoj leži kamera, te isto šest točaka sa jednakom udaljenosti na paralelnoj
liniji u odnosu na zid na kojoj je stavljen objekt, tako da se centrira projekcijska os kamere
okomito na zid. Skica se može vidjeti na slici 5.9. Kod slikavanja nagib kamere je konstantno
provjeravan, tako da bi rezultati bili što točniji. Na svakoj idućoj točki, iznova je ispravljana
linija projekcije kamere sa objektom nasuprot. Na slici 5.10. može se vidjeti cijela serija od šest
slika testnog okruženja.
38
Slika 5.9. Skica slikavanja testnog okružja, igrališta
Slika 5.10. Serija slika igrališta, originalne slike sa distorzijom
Nakon slikavanja odabrano je sedam zajedničkih točaka u prostoru terena, koje se vide na svim
slikama. Napravljen je 3D model u programu Sketchup, radi lakšeg nalaženja 3D koordinata
točaka u prostoru, zbog jako velikih dimenzija. Model sa odabranim zajedničkim točkama se
može vidjeti na slici 5.11.
39
Slika 5.11. Model testnog okruženja sa odabranim zajedničkim točkama
Unešena je matrica koordinata zajedničkih točaka u prostoru, s tim da je odabran referentan
koordinatni sustav po volji u prostoru igrališta, pazeći da je X os paralelna sa linijom pomicanja
letjelice. Točke matrice prostora u metrima su u tablici 5.1.
Tablica 5.1. Matrica koordinata zjedničkih točaka testnog okruženja
Br. točke X-os Y-os Z-os
1 2,1597 -1,8700 -12,8002
2 2,1597 0,1000 -7,8002
3 -0,8500 -4,0700 0
4 -23,3000 -0,0006 0
5 -28,0228 -0,0700 -3,8100
6 -27,5049 -1,1062 -8,8000
7 -28,0131 0,7499 -14,9000
40
Koristi se kod i parametri kamere dobivene u poglavlju 5.1., za ispravljanje distorzije slika.
Markeri su pomoću Photoshop programa označeni na svakoj slici posebno, te je snimljena serija
slika, zajedno sa markerima, u JPEG formatu. Snimljena je i serija slika sa crnom podlogom i
markerima, u BMP formatu.
Slika 5.12. Markeri na drugoj slici iz serije slika igrališta, slika je korištena nakon
ispravljanja distorzije, lijevo je JPEG slika, desno BMP
Potom je napisan kod koji detektira 7 markera na slikama. Koristeći jednostavan subpix (točnost
unutar pomaka jednog piksela) algoritam nalazi središte označenih markera, a onda pomoću
giput naredbe, nalazi se najbliže središte centroida, i potom sprema kao koordinate u pikselima
za svaku sliku. Bitno je ručno označavati markere istim redoslijedom za svaku sliku, tako da ne
dođe do greške redoslijeda točaka kod automatskog spremanja.
Tablica 5.2. Matrice x1-x6 iz serije šest slika testnog okruženja, 7 markera
Br.
Točke x1 x2 x3 x4 x5 x6
x y x y x y x y x y x y
1 2036 1433 1712 1427 1378 1436 1264 1431 740 1432 413 1436
2 2052 1561 1769 1556 1472 1566 1374 1560 912 1559 625 1565
3 2220 1358 1980 1353 1729 1365 1646 1358 1251 1359 1009 1367
4 3297 1548 3070 1542 2826 1562 2747 1546 2351 1545 2105 1556
5 3618 1546 3375 1539 3117 1562 3039 1544 2612 1542 2345 1553
6 3757 1484 3486 1477 3199 1499 3111 1480 2634 1476 2335 1487
7 4055 1593 3737 1587 3403 1610 3304 1591 2748 1589 2397 1601
41
Iz poznatih položaja markera na slikama kamere (Tablica 5.2.) i matrice prostora (Tablica 5.1.)
dobivene su matrice kamera P1 – P6. Koristeći se istim matricama, i iz poznatog položaja
testnog markera na slikama kamera, rekonstruiran je položaj markera u 3D prostoru.
Korišten je MATLAB kod:
P1=CalibNormDLT(x1',Matrica');
P2=CalibNormDLT(x2',Matrica');
x_3d1=Reconstruction(P1,P2,x1',x2')';
Potom je uzeto 5 rekonstruiranih položaja markera i nađena srednja vrijednost pomoću koda:
Matrica_rek=(x_3d1+x_3d2+x_3d3+x_3d4+x_3d5)./5;
Da bi vidjeli koliko se rekonstruirana matrica razlikuje od početne matrice prostora, oduzme se
jedna matrica od druge pomoću koda (rezultat je u tablici 5.3.):
Matrica_razlika=minus(Matrica,Matrica_rek);
Tablica 5.3. Razlika matrice postavljene i rekonstruirane
Br. Točke X - os Y - os Z - os
1 0,0014 0,0037 0,0000
2 -0,0015 -0,0013 -0,0018
3 -0,0008 -0,0083 0,0032
4 0,0020 0,0286 0,0124
5 0,0003 -0,0393 -0,0167
6 0,0028 0,0215 -0,0010
7 -0,0033 -0,0050 0,0055
Izračunata je srednja vrijednost pogreške (ukupna, x y z smjer) i standardne devijacije. Na slici
5.13. prikazan je histrogram distribucije ukupnih pogrešaka.
mean 0,11mm std 13,1mm (ukupno)
mean 0,13mm std 2,12mm (x os)
mean -0,01mm std 22,11mm (y os)
mean 0,23mm std 8,9mm (z os)
42
Slika 5.13. Histogram distribucije pogreške
Analiza je pokazala da se 80% rezultata nalazi unutar 2,5 cm pogreške. Promatrajući rezultate,
točnost rekonstrukcije je zadovoljavajuća.
Test je pokazao dobru točnost mjerenja položaja markera u 3D prostoru s obzirom na veličinu
testnog okruženja. Točnije mjerenje u navedenim uvjetima nije bilo moguće zbog utjecaja
vremena, velike udaljenosti zida i samim time točnosti slikanja. Distorzije leća su i ovdje u
znatnoj mjeri prevladane, i tek su primjetne na samim rubovima mjernog područja.
5.3. Dekompozicija P matrica igrališta
Obavljena je dekompozicija P matrica igrališta, tako da su dobivene K matrice kamere, R
matrice rotacije kamere i t vektor pomaka za svaku kameru P = K*[R|t] .
Korišteni MATLAB kod je:
[K1,R1,t1]=DecompPMat(P1);
43
Promatrajući P1 matricu i dobivene K1, R1 matrice i t1 vektor:
Tablica 5.4. P1 matrice sa igrališta
P1 38,0269 0,9361 -30,7944 -1526,5241
1,8950 -33,2093 -22,1220 -1089,4596
0,0013 0,0005 -0,0142 -0,7006
Tablica 5.5. Matrice K, R i t vektor t dekomponirane matrice P1
K1 2447,26 0,00 2395,13 R1 -0,996 0,007 -0,093 t1 -4,334
0,00 2378,75 1467,63 0,004 0,999 0,037 1,800
0,00 0,00 1,00 -0,094 -0,036 0,995 49,022
Ako se usporedi R1 matrica sa teorijskom matricom rotacije R (jednadžba 3.10) vidi se da
zadovoljava. Vidimo da su 1:1, 2:2 i 3:3 članovi približno jednaki jedan, što potvrđuje činjenicu
da je zamišljeni koordinatni sustav igrališta paralelan sa koordinatnim sustavom kamere.
5.4. Generiranje početne P matrice za cestu
Sada je potrebno generirati i testirati prvu matricu P za sustav kojim će se slikati dionica ceste.
Predpostavlja se da je K matrica za sve slike ista, te se generira kao srednja vrijednost K matrica
igrališta, MATLAB kod:
K_sr=(K1+K2+K3+K4+K5+K6)/6
Isto vrijedi i za R matricu, pretpostavljeno je da će let biti ravna linija, uz konstantan okret
kamere prema središtu zemlje kojeg će stabilizirati gimbal kamere, tako da je R matrica za sve
kamere ista, srednja vrijednost R matrica igrališta, MATLAB kod:
R_sr=(R1+R2+R3+R4+R5+R6)/6
44
Translacijski vektor generira se kao srednja vrijednost svih t vektora igrališta, s tim, pošto je
pomak kamere bio u +X smjeru, prvi element stavljamo od t1 vektora, MATLAB kod:
t_poc=(t1+t2+t3+t4+t5+t6)/6; t_poc(1,1)=t1(1,1);
Nakon toga određuje se linearno povećanje prvog elementa, kao prvi član vektora koji je srednje
vrijednosti pomaka između t translacijskih vektora, MATLAB kod:
t_tmp=((t6-t5)+(t5-t4)+(t4-t3)+(t3-t2)+(t2-t1))/5; t_pom=[t_tmp(1,1);0;0];
Svakom idućem t vektoru povećava se vrijednost prvog člana za vrijednost t_pom. Sada sa
poznatim vrijednostima mogu se generirati P matrice kojima ćemo testirati metodu. Prva P
matrica P_gen_1 je generirana pomoću MATLAB koda:
Rt1=[R_sr';[t_poc]']'; P_gen_1=(K_sr*Rt1);
Dok je svaka iduća generirana kao, MATLAB kod (primjer za P_gen_2):
C_poc_2=t_poc+t_pom; Rt2=[R_sr';[C_poc_2]']'; P_gen_2=(K_sr*Rt2)./56.76;
Nakon dobivenih generiranih P matrica, uspoređuje se P1 matricu sa P_gen_1, tako da se
dijele na način:
P_gen_1./P1
Rezultat pokazuje da je P_gen_1 veća za 56.76 puta, tako da je potrebno svaku P matricu
podijeliti sa tom vrijednosti, MATLAB kod:
koeficijent=56.76;
P_gen_1=P_gen_1./koeficijent;
Nakon što se dobiju generirane P matrice, proračunava se rekonstrukcija između svake P
matrice, potom se dobije generirana matrica prostora koju možemo usporediti sa
rekonstruiranom matricom igrališta iz poglavlja 5.2. Rezultat pokazuje da su greške velike, za
90% točaka, rekonstruirane matrice sa generiranim P matricama, greška je unutar 12 m, što je
s obzirom na veličinu modela jako veliko. Rješenje je u optimizacija t_pom parametra.
Optimizacijom t_pom matrice, najbolji rezultati su dobiveni za vrijednost prvog člana od 3,65.
45
Tablica 5.6. Razlika rekonstruirane matrice prostora i matrice prostora dobivene
generiranim P matricama, u metrima
Br. Točke X - os Y - os Z - os
1 -0,4749 0,0770 -1,3441
2 -0,3372 0,0096 -1,0624
3 -0,2918 0,1449 -1,6040
4 0,1092 0,1038 -0,7812
5 -0,5530 0,1215 1,2152
6 -0,4757 0,0959 0,9289
7 -0,7209 0,1451 1,2870
Izračunata je srednja vrijednost pogreške (ukupna, x y z smjer) i standardne devijacije. Na slici
5.14. prikazan je histrogram distribucije ukupnih pogrešaka.
mean -0,1622m std 0,7461m (ukupno)
mean -0,3921m std 0,2621m (x os)
mean 0,0997m std 0,0470m (y os)
mean -0,1944m std 1,2812m (z os)
Slika 5.13. Histogram distribucije pogreške matrice prostora dobivene generiranim P
matricama kamere
46
Analiza je pokazala da se 76% rezultata nalazi unutar 2 m pogreške. Promatrajući rezultate,
točnost rekonstrukcije je zadovoljavajuća s obzirom da su P matrice generirane. Zaključak je
da je predviđena metoda valjana.
Kad pogledamo odstupanja grešaka po svakoj osi posebno, veličine odstupanja točaka su bliske
za svaku os posebno, što dovodi do zaključka da je rekonstruirani model sa generiranim P
matricama točan dimenzijski, ali je pomaknut od mjesta gdje očekivamo rekonstrukciju.
Zaključuje se da je motoda čak i točnija za primjenu ako se želi saznati samo dimenzija
rekonstruiranog modela a manje točna, sa vrijednostima analize, ako se želi rekonstruirani
model pozicionirati u prostoru.
5.5. Greške sa pomakom markera
Testirana je veličina greške u rekonstrukciji pri pomaku markera od 1 px, 10 px, 20 px i 30 px.
Marker broj 3 koji se nalazi na 50 m od kamere, pomaknut je po X osi (osi pomaka kamere) za
1 px, 10 px, 20 px i 30 px u X smjeru, te je program nanovo pokrenut.
Slika 5.14. Prikaz greške po X, Y i Z osima za pomake markera od 1 px, 10 px, 20 px i 30 px
47
Iz slike 5.14. se vidi da je najveća greška u dubini, što je očekivano. Za pomak markera od 10
px greška je 1,62 cm dok za pomak markera od 30 px greška u dubini iznosi 6,63 cm. Iz slike
5.15. vidljivo je da greška po dubini, Z osi, eksponencijalno raste sa pomakom markera.
Slika 5.15. Prikaz greške po Z osi za pomake markera
Tablica 5.7. Vrijednosti grešaka, u metrima, sa pomacima markera po X osi, u pikselima
Pomak (px) X - os Y - os Z - os
1 0,0001 m 0,0002 m 0,0015 m
10 0,0012 m 0,0015 m 0,0162 m
20 0,0026 m 0,0026 m 0,0370 m
30 0,0045 m 0,0029 m 0,0663 m
48
6. REKONSTRUKCIJSKA CESTE
6.1. Slikavanje
Dionica ceste za rekonstrukciju je odabrana po prethodno opisanim kriterijima. Slikavanje je
obavljeno sa DJI Vision aplikacijom preko Android uređaja. Zadana je visina od 50 m od
zemlje, te veliki intezitet preklapanja slika. Kamera je preko upravljača spuštena na -90°. Nakon
par preleta, odabrana je najbolja serija slika, koja sadrži 18 slika.
Slika 6.1. Odabrana dionica sa koordinatama uslikane serije slika
Koordinate slika su dobiveni iz EXIF zapisa. Po letu se vidi da je ostvaren ravan prelet, što je
cilj metode. Gimbal se pobrinuo da je kamera konstantno okrenuto okomito prema središtu
zemlje, uz kompenzaciju ratacije usljed gibanja letjelice i vanjskih uvjeta.
49
Slika 6.2. Redoslijed serije slika ceste sa ispravljenom distorzijom
6.2. Rekonstrukcija
Nakon slikavanja, ispravljanje distorzije je obavljeno prethodno opisanom metodom. Odabir
zajedničkih točaka je obavljen poluatomatski na način da su markeri na slikama, sa
ispravljenom distorzijom, označeni u programu Photoshop dok je detekcija koordinata točaka
na slikama obavljen automatski i spremljen za svaku sliku posebno, jer je iskorištena pogodnost
što su točke središta ceste redoslijedno jedna iznad druge, pa nije moglo doći do krivog
redoslijeda indeksiranja točaka.
Prva generirana P matrica za prvu sliku uzima se iz prethodne rekostrukcije. Udaljenosti između
slika su predstavljani kao vektor P_vektor_b. Razlika od prethodne rekonstrukcije je što su
pomaci kamere rađeni po Y osi, tako da se umjesto prvog elementa vektora t mijenja vrijednost
drugog elementa t vektora za svaku iduću P matricu.
Pošto je letjelica bila niže od mjesta uzimanja prve slike za 7 m, određuje se koeficijent t_koe=7
koji će se nadodati svakom t vektoru svake matrice P. Jedan od bitnih faktora koji je bitan za
50
pravilnu rekonstrukciju u ovom slučaju je taj što letjelica održava visinu pomoću barometra, a
ne GPS koordinata, tako da se mora kompenzirati mijenjanje visine koje pomoću ove letjelice
nemožemo vidjeti. Uzet je model dionice iz Google Earth Pro programa koji je prikazan na slici
6.3.
Slika 6.3. Prikaz dionice u Google Earth Pro programu
Program pokazuje totalnu dužinu dionice od 263 m, uz promjenu totalne visine od 10,5 m. Iz
toga proizlazi da je nagib početne i krajnje točke dionice 2,286°. Jednostavnom jednadžbom se
dobije, uz poznatu x,y koordinatu točke, kompenzacija visine letjelice kao x / tan(α), s tim da
je α = 90° - 2,286°.
Poznavajući sve varijable koje je potrebno unijeti, MATLAB kod za svako povećanje drugog
elementa translacijskog vektora t, napisan je kao:
P_tmp_b=P_vektor_b(1,1);
t_pom_1=[t_poc(1,1); P_tmp_b; t_poc(3,1)-(P_tmp_b/tand(kut))+t_koe];
Te su potom generirane sve P matrice za svih 18 slika iz serija. Kod za prvu i drugu generiranu
P matricu glasi:
Rt_c1=[R_sr';[t_poc]']';
P_gen_c1=(K_sr*Rt_c1)./56.76;
Rt_c2=[R_sr';[t_pom_1]']';
P_gen_c2=(K_sr*Rt_c2)./56.76;
51
Nakon dobivenih generiranih P matrica, napravljen je pregled preklapanja točaka, da se vidi
koje su točke zajedničke kojim slikama iz serije. Indeksirane su nove x matrice sa koordinatama
markera, i obavljena rekonstrukcija korištenjem prethodno generiranih P matrica. Primjer
MATLAB koda za prve tri slike koje imaju 8 zajedničkih točaka izgleda:
x1_1=x1(:,[1:8]);
x2_1=x2(:,[1:8]);
x3_1=x3(:,[1:8]);
x_3d_1_1=Reconstruction(P_gen_c1,P_gen_c2,x1_1,x2_1)';
x_3d_2_1=Reconstruction(P_gen_c1,P_gen_c3,x1_1,x3_1)';
x_3d_3_1=Reconstruction(P_gen_c2,P_gen_c3,x2_1,x3_1)';
x3d1=(x_3d_1_1+x_3d_2_1+x_3d_3_1)./3;
Na kraju, kada su rekonstruirane sve točke, sve su točke skupljene u jednu matricu i ispisane na
ekranu:
x_3d_genu=[x3d1;x3d2;x3d3;x3d4;x3d5;x3d6;x3d7;x3d8;x3d9;x3d10;x3d11;x3d12;
x3d13;x3d14;x3d15;x3d16];
plot3(x_3d_genu(:,1),x_3d_genu(:,2),x_3d_genu(:,3), 'LineWidth',2); axis
equal
Iz dimenzija rekonstrukcije sa slika 6.5. i 6.6., vidljivo je da model potvrđuje postavljenu teoriju
i uspješno rekonstruira zajedničke točke koristeći generirane P matrice. Sve su teorijske
pretpostavke uspješno dokazane.
Slika 6.4. Prikaz rekonstruirane dionice u 3D
52
Slika 6.5. Prikaz rekonstruirane dionice po XY osi sa slojem Google mape za usporedbu
Ako se usporedi prikaz rekonstruirane dionice po XZ osi i krivuljom elevacije iz Google Earth
Pro programa, preklapanje se može vidjeti na slici 6.7.
Slika 6.6. Prikaz rekonstruirane dionice po XZ osi
Preklapanje bi bilo još bolje da visina letjelice nije održavana pomoću barometra već pomoću
GPS, na što se nije moglo utjecati, ali se u velikoj mjeri kompenziralo.
53
6.3. Izdvajanje ceste
Izdvajanja je obavljeno preko grafičkih svojstava same slike. Uzeta je peta slika iz serije. Prvo
je prebačena iz RGB sustava boja u HSV radi lakše kontrole parametara:
img = imread('3_cesta_undistord\3_cesta_05.JPG'); HSV = rgb2hsv(img);
Potom je prikazan svaki kanal posebno (slika 6.7.), tako da se vidi po svakom kanalu zasićenost
određenog parametra i odabere najpovoljniji za daljnju uporabu, MATLAB kod:
subplot(2,2,1), imshow(img); title('RGB slika'); subplot(2,2,2), imshow(HSV(:,:,1)); title('H kanal'); subplot(2,2,3), imshow(HSV(:,:,2)); title('S kanal'); subplot(2,2,4), imshow(HSV(:,:,3)); title('V kanal'), colormap(hsv);
Slika 6.7. RGB i H, S i V prikaz slike
Odabrano je da je najpovoljniji H kanal, ton boje (engl. hue), koji daje vizualno najbolje
izdvajanje ceste. Potom je uz odabir kanala, odabrane i vrijednosti kanala iznad 0,55 (slika 6.8.),
MATLAB kod:
H = HSV(:,:,1) < 0.0001 | HSV(:,:,1) > 0.55;
54
Slika 6.8. H kanal i filtrirani H sa vrijednostima iznad 0,55
Nakon toga potrebno je filtrirani H kanal provuci kroz nekoliko morfoloških operacija nad
binarnim slikama iz serije naredbi bwmorph iz MATLAB-a. Prvi od njih je erodiranje, tj.
smanjivanje površina koje imaju logičku vrijednost 1 na slici, veličina erodiranja je 10 px,
oblika disk. Potom izdvojen samo najveća površina na slici, što se redom može vidjeti na slici
6.9. uz kod:
%erodiranje se1 = strel('disk',10); H2 = imerode(H,se1); %odabir najvećeg objekta s = regionprops(H3, 'Area', 'PixelList'); [~,ind] = max([s.Area]); pix = sub2ind(size(H3), s(ind).PixelList(:,2), s(ind).PixelList(:,1)); out = zeros(size(H3)); out(pix) = H3(pix);
Slika 6.9. Erodirane površine logičke vrijednosti 1, odabran najveći objekt
55
Potom je površina dilatirana, povećana sa imdilate naredbom na povrtnu veličinu 10 px, i nakon
toga sa imfill naredbom popunjene male rupe u najvećoj površini koja je ostala. Nakon svega
je sa više ponavljanja imclose naredbe, „peglan“ rub površine tako da bi površina bila bliža
željenoj, uz parametre oblik diska sa radijusom 100 px:
%vraćanje prethodno erodiranih površina i popunjavanje malih rupa u
%najvećoj površini se2 = strel('disk',15);
H4 = imdilate(H3,se2); H5 = imfill(H4,'holes');
%Peglanje ruba površine se3 = strel('disk',100); H6 = imclose(H5,se3); H7 = imclose(H6,se3); H8 = imclose(H7,se3); H9 = imclose(H8,se3); H10 = imclose(H9,se3);
Slika 6.10. Popunjene male površine u najvećem objektu, te potom ispeglani rubovi površine
Dobivena je zadovoljavajuća maska ceste, te je sada potrebno naći sredinu. Sredina ceste se isto
traži koristeći morfološke naredbe MATLAB-a nad logičkim slikama. Prvo će se površina
ponovo erodirati do skoro kraja tako da bi skeletizacija površine bila pravilnija, te će se nakon
toga skeletizirani oblik samo malo podebljati radi boljeg prikaza:
%erodiranje do skoro kraja se4 = strel('disk',100); %za 100px, disk oblik H11 = imerode(H10,se4); %skeletizacija H12 = bwmorph(H11,'skel',Inf); %lagano podebljanje linije se5 = strel('line',10,10); %podebljanje linije za 10px radi boljeg prikaza H13 = imdilate(H12,se5);
56
Slika 6.11. Erodiranje površine do samog kraja i potom skeletizacija
Nakon što je dobivena sredina ceste vizualne slike, potrebno je još naći širinu ceste u pikselima
za jednu od zajedničkih točaka koje su označavane u poglavlju 6.2. Prvo je obavljen traženje
krajnjih točaka skeletona ceste, zatim je skeletn postavljen preko maske ceste te je napravljena
nova logička slika, koja u svakoj točki ima vrijednost udaljenosti skletona od ruba maske.
Dobivena slika je pogodna za vizualno poimanje širine ceste. MATLAB kod:
H10_l = logical(H10); branchPoints=bwmorph(H12, 'branchpoints'); endPoints=bwmorph(H12, 'endpoints'); [i,j] = find(bwmorph(H12,'endpoints')); D = bwdistgeodesic(H10_l,H12,'quasi');
imagesc(D)
Slika 6.12. Erodiranje površine do samog kraja i potom skeletizacija
57
Slika nije pogodna za izračun širine ceste u točki, zato se koristi druga naredba koja radi novu
logičku sliku koja govori koliko je najmanja udaljenost neke točke od ruba maske. Ako za
odabranu sliku 5 iz serije slika ceste, uzmemo x1 matricu sa koordinatama zajedničkih točaka,
i uzmemo jednu točku za primjer, lako možemo dobiti širinu ceste u pikselima kao:
load('x od ceste.mat') %invertiranje maske H14 = xor(1,H10_l); %bwdist naredba za udaljenost točki od ruba maske D2 = bwdist(H14); %odabir jedne točke tockax=x5(1,3); tockay=x5(2,3); %udaljenost točke od ruba i širina ceste vrijednost=improfile(D2,tockax,tockay); sirina=vrijednost*2;
Slika 6.13. Udaljenost točaka od ruba maske i odabrana jedna ot točaka iz x5 matrice
Izračunata širina ceste u odabranoj točki je 429,29 px. Ako poznavajući parametre kamere,
znamo da je veličina 1px na 50m udaljenosti jednaka 14,061 mm, lako je izračunati da je u
odabranoj točki široka 6,046 m. Širina ceste je dobivena iz formule:
𝑧𝑚𝑚 =𝑓𝑚𝑚∗𝑣𝑜𝑚𝑚∗𝑣𝑠𝑝𝑥
𝑣𝑜𝑝𝑥∗𝑠𝑚𝑚 (6.1)
58
gdje je:
zmm udaljenost objekta u mm (50 m)
fmm fokalna dužina kamere u mm (5 mm za DJI FC200)
vomm veličina objekta u stvarnom svijetu u mm (traži se)
vspx veličina slike u px (4388 px)
vopx veličina objekta u px
smm veličina senzora u mm (6,17 mm)
Slika 6.14. Vrijednost širine ceste u točki rekonstruirane dionice
59
7. ZAKLJUČAK
Model koji smo testirali u radu je uspješno dokazan. Prvo su testirani parametri kamere koju
smo gledali kao zatvoren sustav. Uspješno je obavljena kalibracija vrlo velike radijalne
distorzije kojoj je uzrok mali senzor kamere, ali i veliki FOV od 140°. Potom je napisan kod
kojim je moguće ispraviti distorziju i koji se može koristiti i u druge svrhe.
Potom su slikana 2 testna okruženja. Prvo testno okruženje je kocka, gdje su parametri i okoliš
strogo kontrolirani te je na taj način postignuta vrlo velika točnost rekonstruiranja. Potom je
testirano okruženje koje je veličinom jednako kao i cilj, tj. dionica ceste. Tu se se pojavili novi
čimbenici koji su utjecali na točnost, od veličine testiranog sustava, do vremenskih uvjeta, ali i
dalje uz veliku točnost mjerenja kao i slikanja.
Nakon toga, poznavajući bolje kameru kao sustav, i njezino ponašanje u prostoru, te
pretpostavkom kako će se slikati određeno okruženje, uspjele su se generirati sve iduće P
matrice kamere koje sadrže određene parametre koji se ne mijenjaju i parametre koji su
promijenjeni. Testiranjem je dokazano da je točnost sustava ostala zadovoljavajuća te se na isti
način mogla primijeniti i na odabranu dionicu ceste.
Nakon odabira povoljne dionice, i slikanja dionice po zadanim kriterijima generirale su se nove
P matrice kamere sa novim pomacima, koji su očitani sa GPS letjelice. Rekonstrukcija je
uspješno provedena što je dokazano uspoređujući dobiveni model sa stvarnim.
Nakon toga je obavljeno i programsko filtriranje ceste iz okoliša pomoću raznih filtera i
morfoloških operacija, koji je poslužio ne samo za filtriranje ceste već i za računanje širine
ceste. Računanje širine ceste ne bi bilo moguće bez poznavanja unutarnjih parametara kamere,
njezine intrisične matrice. Izračunom veličine piksela u stvarnom svijetu, i prethodno
izračunatom širinom ceste u pikselima, uspješno je izračunata i širina ceste u metrima.
60
SAŽETAK
Glavni cilj rada bio je testiranje generiranja P matrice kamere, povećanja jednog parametra
unutar ekstrinsične matrice, te samim time predviđanje kako će se kamera nalaziti u idućoj točki
slikanja serije slika.
Matrica kamere je sastavljena od više matrica koje su spojene u jednu matricu P 3x4 veličine,
u kojoj je zapisano osim fiksnih parametara, fokalne dužine, skew parametra, koordinatni sustav
slike, distorzija, koji svi skupa ovise o fizičkoj izradi kamere a i senzoru. Samim time njezini
parametri su jako međusobno ovisni, te svaka promjena ako nije točno predviđena, ali i unešena
na pravo mjesto, utječe i na druge parametre na način koji možda ne bi htjeli.
Zato uspješnim kombiniranjem unutrašnjih senzora letjelice i kontroliranjem P matrice kamere
uspješno je izvedena rekonstrukcija ceste kao i izračun širine ceste.
KLJUČNE RIJEČI
DJI, UAV, rekonstrukcija, mapiranje, 3D
61
LITERATURA
[1] Lapaine, Miljenko; Lapaine, Miroslav; Tutić, Dražen: „GPS“, s interneta,
http://www.kartografija.hr, 12.09.2015.
[2] Chandler, Nathan: „How Drones Work“, s interneta,
http://science.howstuffworks.com/transport/flight/modern/drones.htm, 15.08.2015.
[3] „DJI Phantom 2 Vision+“, s interneta, http://dji.com, 15.08.2015.
[4] „H3-2D-Autopilot System, GCU and Gimbal Wiring“, s interneta,
http://wiki.dji.com/en/, 15.08.2015.
[5] Handwerk, Brian: „5 Surprising Drone Uses“, s interneta,
http://news.nationalgeographic.com, 25.08.2015.
[6] R. Hartley, A. Zisserman: Multiple View Geometry in Computer Vision, Cambridge
University Press, UK, 2003.
[7] Simek, Kyle: „Dissecting the Camera Matrix“, s interneta, http://ksimek.github.io,
05.08.2015.
[8] Navab, Nassir: „Rectification and Disparity“, s interneta, http://campar.in.tum.de,
05.09.2015.
[9] G.H., Golub; C.F., Van Loan: Matrix computations, The John Hopkins University
Press, Baltimore, Maryland, 2 edition, 1989.
[10] „Boja i atributi boje“, sa interneta stranice Sveučilišta u Zagrebu,
http://racunala.ttf.unizg.hr/files/Boja_i_atributi_boje.pdf, rujan 2015.g.
[11] Stančić, Ivo: „Sustav za mjerenje i vrednovanje antropometrijskih parametara i
kinematike ljudskog kretanja“, FESB, Sveučilište u Splitu, 2012.g.
62
POPIS OZNAKA I KRATICA
2D eng. Two-dimensional – Dvodimenzionalni prostor
3D eng. Three-dimensional – Trodimenzionalni prostor
BMP eng. Bitmap image file – Rasterski slikovni format
CMOS eng. Complementary metal–oxide–semiconductor – Tip poluvodiča
DJI Kineska kompanija za komercijalne i rekreacijske UAV letjelice
ESC eng. Electronic speed controller – Modul za kontrolu brzine motora
FOV eng. Field of view – Područje vida
GPS eng. Global Positioning System – Sustav pozicioniranja na zemlji
HSB eng. Hue, Saturation, Brightness – Sustav boja
HSI eng. Hue, Saturation, Intensity – Sustav boja
HSL eng. Hue, Saturation, Lightness – Sustav boja
HSV eng. Hue, Saturation, Value – Sustav boja
ICAO eng. International Civil Aviation Organization – Organizacija međunarodnog
civilnog zrakoplovstva
IFI eng. Information for Industry – Institucija za patente
IMU eng. Inertial Measurement Unit – Modul sa senzorima za inercijska mjerenja
JPEG eng. Joint Photographic Experts Group – Komprimirani slikovni format
LED eng. Light-emitting diode – Svjetleća dioda
LiPO eng. Lithium polymer battery – Tip baterije
NASA eng. The National Aeronautics and Space Administration – Američka agencija
za civilni svemirski program
NAVSTAR eng. Navigation Satellite Timing and Ranging - službeno ime Ministarstva
obrane SAD-a za GPS
63
NiMH eng. Nickel–metal hydride battery – Tip baterije
NOAA eng. National Oceanic and Atmospheric Administration – Američka agencija
za praćenje oceana i atmosfere
PMU eng. Power Management Unit – Modul za napajanje
RGB eng. Red-Green-Blue – Sustav boja
SAD Sjedinjene Američke Države
UAV eng. Unmanned aerial vehicle – Letjelica bez pilota
64
DODATAK
Kod programa za ispravljanje distorzije
Slika = imread('Slike\Image_12032015_MarkoLovric_01.jpg');
Ispravljena_slika = undistortImage(Slika,cameraParams);
pairOfImages = [Slika, Ispravljena_slika];
imshow(pairOfImages);
Kod programa za detekciju točaka sa manualnim odabirom točaka
%ucitavanje pozadinske slike
I_bkg=imread('slike\kocka_undistord\image1.jpg','JPG');
%ucitavanje slike sa markerima
I=imread('slike\kocka_undistord\image1.bmp','bmp');
%trazenje i racunanje centra markera
imshow(I_bkg);
hold on
%rucno trazenje pribizne lokacije markera
L = bwlabel(I);
s = regionprops(L, 'Centroid'); %cetroidi
%najjednostavnije trazenje, centroid
for k = 1:numel(s)
marker_tmp(k,1)=round(s(k).Centroid(1));
marker_tmp(k,2)=round(s(k).Centroid(2));
plot(marker_tmp(k,1),marker_tmp(k,2),'rx')
marker_matlab(k,1:2)=marker_tmp(k,1:2);
end
hold on
tocke=ginput(9);
tic
marker_tezinski=marker_tmp;
for tocka=1:9
udaljenost_temp_2=inf;
for k = 1:numel(s)
udaljenost_temp= sqrt((marker_tezinski(k,1)-tocke(tocka,1))^2 +
(marker_tezinski(k,2)-tocke(tocka,2))^2);
if udaljenost_temp<udaljenost_temp_2
udaljenost_temp_2=udaljenost_temp;
marker_tezinski_sort(tocka,1:2)=marker_tezinski(k,1:2);
end
end
end
65
%figure(2),imshow(I)
for tocka=1:9
text(marker_tezinski_sort(tocka,1),marker_tezinski_sort(tocka,2),spr
intf('tocka %d',tocka),'Color','w');
%text(tocke(tocka,1),tocke(tocka,2),sprintf('tocka
%d',tocka),'Color','g');
end
y=marker_tezinski_sort(:,2);
x=marker_tezinski_sort(:,1);
I_markeri_1=I_bkg(y(1)-10:y(1)+10,x(1)-10:x(1)+10);
I_markeri_2=I_bkg(y(2)-10:y(2)+10,x(2)-10:x(2)+10);
I_markeri_3=I_bkg(y(3)-10:y(3)+10,x(3)-10:x(3)+10);
I_markeri_4=I_bkg(y(4)-10:y(4)+10,x(4)-10:x(4)+10);
I_markeri_5=I_bkg(y(5)-10:y(5)+10,x(5)-10:x(5)+10);
I_markeri_6=I_bkg(y(6)-10:y(6)+10,x(6)-10:x(6)+10);
I_markeri_7=I_bkg(y(7)-10:y(7)+10,x(7)-10:x(7)+10);
I_markeri_8=I_bkg(y(7)-10:y(7)+10,x(7)-10:x(7)+10);
I_markeri_9=I_bkg(y(7)-10:y(7)+10,x(7)-10:x(7)+10);
[pomak_y(1),pomak_x(1)]=srediste_markera(I_markeri_1,0.0,20,0)
[pomak_y(2),pomak_x(2)]=srediste_markera(I_markeri_2,0.0,20,0)
[pomak_y(3),pomak_x(3)]=srediste_markera(I_markeri_3,0.0,20,0)
[pomak_y(4),pomak_x(4)]=srediste_markera(I_markeri_4,0.0,20,0)
[pomak_y(5),pomak_x(5)]=srediste_markera(I_markeri_5,0.0,20,0)
[pomak_y(6),pomak_x(6)]=srediste_markera(I_markeri_6,0.0,20,0)
[pomak_y(7),pomak_x(7)]=srediste_markera(I_markeri_7,0.0,20,0)
[pomak_y(8),pomak_x(8)]=srediste_markera(I_markeri_8,0.0,20,0)[pomak
_y(9),pomak_x(9)]=srediste_markera(I_markeri_9,0.0,20,0)
marker_tezinski_sort_c(:,2)=marker_tezinski_sort(:,2)-
pomak_y(:);
marker_tezinski_sort_c(:,1)=marker_tezinski_sort(:,1)-
pomak_x(:);
for tocka=1:9
%text(marker_tezinski_sort_c(tocka,1),marker_tezinski_sort_c(tocka,2
),sprintf('tocka %d',tocka),'Color','w');
plot(marker_tezinski_sort_c(tocka,1),marker_tezinski_sort_c(tocka,2)
,'mx')
%text(tocke(tocka,1),tocke(tocka,2),sprintf('tocka
%d',tocka),'Color','g');
end
xm=[x';y';1 1 1 1 1 1 1 1 1];
x1=xm';
x1_ispeglani=peglanje_distorzije_pix(marker_tezinski_sort_c',cam);
toc
66
Kod programa za rekonstrukciju kocke
load('x1 - x5 + matrica za kocku.mat')
P1=CalibNormDLT(x1',Matrica');
P2=CalibNormDLT(x2',Matrica');
P3=CalibNormDLT(x3',Matrica');
P4=CalibNormDLT(x4',Matrica');
P5=CalibNormDLT(x5',Matrica');
x_3d1=Reconstruction(P1,P2,x1',x2')';
x_3d2=Reconstruction(P2,P3,x2',x3')';
x_3d3=Reconstruction(P3,P4,x3',x4')';
x_3d4=Reconstruction(P4,P5,x4',x5')';
Matrica_kocka=(x_3d1+x_3d2+x_3d3+x_3d4)./4;
%Razlika matrica
Matrica_razlika=minus(Matrica,Matrica_kocka);
Matrica_razlika_v=[Matrica_razlika(:,1);Matrica_razlika(:,2);Matrica
_razlika(:,3)];
%Srednja vrijednost pogreške
SP=mean(Matrica_razlika);
SPu=mean(Matrica_razlika_v);
%Standardna devijacija
STD=std(Matrica_razlika);
STDu=std(Matrica_razlika_v);
%Histogram SP i STD
nbins=5;
h= histogram(Matrica_razlika_v,nbins); %Plot data divided into 21
bins
h
67
Kod programa za generiranje matrica P i rekonstrukciju ceste
load('x od ceste.mat')
format long
K_sr=(K1+K2+K3+K4+K5+K6)/6;
% K_sr=[2456.25908290775 0 2293.45611641322;
% 0 2399.85579205122 1579.62157094164;
% 0 0 1];
R_sr=(R1+R2+R3+R4+R5+R6)/6;
% R_sr=[-0.998032456906800 0.008154544526735 -0.049540982903932;
% 0.007900330033725 0.999720612895671 -0.006892826331115;
% -0.049468833724165 0.007282388526946 0.997826908801789];
%t sred, samo je t(1) od prve matrice ;
t_poc=(t1+t2+t3+t4+t5+t6)/6;
t_poc(2,1)=t1(2,1);
% t_poc=[-4.333870213671806;
% -0.494349670855384;
% 49.775493170414535];
koeficijentB=1.9;
P_vektor_b=[
13.32683305
13.74760144
13.95581171
13.63371364
13.44868322
13.25563313
13.14159672
13.08592775
12.99643078
12.86784841
12.64315778
12.94814451
16.50891803
13.34508019
14.39138958
11.33035977
12.15171814
]; P_vektor_b=P_vektor_b+koeficijentB;
t_koe=7;
kut=86.5;
t_poc=[t_poc(1,1); t_poc(2,1); t_poc(3,1)+t_koe];
P_tmp_b=P_vektor_b(1,1);
t_pom_1=[t_poc(1,1); P_tmp_b; t_poc(3,1)-(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(2,1);
t_pom_2=[t_poc(1,1); P_tmp_b; t_poc(3,1)-(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(3,1);
68
t_pom_3=[t_poc(1,1); P_tmp_b; t_poc(3,1)-(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(4,1);
t_pom_4=[t_poc(1,1); P_tmp_b; t_poc(3,1)-(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(5,1);
t_pom_5=[t_poc(1,1); P_tmp_b; t_poc(3,1)-(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(6,1);
t_pom_6=[t_poc(1,1); P_tmp_b; t_poc(3,1)-(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(7,1);
t_pom_7=[t_poc(1,1); P_tmp_b; t_poc(3,1)-(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(8,1);
t_pom_8=[t_poc(1,1); P_tmp_b; t_poc(3,1)-(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(9,1);
t_pom_9=[t_poc(1,1); P_tmp_b; t_poc(3,1)-(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(10,1);
t_pom_10=[t_poc(1,1); P_tmp_b; t_poc(3,1)-
(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(11,1);
t_pom_11=[t_poc(1,1); P_tmp_b; t_poc(3,1)-
(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(12,1);
t_pom_12=[t_poc(1,1); P_tmp_b; t_poc(3,1)-
(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(13,1);
t_pom_13=[t_poc(1,1); P_tmp_b; t_poc(3,1)-
(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(14,1);
t_pom_14=[t_poc(1,1); P_tmp_b; t_poc(3,1)-
(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(15,1);
t_pom_15=[t_poc(1,1); P_tmp_b; t_poc(3,1)-
(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(16,1);
t_pom_16=[t_poc(1,1); P_tmp_b; t_poc(3,1)-
(P_tmp_b/tand(kut))+t_koe];
P_tmp_b=P_tmp_b+P_vektor_b(17,1);
t_pom_17=[t_poc(1,1); P_tmp_b; t_poc(3,1)-
(P_tmp_b/tand(kut))+t_koe];
Rt_c1=[R_sr';[t_poc]']';
P_gen_c1=(K_sr*Rt_c1)./56.76; %za obicne 56.76 za kropane 56.91
69
Rt_c2=[R_sr';[t_pom_1]']';
P_gen_c2=(K_sr*Rt_c2)./56.76;
Rt_c3=[R_sr';[t_pom_2]']';
P_gen_c3=(K_sr*Rt_c3)./56.76;
Rt_c4=[R_sr';[t_pom_3]']';
P_gen_c4=(K_sr*Rt_c4)./56.76;
Rt_c5=[R_sr';[t_pom_4]']';
P_gen_c5=(K_sr*Rt_c5)./56.76;
Rt_c6=[R_sr';[t_pom_5]']';
P_gen_c6=(K_sr*Rt_c6)./56.76;
Rt_c7=[R_sr';[t_pom_6]']';
P_gen_c7=(K_sr*Rt_c7)./56.76;
Rt_c8=[R_sr';[t_pom_7]']';
P_gen_c8=(K_sr*Rt_c8)./56.76;
Rt_c9=[R_sr';[t_pom_8]']';
P_gen_c9=(K_sr*Rt_c9)./56.76;
Rt_c10=[R_sr';[t_pom_9]']';
P_gen_c10=(K_sr*Rt_c10)./56.76;
Rt_c11=[R_sr';[t_pom_10]']';
P_gen_c11=(K_sr*Rt_c11)./56.76;
Rt_c12=[R_sr';[t_pom_11]']';
P_gen_c12=(K_sr*Rt_c12)./56.76;
Rt_c13=[R_sr';[t_pom_12]']';
P_gen_c13=(K_sr*Rt_c13)./56.76;
Rt_c14=[R_sr';[t_pom_13]']';
P_gen_c14=(K_sr*Rt_c14)./56.76;
Rt_c15=[R_sr';[t_pom_14]']';
P_gen_c15=(K_sr*Rt_c15)./56.76;
Rt_c16=[R_sr';[t_pom_15]']';
P_gen_c16=(K_sr*Rt_c16)./56.76;
Rt_c17=[R_sr';[t_pom_16]']';
P_gen_c17=(K_sr*Rt_c17)./56.76;
Rt_c18=[R_sr';[t_pom_17]']';
P_gen_c18=(K_sr*Rt_c18)./56.76;
%Generiranje x-eva i točaka ---------------------------------------
------
%1. površina
x1_1=x1(:,[1:8]);
x2_1=x2(:,[1:8]);
70
x3_1=x3(:,[1:8]);
x_3d_1_1=Reconstruction(P_gen_c1,P_gen_c2,x1_1,x2_1)';
x_3d_2_1=Reconstruction(P_gen_c1,P_gen_c3,x1_1,x3_1)';
x_3d_3_1=Reconstruction(P_gen_c2,P_gen_c3,x2_1,x3_1)';
x3d1=(x_3d_1_1+x_3d_2_1+x_3d_3_1)./3;
%2. površinu
x2_2=x2(:,[9:12]);
x3_2=x3(:,[9:12]);
x4_2=x4(:,[1:4]);
x_3d_1_2=Reconstruction(P_gen_c2,P_gen_c3,x2_2,x3_2)';
x_3d_2_2=Reconstruction(P_gen_c2,P_gen_c4,x2_2,x4_2)';
x_3d_3_2=Reconstruction(P_gen_c3,P_gen_c4,x3_2,x4_2)';
x3d2=(x_3d_1_2+x_3d_2_2+x_3d_3_2)./3;
%3. površinu
x3_3=x3(:,[13:14]);
x4_3=x4(:,[5:6]);
x5_3=x5(:,[1:2]);
x_3d_1_3=Reconstruction(P_gen_c3,P_gen_c4,x3_3,x4_3)';
x_3d_2_3=Reconstruction(P_gen_c3,P_gen_c5,x3_3,x5_3)';
x_3d_3_3=Reconstruction(P_gen_c4,P_gen_c5,x4_3,x5_3)';
x3d3=(x_3d_1_3+x_3d_2_3+x_3d_3_3)./3;
%4. površinu
x4_4=x4(:,[7:8]);
x5_4=x5(:,[3:4]);
x6_4=x6(:,[1:2]);
x_3d_1_4=Reconstruction(P_gen_c4,P_gen_c5,x4_4,x5_4)';
x_3d_2_4=Reconstruction(P_gen_c4,P_gen_c6,x4_4,x6_4)';
x_3d_3_4=Reconstruction(P_gen_c5,P_gen_c6,x5_4,x6_4)';
x3d4=(x_3d_1_4+x_3d_2_4+x_3d_3_4)./3;
%5. površinu
x5_5=x5(:,[5:6]);
x6_5=x6(:,[3:4]);
x7_5=x7(:,[1:2]);
x_3d_1_5=Reconstruction(P_gen_c5,P_gen_c6,x5_5,x6_5)';
x_3d_2_5=Reconstruction(P_gen_c5,P_gen_c7,x5_5,x7_5)';
x_3d_3_5=Reconstruction(P_gen_c6,P_gen_c7,x6_5,x7_5)';
x3d5=(x_3d_1_5+x_3d_2_5+x_3d_3_5)./3;
%6. površinu
x6_6=x6(:,[5:6]);
x7_6=x7(:,[3:4]);
x8_6=x8(:,[1:2]);
x_3d_1_6=Reconstruction(P_gen_c6,P_gen_c7,x6_6,x7_6)';
x_3d_2_6=Reconstruction(P_gen_c6,P_gen_c8,x6_6,x8_6)';
x_3d_3_6=Reconstruction(P_gen_c7,P_gen_c8,x7_6,x8_6)';
x3d6=(x_3d_1_6+x_3d_2_6+x_3d_3_6)./3;
71
%7. površinu
x7_7=x7(:,[5:6]);
x8_7=x8(:,[3:4]);
x9_7=x9(:,[1:2]);
x_3d_1_7=Reconstruction(P_gen_c7,P_gen_c8,x7_7,x8_7)';
x_3d_2_7=Reconstruction(P_gen_c7,P_gen_c9,x7_7,x9_7)';
x_3d_3_7=Reconstruction(P_gen_c8,P_gen_c9,x8_7,x9_7)';
x3d7=(x_3d_1_7+x_3d_2_7+x_3d_3_7)./3;
%8. površinu
x8_8=x8(:,[5:6]);
x9_8=x9(:,[3:4]);
x10_8=x10(:,[1:2]);
x_3d_1_8=Reconstruction(P_gen_c8,P_gen_c9,x8_8,x9_8)';
x_3d_2_8=Reconstruction(P_gen_c8,P_gen_c10,x8_8,x10_8)';
x_3d_3_8=Reconstruction(P_gen_c9,P_gen_c10,x9_8,x10_8)';
x3d8=(x_3d_1_8+x_3d_2_8+x_3d_3_8)./3;
%9. površinu
x9_9=x9(:,[5:6]);
x10_9=x10(:,[3:4]);
x11_9=x11(:,[1:2]);
x_3d_1_9=Reconstruction(P_gen_c9,P_gen_c10,x9_9,x10_9)';
x_3d_2_9=Reconstruction(P_gen_c9,P_gen_c11,x9_9,x11_9)';
x_3d_3_9=Reconstruction(P_gen_c10,P_gen_c11,x10_9,x11_9)';
x3d9=(x_3d_1_9+x_3d_2_9+x_3d_3_9)./3;
%10. površinu
x10_10=x10(:,[5:6]);
x11_10=x11(:,[3:4]);
x12_10=x12(:,[1:2]);
x_3d_1_10=Reconstruction(P_gen_c10,P_gen_c11,x10_10,x11_10)';
x_3d_2_10=Reconstruction(P_gen_c10,P_gen_c12,x10_10,x12_10)';
x_3d_3_10=Reconstruction(P_gen_c11,P_gen_c12,x11_10,x12_10)';
x3d10=(x_3d_1_10+x_3d_2_10+x_3d_3_10)./3;
%11. površinu
x11_11=x11(:,[5:7]);
x12_11=x12(:,[3:5]);
x13_11=x13(:,[1:3]);
x_3d_1_11=Reconstruction(P_gen_c11,P_gen_c12,x11_11,x12_11)';
x_3d_2_11=Reconstruction(P_gen_c11,P_gen_c13,x11_11,x13_11)';
x_3d_3_11=Reconstruction(P_gen_c12,P_gen_c13,x12_11,x13_11)';
x3d11=(x_3d_1_11+x_3d_2_11+x_3d_3_11)./3;
%12. površinu
x12_12=x12(:,[6:8]);
x13_12=x13(:,[4:6]);
x_3d_1_12=Reconstruction(P_gen_c12,P_gen_c13,x12_12,x13_12)';
72
x3d12=(x_3d_1_12)./1;
%13. površinu
x14_13=x14(:,[2:5]);
x15_13=x15(:,[1:4]);
x_3d_1_13=Reconstruction(P_gen_c14,P_gen_c15,x14_13,x15_13)';
x3d13=(x_3d_1_13)./1;
%14. površinu
x15_14=x15(:,[6]);
x16_14=x16(:,[4]);
x17_14=x17(:,[1]);
x_3d_1_14=Reconstruction(P_gen_c15,P_gen_c16,x15_14,x16_14)';
x_3d_2_14=Reconstruction(P_gen_c15,P_gen_c17,x15_14,x17_14)';
x_3d_3_14=Reconstruction(P_gen_c16,P_gen_c17,x16_14,x17_14)';
x3d14=(x_3d_1_14+x_3d_2_14+x_3d_3_14)./3;
%15. površinu
x16_15=x16(:,[6:8]);
x17_15=x17(:,[3:5]);
x18_15=x18(:,[1:3]);
x_3d_1_15=Reconstruction(P_gen_c16,P_gen_c17,x16_15,x17_15)';
x_3d_2_15=Reconstruction(P_gen_c16,P_gen_c18,x16_15,x18_15)';
x_3d_3_15=Reconstruction(P_gen_c17,P_gen_c18,x17_15,x18_15)';
x3d15=(x_3d_1_15+x_3d_2_15+x_3d_3_15)./3;
%16. površinu
x17_16=x17(:,[6:9]);
x18_16=x18(:,[4:7]);
x_3d_1_16=Reconstruction(P_gen_c17,P_gen_c18,x17_16,x18_16)';
x3d16=(x_3d_1_16)./1;
maska = [zeros(1,4); zeros(1,4); -1 -1 -1 -1; zeros(1,4)];
x3d16=x3d16'+maska;
x3d16=x3d16';
%UKUPAN x3d
x_3d_genu=[x3d1;x3d2;x3d3;x3d4;x3d5;x3d6;x3d7;x3d8;x3d9;x3d10;x3d11;
x3d12;x3d13;x3d14;x3d15;x3d16];
Linija_ispravljanja = [x_3d_genu(1,3),
x_3d_genu(1,2);x_3d_genu(1,3)+10.5, x_3d_genu(1,2)-263];
Matrica_google_pom=Matrica_google;
pomak_x=-x_3d_genu(1,2);
pomak_y=Matrica_google(1,2)-x_3d_genu(1,3);
for i = 1:+1:512
Matrica_google_pom(i:1)=[Matrica_google_pom(i:1)+pomak_x];
Matrica_google_pom(i:2)=[Matrica_google_pom(i:2)-pomak_y];
end
73
%plot --------------------------------------------------------------
-----
linijax1 = -x_3d_genu(:,2);
linijay1 = x_3d_genu(:,3);
linijax2 = Matrica_google_pom(:,1);
linijay2 = Matrica_google_pom(:,2);
linijax3 = -Linija_ispravljanja(:,2);
linijay3 = Linija_ispravljanja(:,1);
figure
plot(linijax1,linijay1,linijax2,linijay2,linijax3,linijay3,
'LineWidth',2); axis equal
Kod programa za filtriranje ceste
img = imread(3_cesta_05.JPG');
HSV = rgb2hsv(img);
subplot(2,2,1), imshow(img); title('RGB slika');
subplot(2,2,2), imshow(HSV(:,:,1)); title('H kanal');
subplot(2,2,3), imshow(HSV(:,:,2)); title('S kanal');
subplot(2,2,4), imshow(HSV(:,:,3)); title('V kanal'),
colormap(hsv);
H = HSV(:,:,1) < 0.0001 | HSV(:,:,1) > 0.55;
se1 = strel('disk',10);
H2 = imerode(H,se1);
%Biggest object
s = regionprops(H2, 'Area', 'PixelList');
[~,ind] = max([s.Area]);
pix = sub2ind(size(H2), s(ind).PixelList(:,2),
s(ind).PixelList(:,1));
H3 = zeros(size(H2));
H3(pix) = H2(pix);
se2 = strel('disk',15);
H4 = imdilate(H3,se2);
H5 = imfill(H4,'holes'); % fill the gap on the ball top part
%zaobljivanje konture
se3 = strel('disk',100); %za 150px circular
H6 = imclose(H5,se3);
H7 = imclose(H6,se3);
H8 = imclose(H7,se3);
H9 = imclose(H8,se3);
H10 = imclose(H9,se3);
74
%erodiranje do skoro kraja
se4 = strel('disk',100); %za 150px circular
H11 = imerode(H10,se4);
%skeletizacija
H12 = bwmorph(H11,'skel',Inf);
%lagano podebljanje linije
se5 = strel('line',10,10);
H13 = imdilate(H12,se5);
H10_l = logical(H10);
branchPoints=bwmorph(H12, 'branchpoints');
endPoints=bwmorph(H12, 'endpoints');
[i,j] = find(bwmorph(H12,'endpoints'));
D = bwdistgeodesic(H10_l,H12,'quasi');
load('x od ceste.mat')
H14 = xor(1,H10_l);
D2 = bwdist(H14);
tockax=x5(1,1);
tockay=x5(2,1);
tockax2=x5(1,2);
tockay2=x5(2,2);
tockax3=x5(1,3);
tockay3=x5(2,3);
tockax4=x5(1,4);
tockay4=x5(2,4);
tockax5=x5(1,5);
tockay5=x5(2,5);
tockax6=x5(1,6);
tockay6=x5(2,6);
vrijednost1=improfile(D2,tockax,tockay);
sirina1=vrijednost1*2*14.061;
vrijednost2=improfile(D2,tockax2,tockay2);
sirina2=vrijednost2*2*14.061;
vrijednost3=improfile(D2,tockax3,tockay3);
sirina3=vrijednost3*2*14.061;
vrijednost4=improfile(D2,tockax4,tockay4);
sirina4=vrijednost4*2*14.061;
vrijednost5=improfile(D2,tockax5,tockay5);
sirina5=vrijednost5*2*14.061;
vrijednost6=improfile(D2,tockax6,tockay6);
sirina6=vrijednost6*2*14.061;