El algoritmo de navegación está escrito en lenguaje C y se puede utilizar para desarrollo integrado. No está basado en C++ ni OPENCV.
1. Imagen integral
El concepto de imagen integral se utiliza en el algoritmo SURF. Con la ayuda de la imagen integral, las operaciones de filtrado en la imagen utilizando plantillas diferenciales gaussianas de segundo orden se transforman en operaciones de suma y resta en la imagen integral. El concepto de imágenes integrales fue propuesto por viola y Jones, y Simard et al. propusieron un método similar de uso de imágenes integrales para el filtrado de cajas.
El valor de cualquier punto (i,j) en la imagen integral es ii(i,j), es decir, el valor de gris del área diagonal correspondiente desde la esquina superior izquierda de la imagen original hasta cualquier punto (i,j) La suma de los valores de grados.
En la fórmula, I(x`,y`) representa el valor de gris del punto (i`,j`) en la imagen original, y ii(x,y) se puede calcular iterativamente mediante las siguientes dos fórmulas:
En la fórmula, S(x,y) representa la integral de una columna, S(i,-1)=0, ii(-1,j)=0. Para encontrar la imagen integral, simplemente escanee todos los píxeles de la imagen original una vez. El siguiente código está implementado en c++
pOutImage[0][0]? =?pInImage[0][0];
for(int?x?=?1,? x?
{ pOutImage[x][0]?+?pInImage[x][0];
}
for( int?y=1;?y
{ int?nSum?=?0; for(int?x=0;?x?
nSum?=?pInImage[x][y];
pOutImage[x][y]=?pInImage[x][y-1]+ nSum; }
La figura muestra que al encontrar la suma gris de los elementos de la imagen dentro de la ventana W, independientemente del tamaño de la ventana W, los cuatro puntos correspondientes (i1,j1)(i2, j2)(i3). ,j3)(i4,j4) para calcular el valor. En otras palabras, la escala de grises de los elementos de la imagen dentro de la ventana W es independiente del tamaño de la ventana. La suma de los niveles de gris de los elementos de la imagen en la ventana W es
Sum(W)=?ii(i4,j4)?-ii(i2,j2)? -?ii(i3,j3)? +?ii(i1,j1)
Mire la captura de pantalla a continuación, creo que puede entender
La suma de píxeles en un área rectangular debe ser una operación simple y repetida. La adopción de esta idea puede conducir a mejoras generales en la eficiencia. ¿Por qué? Suponiendo que una imagen tiene n píxeles, entonces el número de operaciones de suma para calcular el mapa integral total de n posiciones es n-1 veces (nota: no es el número de veces, aproveche al máximo las ideas recursivas), estos resultados se almacenan en una matriz M correspondiente a la imagen original. Cuando necesite calcular la suma de todos los píxeles en un área rectangular de la imagen, simplemente acceda a los valores del mapa integral de los cuatro puntos A, B, C y D directamente como una tabla, suma y resta simples. (tenga en cuenta que solo hay tres tiempos) Puede obtener el resultado. Por el contrario, si sumas directamente un área rectangular en la imagen original de forma ingenua, piénsalo, ****, ¿cuántas combinaciones posibles de rectángulos hay? Para una imagen, n es un número bastante grande, por lo que 2^n, que es simplemente un número astronómico, y la gran mayoría de los rectángulos se superponen. Hay una duplicación de esfuerzos en el cálculo de la suma, mientras que en realidad podemos utilizar la información que ya ha sido calculada de manera eficiente.
Esta es la idea interna del método de integración: en realidad calcula la suma de píxeles en n rectángulos que no se superponen (o que no se cruzan, más profesionalmente) y luego hace un uso completo de estos valores para calcular las incógnitas en una forma recursiva... Esto evita por completo operaciones de suma repetidas. De esta forma se pueden realizar dos operaciones:
(1) Integrar píxeles en cualquier área rectangular. La integral en escala de grises de todos los píxeles en cualquier área rectangular de la imagen se puede calcular de manera conveniente y rápida a través del mapa integral de la imagen. Como se muestra en la Figura 2.3 a continuación, el valor de la imagen integral ii1 del punto 1 es (donde Suma es el valor de la suma):
ii1=Sum(A)
De manera similar, punto 2. Las imágenes integrales del punto 3 y del punto 4 son respectivamente:
ii2=Sum(A)+Sum(B);?ii3=Sum(A)+Sum(C); ( A)+Sum(B)+Sum(C)+Sum(D);
Rectángulo Según el valor de imagen integral del punto final del rectángulo, la integral en escala de grises de todos los píxeles en el área D puede obtenerse:
Suma(D)=ii1+ii4-(ii2+ii3)(1)
(2)? Cálculo de valores propios
Los valores propios Las características rectangulares son dos diferentes. La diferencia entre la suma de píxeles en un área rectangular y el valor propio de cualquier objeto de superficie rectangular se puede calcular usando la fórmula (1). A continuación se toma el prototipo de objeto A en la Figura 2.1 como ejemplo. calcular el valor propio.
Como se muestra en la Figura 2.4, el valor propio de este prototipo de característica se define como:
Suma(A)-Suma(B)
Según la fórmula ( 1), podemos obtener: Suma(A)=ii4+ii1-(ii2+ii3
Suma(B)=ii6+ii3-(ii4+ii5); > Por lo tanto, este tipo de prototipo de característica se puede calcular a partir de la diferencia de las sumas de píxeles de cualquier característica rectangular.
Por tanto, los valores propios de este tipo de prototipo de característica son:
(ii4-ii3)-(ii2-ii1)+(ii4-ii3)-(ii6-ii5 )
p>Como alternativa, utilice el mapa integral Sum(r) para calcular rápidamente la suma de todos los valores de píxeles de un rectángulo determinado. Suponiendo r=(x,y,w,h), entonces la suma de todos los elementos en el rectángulo es equivalente a la ecuación del siguiente diagrama integral: Suma(r)?ii(x+w,y+h)+ii (x -1,y-1)-ii(x+w,y-1)-ii(x-1,y+h)
Se puede observar que el cálculo de los valores propios de características rectangulares solo está relacionado con la imagen integral de los puntos finales de los objetos terrestres y no tiene nada que ver con los valores de las coordenadas de la imagen. Para el mismo tipo de característica rectangular, independientemente de la escala y ubicación de la característica, el tiempo requerido para calcular el valor de la característica es constante y es una operación simple de suma y resta. Otros tipos de valores propios se calculan de manera similar.