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.

Tamaño de bloque y rendimiento

Al utilizar la función para leer o escribir archivos de imagen, el número de veces que se accede al archivo puede afectar significativamente al rendimiento.blockproc En general, la selección de tamaños de bloque más grandes reduce el número de veces que tiene que acceder al disco, a costa de usar más memoria para procesar cada bloque.blockproc Conocer el diseño del formato de archivo en el disco puede ayudarle a seleccionar tamaños de bloque que minimicen el número de veces que se accede al disco. Consulte la página de referencia para obtener más información sobre los formatos de archivo.blockproc

Características de imagen TIFF

Las imágenes TIFF organizan sus datos en el disco de una de estas dos formas: en azulejos o en tiras. Una imagen TIFF en mosaico almacena bloques rectangulares de datos de manera contigua en el archivo. Cada mosaico se lee y se escribe como una sola unidad. Las imágenes TIFF con diseño de tiras tienen datos almacenados en tiras; cada tira abarca todo el ancho de la imagen y es una o más filas en altura. Al igual que un azulejo, cada tira se almacena, Lee y escribe como una sola unidad.

Al seleccionar un tamaño de bloque adecuado para el procesamiento de imágenes TIFF, es importante comprender la organización de la imagen TIFF. Para averiguar si la imagen está organizada en mosaicos o tiras, utilice la función.imfinfo

La estructura devuelta por para imágenes TIFF contiene los campos y.imfinfoTileWidthTileLength Si estos campos tienen valores válidos (no vacíos), la imagen es un TIFF en mosaico y estos campos definen el tamaño de cada mosaico. Si estos campos contienen valores de Empty (), el TIFF se organiza en tiras.[] Para los TIFFs con diseño de franja, consulte el campo struct, que define el tamaño de cada franja de datos.RowsPerStrip

Al leer imágenes TIFF, la cantidad mínima de datos que se pueden leer es un solo azulejo o una sola tira, dependiendo del tipo de TIFF. Para optimizar el rendimiento, seleccione los tamaños de bloque que se correspondan estrechamente con el modo en que se organiza la imagen TIFF en el disco.blockproc De esta manera, puede evitar volver a leer los mismos píxeles varias veces.

Elegir tamaño de bloque

Los tres casos siguientes demuestran la influencia del tamaño de bloque en el rendimiento de.blockproc En cada uno de estos casos, el número total de píxeles de cada bloque es aproximadamente el mismo; sólo el tamaño de los bloques es diferente.

En primer lugar, leer en un archivo de imagen y convertirlo a un TIFF.

imageA = imread('concordorthophoto.png','PNG'); imwrite(imageA,'concordorthophoto.tif','TIFF');

Utilízate para determinar si está organizado en tiras o azulejos.imfinfoconcordorthophoto.tif

imfinfo concordorthophoto.tif

Los campos selectos de la estructura aparecen abajo:

ans =     struct with fields:                       Filename: '\\fs-21-ah\home$\jholohan\Documents\MATLAB\concordorthophoto.tif'                   FileModDate: '10-Nov-2016 17:34:44'                      FileSize: 6586702                        Format: 'tif'                 FormatVersion: []                         Width: 2956                        Height: 2215                      BitDepth: 8                     ColorType: 'grayscale'               FormatSignature: [73 73 42 0]                     ByteOrder: 'little-endian'                NewSubFileType: 0                 BitsPerSample: 8                   Compression: 'PackBits'     PhotometricInterpretation: 'BlackIsZero'                  StripOffsets: [1×66 double]               SamplesPerPixel: 1                  RowsPerStrip: 34               StripByteCounts: [1×66 double]                   XResolution: 72                   YResolution: 72                ResolutionUnit: 'Inch'                      Colormap: []           PlanarConfiguration: 'Chunky'                     TileWidth: []                    TileLength: []                   TileOffsets: []                TileByteCounts: []                   Orientation: 1                     FillOrder: 1              GrayResponseUnit: 0.0100                MaxSampleValue: 255                MinSampleValue: 0                  Thresholding: 1                        Offset: 6585984 

El valor 2 indica que esta imagen TIFF está organizada en tiras con dos filas por tira.RowsPerStrip Cada tira abarca el ancho de la imagen (2956 píxeles) y tiene dos píxeles de alto. Los tres casos siguientes ilustran cómo elegir un tamaño de bloque adecuado puede mejorar el rendimiento.

Caso 1: caso típico — bloque cuadrado

Primero intente un bloque cuadrado de tamaño.[500 500] Cada vez que la función accede al disco que lee en una tira completa y descarta cualquier parte de la tira no incluida en el bloque actual.blockproc Con dos filas por tira y 500 filas por bloque, la función accede al disco 250 veces para cada bloque.blockproc La imagen tiene 2956 píxeles de ancho y 500 filas de ancho, o aproximadamente seis bloques de ancho (2956/500 = 5,912). La función lee la misma franja una y otra vez para cada bloque que incluye los píxeles contenidos en esa franja.blockproc Dado que la imagen es de seis bloques de ancho, lee cada tira del archivo seis veces.blockproc

tic, im = blockproc('concordorthophoto.tif',[500 500],@(s) s.data); toc
El tiempo transcurrido es de 17,806605 segundos.

Caso 2: peor caso — bloque en forma de columna

El diseño del archivo en el disco está en filas. (Las imágenes TIFF despojadas siempre se organizan en filas, nunca en columnas.) Trate de elegir bloques con forma de columnas de tamaño [2215 111]. Ahora el bloque tiene la forma exactamente opuesta al diseño de archivo real en el disco.

La imagen es de más de 26 bloques de ancho (2956/111 = 26,631). Cada tira debe leerse para cada bloque. La función Lee toda la imagen del disco 26 veces.blockproc La cantidad de tiempo que se tarda en procesar la imagen con los bloques con forma de columna es proporcional al número de lecturas de disco. Con aproximadamente cuatro veces la cantidad de lecturas de disco en el caso 2, en comparación con el caso 1, el tiempo transcurrido es aproximadamente cuatro veces más largo.

tic, im = blockproc('concordorthophoto.tif',[2215 111],@(s) s.data); toc
El tiempo transcurrido es de 60,766139 segundos.

Caso 3: mejor caso — bloque en forma de fila

Por último, elija un bloque que se alinee con las tiras TIFF, un bloque de tamaño [84 2956]. Cada bloque abarca el ancho de la imagen. Cada tira se lee exactamente una vez, y todos los datos de un bloque determinado se almacenan de forma contigua en el disco.

tic, im = blockproc('concordorthophoto.tif',[84 2956],@(s) s.data); toc
El tiempo transcurrido es de 4,610911 segundos.