Base Camp – Opiskelijayrittäjyysalustojen kehittäminen -hankkeen etäteknologiakokeilua virtuaalihologrammien parissa on viety eteenpäin intensiivivalmennuksen hologrammitallenteen tekemisellä Intel Realsense-kameroita hyödyntäen (ks. artikkeli tässä julkaisussa). Seuraavaksi vuorossa on tallenteen siistiminen ja hologrammivisualisoinnin luominen Microsoft Hololensille Unity-sovelluskehittimellä, että voimme testata hologrammia käytännössä. Tässä artikkelissa keskitytään tallenteen syvyyskuvan jälkikäsittelyyn.
Miksi tallenteen syvyyskuvan jälkikäsittely voi olla tarpeen?
Tallenteen syvyystietoa tallennettaessa mittausarvoihin on voinut jäädä huojuntaa, joita syntyy elektronisessa jaksollisen signaalin mittauksessa. Ne johtuvat mittauksessa käytettyjen sensoreiden ominaisuuksista ja rakenteesta. Niitä voidaan vähentää mittausdatan jälkikäsittelyn avulla, ja tässä tapauksessa jälkikäsittelyllä tarkoitetaan videokuvan jälkikäsittelyä ja huojunnalla kuvan kohinaa. Esimerkiksi kuvassa 1 on nähtävissä kohinan vaikutus projisoituun pistepilveen – sivusta katsottuna kohde ei näytä kovin edustavalta.
Käytössä olevat kameratyyppi (D435) itsessään ei ole paras mahdollinen ehdokas kaukana olevien kohteiden kuvaamiseen, ja Intelin oman kuvauksen mukaan sen kuvassa esiintyyy enemmän kohinaa suhteessa muihin. Mutta vastaavasti tarkkuus on parempi kuvattaessa kohteita, jotka voivat olla vain 17 cm päässä kamerasta. Tämän perusteella parempi laitteisto pilotissa olevan tallennuksen toteuttamiseen olisi Intel Realsense D415, joilla syvyyskohinan määrä on korkeinaan 2% neljään metriin saakka. Laitteistolla on siis rajoitteita, mutta epätarkkuuksien aiheuttamia kuvavirheitä voidaan koettaa poistaa suodattimien avulla.
Mistä ja millaiset suodattimet?
Tallenteen jälkikäsittelyssä hyödynnettiin FFmpeg-ohjelmistoa, jonka avulla on mahdollista ohjelmallisesti muokata videotallennetta. Syvyyskuvan kohinaa voi muokata niin sanotuilla temporaalisuodattimilla, jotka seuraavat kuvapisteiden arvoja peräkkäisten ruutujen osalta. Myös muita yksittäisten ruutujen kuvapisteiden suodattimia on mahdollista käyttää. Jälkikäsittelyaika riippuu koneen tehosta, tallenteen pituudesta, käsiteltävän kuva-alueen koosta sekä käytetyistä kuvanparannusalgoritmeista.
Keskiarvoon perustuvan temporaalisuodattimen toimintaa havainnollistetaan kuvassa 2. Siinä videokuvan ruudulle kolme lasketaan kuvapisteille arvo, perustuen nykyisen ja kahden edeltävän ruudun kuvapisteiden keskiarvosta. Kuvapisteiden arvot haetaan aina samoista koordinaateista jokaiselle ruudulle. Kuvassa 1 ruudun yksi vasemman yläkulman kuvapisteen arvo on 52, ruudun kaksi vastaava arvo on 128, ja ruudun kolme arvo on 42. Esimerkkisuodatin laskee keskiarvon kolmesta ruudusta kullekin kuvapisteelle oikeanpuoleisimpaan tuloskuvaan, jolloin laskutoimitus (52 + 128 + 42) / 3 tuottaa arvon 74. Muiden kuvapisteiden arvot ovat 0, joten suodatin tuottaa niille arvoksi 0.
Jälkikäsittelyä varten ehdolla olevat suodattimet
FFmpeg-ohjelmisto tukee varsin monipuolista valikoimaa erilaisia suodattimia videokuvan käsittelyyn. FFmpeg-ohjelman dokumentaatiosivuston kuvausten perusteella hyödynnettäväksi kokeiluun valikoituivat hqdn3d, deflicker, ja avgblur.
Hqdn3d on kuvauksen perusteella korkeatarkkuuksinen 3d-kohinanpoistosuodatin. Kolmannella ulottuvuudella tarkoitetaan aikaa, joka tekee tästä suodattimesta temporaalisuodattimen. Sen pääasiallinen tavoite on tehdä kuvista vakaita, jolloin niiden pakkaaminen on tehokkaampaa. Tässä tapauksessa se pyrkii silottamaan harmaasävyarvojen poikkeamia peräkkäisten ruutujen välillä.
deflicker puolestaan on temporaalisuodatin kuvan luminanssiarvojen tasoittamiseen. Luminanssilla tarkoitetaan pinnalta lähtevän valon kirkkautta. Koska kyseessä oleva syvyyskuva on harmaasävykuva, jossa kirkkaus tarkoittaa kauempaa etäisyyttä kamerasta, tällä suodattimella voidaan tasoittaa myös eroja syvyydessä.
avgblur puolestaan on normaali videokuvasuodatin, joka hyödyntää ainoastaan käsiteltävän videokuvan ruudun arvoja. Sen toiminta on sumentaa kuvaa, jonka sinällään ei luulisi parantavan yhtään mitään. Tarkoituksena on piilottaa pieniä epätarkkuuksia pinnan muodoissa, jolloin pintojen vierekkäisten kuvapisteiden arvojen pitäisi olla lähempänä toisiaan, jolloin voimme ainakin teoriassa tasoittaa pitäisi tasoittaa kuopat ja ulkonemat virtuaalihologrammin syvyyskartasta. Kuvan tarkkuus toki kärsii, mutta kohinan poiston ollessa pääasiallinen tehtävä se voi olla hyödyllinen. Kuvassa 3 nähdään kuitenkin parannusta alkuperäiseen tallenteeseen nähden (kuva 2), joten suodattimen on hyvä olla vertailussa mukana varsinaisiin temporaalisuodattimiin nähden.
Suodattimien visuaaliset testit
Suodattimien vaikutusta testasin erikseen, kahden ja kolmen suodattimen kesken erilaisine permutaatioineen. Laatua arvion silmämääräisesti kohinan perusteella samasta kohtauksesta Unity-sovelluskehittimen avulla. Hqdn3d-suodatin ajettiin oletusasetuksilla. Avgblur-suodattimen arvonäytteistyksen kooksi määriteltiin 5×5 kuvapistettä. Deflicker-suodattimella analysoitiin 15 peräkkäistä ruutua, ja laskettiin kuvapisteille aritmeettinen keskiarvo. Suodattimilla käsiteltiin kahden tunnin tallenteesta ensimmäinen minuutti, jonka tulosta käytettiin vertailussa.
Suodattimien vaikutusta syvyysarvovaihteluiden tasoittamiseen tutkittiin ensimmäisellä kierroksella aina projektioiden kesken, joissa ensimmäisen suodatin on kaikille sama. Kierroksella analysoitiin kolmen eri joukon alkioista jatkoon ne, joissa kohina oli vähäisintä. Jatkoon pääsivät taulukon 1 toisessa sarakkeessa X:llä merkityt suodatinyhdistelmät. Toisella kierroksella oli helpompi tehdä valintoja syvyystiedon muutosten ollessa pienempiä, mutta muutokset erottuessa selvemmin vertailujoukon vaihtoehtojen kesken. Näistä tuottivat silmämääräisesti arvioiden parhaat tulokset vakauden kannalta kolme suodatinyhdistelmää, eli hqdn3d, avgblur_hqdn3d sekä deflicker_avgblur_hqdn3d.
Kaikki suodatinyhdistelmät | 1. vertailun jälkeen | 2. vertailun jälkeen |
avgblur | ||
avgblur_deflicker | ||
avgblur_deflicker_hqdn3d | ||
avgblur_hqdn3d | X | X |
avgblur_hqdn3d_deflicker | X | |
deflicker | ||
deflicker_avgblur | X | |
deflicker_avgblur_hqdn3d | X | X |
deflicker_hqdn3d | ||
deflicker_hqdn3d_avgblur | ||
Hqdn3d | X | X |
hqdn3d_avgblur | X | |
hqdn3d_avgblur_deflicker | ||
hqdn3d_deflicker | ||
hqdn3d_deflicker_avgblur |
Taulukko 1. Suodatinyhdistelmät ja vertailukertojen jatkoon päässeet suodattimet.
Näiden kolmen välillä yksiselitteisesti parasta ei käytössä olleen materiaalin avulla voinut valita. Mutta laadun säilyttämisessä on selkeä järjestys kolmen vaihtoehtoina olevan suodattimen kesken – paras yksittäinen käytettävä suodatin on hqdn3d. Kahden suodattimen osalta suodattimet ja järjestys on avgblur_hqdn3d, ja kolmen osalta puolestaan deflicker_avgblur_hqdn3d.
Yhteenvetona suodattimien hyödyntämisestä syvyyskuvaan
Suodattimien hyödyntäminen on varsin suositeltavaa kohinan poistamiseksi syvyystiedosta, ja suodattimien suoritusjärjestyksellä on merkitystä ainakin testeissä käytettyyn lähdemateriaaliin. Suodattimien avulla saa projisoitua mallia vakaammaksi, ja siten parannetaan osaltaan lopputuloksen laatua, mutta niillä ei kuitenkaan voi poistaa kohinan vaikutusta kokonaan. Mikäli kameraa vaihtamalla syvyyskameran kohina tallennusetäisyydeltä saa pienennettyä jo tallennusvaiheessa, suodattimet voivat toimia paremmin.
Suodattimien testauksessa käytettiin varsin suppeata joukkoa säädettyjä parametreja, joten mahdollisuuksia syvyyskuvan laadun parantamiseksi on vielä tutkimatta. Testissä käytetty projekti, käytetty materiaali sekä FFmpeg-ohjelman suodatuskäskyt ovat tarvittaessa saatavissa artikkelin kirjoittajalta.
Kirjoittaja:
Anssi Gröhn, tietojenkäsittelyn lehtori, Basecamp-hanke, Karelia-ammattikorkeakoulu