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 y rendimiento del bloque

Cuando se utiliza 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 la imagen TIFF

Las imágenes TIFF organizan sus datos en el disco de una de dos maneras: en mosaicos o en tiras. Una imagen TIFF en mosaico almacena bloques rectangulares de datos de forma contigua en el archivo. Cada mosaico se lee y escribe como una sola unidad. Las imágenes TIFF con diseño de tira tienen datos almacenados en tiras; cada tira abarca todo el ancho de la imagen y tiene una o más filas de altura. Al igual que un mosaico, 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 las 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 vacío ( ), el TIFF se organiza en tiras.[] Para TIFF con diseño de tira, consulte el campo struct , que define el tamaño de cada tira de datos.RowsPerStrip

Al leer imágenes TIFF, la cantidad mínima de datos que se pueden leer es un solo mosaico o una sola tira, dependiendo del tipo de TIFF. Para optimizar el rendimiento de , seleccione tamaños de bloque que se correspondan estrechamente con la forma 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 el tamaño del bloque

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

En primer lugar, lea un archivo de imagen y conviértalo en un TIFF.

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

Se utiliza para determinar si está organizado en tiras o teselas.imfinfoconcordorthophoto.tif

imfinfo concordorthophoto.tif

Los campos seleccionados de la estructura aparecen a continuación:

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 in 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

En primer lugar, pruebe un bloque cuadrado de tamaño .[500 500] Cada vez que la función accede al disco, 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 x 5.912). La función lee la misma tira una y otra vez para cada bloque que incluye píxeles contenidos en esa tira.blockproc Dado que la imagen tiene 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 desgarradas siempre se organizan en filas, nunca en columnas.) Intente elegir bloques con forma de columnas de tamaño [2215 111]. Ahora el bloque tiene una forma exactamente opuesta al diseño real del archivo en el disco.

La imagen tiene más de 26 bloques de ancho (2956/111 a 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 más 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.