Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

blockproc

Procesamiento en bloques distintos para una imagen

Descripción

ejemplo

B = blockproc(A,[m n],fun) procesa la imagen de entrada A aplicando la función fun a cada bloque distinto de tamaño [m n] y concatenando los resultados en la imagen de salida, B.

ejemplo

B = blockproc(src_filename,[m n],fun) procesa la imagen con nombre de archivo src_filename leyendo y procesando los bloques de uno en uno. Esta sintaxis es útil para procesar imágenes de gran tamaño.

B = blockproc(adapter,[m n],fun) procesa la imagen de origen especificada por adapter, un objeto ImageAdapter. Utilice esta sintaxis si necesita una API personalizada para leer y escribir en un determinado formato de archivo de imagen.

ejemplo

B = blockproc(___,Name,Value) utiliza argumentos de par nombre-valor para controlar diversos aspectos del comportamiento de los bloques.

Ejemplos

contraer todo

Lea una imagen en el espacio de trabajo.

I = imread('pears.png');

Cree una función de procesamiento en bloques.

fun = @(block_struct) imresize(block_struct.data,0.15);

Procese la imagen bloque a bloque.

I2 = blockproc(I,[100 100],fun);

Muestre la imagen original y la imagen procesada.

figure;
imshow(I);

Figure contains an axes object. The axes object contains an object of type image.

figure;
imshow(I2);

Figure contains an axes object. The axes object contains an object of type image.

Cree una función de procesamiento en bloques.

fun = @(block_struct) ...
   std2(block_struct.data) * ones(size(block_struct.data));

Realice la operación de procesamiento en bloques especificando la imagen de entrada por el nombre de archivo.

I2 = blockproc('moon.tif',[32 32],fun);

Muestre la imagen original y la versión procesada.

figure;
imshow('moon.tif');

Figure contains an axes object. The axes object contains an object of type image.

figure;
imshow(I2,[]);

Figure contains an axes object. The axes object contains an object of type image.

Lea una imagen en el espacio de trabajo.

I = imread('peppers.png');

Cree una función de procesamiento en bloques.

fun = @(block_struct) block_struct.data(:,:,[2 1 3]);

Realice la operación de procesamiento en bloques.

blockproc(I,[200 200],fun,'Destination','grb_peppers.tif');

Muestre la imagen original y la procesada.

figure;
imshow('peppers.png');

Figure contains an axes object. The axes object contains an object of type image.

figure;
imshow('grb_peppers.tif');

Figure contains an axes object. The axes object contains an object of type image.

Nota: Para ejecutar este ejemplo, debe sustituir "largeImage.tif" por el nombre de su archivo.

Cree una función de procesamiento en bloques.

fun = @(block_struct) block_struct.data;

Convierta una imagen TIFF en una nueva imagen JPEG2000. Sustituya "largeImage.tif" por el nombre de un archivo de imagen real.

blockproc("largeImage.tif",[1024 1024],fun,"Destination","New.jp2");

Argumentos de entrada

contraer todo

Imagen que se desea procesar, especificada como arreglo numérico.

Nombre del archivo fuente, especificado como vector de caracteres o escalar de cadena. Los archivos deben ser de uno de estos tipos y su nombre debe tener una de las extensiones de archivo indicadas.

  • TIFF (*.tif, *.tiff)

  • JPEG2000 (*.jp2, *.jpf, *.jpx, *.j2c, *.j2k)

Tipos de datos: char | string

Adaptador de imagen, especificado como objeto ImageAdapter. Un objeto ImageAdapter es una clase definida por el usuario que proporciona blockproc con una API común para leer y escribir en un determinado formato de archivo de imagen. Para obtener más información, consulte Perform Block Processing on Image Files in Unsupported Formats.

Tamaño del bloque, especificado como vector de 2 elementos. m es el número de filas y n es el número de columnas del bloque.

Identificador de función, especificado como identificador. La función debe aceptar block_struct como entrada y devolver un arreglo, vector o escalar. Si fun se devuelve vacío, blockproc no genera ninguna salida y se devuelve vacío después de procesar todos los bloques.

Para obtener más información sobre los identificadores de función, consulte Crear un identificador de función.

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.

Ejemplo: B = blockproc(A,[m,n],fun,BorderSize=[8 4]) crea un borde con 8 filas y 4 columnas alrededor de cada bloque.

En las versiones anteriores a la R2021a, utilice comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: B = blockproc(A,[m,n],fun,"BorderSize",[8 4]) crea un borde con 8 filas y 4 columnas alrededor de cada bloque.

Destino de la salida, especificado como una de las siguientes opciones. Cuando se especifica el argumento Destination, blockproc no devuelve la imagen procesada como argumento de salida, sino que escribe la salida en el archivo de destino.

  • Un vector de caracteres o un escalar de cadena con un nombre de archivo de destino. Los archivos deben ser de uno de estos tipos y su nombre debe tener una de las extensiones de archivo indicadas.

    • TIFF (*.tif, *.tiff)

    • JPEG2000 (*.jp2, *.j2c, *.j2k)

    Si ya existe un archivo con este nombre, se sobrescribe.

  • Un objeto ImageAdapter que proporciona una API común para leer y escribir en un determinado formato de archivo de imagen. Para obtener más información, consulte Perform Block Processing on Image Files in Unsupported Formats.

El argumento Destination es útil cuando se espera que la salida sea demasiado grande para caber en la memoria. Proporciona un flujo de trabajo para procesar imágenes de archivo a archivo de un tamaño arbitrario.

Nota

No se puede solicitar un argumento de salida cuando se especifica el argumento Destination.

Número de píxeles de borde que añadir a cada bloque, especificado como vector de 2 elementos enteros positivos, con la forma [v h]. La función añade v filas por encima y por debajo de cada bloque y h columnas a izquierda y derecha. El tamaño de cada bloque resultante es el siguiente:

[m+2*v, n+2*h]

De forma predeterminada, la función elimina automáticamente el borde del resultado de fun. Consulte el argumento TrimBorder para obtener más información.

La función rellena con ceros los bloques cuyos bordes se extienden más allá de los bordes de la imagen.

Rellenar bloques parciales para que tengan un tamaño completo, especificado como false o true. Los bloques parciales surgen cuando el tamaño de la imagen no es exactamente divisible por el tamaño del bloque. Los bloques parciales, si existen, se sitúan a lo largo de los bordes derecho e inferior de la imagen.

Cuando el valor se establece en true, blockproc rellena los bloques parciales para convertirlos en bloques de tamaño completo de m por n. El valor predeterminado es false, lo que significa que la función no rellena los bloques parciales, sino que los procesa tal cual. blockproc rellena los bloques parciales con ceros cuando es necesario.

Método utilizado para rellenar los límites de la imagen, especificado como uno de los siguientes valores.

ValorDescripción
"replicate"Repetir los elementos del borde.
"symmetric"Rellenar imágenes con reflejos de espejo de sí mismas.
Escalar numéricoRellenar imágenes con un valor escalar. De forma predeterminada, el límite de la imagen se rellena con el valor 0.

Tipos de datos: char | string

Eliminar los píxeles del borde desde la salida de la función de usuario, especificado como true o false. Cuando se establece en true, la función blockproc elimina los píxeles del borde de la salida de la función de usuario, fun. La función elimina v filas de la parte superior e inferior de la salida de fun y h columnas de los bordes izquierdo y derecho. El argumento BorderSize define v y h.

Utilizar procesamiento paralelo, especificado como false o true. Si Parallel Computing Toolbox™ está instalado, cuando se establece en true, MATLAB® abre automáticamente un grupo paralelo de workers en la máquina local. blockproc ejecuta el cálculo entre los workers disponibles. Para obtener más información, consulte Parallel Block Processing on Large Image Files.

Mostrar barra de espera, especificado como true o false. Cuando el valor se establece en true, blockproc muestra una barra de espera para indicar el progreso de las operaciones de larga ejecución. Para evitar que blockproc muestre una barra de espera, establezca DisplayWaitbar en false.

Argumentos de salida

contraer todo

Imagen procesada, devuelta como arreglo numérico.

Más acerca de

contraer todo

Estructura de bloque

Una estructura de bloque es una estructura de MATLAB que contiene los datos del bloque y otra información sobre el bloque. Los campos de la estructura de bloque son los siguientes:

CampoDescripción
borderVector de 2 elementos con forma [v h]. El campo border especifica el tamaño del relleno vertical y horizontal que rodea el bloque de datos. Consulte el argumento BorderSize para obtener más información.
blockSizeVector de 2 elementos con forma [rows cols]. El campo blockSize especifica el tamaño de los datos del bloque. Si se ha especificado un borde, el tamaño no incluye los píxeles del borde.
dataArreglo de m por n o de m por n por p de datos del bloque.
imageSizeVector de 2 elementos con forma [rows cols]. El campo imageSize especifica el tamaño completo de la imagen de entrada.
locationVector de 2 elementos con forma [row col]. El campo location especifica la posición del primer píxel (fila mínima, columna mínima) de los datos del bloque en la imagen de entrada. Si se ha especificado un borde, la ubicación se refiere al primer píxel de los datos del bloque discreto, no a los píxeles de borde añadidos.

Sugerencias

  • Si se elige un tamaño de bloque adecuado, el rendimiento puede mejorar considerablemente. Para obtener más información, consulte Block Size and Performance.

  • Si la imagen de salida B es demasiado grande para caber en la memoria, omita el argumento de salida y utilice en su lugar el argumento de par nombre-valor Destination para escribir la salida en un archivo.

  • blockproc puede leer imágenes BigTIFF, pero su compatibilidad con la escritura de imágenes BigTIFF en archivos es limitada. Si escribe una imagen en un archivo, blockproc selecciona automáticamente el tipo de archivo en función de su tamaño. Si la imagen tiene un tamaño inferior o igual a 4,0 GB, blockproc la guarda como imagen TIFF estándar. Si el tamaño del archivo es superior a 4,0 GB, blockproc guarda la imagen como BigTIFF.

    blockproc no proporciona un argumento que permita especificar el tipo de archivo como BigTIFF cuando el tamaño del archivo es inferior o igual a 4,0 GB. Si desea escribir una imagen pequeña como archivo BigTIFF, especifique un adaptador de imagen personalizado mediante el argumento adapter. Para obtener más información, consulte TIFF, BigTIFF y blockproc.

  • Para determinar si un archivo TIFF escrito es TIFF estándar o BigTIFF, consulte la firma de formato de la imagen mediante la función imfinfo:

    tiffinfo = imfinfo(Destination);
    tiffformat = tiffinfo.FormatSignature

    Si el último valor distinto de cero de tiffformat es 42, el archivo está en formato TIFF estándar. Si el último valor distinto de cero es 43, el archivo está en formato BigTIFF.

Capacidades ampliadas

Historial de versiones

Introducido en R2009b