主要内容

images.blocked.Adapterclass

包:images.blocked

适配器接口blockedImage对象

自从R2021a

描述

images.blocked.Adapter类指定了接口用于基于块的数组数据的阅读和写作。类继承这个接口可以使用blockedImage数组数据的对象,使基于块的流处理。

images.blocked.Adapter类是一个处理类。

类属性

文摘
真正的

类属性的信息,请参阅类属性

创建

要实现这个类,您必须:

  • 继承的images.blocked.Adapter类。输入以下语法作为类定义的第一行文件:

    classdefMyAdapter< images.blocked。适配器……结束
  • 定义三个需要从磁盘读取图像数据的方法:openToRead,getInfo,getIOBlock

  • 可选地,定义方法,使更多的阅读和写作能力。表列出了成套提供的功能适配器方法。

  • 可选地,排成一列纵队目的地,定义一个扩展属性指定了要使用的文件扩展名时自动创建一个目的地的位置。属性必须是一个字符串,例如“jpg”。适配器的数据存储在一个文件夹,不添加该属性或属性的值指定为空([])。

能力 方法来实现
读取数据(必需)

openToRead——开放源代码的阅读

getInfo——收集的信息来源

getIOBlock——获得指定的I / O

写入数据(可选)

openToWrite——创建和打开目的地写作

setIOBlock——设置指定的I / O

执行清理任务(可选) 关闭——执行清理任务,如关闭文件句柄
支持并行块处理(可选) openInParallelToAppend——并行模式下使用适配器应用目标函数
写简历后中断(可选) alreadyWritten——允许的恢复选项应用目标函数

例子

全部折叠

这个例子显示了如何定义和使用一个自定义的适配器,读取三维TIFF图像数据作为一个体积的形象。

创建一个。m类定义文件,其中包含的代码实现您的自定义适配器。你必须保存这个文件在您的工作目录或文件夹,在MATLAB®路径。的名称。m文件必须与您的对象的名称相同。例如,如果你想让你的适配器名称My3DTIFFAdapter,然后的名称。m文件必须My3DTIFFAdapter.m。的。m类定义文件必须包含以下步骤:

  • 步骤1:从images.blocked继承。适配器类。

  • 第二步:定义所需的方法。

除了这些步骤,定义其他属性或方法,你需要处理和分析你的数据。

% %步骤1:从适配器类继承classdefMy3DTIFFAdapter < images.blocked.Adapter属性文件(1,1)字符串信息(1,1)结构结束% %步骤2:定义所需的方法方法%定义openToRead方法函数openToRead (obj,源)obj。文件=来源;结束%定义getInfo方法函数信息= getInfo (obj)%读取原始文件信息finfo = imfinfo (obj.File);%确定所有的片都是一样的尺寸。断言(所有(finfo (1) .Width = = [finfo.Width]),“所有片没有相同的宽度。);断言(所有(finfo (1) .Height = = [finfo.Height]),“所有片没有相同的高度。”);obj.Info。大小= [finfo (1)。高度,finfo (1)。宽度,元素个数(finfo)];%的前两dim数据的最小单位%阅读取决于TIFF文件的类型——剥夺或瓷砖。%的第三个暗总是1 -表明最小的单位%,可以阅读在第三维度是1(一片)。如果isempty (finfo (1) .TileWidth)%这是剥夺了TIFF文件obj.Info。IOBlockSize = [finfo (1)。RowsPerStrip finfo (1)。宽度1];其他的%这是平铺的TIFF文件obj.Info。IOBlockSize = [finfo (1)。TileLength finfo (1)。TileWidth, 1];结束%这通常是相同的一个数据集,可以硬编码。断言(finfo (1)。BitsPerSample = = 8 & & finfo (1) .BitDepth obj.Info = = 8)。数据类型=“uint8”;obj.Info。InitialValue =投(0,obj.Info.Datatype);信息= obj.Info;结束%定义getIOBlock方法函数块= getIOBlock (obj, ioblockSub级别)断言(水平= = 1)%转换ioblockSub (IOBlockSize而言)%的PixelRegion坐标。regionStart = (ioblockSub-1)。* obj.Info。IOBlockSize + 1;regionEnd = (ioblockSub)。* obj.Info.IOBlockSize;行= [regionStart (1) regionEnd (1)];关口= [regionStart (2), regionEnd (2)];片= [regionStart (3), regionEnd (3)];块= tiffreadVolume (obj.File,“PixelRegion”,{行、关口片});结束结束结束

您的自定义适配器现在准备好了。使用My3DTIFFAdapter创建一个适配器对象,与3 d TIFF图像数据读取文件。

创建一个屏蔽图片,使用自定义适配器,读取数据My3DTIFFAdapter。这个适配器是附加到例子作为支持文件。金宝app显示了图像的大小。

文件名=“mri.tif”;一个= My3DTIFFAdapter
与属性= My3DTIFFAdapter:文件:“信息:(1×1结构)
bim = blockedImage(文件名,适配器= My3DTIFFAdapter);bimSize = bim.Size
bimSize =1×3128 128 27

相比之下,创建一个屏蔽图片读取数据使用默认的适配器。显示了图像的大小。

bimDefault = blockedImage(文件名);bimDefaultSize = bimDefault.Size
bimDefaultSize =27×2128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128⋮

测试自定义适配器通过阅读一个象限的容积数据。

regionStart = (1 1 1);regionEnd = [bimSize (1:2) / 2 bimSize (3)];卷= getRegion (bim regionStart regionEnd);

显示数据。

volshow(卷);

提示

  • 工具箱包括几个内置的适配器的子类适配器类。除非另外注明,适配器支持读写操作。金宝app所有的适配器,工作在每层的基础上,如GenericImageBlocks,可以使用并行模式应用对象的功能。

    适配器 描述
    BINBlocks 每一块作为二进制文件存储在一个文件夹中
    GenericImage 块存储在一个单一的形象
    GenericImageBlocks 每一块作为一个图像文件存储在一个文件夹中
    H5 块存储在单个HDF5形象
    H5Blocks 每个块作为HDF5文件存储在一个文件夹中
    InMemory 块存储在一个变量在主内存
    如JPEG2000 读一个如JPEG2000文件块(因为R2023a)
    JPEGBlocks 每一块为JPEG文件存储在一个文件夹中
    LevelConcatenator 访问连接块阻塞图像(因为R2023a)
    MATBlocks 每一块作为一个垫子文件存储在一个文件夹中
    PNGBlocks 每一块为PNG文件存储在一个文件夹中
    TIFF 块存储在一个TIFF文件

版本历史

介绍了R2021a

另请参阅