Beste antwoord
Achtergrond:
Moment is een kwantitatieve maat (descriptor), in de volksmond gebruikt in mechanica en statistiek , om de ruimtelijke verdeling van set punten te beschrijven. In de meest simplistische bewoordingen zijn momenten een reeks scalairen die een geaggregeerde meting van een reeks vectoren opleveren. De definitie van momenten is hetzelfde voor alle domeinen van mechanica, statistiek en computervisie. De reeks momenten begint met de grofste beschrijving van de reeks vectoren, en wordt geleidelijk aan met hogere orden gevoeliger voor lokale structuren in de reeks vectoren. De keuze van de bruikbare volgorde van het moment hangt af van de gegevensverdeling en de sets vectoren die ik wil onderscheiden.
Als de punten massa vertegenwoordigen, dan is het nulde moment de totale massa, het eerste moment gedeeld door de totale massa is de zwaartepunt , en het tweede moment is de rotatietraagheid . Als de punten waarschijnlijkheidsdichtheid vertegenwoordigen, is het nulde moment de totale waarschijnlijkheid (dwz een ), het eerste moment is het gemiddelde , het tweede moment is de variantie , de derde moment is de scheefheid , en het vierde moment (met normalisatie en verschuiving) is de kurtosis . [Wikipedia: Moments (Mathematics)]
Momenten in afbeeldingen:
Het concept moment in statistiek en mechanica is geleend in computervisie om een beeld grof te beschrijven. Voor afbeelding met pixelintensiteiten I ( x , y ), worden de onbewerkte beeldmomenten M\_ {ij} berekend door
M\_ {ij} = \ sum\_ {x} \ sum\_ {y} I (x, y)
, waarbij i, j de volgorde van momenten zijn. In een typische pijplijn voor het berekenen van het beeldmoment wordt het beeld I (x, y) geconverteerd naar een set vectoren door eerst een grijsschaalbeeld te berekenen en vervolgens een hoek- of randdetector te gebruiken om het beeld te reduceren tot een set van opvallende punten. De ruimtelijke verdeling van deze punten kenmerkt het beeld, doordat een beeld met verschillende visuele inhoud een meetbaar verschillende ruimtelijke verdeling van saillante punten zal hebben. De verschillende volgorde van momenten van de afbeelding (set van saillante punten) levert massa, zwaartepunt, hoofdas, enz. Van de afbeelding.
Momenten in OpenCV:
Voorbeeld van rekenmomenten voor een afbeelding in 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
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
In dit voorbeeld is het zwaartepunt van de afbeelding handig om de locatie van meerdere objecten in de afbeelding te vinden. Als de afbeelding meerdere mensen bevat (neem aan dat problemen met rommel op de achtergrond zijn opgelost) en men was geïnteresseerd in een geschatte locatie van elke persoon, dan is het zwaartepuntmoment een geschikte oplossing.
U kunt zich vergelijkbare scenarios voorstellen waarin momenten van een hogere volgorde worden relevant, bijvoorbeeld bij het volgen van autos, kunnen de oriëntatie van de autos en de positie beide gemakkelijk worden weergegeven door middel van zwaartepunt, variantie en as van oriëntatiebeeldmomenten.
Antwoord
De vraag die je stelde over OpenCV kan ook worden toegepast op computer vision in het algemeen. Kunnen we mensen in een kamer detecteren met een nauwkeurigheid van 95 – 100\%?
Het antwoord hangt af van veel factoren:
Scenario 1: Er zijn 15 mensen in een kamer, zittend in de juiste positie met hun gezicht naar de camera. Ze zijn allemaal duidelijk zichtbaar, niemand wordt afgesloten. De verlichting is helder en uniform. De camera is redelijk goed.
Natuurlijk kunnen we in zon geval> 99\% nauwkeurigheid doen.Of het nu OpenCV is of een andere deep learning-bibliotheek, u bevindt zich in veilige wateren. Het bouwen van een dergelijk systeem zou niet moeilijker / uitdagender moeten zijn dan een routinematig middelbare schoolproject.
Scenario 2: Er zijn 15 mensen in een kamer, zittend in de juiste positie met hun gezicht naar de camera gericht. Sommigen van hen sluiten elkaar af. Er is geen garantie over de kwaliteit van de verlichting. Sommigen van hen dragen misschien een niet-standaard bril, hoed of rare make-up. De camera is nog redelijk goed.
Dit begint een beetje lastig te worden. OpenCV geeft u in dergelijke gevallen mogelijk niet> 99\% nauwkeurigheid. TensorFlow of een andere deep learning-architectuur werkt mogelijk nog steeds. Facebook identificeert en tagt routinematig mensen in dergelijke scenarios. Zijn ze 100\% nauwkeurig? Het hangt er van af. Het bouwen van een dergelijk systeem met behulp van alle open source-bibliotheken die tot onze beschikking staan, is misschien niet triviaal. Het is echter ook niet erg moeilijk. Met een beetje moeite en wat geluk kan> 95\% haalbaar zijn.
Scenario 2: Er zijn 15 mensen in een kamer, zittend in de juiste positie, niet noodzakelijkerwijs met hun gezicht naar de camera. Sommigen van hen sluiten elkaar af. De verlichting is waardeloos. Het heeft de neiging de mensen in de afbeelding te onder- of overbelicht. Sommigen van hen dragen misschien een niet-standaard bril, hoed of rare make-up. De camera is een VGA-webcam van 15 jaar geleden.
Nu heb je geen garanties over de nauwkeurigheid, ongeacht de tools die je gebruikt. Dit probleem grenst nu aan het worden van een onderzoeksproject.
Het antwoord op uw vraag hangt af van het scenario dat u probeert aan te pakken.