Mejor respuesta
Antecedentes:
El momento es una medida cuantitativa (descriptor), popularmente utilizada en mecánica y estadística , para describir la distribución espacial de un conjunto de puntos. En términos más simplistas, los momentos son conjuntos de escalares que proporcionan una medida agregada de un conjunto de vectores. La definición de momentos es la misma en los dominios de la mecánica, la estadística y la visión por computadora. El conjunto de momentos comienza con la descripción más burda del conjunto de vectores y, progresivamente, con órdenes superiores, comienza a volverse más sensible a las estructuras locales en el conjunto de vectores. La elección del orden de momento útil depende de la distribución de datos y los conjuntos de vectores entre los que estoy interesado en distinguir.
Si los puntos representan masa , entonces el momento cero es la masa total, el primer momento dividido por la masa total es la centro de masa , y el segundo momento es la inercia rotacional . Si los puntos representan densidad de probabilidad , entonces el momento cero es la probabilidad total (es decir, uno ), el primer momento es la media , el segundo momento es la varianza , el tercero el momento es la sesgo , y el cuarto momento (con normalización y desplazamiento) es la curtosis . [Wikipedia: Momentos (Matemáticas)]
Momentos en imágenes:
El concepto de momento en estadística y mecánica se ha tomado prestado en la visión por computadora para describir groseramente una imagen. Para imágenes con intensidades de píxeles I ( x , y ), los momentos de la imagen sin procesar M\_ {ij} se calculan mediante
M\_ {ij} = \ sum\_ {x} \ sum\_ {y} I (x, y)
, donde i, j son el orden de los momentos. En una tubería típica de cálculo de momento de imagen, la imagen I (x, y) se convierte en un conjunto de vectores calculando primero una imagen en escala de grises y luego usando un detector de esquina o borde para reducir la imagen a un conjunto de puntos destacados. La distribución espacial de estos puntos caracteriza a la imagen, en el sentido de que una imagen con contenido visual diferente tendrá una distribución espacial de puntos destacados mediblemente diferente. Los diversos órdenes de momentos de la imagen (conjunto de puntos salientes) proporcionan masa, centroide, eje principal, etc. de la imagen.
Momentos en OpenCV:
Ejemplo de cálculo de momentos para una imagen en 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
En este ejemplo, el momento del centroide de la imagen es útil para encontrar la ubicación de varios objetos en la imagen. Si la imagen tiene varias personas en ella (suponga que los problemas de desorden de fondo están resueltos) y uno estaba interesado en una ubicación aproximada de cada persona, entonces el momento centroide es una solución adecuada.
Puede imaginar escenarios similares donde Un orden superior de momentos se vuelve relevante, por ejemplo, en el seguimiento de automóviles, la orientación de los automóviles y la posición podrían representarse fácilmente mediante el centroide, la varianza y el eje de los momentos de la imagen de orientación.
Respuesta
La pregunta que hizo sobre OpenCV también se puede aplicar a la visión por computadora en general. ¿Podemos detectar personas dentro de una habitación con una precisión del 95 al 100\%?
La respuesta depende de muchos factores:
Situación 1: Hay 15 personas dentro de una habitación, sentadas en la posición adecuada frente a la cámara. Todos ellos son claramente visibles, nadie está ocluido. La iluminación es brillante y uniforme. La cámara es razonablemente buena.
Claro, podemos lograr una precisión de> 99\% en tal caso.Ya sea OpenCV o alguna otra biblioteca de aprendizaje profundo, estás en aguas seguras. La construcción de un sistema de este tipo no debería ser más difícil / desafiante que un proyecto de rutina de la escuela secundaria.
Escenario 2: Hay 15 personas dentro de una habitación, sentadas en su posición apropiada frente a la cámara. Algunos de ellos se ocluyen entre sí. No hay garantía sobre la calidad de la iluminación. Algunos de ellos pueden estar usando anteojos, sombreros o un maquillaje extraño. La cámara sigue siendo razonablemente buena.
Esto empieza a ser un poco complicado. Es posible que OpenCV no le brinde una precisión superior al 99\% en tales casos. Es posible que TensorFlow o alguna otra arquitectura de aprendizaje profundo aún funcione. Facebook identifica y etiqueta a las personas de forma rutinaria en tales escenarios. ¿Son 100\% precisos? Depende. La construcción de un sistema de este tipo utilizando todas las bibliotecas de código abierto a nuestra disposición puede no ser trivial. Sin embargo, tampoco es muy difícil. Con un poco de esfuerzo y algo de suerte, se podría lograr> 95\%.
Escenario 2: Hay 15 personas dentro de una habitación, sentadas en su posición apropiada, no necesariamente mirando a la cámara. Algunos de ellos se ocluyen entre sí. La iluminación es una mierda. Tiende a sobreexponer o sobreexponer a las personas en la imagen. Algunos de ellos pueden estar usando anteojos, sombreros o un maquillaje extraño. La cámara es una cámara web VGA de hace 15 años.
Ahora no tiene garantías sobre la precisión, independientemente de las herramientas que utilice. Este problema ahora raya en convertirse en un proyecto de investigación.
La respuesta a su pregunta depende del escenario que busque abordar.