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.

Aplicar múltiples filtros a la imagen integral

En este ejemplo se muestra cómo aplicar varios filtros de cuadro de diferentes tamaños a una imagen mediante el filtrado de imágenes integral. La imagen integral es una representación de imagen útil a partir de la cual las sumas de imágenes locales se pueden calcular rápidamente. Un filtro de caja se puede considerar como una suma ponderada local en cada píxel.

Lea una imagen en el espacio de trabajo y muéstrala.

originalImage = imread('cameraman.tif');  figure imshow(originalImage) title('Original Image')

Defina los tamaños de los tres filtros de caja.

filterSizes = [7 7;11 11;15 15];

Apadree la imagen para acomodar el tamaño del filtro de caja más grande. Rellena cada dimensión en una cantidad igual a la mitad del tamaño del filtro más grande. Tenga en cuenta el uso de relleno de estilo de réplica para ayudar a reducir los artefactos de contorno.

maxFilterSize = max(filterSizes); padSize = (maxFilterSize - 1)/2;  paddedImage = padarray(originalImage,padSize,'replicate','both');

Calcular la representación de imagen integral de la imagen acolchada utilizando la función y mostrarla.integralImage La imagen integral no disminuye monotónicamente de izquierda a derecha y de arriba a abajo. Cada píxel representa la suma de todas las intensidades de píxeles en la parte superior e izquierda del píxel actual de la imagen.

intImage = integralImage(paddedImage);  figure imshow(intImage,[]) title('Integral Image Representation')

Aplique tres filtros de caja de diferentes tamaños a la imagen integral. La función se puede utilizar para aplicar un filtro de caja 2D a la representación de imagen integral de una imagen.integralBoxFilter

filteredImage1 = integralBoxFilter(intImage, filterSizes(1,:)); filteredImage2 = integralBoxFilter(intImage, filterSizes(2,:)); filteredImage3 = integralBoxFilter(intImage, filterSizes(3,:));

La función devuelve solo partes del filtrado que se calculan sin relleno.integralBoxFilter Filtrar la misma imagen integral con filtros de cuadro de diferentes tamaños da como resultado salidas de diferentes tamaños. Esto es similar a la opción de la función.'valid'conv2

whos filteredImage*
  Name                  Size              Bytes  Class     Attributes    filteredImage1      264x264            557568  double                 filteredImage2      260x260            540800  double                 filteredImage3      256x256            524288  double               

Dado que la imagen se ha rellenado para dar cabida al filtro de caja más grande antes de calcular la imagen integral, no se pierde ningún contenido de imagen. y tienen acolchado adicional que se puede recortar.filteredImage1filteredImage2

extraPadding1 = (maxFilterSize - filterSizes(1,:))/2; filteredImage1 = filteredImage1(1+extraPadding1(1):end-extraPadding1(1),...     1+extraPadding1(2):end-extraPadding1(2) );  extraPadding2 = (maxFilterSize - filterSizes(2,:))/2; filteredImage2 = filteredImage2(1+extraPadding2(1):end-extraPadding2(1),...     1+extraPadding2(2):end-extraPadding2(2) );  figure imshow(filteredImage1,[]) title('Image filtered with [7 7] box filter')

 figure imshow(filteredImage2,[]) title('Image filtered with [11 11] box filter')

 figure imshow(filteredImage3,[]) title('Image filtered with [15 15] box filter')

Consulte también

| | |

Temas relacionados