TIES411 - Tilastolliset piirteet

* Huom. Tämä on kesken*

Aihe

Kohteiden tunnistaminen kuvasta edellyttää kohteiden kuvailua jonkinlaisen numeroina ilmaistavan piirteen avulla. Kohteiden tunnistamista käsitellään tarkemmin toisessa tutoriaalissa; tällä viikolla käytämme vain yksinkertaisia etäisyysmittoja piirteiden vertailuun. Tämäkin menetelmä on kuitenkin täysin riittävä moniin perinteisiin teollisuuden konenäkötehtäviin.

Kynnystys

Lähdetään liikkeelle kuvan kynnystämisestä:

Test
Näytä lähdekoodi

OpenCV:ssä on monia edistyneitä kynnystysmenetelmiä, joista pari esimerkkiä tässä.

Morfologia

Morfologiset operaatiot ovat eräänlaisia filttereitä, jotka muuttavat binäärikuvan muotoa. Käymme ne läpi lyhyesti, sillä niitä tarvitaan usein kynnystyksen jälkeen löydettyjen kappaleiden siistimiseen, esimerkiksi pienien reikien ja rakojen paikkaamiseen tai tukkeutuneiden reikien avaamiseen.

Morfologiset operaatiot perustuvat muokkauselementtiin (sructuring element). Se on eräänlainen binäärinen maski, tyypillisesti paljon tutkittavaa kappaletta pienempi, jota liikutetaan kappaleen yli. Kappaleen rakennetta muokataan sen perusteella, kuinka elementti sopii kappaleen sisälle. Tyypillisiä elementtejä ovat eri muotoiset ja kokoiset laatikot ja ellipsit.

Yleinen morfologinen operaatio (Szeliski 3.3.2 mukaan) on muotoa

\(\theta(c,t) = \begin{cases} 1, &\text{ jos } c \geq t\\ 0, &\text{ muuten.} \end{cases}\)

Tässä funktiolla \(c\) tarkoitetaan kuvan konvolvointia muokkauselementillä \(s\) (\(c = f * s\)) ja lopputuloksen kynnystämistä. Eri kynnysarvoilla saadaan eri tavoin käyttäytyviä operaatioita. Kun \(S\) on muokkauselementin koko, Szeliski määrittelee perusoperaatiot näin:

Laajentaminen siis ottaa pikselin mukaan, jos yksikin elementin pikseleistä osuu kappaleen sisälle, mikä tietysti kasvattaa kappaleen kokoa. Kuluttaminen ottaa pikselin mukaan vain, jos elementti sopii kuvan sisälle kokonaan, mikä kutistaa kuvaa. Jos ensin laajennetaan ja sitten kulutetaan, kappaleessa mahdollisesti olevat pienet reiät sulkeutuvat, ja jos ensin kulutetaan ja sitten laajennetaan, kappaleessa mahdollisesti olevat tukkeutuneet kohdat aukenevat.

Yleisiä matemaattisia merkintöjä operaatioille ovat

Lisätietoa morfologiasta wikipediassa.

Kokeillaan sitten aiemmin kynnystämämme kuvan siistimistä morfologisten operaatioiden avulla:

Test
Näytä lähdekoodi

Yhtenäiset alueet

Jos kuvassa saattaa esiintyä useita tutkittavia kohteita yhtä aikaa, kynnystetystä ja siistitystä binäärikuvasta etsitään seuraavaksi erilliset, yhtenäiset alueet connected components -menetelmän avulla (Szeliski 3.3.4). Lyhyesti kuvattuna tämä menetelmä etsii ja merkitsee alueet, jotka koostuvat vierekkäisistä pikseleistä.

Kuvien momentit

Perinteinen ja yleissivistykseen kuuluva tapa kuvailla binäärikuvasta löytyviä kappaleita ovat niin sanotut kuvamomentit. Momentti on tietynlainen painotettu keskiarvo kuvan tai kappaleen pikseliarvoista. Momentit kuvailevat kappaleen muotoa tilastollisten tunnuslukujen tapaan.

Määritellään momentit \(M_{ij}\) kuvalle \(I(x,y)\) seuraavasti:

\(M_{ij} = \sum_x \sum_y x^i y^j I(x,y)\).

Pohtimalla hetken yllä olevaa kaavaa huomaamme, että

\(M_{00} = \sum_x \sum_y I(x,y)\)

mikä binäärikuvan tapauksessa tarkoittaa pinta-alaa. Samoin huomaamme, että \(M_{10}\) on kappaleen x-koordinaattien summa ja \(M_{01}\) on y-koordinaattien summa. Siten

\((x_c,y_c) = (\frac{M_{10}}{M_{00}},\frac{M_{01}}{M_{00}})\)

on kappaleen sentroidi eli massakeskipiste. Kaikki momentit voidaan laskea myös harmaasävykuville, jolloin kuva on ymmärrettävä eräänlaisena tiheysfunktiona. Sentroidin avulla voidaan määritellä keskeismomentit (central moments) jotka ovat siirtoinvariantteja eli eivät riipu kappaleen sijainnista kuvassa.

Määritellään keskeismomentit \(\mu_{ij}\) kuvalle \(I(x,y)\) ja sentroidille \((x_c,y_c)\) seuraavasti:

\(\mu_{ij} = \sum_x \sum_y (x - x_c)^i (y - y_c)^j I(x,y)\).

Keskeismomenttien avulla saadaan laskettua esimerkiksi kappaleen kovarianssimatriisi, jonka ominaisvektorit laskemalla voidaan analysoida kappaleen pääakseleita ja niiden suuntaa.

Keskeismomentit, joille \(i + j \ge 2\), saadaan vielä normalisoitua siten, että ne ovat skaala-invariantteja eli riippumattomia kappaleen koosta kuvassa:

\(\eta_{ij} = \frac{\mu_{ij}}{\mu_{00}^{1 + \frac{i + j}{2}}}\).

Näistä normalisoiduista keskeismomenteista voidaan muodostaa kääntöinvariantteja momentteja, jotka siis eivät riipu kappaleen asennosta kuvassa. Tunnetuimpia ovat Hu-momentit, jotka löytyvät myös OpenCV:stä. Näistä esimerkkinä mainittakoon ensimmäinen Hu-momentti

\(H_1 = \eta_{20} + \eta_{02}\)

jolla on vastaavuus fysiikasta tutun inertiamomentin kanssa; jos tulkitaan pikselien arvot fysikaaliseksi tiheydeksi, tämä momentti kuvaisi sentroidin eli massakeskipisteen ympäri pyörivän kappaleen inertiamomenttia.

Tarkempaa tietoa kuvamomenteista wikipediasta. Huomattakoon täältä esimerkiksi Hu-momentteja kohtaan esitetty kritiikki, jonka mukaan toinen ja kolmas momentti eivät sopisi hyvin hahmontunnistukseen.

Test
m002240.000
m01107830.000
m026397696.000
m03427320202.000
m10105814.000
m116020746.000
m12393823640.000
m205875750.000
m21371182176.000
m30359394856.000
Näytä lähdekoodi
Test
mu002240.000
mu010.000
mu021206933.098
mu033145759.303
mu100.000
mu11927030.098
mu122355284.855
mu20877266.698
mu21750190.230
mu30-1047468.692
Näytä lähdekoodi
Test
eta001.000
eta010.000
eta020.241
eta030.013
eta100.000
eta110.185
eta120.010
eta200.175
eta210.003
eta30-0.004
Näytä lähdekoodi
Test
hu10.415
hu20.141
hu30.001
hu40.000
hu50.000
hu60.000
hu7-0.000
Näytä lähdekoodi

Jakaumat

Momenttien lisäksi kynnystettyjä kappaleita voidaan kuvailla erilaisten histogrammien eli diskreettien jakaumien perusteella. Kynnystettyä binäärikuvaa, josta on irrotettu haluttu kappale, voidaan käyttää myös maskina jonka avulla muodostetaan harmaasävyhistogrammi kyseisen kappaleen alueelta. Samoin kappaleesta voidaan laskea intensiteetin keskiarvo ja keskihajonta, joiden perusteella voidaan toisinaan tunnistaa kappaleita, joiden kirkkaus tai väri poikkeaa huomattavasti toisistaan.

Muistellaan hieman keskiarvon ja keskihajonnan määritelmiä ja yritetään löytää intuitiivisia ajattelutapoja niiden käyttämiseen.

Muistamme, että keskiarvo on kuvan \(I\) (jossa pikselien lukumäärä on \(N\)) satunnaisen pikselin intensiteetin odotusarvo:

\(\mu = E\left[I(x,y)\right] = \frac{1}{N}\sum_{x,y} I(x,y)\).

Vastaavasti varianssi on odotusarvo satunnaisen pikselin neliölliselle etäisyydelle keskiarvosta:

\(\sigma^2 = E\left[(I(x,y) - \mu)^2\right] = \frac{1}{N}\sum_{x,y}(I(x,y) - \mu)^2\).

Kuvien varianssin ja keskihajonnan laskemisen kannalta on hyvä tietää seuraava yhtäsuuruus:

\(\sigma^2 = E\left[I(x,y)^2\right] - E\left[I(x,y)\right]^2\).

Kuvan intensiteetin varianssi on siis helppo laskea pikselien intensiteetin ja neliöllisen intensiteetin summien avulla. Integraalikuvaa käyttäen taas saadaan laskettua minkä tahansa suorakulmaisen alueen summa kolmella laskutoimituksella.

Keskihajonta \(\sigma\) on siis varianssin \(\sigma^2\) neliöjuuri, ja se on hyödyllinen mitta päätettäessä esimerkiksi, onko kahden alueen intensiteetti tai väri riittävän kaukana toisistaan. Jos kahden alueen intensiteetin erotus on suurempi kuin niiden keskihajontojen summa, ne todennäköisesti ovat keskimäärin eri värisiä.

Kappaleista voidaan muodostaa myös tekstuurijakaumia käyttäen esimerkiksi local binary pattern -piirteitä. Tämä on suomalaisten Ojalaisen ja Pietikäisen kehittämä tekstuuripiirre, jossa tutkitaan kunkin pikselin ympäristöä, ja katsotaan mitkä naapuruston pikselit ovat suurempia kuin tarkasteltava pikseli. Jos tutkitaan 8-naapurustoa, tällä tavoin saadaan 8-bittinen binääriluku. Pyöräyttämällä luvun sillä tavoin, että suurin tai pienin nollien tai ykkösten jono tulee aina ensiksi, saadaan piirteestä kääntöinvariantti. Näistä piirteistä muodostetaan yleensä histogrammi tutkittavalta kuva-alueelta. Lisätietoa erinomaisessa Matti Pietikäisen artikkelissa scholarpediassa.

Test
Näytä lähdekoodi

Muotopiirteet

Tilastollisten momenttien lisäksi kappaleen muotoa voidaan kuvailla sen reunakäyrän avulla. OpenCV:n connected components -menetelmät palauttavat kappaleet suoraan reunakäyrän muodossa.

Konvekseille kappaleille voidaan muodostaa reunapiirre sämpläämällä etäisyys keskipisteestä reunalle tietyin kulma-askelin. Tästä esityksestä saadaan kääntöinvariantti valitsemalla aloituskohdaksi suurin tai pienin etäisyys.

Epäkonvekseille kappaleille saadaan myös reunapiirre etsimällä ensin kappaleen konveksi peite ja kuvailemalla erikseen peitteen reuna ja peitteen ja kappaleen leikkauksena syntyvät ylimääräiset palaset.

Fourier-reunapiirteet

Edellisessä tutoriaalissa laskimme fourier-muunnosta kuville. Nyt kokeilemme, miten kappaleiden reunakäyrästä laskettuja fourier-piirteitä voi käyttää kappaleen muodon kuvailuun ja kappaleiden tunnistamiseen.

Koska fourier-kertoimet kuvailevat reunakäyrän taajuusvastetta, ottamalla huomioon pelkät taajuuskomponentit ja jättämällä vaiheen huomiotta saadaan kääntöinvariantti esitys muodosta.

Voimme tehdä fourier-muunnoksen keskipisteestä sämplättyjen etäisyyksien taulukolle, mutta kätevämpi tapa muodostaa reunakäyrän kuvaus on seurata reunaa tasaisella nopeudella ja sämplätä käyrän tangentti tasaisin väliajoin. Tällaisesta piirteestä olisi vaikeampi saada kääntöinvariantti sellaisenaan, mutta fourier-muunnoksen periodisuuden ansiosta tämä käy helposti tekemällä yksinkertaisesti sämplätylle kulmataulukolle fourier-muunnoksen.

Tehtävä

Etsi oheisesta kuvasta erilliset kappaleet, ja merkitse ruuvit ja mutterit eri väreillä.

Kokeillaan käyttää Hu-momentteja tunnistukseen. Lasketaan ensin momentit mallikappaleille:

Test
hu10.407
hu20.133
hu30.001
hu40.000
hu50.000
hu60.000
hu7-0.000
Näytä lähdekoodi
Test
hu10.193
hu20.001
hu30.000
hu40.000
hu5-0.000
hu6-0.000
hu7-0.000
Näytä lähdekoodi

Lasketaan sitten momentit testikappaleille:

Näytä lähdekoodi
Error:
Näytä lähdekoodi