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 la vecindad deslizante o las operaciones de bloque diferenciado

La realización de la vecindad deslizante y las operaciones de bloque distintas en columnas, cuando sea posible, pueden 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 reordena 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. Transforma cada bloque deslizante o diferenciado de una matriz de imagen en una columna de una matriz temporal

  2. Pasa la matriz temporal a una función que especifique

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

Uso de procesamiento de columnas con operaciones de vecindad deslizante

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 vecindarios de 2 por 3. 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 la vecindad 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 Los valores resultantes se asignan a los píxeles apropiados en 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 El ejemplo siguiente establece cada píxel de salida en el valor máximo en 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 de procesamiento de columnas con operaciones de bloque diferenciado

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 imagen de 6 por 16 se procesa en bloques de 4 por 6. primero cero-pads la imagen para hacer el tamaño 8-por-18 (seis bloques 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 bloque diferenciado

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-por-, el tamaño de la matriz temporal es-por-.mnmmnn(m*n)(ceil(mm/m)*ceil(nn/n)) Después de que la función procese la matriz temporal, la salida se reorganiza en la forma de la matriz de la imagen original.

En este ejemplo se establecen todos los píxeles de cada bloque 8 por 8 de una imagen en el valor de píxel medio 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 realiza.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