Ce anume sunt momentele din OpenCV?

Cel mai bun răspuns

Context:

Momentul este o măsură cantitativă (descriptor), utilizată popular în mecanică și statistică , pentru a descrie distribuția spațială a setului de puncte. În termeni simpliști, momentele sunt un set de scalari care oferă o măsură agregată a unui set de vectori. Definiția momentelor este aceeași în domeniile mecanicii, statisticii și viziunii computerizate. Setul de momente începe cu cea mai grosieră descriere a setului de vectori și, progresiv, cu ordine superioare, începe să devină mai sensibil la structurile locale din setul de vectori. Alegerea ordinii utile a momentului depinde de distribuția datelor și de seturile de vectori pe care mă interesează să fac distincția.

Dacă punctele reprezintă masă , atunci momentul zero este masa totală, primul moment împărțit la masa totală este centrul de masă , iar al doilea moment este inerția de rotație . Dacă punctele reprezintă densitatea probabilității , atunci momentul zero este probabilitatea totală (adică una ), primul moment este medie , al doilea moment este varianța , al treilea momentul este asimetrie , iar al patrulea moment (cu normalizare și schimbare) este kurtosis . [Wikipedia: Moments (Mathematics)]

Moments in images:

Conceptul de moment în statistici și mecanică a fost împrumutat în viziunea computerizată pentru a descrie grosolan o imagine. Pentru imagini cu intensități de pixeli I ( x , y ), momentele brute ale imaginii M\_ {ij} sunt calculate de

M\_ {ij} = \ sum\_ {x} \ sum\_ {y} I (x, y)

, unde i, j sunt ordinea momentelor. Într-o conductă tipică de calcul al momentului imaginii, imaginea I (x, y) este convertită într-un set de vectori calculând mai întâi o imagine la scară de gri și apoi utilizând un detector de colț sau margine pentru a reduce imaginea la un set de puncte saliente. Distribuția spațială a acestor puncte caracterizează imaginea, prin aceea că o imagine cu conținut vizual diferit va avea o distribuție spațială măsurabil diferită a punctelor saliente. Diversele ordine de momente ale imaginii (set de puncte saliente) oferă masă, centroid, axă principală etc. ale imaginii.

Momente în OpenCV:

Exemplu de momente de calcul pentru o imagine în opencv.

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 > contours; // image contour is set of salient points of the image we are interested in

vector hierarchy;

//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 mu(contours.size() );

for ( int i = 0; i

{ mu[i] = moments( contours[i], false ); }

//Get the mass centers (image has multiple contours):

vector mc( contours.size() );

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

În acest exemplu, momentul centroid al imaginii este util pentru a găsi locația mai multor obiecte din imagine. Dacă imaginea conține mai multe persoane (presupunem că problemele legate de dezordinea de fundal sunt rezolvate) și cineva era interesat de o locație aproximativă a fiecărei persoane, atunci momentul centroid este o soluție adecvată.

Vă puteți imagina scenarii similare în care ordinea superioară a momentelor devine relevantă, de exemplu în urmărirea mașinilor, orientarea și poziția mașinilor ar putea fi reprezentate cu ușurință de momente ale centrului, varianței și axei de orientare. p> Întrebarea pe care ați pus-o despre OpenCV poate fi aplicată și viziunii computerizate în general. Putem detecta persoane în interiorul unei camere cu o precizie de 95 – 100\%?

Răspunsul depinde de o mulțime de factori:

Scenariu 1: Există 15 persoane în interiorul unei camere, așezate în poziția lor adecvată cu fața către cameră. Toate sunt vizibile în mod clar, nimeni nu este ocluit. Iluminatul este luminos și uniform. Camera este rezonabilă.

Sigur, putem face> 99\% precizie într-un astfel de caz.Fie că este OpenCV sau o altă bibliotecă de învățare profundă, vă aflați în ape sigure. Construirea unui astfel de sistem nu ar trebui să fie mai dificilă / mai dificilă decât un proiect de liceu de rutină.

Scenariul 2: Există 15 persoane în interiorul unei camere, așezate în poziția lor adecvată cu fața către cameră. Unele dintre ele se închid reciproc. Nu există nicio garanție cu privire la calitatea iluminatului. Unii dintre ei ar putea purta ochelari non-standard, pălării sau machiaj ciudat. Camera este încă destul de bună.

Acest lucru începe să devină puțin dificil. Este posibil ca OpenCV să nu vă ofere precizie> 99\% în astfel de cazuri. TensorFlow sau o altă arhitectură de învățare profundă ar putea funcționa în continuare. Facebook identifică și etichetează în mod obișnuit oamenii în astfel de scenarii. Sunt 100\% precise? Depinde. Construirea unui astfel de sistem folosind toate bibliotecile open source la dispoziția noastră poate să nu fie banală. Cu toate acestea, nici nu este foarte dificil. Cu puțin efort și ceva noroc,> 95\% ar putea fi realizabil.

Scenariul 2: Există 15 persoane în interiorul unei camere, așezate în poziția lor adecvată, care nu sunt neapărat orientate spre cameră. Unele dintre ele se închid reciproc. Iluminatul este rahat. Tinde să subexpună sau să expună prea mult persoanele din imagine. Unii dintre ei ar putea purta ochelari non-standard, pălării sau machiaj ciudat. Camera este o cameră web VGA de acum 15 ani.

Acum nu aveți garanții cu privire la acuratețe, indiferent de instrumentele pe care le utilizați. Această problemă se limitează acum la a deveni un proiect de cercetare.

Răspunsul la întrebarea dvs. depinde de scenariul pe care doriți să îl abordați.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *