Paras vastaus
Tausta:
Momentti on kvantitatiivinen mitta (kuvaaja), jota käytetään yleisesti mekaniikassa ja tilastoissa , kuvaamaan pistejoukon alueellista jakaumaa. Useimmissa yksinkertaistetuissa termeissä hetket ovat joukko skalaareja, jotka antavat vektorijoukon kootun mitan. Hetkien määritelmä on sama kaikilla mekaniikan, tilastojen ja tietokonenäköalueilla. Hetkijoukko alkaa vektorijoukon karkeimmalla kuvauksella ja progressiivisesti korkeammilla järjestyksillä alkaa herkkää vektorijoukon paikallisille rakenteille. Hyödyllisen hetken järjestyksen valinta riippuu datan jakautumisesta ja vektorijoukoista, joista olen kiinnostunut erottamaan.
Jos pisteet edustavat massaa , nollamomentti on kokonaismassa, ensimmäinen momentti jaettuna kokonaismassalla on massakeskipiste , ja toinen hetki on pyörimisinertia . Jos pisteet edustavat todennäköisyystiheyttä , nollamomentti on kokonaistodennäköisyys (ts. yksi ), ensimmäinen hetki on keskiarvo , toinen on varianssi , kolmas hetki on vinous , ja neljäs hetki (normalisoinnilla ja siirtymällä) on kurtosis . [Wikipedia: Hetket (matematiikka)]
Hetket kuvissa:
Tilastojen ja mekaniikan hetken käsite on lainattu tietokonenäkössä kuvan karkeaksi kuvaamiseksi. Kuvalle, jonka pikselien voimakkuus on I ( x , y ), raakakuvan hetket M\_ {ij} lasketaan seuraavasti:
M\_ {ij} = \ sum\_ {x} \ sum\_ {y} I (x, y)
, missä i, j ovat hetkien järjestystä. Tyypillisessä kuvamomenttilaskentaputkessa kuva I (x, y) muunnetaan joukoksi vektoreita laskemalla ensin harmaasävykuva ja käyttämällä sitten kulma- tai reuna-ilmaisinta kuvan pienentämiseksi keskeisiksi pisteiksi. Näiden pisteiden alueellinen jakauma kuvaa kuvaa, koska erilaisella visuaalisella kuvalla on mitattavasti erilainen keskeisten pisteiden alueellinen jakauma. Kuvan hetkien eri järjestykset (joukko keskeisiä pisteitä) antavat kuvan massan, sentroidin, pääakselin jne.
Momentit OpenCV: ssä:
Esimerkki laskuhetkistä kuva avoimessa muodossa.
Mat src, gray; // opencv matrices for the image and its grayscale
src = imread(
"../path/to/image.jpg"
, 1 ); // load the image
cvtColor( src, gray, CV\_BGR2GRAY ); // convert to grayscale
vector
vector
//Detect edges using canny
Canny( gray, canny\_output, 50, 150, 3 ); // canny edges are low-level image structures that are used by contour detector
//Find contours
findContours( canny\_output, contours, hierarchy, CV\_RETR\_TREE, CV\_CHAIN\_APPROX\_SIMPLE, Point(0, 0) );
// Get the moments of image
vector
for
(
int
i = 0; i
{ mu[i] = moments( contours[i],
false
); }
//Get the mass centers (image has multiple contours):
vector
for
(
int
i = 0; i
{ mc[i] = Point2f( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 ); } // compute the centers of mass of each contour in the image
Tässä esimerkissä kuvan sentroidimomentti on hyödyllinen useiden objektien sijainnin löytämiseksi kuvasta. Jos kuvassa on useita ihmisiä (oletetaan, että taustalla olevat häiriöt on ratkaistu) ja yksi oli kiinnostunut kunkin henkilön likimääräisestä sijainnista, sentroidimomentti on sopiva ratkaisu.
Voit kuvitella vastaavia tilanteita, joissa korkeammasta momenttijärjestyksestä tulee merkitystä, esimerkiksi autojen seurannassa, sekä autojen suuntaus että sijainti voidaan helposti esittää sentroidilla, varianssilla ja suuntausakselilla.
Vastaus
Kysymystä OpenCV: stä voidaan soveltaa myös tietokoneen näkemiseen yleensä. Voimmeko havaita ihmisiä huoneen sisällä 95 – 100\% tarkkuudella?
Vastaus riippuu monista tekijöistä:
Skenaario 1: Huoneen sisällä on 15 henkilöä, jotka istuvat sopivassa asennossaan kameraa kohti. Kaikki ne ovat selvästi näkyvissä, ketään ei suljeta. Valaistus on kirkas ja tasainen. Kamera on kohtuullisen hyvä.
Toki voimme tehdä> 99\% tarkkuuden tällaisessa tapauksessa.Olipa kyseessä OpenCV tai jokin muu syväoppimiskirjasto, olet turvallisissa vesissä. Tällaisen järjestelmän rakentamisen ei pitäisi olla vaikeampi / haastavampi kuin tavallinen lukioprojekti.
Skenaario 2: Huoneessa on 15 henkilöä, jotka istuvat sopivassa asennossa kameraa vasten. Jotkut heistä tukkivat toisiaan. Valaistuksen laadusta ei ole takeita. Jotkut heistä saattavat käyttää epätyypillisiä silmälaseja, hattuja tai outoa meikkiä. Kamera on edelleen kohtuullisen hyvä.
Tämä alkaa olla hieman hankalaa. OpenCV ei välttämättä anna sinulle yli 99\% tarkkuutta tällaisissa tapauksissa. TensorFlow tai jokin muu syväoppimisarkkitehtuuri saattaa silti toimia. Facebook tunnistaa ja merkitsee rutiininomaisesti ihmisiä tällaisissa tilanteissa. Ovatko ne 100\% tarkkoja? Se riippuu. Tällaisen järjestelmän rakentaminen käyttämällä kaikkia käytettävissä olevia avoimen lähdekoodin kirjastoja ei välttämättä ole triviaalia. Se ei kuitenkaan ole kovin vaikeaa. Pienellä vaivalla ja jonkin verran onnea, 95\% saattaa olla saavutettavissa.
Skenaario 2: Huoneessa on 15 henkilöä, jotka istuvat sopivassa asennossaan, eivät välttämättä kameraa kohti. Jotkut heistä tukkivat toisiaan. Valaistus on paska. Sillä on taipumus altistaa tai paljastaa kuvassa olevia ihmisiä. Jotkut heistä saattavat käyttää epätyypillisiä silmälaseja, hattuja tai outoa meikkiä. Kamera on VGA-verkkokamera 15 vuotta sitten.
Nyt sinulla ei ole mitään takeita tarkkuudesta käyttämistäsi työkaluista riippumatta. Tämä ongelma rajoittuu nyt tutkimusprojektiksi tulemiseen.
Vastaus kysymykseesi riippuu siitä, mihin skenaarioon etsit.