AS 0.3200 Automaatio ja systeemitekniikan projektityöt S09 04 Kohteiden tunnistaminen 3D datasta Loppuraportti 22.5.2009 Akseli Korhonen
1. Projektin esittely Projektin tavoitteena oli algoritmin kehittäminen rakennetun ympäristön kohteiden, kuten lattian, seinien ja katon tunnistamiseen 3D laserskannerin tuottamasta mittauspisteparvesta. Skanneri koostuu kahdesta lasermittarista jotka on kiinnitetty pyörivään alustaan. Heijastuvasta lasersäteestä saadaan etäisyystieto, josta yhdessä skannerin asematidon kanssa voidaan laskea laitteen ympäristöä kuvaava pistejoukko. Mittausdata kerätään ja prosessoidaan PC tietokoneella. Vastaavaa tekniikkaa on hyödynnetty esimerkiksi asuinalueiden ilmakartoituksessa kattojen (taso) ja metsätyökoneissa puunrunkojen (lieriö) tunnistamiseen [1][2]. Tavoitteet Projektin ensisijaisena tavoitteena oli pyrkiä tunnistamaan yksinkertaisia rakenteita kuten lattia, katto ja seinät. Haastaviempien muotojen tuonnistaminen asetettiin mahdolliseksi jatkotavoitteeksi.
2. Projektin eteneminen Projekti jaettiin suunniteltaessa kolmeen vaiheeseen: Teoriaan tutustuminen ja työkalujen valinta Projektin työkalut olivat vapaasti valittavissa ja valinta kohdistui tuttuun ja hyväksi havaittuun Matlabiin. Valintaa puolsivat Matlabin monipuoliset ja nopeat matriisoperaatiot, joita pystyttiin hyödyntämään itse algoritmissa. Sovellettavaksi algoritmiksi valittiin Hough muunnos, jota on käytetty laajalti kuvankäsittelyssä tunnistettaessa muotoja 2D kuvista [3]. Haasteena olisi siis laajentaa algoritmi kolmeen ulottuvuuteen. Hough muunnoksessa pisteet kuvataan parametriavaruuteen, josta kiinnostavat kohteet löydetään lokaaleina maksimeina. Muita varteenotettavia vaihtoehtoja olisi ollut ainakin RANSAC [4] eli random sample consensus algoritmi, joka kuitenkin hylättiin koska iteratiivisen algoritmin ajaminen suurelle datajoukolle voisi osoittautua laskennallisesti liian työlääksi. Algoritmin ohjelmointi ja testaus Algoritmin ohjelmointi aloitettiin tavoitteena saada aikaan nopeasti yksinkertainen, toimiva versio. 2 uloitteisen muunnoksen pohjalta onnistuttiinkin väliraporttiin mennessä kehittämään algoritmi, jonka avulla tunnistettiin skanneriin nähden kohtisuorat pinnat. Lopullinen algoritmi osaa tunnistaa tason oli sen sijainti ja orientaatio mikä tahansa. Kaikkien mahdollisten tasojen etsiminen 3D avaruudesta on kuitenkin laskennallisesti raskasta. Tämän takia algoritmissa on myös mahdollisuus etsiä erikseen horisontaalisia (katto ja lattia) ja vertikaalisia (seinät) tasoja. Mielivaltaisen tason etsintää varten on käyttäjän todennäköisesti muokattava parametreja itse koodin sisällä. Dokumentointi Skannerilla otettiin lukuisia mittauksia erilaisissa ympäristöissä ja algoritmin toimintaa havainnollistettiin tekemällä videot, joissa pistejoukkoa kuvataan niiden ympäriltä.
3. Algoritmin toiminta Kehitetyn algoritmin toiminta on esitetty pääpiirteissään alla, tarkempi ohjelmakoodi löytyy liitteenä olevasta matlab tiedostosta. Algoritmin voi ajaa Matlabissa esimerkiksi komennolla: [accumulator, data] = D3Hough(filterPoints(all3d1), 2, 20); Saatua pistejoukkoa voi tarkastella vaikka komennolla: scatter3(data(1:size(data), 1), data(1:size(data), 2), data(1:size(data), 3)); D3Hough algoritmi Otetaan parametrina laserskannerilta saatu pistejoukko. Valitaan joukosta osa itse muunnosta varten. Etsitään valituille pisteille lähimmät naapurit ja lasketaan näiden kolmen pisteen muodostaman tason normaali kyseisessä pisteessä. Parametrisoidaan nämä tasot ja kasvatetaan 3 uloitteista akkumulaattoria parametrien mukaisesti. Etsitään akkumulaattorista maksimi jonka avulla saadaan löydetyn tason yhtälö. Etsitään alkuperäisestä pistejoukosta pisteet, jotka toteuttavat tason yhtälön. Palautetaan akkumulaattori ja löydetyt pisteet. Seuraavassa on esitetty kaksi videota, jotka havainnollistavat käytetyllä algoritmilla saatuja tuloksia. Videossa 1 on alkuperäinen pistejoukko. http://www.youtube.com/watch?v=wnp8mn4pzvg Videossa 2 tästä joukosta on tunnistettu lattia(vihreä), seinät(punainen) ja katto(sininen). http://www.youtube.com/watch?v=leyd_9vdpxs
4. Yhteenveto Projekti saavutti ensisijaisen tavoitteensa ja kehitetyllä algoritmilla onnistuttiin erottelemaan pistedatasta samassa tasossa sijaitsevat pisteet. Ajankäytön kannalta onnistumiset projektin alkupuolella aiheuttivat sen että lopussa tuli kiire. Aikataulu lipsui loppuvaiheessa suunnitelmasta ja työ eteni nykäyksittäin. Projektiin tuli kokonaisuudessaan kuitenkin käytettyä aikaa työlle arvioitu määrä, noin 90 tuntia. Algoritmi on loppuraporttia kirjoitettaessa toimiva, joskin vaatinee käyttöympäristöstä riippuen parametrien viilausta. Samalle pohjalle olisi kuitenkin mahdollista kehittää myös monimutkaisempia kappaleita kuten lieriöitä tunnistava toiminnallisuus.
5. Viitteet [1] Mei Zhou & al, Study on the target feature extraction, saatavilla http://www.isprs.org/congresses/beijing2008/proceedings/3b_pdf/62.pdf [2] T. Aschoff & al, Describing foret stands using terrestrial laser scanning, saatavilla http://www.isprs.org/congresses/istanbul2004/comm5/papers/556.pdf [2] http://en.wikipedia.org/wiki/hough_transform [3] http://en.wikipedia.org/wiki/ransac