Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

integralImage

Calcular imagen integral 2-D

Descripción

En un , cada píxel representa la suma acumulada de un píxel de entrada correspondiente con todos los píxeles por encima y a la izquierda del píxel de entrada.imagen integral

Una imagen integral le permite calcular rápidamente sumas sobre subregiones de imagen. Las sumas de subregión se pueden calcular en tiempo constante como una combinación lineal de solo cuatro píxeles en la imagen integral, independientemente del tamaño de la subregión. El uso de imágenes integrales fue popularizado por el algoritmo Viola-Jones.[1]

ejemplo

J = integralImage(I) calcula la imagen integral a partir de la imagen.I La función cero-pads la parte superior e izquierda de la imagen integral de salida, .J

ejemplo

J = integralImage(I,orientation) calcula la imagen integral con la orientación especificada por .orientation

Ejemplos

contraer todo

Cree una matriz de muestra simple.

I = magic(5)
I = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Calcular la imagen integral de la matriz de muestra. Estos pasos muestran cómo los primeros valores de la matriz original se asignan a los valores de la imagen integral. Tenga en cuenta que el píxel con la coordenada (fila, columna) ( , ) en la imagen original corresponde al píxel con la coordenada ( +1, +1) en la imagen integral.rcrc

  • La primera fila y columna de la imagen integral son todas s.0

  • El píxel de la matriz original en la coordenada (1, 1) con el valor 17 no cambia en la imagen integral porque no hay otros píxeles en la smmación. Por lo tanto, el píxel de la imagen integral en coordenada (2, 2) tiene el valor 17.

  • El píxel de la matriz original en la coordenada (1, 2) se asigna al píxel (2, 3) de la imagen integral. El valor es la suma del valor de píxel original (24), los píxeles por encima de él (0) y los píxeles a su izquierda (17): 24 + 17 + 0 a 41.

  • El píxel de la matriz original en la coordenada (1, 3) se asigna al píxel (2, 4) de la imagen integral. El valor es la suma del valor de píxel original (1), el píxel por encima de él (0) y los píxeles a su izquierda (que ya se han sumado a 41). Por lo tanto, el valor en píxeles (2,4) en la imagen integral es 1 + 41 + 0 a 42.

J = integralImage(I)
J = 6×6

     0     0     0     0     0     0
     0    17    41    42    50    65
     0    40    69    77    99   130
     0    44    79   100   142   195
     0    54   101   141   204   260
     0    65   130   195   260   325

Lea una imagen en escala de grises en el espacio de trabajo. Muestre la imagen.

I = imread('pout.tif'); imshow(I)

Calcular la imagen integral.

J = integralImage(I);

Utilice la herramienta para seleccionar una subregión rectangular.drawrectangle La herramienta devuelve un objeto.Rectangle

d = drawrectangle;

La propiedad del objeto almacena las coordenadas de los vértices como una matriz de 4 por 2.VerticesRectangle Los vértices se ordenan comenzando con la parte superior izquierda y continuando en el sentido de las agujas del reloj. Divida la matriz en dos vectores que contengan las coordenadas de fila y columna. Dado que la imagen integral está reflejada en cero en la parte superior e izquierda, incremente las coordenadas de fila y columna en 1 para recuperar los elementos correspondientes de la matriz integral.

r = floor(d.Vertices(:,2)) + 1; c = floor(d.Vertices(:,1)) + 1;

Calcule la suma de todos los píxeles de la subregión rectangular combinando cuatro píxeles de la imagen integral.

regionSum = J(r(1),c(1)) - J(r(2),c(2)) + J(r(3),c(3)) - J(r(4),c(4))
regionSum = 613092 

Cree una matriz de muestra simple.

I = magic(5)
I = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Cree una imagen integral con una orientación girada.

J = integralImage(I,'rotated')
J = 6×7

     0     0     0     0     0     0     0
     0    17    24     1     8    15     0
    17    64    47    40    38    39    15
    64    74    91   104   105    76    39
    74   105   149   188   183   130    76
   105   170   232   272   236   195   130

Defina una subregión rectangular girada. En este ejemplo se especifica una subregión con la esquina superior en la coordenada (1,3) de la imagen original. La subregión tiene una altura rotada de 1 y una anchura de 2.

r = 1; c = 3; h = 1; w = 2;

Obtenga el valor de los cuatro píxeles de esquina de la subregión en la imagen integral.

regionBottom = J(r+w+h,c-h+w+1); regionTop = J(r,c+1); regionLeft = J(r+h,c-h+1); regionRight = J(r+w,c+w+1); regionCorners = [regionBottom regionTop regionLeft regionRight]
regionCorners = 1×4

   105     0    24    39

Calcule la suma de píxeles en la subregión sumando los cuatro valores de píxel de esquina.

regionSum = regionBottom + regionTop - regionLeft - regionRight
regionSum = 42 

Argumentos de entrada

contraer todo

Imagen, especificada como una matriz numérica de cualquier dimensión. Si la imagen de entrada tiene más de dos dimensiones ( ), como para una imagen RGB, calcula la imagen integral para todos los planos 2D a lo largo de las dimensiones superiores.ndims(I)>2integralImage

Tipos de datos: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Orientación de la imagen, especificada como o .'upright''rotated' Si establece la orientación en , devuelve la imagen integral para calcular sumas sobre rectángulos girados en 45 grados.'rotated'integralImage

Tipos de datos: char | string

Argumentos de salida

contraer todo

Imagen integral, devuelta como una matriz numérica. La función cero-pads la imagen integral de acuerdo con la de la imagen.orientation Este tamaño facilita el cálculo de las sumas de píxeles a lo largo de los límites de la imagen. La imagen integral, , es esencialmente una versión acolchada del valorJ cumsum(cumsum(I,2)).

Orientación de la imagenTamaño de la imagen integral
Imagen integral verticalAcolchado cero en la parte superior e izquierda.size(J) = size(I)+1
Imagen integral rotadaAcolchado cero en la parte superior, izquierda y derecha.size(J) = size(I)+[1 2]

Tipos de datos: double

Algoritmos

contraer todo

Suma de imagen integral

Cada píxel de una imagen integral representa la suma del valor de píxel de entrada correspondiente con todos los píxeles de entrada arriba y a la izquierda del píxel de entrada. Dado que la imagen integral resultante tiene cero pads, un píxel con la coordenada (fila, columna) ( , ) en la imagen original se asigna al píxel con la coordenada ( +1, +1) en la imagen integral.integralImagemnmn

En la figura, el píxel actual de la imagen de entrada es el píxel verde oscuro en la coordenada (4, 5). Todos los píxeles de la imagen de entrada anterior y a la izquierda del píxel de entrada están coloreados en verde claro. La suma de los valores de píxel verde se devuelve en el píxel de imagen integral con coordenadas (5, 6), coloreadas en gris.

realiza un cálculo más rápido de la imagen integral sumando valores de píxel tanto en la imagen de entrada como en la imagen integral.integralImage Píxel ( , ) en la imagen integral es una combinación lineal de sólo cuatro píxeles: uno de la imagen de entrada y tres píxeles calculados previamente de la imagen integral.mnJ

J(m,n) = J(m,n-1) + J(m-1,n) + I(m-1,n-1) - J(m-1,n-1)

Esta figura muestra qué píxeles se incluyen en la suma al calcular la imagen integral en el píxel gris. Los píxeles verdes se suman a la suma y los píxeles rojos restan de la suma.

Suma de imagen integral rotada

Si especifica la imagen como , los píxeles de una imagen integral representan la suma de un valor de píxel de entrada correspondiente con todos los píxeles de entrada que están diagonalmente por encima del píxel de entrada. realiza la suma a lo largo de líneas diagonales.orientation'rotated'integralImage Este enfoque es menos intensivo computacionalmente que rotar la imagen y calcular la imagen integral en direcciones rectilíneas.

En la figura, el píxel actual de la imagen de entrada es el píxel verde oscuro en la coordenada (4, 5). Todos los píxeles de la imagen de entrada diagonalmente por encima del píxel de entrada están coloreados en verde claro. La suma de los valores de píxel verde se devuelve en el píxel de imagen integral con coordenadas (5, 6), coloreadas en gris.

realiza un cálculo más rápido de la imagen integral rotada sumando valores de píxel tanto en la imagen de entrada como en la imagen integral.integralImage Píxel ( , ) en la imagen integral es una combinación lineal de sólo cinco píxeles: dos de la imagen de entrada y tres píxeles calculados previamente de la imagen integral:mnJ

J(m,n) = J(m-1,n-1) + J(m-1,n+1) - J(m-2,n) + I(m-1,n-1) + I(m-2,n-1)

Esta figura muestra qué píxeles se incluyen en la suma al calcular la imagen integral en el píxel gris. Los píxeles verdes se suman a la suma y los píxeles rojos restan de la suma.

Resumen de la subregión de imagen

Una subregión en una orientación vertical con la coordenada superior izquierda ( , ), la altura y la anchura de la imagen original tiene la suma:mnhw

regionSum = J(m–1,n–1) + J(m+h–1,n+w–1) – J(m+h–1,n–1) – J(m-1,n+w-1)

Por ejemplo, en la imagen de entrada siguiente, la suma de la región sombreada azul es: 46 – 22 – 20 + 10 x 14. El cálculo resta las regiones anteriores y a la izquierda de la región sombreada. El área de superposición se añade de nuevo para compensar la doble resta.

Una subregión en una orientación girada utiliza una definición diferente de alto y ancho.[2] El resumen de la región es:

regionSum = J(m+h+w,n-h+w+1) + J(m,n+1) - J(m+h,n-h+1) - J(m+w,n+w+1)

Referencias

[1] Viola, P., and M. J. Jones. "Rapid Object Detection using a Boosted Cascade of Simple Features". Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition. 2001. Vol. 1, pp. 511–518.

[2] Lienhart, R., and J. Maydt. "An Extended Set of Haar-like Features for Rapid Object Detection". Proceedings of the 2002 IEEE International Conference on Image Processing. Sept. 2002. Vol. 1, pp. 900–903.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Introducido en R2015b