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.

Utilice el procesamiento en columnas para acelerar las operaciones de vecindario deslizante o de bloques distintos

La realización de operaciones de vecindad deslizantes y de bloques distintos en columnas, cuando sea posible, puede reducir el tiempo de ejecución necesario para procesar una imagen.

Por ejemplo, supongamos que la operación que está realizando implica calcular la media de cada bloque. Este cálculo es mucho más rápido si primero reorganiza los bloques en columnas, ya que puede calcular la media de cada columna con una sola llamada a la función, en lugar de llamar a cada bloque individualmente.meanmean

Para utilizar el procesamiento de columnas, utilice la función .colfilt Esta función

  1. Remodela cada bloque deslizante o distinto de una matriz de imagen en una columna de una matriz temporal

  2. Pasa la matriz temporal a una función especificada

  3. Reorganiza la matriz resultante de nuevo en la forma original

Uso del procesamiento de columnas con operaciones de vecindad deslizantes

Para una operación de vecindad deslizante, crea una matriz temporal que tiene una columna independiente para cada píxel de la imagen original.colfilt La columna correspondiente a un píxel determinado contiene los valores de la vecindad de ese píxel de la imagen original.

La figura siguiente ilustra este proceso. En esta figura, se procesa una matriz de imágenes de 6 por 5 en 2 por 3 barrios. crea una columna para cada píxel de la imagen, por lo que hay un total de 30 columnas en la matriz temporal.colfilt La columna de cada píxel contiene el valor de los píxeles de su vecindad, por lo que hay seis filas. cero-pads la imagen de entrada según sea necesario.colfilt Por ejemplo, la vecindad del píxel superior izquierdo de la figura tiene dos vecinos de valor cero, debido al relleno cero.

colfilt Crea una Matriz Temporal para vecindario deslizante

La matriz temporal se pasa a una función, que debe devolver un único valor para cada columna. (Muchas funciones funcionan de esta manera, por ejemplo, , , , , etc.)MATLAB®meanmedianstdsum A continuación, los valores resultantes se asignan a los píxeles adecuados de la imagen de salida.

puede producir los mismos resultados que con un tiempo de ejecución más rápido; sin embargo, podría usar más memoria.colfiltnlfilter En el ejemplo siguiente se establece cada píxel de salida en el valor máximo de la vecindad del píxel de entrada, produciendo el mismo resultado que el ejemplo que se muestra en .nlfilterImplementación de filtrado lineal y no lineal como operaciones de vecindad deslizante

I2 = colfilt(I,[3 3],'sliding',@max);

Uso del procesamiento de columnas con operaciones de bloques distintas

Para una operación de bloque distinta, crea una matriz temporal reorganizando cada bloque de la imagen en una columna. rellena la imagen original con 0, si es necesario, antes de crear la matriz temporal.colfiltcolfilt

La figura siguiente ilustra este proceso. Una matriz de imágenes de 6 por 16 se procesa en 4 por 6 bloques. primero cero-pads la imagen para hacer el tamaño 8 por 18 (seis bloques de 4 por 6), y luego reorganiza los bloques en seis columnas de 24 elementos cada uno.colfilt

colfilt Crea una matriz temporal para la operación de bloques distintos

Después de reorganizar la imagen en una matriz temporal, pasa esta matriz a la función.colfilt La función debe devolver una matriz del mismo tamaño que la matriz temporal. Si el tamaño del bloque es -por- , y la imagen es -by-, el tamaño de la matriz temporal es -by- .mnmmnn(m*n)(ceil(mm/m)*ceil(nn/n)) Después de que la función procesa la matriz temporal, la salida se reorganiza en la forma de la matriz de imagen original.

En este ejemplo se establecen todos los píxeles de cada bloque de 8 por 8 de una imagen en el valor medio de píxel del bloque.

I = im2double(imread('tire.tif')); f = @(x) ones(64,1)*mean(x); I2 = colfilt(I,[8 8],'distinct',f);

La función anónima del ejemplo calcula la media del bloque y, a continuación, multiplica el resultado por un vector de unos, de modo que el bloque de salida tiene el mismo tamaño que el bloque de entrada. Como resultado, la imagen de salida tiene el mismo tamaño que la imagen de entrada.

Restricciones

Puede usar para implementar muchas de las mismas operaciones de bloque distintas que se realizan.colfiltblockproc Sin embargo, tiene ciertas restricciones que no:colfiltblockproc

  • La imagen de salida debe tener el mismo tamaño que la imagen de entrada.

  • Los bloques no se pueden superponer.

Para situaciones que no satisfacen estas restricciones, utilice .blockproc