{"id":28444055,"url":"https://github.com/ebola-chan-bot/image5d","last_synced_at":"2025-06-29T14:31:06.419Z","repository":{"id":41396615,"uuid":"502771266","full_name":"Ebola-Chan-bot/Image5D","owner":"Ebola-Chan-bot","description":"5D图像读写库，全网最快第三方OIR读入器","archived":false,"fork":false,"pushed_at":"2025-03-16T05:18:14.000Z","size":17264,"stargazers_count":8,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-06T08:37:04.087Z","etag":null,"topics":["5d","bioformats","image","oir","olympus","ome","tiff"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ebola-Chan-bot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-13T01:39:57.000Z","updated_at":"2025-03-16T05:17:17.000Z","dependencies_parsed_at":"2022-08-28T03:50:23.627Z","dependency_job_id":"584b73c6-d1b8-4688-8d5d-a2f9ac831acf","html_url":"https://github.com/Ebola-Chan-bot/Image5D","commit_stats":null,"previous_names":["ebola-chan-bot/image5d","silver-fang/image5d"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/Ebola-Chan-bot/Image5D","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ebola-Chan-bot%2FImage5D","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ebola-Chan-bot%2FImage5D/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ebola-Chan-bot%2FImage5D/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ebola-Chan-bot%2FImage5D/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ebola-Chan-bot","download_url":"https://codeload.github.com/Ebola-Chan-bot/Image5D/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ebola-Chan-bot%2FImage5D/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262608547,"owners_count":23336524,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["5d","bioformats","image","oir","olympus","ome","tiff"],"created_at":"2025-06-06T08:30:34.856Z","updated_at":"2025-06-29T14:31:06.397Z","avatar_url":"https://github.com/Ebola-Chan-bot.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"快速随机读写5D图像格式，目前支持读入 Olympus OIR 和读写 OME-TIFF，比市面上流行的竞品BioFormats要快得多。主要原因在于本库使用了更底层的C++指针操作，以及Windows内存映射文件机制，而BioFormats则使用Java，无法利用 Win32 API 优化。\n\n5D格式泛指逻辑上具有 XYCZT 5 个维度的图像文件格式。在逻辑上，其内部图像文件是一个5D数组。但实现上，文件内部可能缺乏良好的索引，实际上不能根据文件头随机读写，仍然需要先遍历整个文件建立索引。有的格式甚至还会将大文件拆分成多个小文件，进一步增加了索引逻辑的复杂性。\n\n本库经过精心设计，将复杂的底层逻辑隐藏，而将整个图像文件抽象成一个5D数组，允许用户随意切片，高速读写。核心是C++代码，提供MATLAB包装接口。后续根据需要可能添加其它语言接口。\n\n依赖：[pugixml](https://pugixml.org/)，AVX2以上指令集，Windows系统（推荐Win11，低版本未测试）。本库涉及中文\tC++函数名，代码文件采用UTF-8编码，建议将计算机语言编码也设为UTF-8（中国大陆电脑通常默认GB2312，这主要是兼容性包袱造成微软不敢轻易改动，但不建议在新的项目中再使用这种过时的编码了）\n\n# 目录\n- [部署指南](#部署指南)\n- [Olympus OIR](#olympus-oir)\n- [OME-TIFF](#ome-tiff)\n\t- [Tiff与BigTiff](#tiff与bigtiff)\n\t- [OME-TIFF](#ome-tiff-1)\n\t- [OB5-TIFF](#ob5-tiff)\n\t- [MATLAB接口类](#matlab接口类)\n\t- [辅助数据类型](#辅助数据类型)\n\t- [已知问题](#已知问题)\n- [CommonReader](#commonreader)\n# 部署指南\n本库的核心逻辑代码以静态库项目形式存在，可以方便地包装成面向各种语言的接口模块。存储库中还提供了面向MATLAB和C++的包装项目示例。\n## 存储库结构\n根目录是一个 Visual Studio 解决方案和一个MATLAB工程公用目录，用一套Git系统管理。\n\n- +Image5D，MATLAB工具箱包目录，包\n- doc，MATLAB工具箱快速入门文档\n- Image5DLib，包含Image5D核心逻辑的静态库项目\n- Image5DMex，包装Image5DLib，面向MATLAB，可编译为MEX文件函数的项目\n- Image5D测试，包装Image5DLib，提供面向C++的示例项目和代码\n- resources，MATLAB工程定义文件和MATLAB接口签名\n- Image5D.prj，MATLAB工程主文件\n- Image5D.sln，Visual Studio 解决方案主文件\n- Image5D工具箱.prj，MATLAB工具箱打包工程\n## 面向MATLAB的快速部署\n最简单的方法就是直接安装编译好的工具箱。可以在[MATLAB附加功能管理器](https://ww2.mathworks.cn/matlabcentral/fileexchange/114435-image5d-oir-tiff)中搜索。此工具箱已经十分完善地包装好了各种接口。\n## 手动包装静态库\n无论面向MATLAB还是C++，你都需要一个C++项目来包装静态库。你需要对你的项目进行如下基本配置：\n- 将`Image5DLib\\include`中的头文件加入外部包含目录。这些头文件定义了使用静态库所必需的接口。\n- 链接`Image5DLib.lib`文件；此外，还要额外再链接Windows提供的`Rpcrt4.lib`和`Bcrypt.lib`\n- 安装`pugixml`依赖库，建议通过NuGet自动配置\n- 使用C++20或更新的语言标准\n- 静态库本身不能包含必要的资源，你需要手动将`Image5DLib\\include`中的`TiffData模板.xml` `XML模板.xml`和`资源.rc`添加到你的包装项目中。如果你的包装项目中还有其它资源，不要创建新的rc文件，直接添加到已有rc文件中。\n- 静态库不能自动初始化，使用任何其它API之前，你需要手动初始化。在包装项目的初始化入口处，唯一一次执行`Image5D::哈希初始化();`（包含`哈希计算器.h`）。对于DLL或MEX文件函数来说，这行代码通常应该放在`DllMain`函数的`DLL_PROCESS_ATTACH`分支；对于EXE来说，通常放在`main`函数中。对于单元测试项目，则可以放在测试类的构造函数中。\n- 如果你需要读入OIR，`#include\u003cOir读入器.h\u003e`；如果需要读写TIFF，`#include\u003cIOmeTiff读写器.h\u003e`。\n- 注意，本库不是无异常的设计，可能会抛出`Image5D异常`。如果你的包装项目要求无异常，你将必须要处理所有的异常。\n# Olympus OIR\n这是Olympus显微镜默认的输出格式。文件虽然有内置索引，但分散在多文件序列中，且包含非像素信息，首次启动需要建立像素索引，稍慢，大约数秒。那之后会在同目录下建立索引文件，下次启动速度会加快。\n\n本格式为Olympus私有格式，未公开详细文件规范，因此仅支持读入，不支持写出。\n\nC++核心：Oir读入器\n\nMATLAB接口类：Image5D.OirReader，可在MATLAB中用`doc Image5D.OirReader`命令查看详细文档，以下简要列出接口：\n```MATLAB\nclassdef OirReader\u003chandle\n\t%Olympus OIR 文件快速5D读入器，使用连续内存映射文件实现高速读入\n\tproperties(Dependent)\n\t\t%图像宽度\n\t\tSizeX\n\t\t%图像高度\n\t\tSizeY\n\t\t%颜色通道数\n\t\tSizeC\n\t\t%Z层数\n\t\tSizeZ\n\t\t%采样时点数\n\t\tSizeT\n\t\t%每个采样时点的间隔毫秒数\n\t\tSeriesInterval\n\t\t%图像元数据XML\n\t\tLsmimageXml\n\t\t%各Z层的激光透过率\n\t\tLaserTransmissivity\n\t\t%PMT电压，第1维Z层，第2维通道\n\t\tPmtVoltage\n\t\t%采样设备名称和通道颜色\n\t\tDeviceColors\n\t\t%Z驱动单元类型，通常为Motor或Piezo\n\t\tZDriveUnitType\n\t\t%列出每个拼接序列的SizeT。如果只有一个序列，未发生拼接，则此值等于SizeT\n\t\tConcatenateSizeT\n\t\t%像素字节数，恒为2\n\t\tSizeP\n\t\t%像素类型，恒为PixelType.UINT16\n\t\tPixelType\n\t\t%各通道颜色\n\t\tChannelColors\n\t\t%维度顺序，恒为DimenionOrder.XYCZT\n\t\tDimensionOrder\n\tend\n\tmethods(Static)\n\t\tfunction ConcatenateByRename(HeaderPaths)\n\t\t\t%通过修改文件名的方法串联多个OIR文件序列\n\t\tend\n\t\tfunction SplitByRename(HeaderPath,SplitTable)\n\t\t\t%如果使用ConcatenateByRename发生了错误的合并并且已经无法撤销，可以尝试用此方法重新拆分开来\n\t\tend\n\tend\n\tmethods\n\t\tfunction obj=OirReader(HeaderPath)\n\t\t\t%构造OirReader对象\n\t\tend\n\t\tfunction Pixels=ReadPixels(obj,TStart,TSize,ZStart,ZSize,CStart,CSize)\n\t\t\t%读入像素块值\n\t\tend\n\t\tfunction ReadToPointer(obj,Pointer,TStart,TSize,ZStart,ZSize,CStart,CSize)\n\t\t\t%读入像素块值到给定指针\n\t\tend\n\tend\nend\n```\n# OME-TIFF\n本库可以高速读写OME-TIFF文件。OME-TIFF 并不是一套单一的文件格式规范，实际上随着时间发展出了很多变体。\n## TIFF与BigTiff\nTIFF（Tag Image File Format，标签图像文件格式）是一种广泛使用的多图像存档文件格式，可以存储多张2D图像，每个像素也可以是1、2或4字节（称位深度或SizeP），它们线性排列在被称为IFD的维度（称I维度）上，每个IFD类似于视频的一“帧”，除了像素数值以外还包含高度（Y维度）、宽度（X维度）等元数据信息，每一项元数据被称为一个标签。TIFF规范规定了每个IFD都必须包含的，所谓必需标签，以及一些可选包含的标签。\n\n经典的TIFF格式存在无法处理\u003e4㎇文件的问题。BigTiff是TIFF格式的变体，解决了4㎇限制的问题。[TIFF和BigTiff格式规范](https://www.awaresystems.be/imaging/tiff.html)\n## OME-TIFF\n但是，很多时候，高、宽、IFD，这3个维度并不足以满足我们的需求，于是出现了OME（Open Microscopy Environment，开放显微镜环境）-TIFF扩展格式，将I维度扩展为C, Z, T三个维度：\n- C，Channel，颜色通道。这里指的不是常见的RGB颜色通道，而是拍摄设备所支持的同时工作的记录设备。这些设备往往可以记录不同波长的光信号，包括但不限于RGB，甚至还包括非光学信号。\n- Z，深度层级。许多拍摄设备可以对拍摄对象进行多层深度扫描拍摄，形成立体图像，因此需要增加一个Z维度。\n- T，Time，时间轴。\n\n这样，OME-TIFF实际上是具有XYCZT这5个维度的图像文件。为了与TIFF格式兼容，它利用了TIFF格式里可选的ImageDescription标签。OME-TIFF规定，在完全满足TIFF规范的基础上，首个IFD的ImageDescription标签变为必需标签。这个标签在TIFF规范中可以是任意的字符串，OME则规范了这个字符串必须为特定的OME-XML格式元数据，用于记录XYCZT各维度尺寸信息，各通道颜色（ChannelColor），各维度在存储空间中的线性排列顺序（DimensionOrder，谁为高维谁为低维），单个像素值的数据类型（PixelType），以及拍摄设备相关的元数据信息。[OME规范](https://docs.openmicroscopy.org/ome-model/6.2.2/ome-tiff/specification.html)\n\nOME规范与TIFF/BigTiff的规范是正交的，即它既可以基于TIFF，也可以基于BigTiff。因此，传统的TIFF或BigTiff解析代码可以同样正确解读OME-TIFF，只是不能利用OME规范的额外功能而已。在传统代码眼中，OME-TIFF仍然只有XYI三个维度，其中I维度是由CZT三个维度展开而成。将I维度折叠成CZT三个维度所需的全部信息记录在ImageDescription中，折叠工作由支持OME规范的代码虚拟地完成，而不对I维度本身作任何改动。\n\n但是，OME规范要求将5个维度的尺寸全部记录在首IFD标签中，这隐含地要求了所有IFD图像帧必须具有相同的高度、宽度和位深度；而一般的TIFF规范中无此要求，各个IFD可以独立设置各自的高度宽度。\n## OB5-TIFF\n上述TIFF格式及其各类变体，仍存在一个设计上的根本缺陷，即不支持随机访问。\n\n文件中的字节是在地址空间中线性排列的，无论文件具有何种结构，这种结构都必须序列化为一串字节。TIFF规范在文件头中定义了首个IFD的字节偏移，即从文件起始开始向后多少个字节到达首个IFD；而IFD中的StripOffsets标签则记录了该IFD所对应的实际的像素数据的字节偏移；IFD结构的最后还记录了下一个IFD的字节偏移。也就是说，TIFF文件中的IFD维度并不是连续线性分布的，而是呈单向链表结构，只能从首IFD开始逐一寻找下一个IFD，直到最后一个IFD会指示它的下一个IFD的字节偏移为0，即本IFD是最后一个IFD。\n链表结构的优势在于可以高效地插入和删除，但随机访问性能很差。虽然读取程序可以建立缓存来存储每个IFD实际像素数据的指针，但仍不能免于遍历目标IFD之前的所有IFD。\nOB5是作者在OME-BigTiff基础上进一步严格格式规范：\n- 紧接BigTiff文件头之后，字节偏移16的位置写入一个固定字节79，标志该文件遵守本规范\n- IFD的标签可以是单个值，也可以指向文件的某个位置，表示该位置存储着该标签的值。因此首IFD的ImageDescription标签，在本规范中被要求指向所有IFD之前，紧接文件头之后。ImageDescription块与首IFD之间可以有任意大空隙，为后续扩展预留空间。\n- 每个IFD都有且仅有13个标签。这些标签按照固定顺序排列：ImageDescription, StripOffsets, ImageWidth, ImageLength, BitsPerSample, RowsPerStrip, StripByteCounts, SampleFormat, Compression, PhotometricInterpretation, XResolution, YResolution, ResolutionUnit。因为每个标签恰好占用20字节且紧密线性排列，所以每个IFD占用的字节也是固定的。\n- 所有IFD必须按照顺序紧密线性排列，因此可以根据首IFD偏移直接算出任何一个IFD的偏移，无需遍历。而ImageDescription中记录了CZT尺寸信息，因此可用SizeC×SizeZ×SizeT=SizeI直接算出IFD总数，因而算出所有IFD占用的字节总数。\n- 所有IFD对应的实际像素数据块，也必须按照维度顺序紧密线性排列。因此根据首IFD的StripOffsets，以及在ImageDescription中读到的SizeX×SizeY×SizeP算出每个IFD对应像素数据占用的字节数，进一步算出任意一个IFD的指针，同样无需遍历。此外，内存连续的像素数据块可以看作一个5D数组，进行高效的索引和向量化、并行拷贝操作。\n- 像素块在IFD块之后，两者之间可以有任意大空隙，便于IFD扩展预留空间。像素块到文件尾之间也可适当留空隙。\n\n本格式的优势是具有高效的随机访问性能，无需遍历即可计算出所需数据的正确位置，一步直达。缺点是需要在写入数据之前预分配足够的文件空间，如果写入过程中发现空间不足，需要将后续数据成员全部向后移动，并更改所有的文件指针，性能开销较大。但这仅限于在写入前无从得知数据量的情况，如果能在写入前得知数据大小并预分配充分大的存储空间，本格式的写入性能仍高于传统TIFF。\n## MATLAB接口类\n看详细文档，以下简要列出接口：\n```MATLAB\nclassdef OmeTiffRWer\u003chandle\n\t%OME TIFF 快速5D读写器，使用内存映射文件和强制像素块连续实现高速读写\n\tproperties(Dependent)\n\t\t%像素类型。如果文件符合OME标准，从 OME XML 中读入此属性；否则从首IFD中取得。假定所有IFD的像素类型与首IFD相同。\n\t\tPixelType Image5D.PixelType\n\t\t%维度顺序。仅 OME TIFF 支持此属性。\n\t\tDimensionOrder Image5D.DimensionOrder\n\t\t%像素字节数，根据PixelType计算得到。不能直接修改此属性，请修改PixelType。\n\t\tSizeP\n\t\t%图像宽度。如果文件符合OME标准，从 OME XML 中读入此属性；否则从首IFD中取得。假定所有IFD的图像宽度与首IFD相同。\n\t\tSizeX uint16\n\t\t%图像高度。如果文件符合OME标准，从 OME XML 中读入此属性；否则从首IFD中取得。假定所有IFD的图像高度与首IFD相同。\n\t\tSizeY uint16\n\t\t%IFD总数。如果文件符合OME标准，此值必等于SizeC*SizeZ*SizeT。不能直接修改此属性，请修改SizeC、SizeZ或SizeT。\n\t\tSizeI\n\t\t%颜色通道数。仅 OME TIFF 支持此属性。\n\t\tSizeC uint8\n\t\t%Z层数。仅 OME TIFF 支持此属性。\n\t\tSizeZ uint8\n\t\t%采样时点数。仅 OME TIFF 支持此属性。\n\t\tSizeT uint16\n\t\t%各通道颜色，每个通道对应一个Image5D.ChannelColor对象。仅 OME TIFF 支持此属性。\n\t\tChannelColors Image5D.ChannelColor\n\t\t%文件名。仅 OME TIFF 支持此属性。此值从 OME XML 中读取，不一定与真实的文件名相同。\n\t\tFileName string\n\t\t%图像描述。只包含首IFD的图像描述。如果文件符合OME标准，此图像描述即为 OME XML 元数据。修改此属性将可能导致其它基本属性也被修改。\n\t\tImageDescription string\n\tend\n\tmethods(Static)\n\t\tfunction obj=OpenRead(FilePath)\n\t\t\t%只读打开现存TIFF文件\n\t\tend\n\t\tfunction obj=OpenRW(FilePath)\n\t\t\t%读写打开现存 OB5 TIFF 文件\n\t\tend\n\t\tfunction obj=Create(FilePath,PixelTypeOrImageDescription,SizeX,SizeY,ChannelColors,SizeZ,SizeT,DimensionOrder)\n\t\t\t%覆盖创建 OB5 TIFF 文件\n\t\tend\n\t\tfunction [Image,DimensionOrder,ChannelColors]=QuickRead(TiffPath)\n\t\t\t%快速读入Tiff图像\n\t\tend\n\t\tfunction QuickWrite(TiffPath,Image,DimensionOrder,ChannelColors)\n\t\t\t%快速写出Tiff图像\n\t\tend\n\tend\n\tmethods\n\t\tfunction ModifyParameters(obj,PixelType,SizeX,SizeY,SizeC,SizeZ,SizeT,ChannelColors,DimensionOrder,FileName)\n\t\t\t%一次修改多个参数，只进行一次文件重构，因此比依次修改多个属性更快。\n\t\tend\n\t\tfunction Pixels=ReadPixels(obj,TStart,TSize,varargin)\n\t\t\t%读入指定范围内的像素值。仅 OME TIFF 支持此方法。\n\t\tend\n\t\tfunction Pixels=ReadPixelsI(obj,IStart,ISize)\n\t\t\t%读入一定IFD范围内的像素值\n\t\tend\n\t\tfunction WritePixels(obj,Pixels,TStart,TSize,varargin)\n\t\t\t%写出指定范围内的像素值\n\t\tend\n\t\tfunction WritePixelsI(obj,Pixels,IStart,ISize)\n\t\t\t%写出一定IFD范围内的像素值\n\t\tend\n\t\tfunction Pointer=PixelPointer(obj,T,Z,C)\n\t\t\t%返回一个指向像素值的指针。仅 OB5 TIFF 支持此方法。\n\t\tend\n\t\tfunction Pointer=PixelPointerI(obj,I)\n\t\t\t%返回一个指向像素值的指针。仅 OB5 TIFF 支持此方法。\n\t\tend\n\t\tfunction ReadToPointer(obj,Pointer,TStart,TSize,varargin)\n\t\t\t%读入像素块值到给定指针\n\t\tend\n\t\tfunction ReadToPointerI(obj,Pointer,IStart,ISize)\n\t\t\t%读入指定IFD范围内的像素块值到给定指针\n\t\tend\n\t\tfunction WriteFromPointer(obj,Pointer,TStart,TSize,varargin)\n\t\t\t%从给定指针写出到指定像素范围\n\t\tend\n\t\tfunction WriteFromPointerI(obj,Pointer,IStart,ISize)\n\t\t\t%从给定指针写出到指定IFD范围\n\t\tend\n\tend\nend\n```\n## 辅助数据类型\n以下类型定义用于主类的参数或输出结果等\n```MATLAB\nclassdef ChannelColor\u003cuint32\n\t%通道颜色，是将一个uint32从低到高拆分成ABGR四个uint8颜色通道的共用体。\n\tproperties(Dependent)\n\t\t%透明通道\n\t\tA\n\t\t%蓝色通道\n\t\tB\n\t\t%绿色通道\n\t\tG\n\t\t%红色通道\n\t\tR\n\tend\n\tmethods(Static)\n\t\tfunction obj = New(A,B,G,R)\n\t\t\t%创建新的ChannelColor对象。可以输入数组以一次性构造多个ChannelColor对象\n\t\tend\n\t\tfunction obj=FromOirColors(OirColors)\n\t\t\t%将OIR颜色通道矩阵转换为ChannelColor对象\n\t\tend\n\tend\nend\nclassdef DimensionOrder\u003cuint8\n\t%OME TIFF 规范定义了6种维度顺序，再加上一种DEFAULT表示缺省值\n\tenumeration\n\t\tXYCZT(0)\n\t\tXYCTZ(1)\n\t\tXYZCT(2)\n\t\tXYZTC(3)\n\t\tXYTCZ(4)\n\t\tXYTZC(5)\n\t\t%此项仅在OmeTiffRWer.ModifyParameters方法中使用，表示不修改维度顺序。\n\t\tDEFAULT(6)\n\tend\n\tmethods\n\t\tfunction SP=SizePermute(obj)\n\t\t\t%取得该维度顺序的重排序数\n\t\tend\n\tend\nend\nclassdef PixelType\u003cuint8\n\t%OME TIFF 规范定义的8种像素类型，加上DEFAULT表示缺省值\n\tenumeration\n\t\tUINT8(0)\n\t\tUINT16(1)\n\t\tUINT32(2)\n\t\tINT8(3)\n\t\tINT16(4)\n\t\tINT32(5)\n\t\tFLOAT(6)\n\t\tDOUBLE(7)\n\t\t%此项仅在OmeTiffRWer.ModifyParameters方法中使用，表示不修改像素类型。\n\t\tDEFAULT(8)\n\tend\n\tmethods\n\t\tfunction MT=MatlabType(obj)\n\t\t\t%将像素类型转换为MATLAB数据类型\n\t\tend\n\tend\nend\n```\n## 已知问题\n本库并不支持标准OME-TIFF规范的全部特性，包括但不限于：\n- 不支持对非OB5-TIFF格式的写出，只能读入\n- 不支持分多条带的TIFF像素块\n- 不支持分多文件的OME-TIFF图像\n# CommonReader\n如果你不关心图像具体格式，只希望使用通用的5D读入功能，可以使用此抽象工厂类的Open方法打开oir或tif文件，将根据扩展名自动选择正确的实现。\n```MATLAB\nclassdef CommonReader\u003chandle\n\t%通用格式读入器，可用于读入tif或oir图像文件\n\t%此对象不能直接构造。使用静态方法Open获取对象。\n\tproperties(Dependent,Abstract)\n\t\t%图像宽度\n\t\tSizeX\n\t\t%图像高度\n\t\tSizeY\n\t\t%颜色通道数\n\t\tSizeC\n\t\t%Z层数\n\t\tSizeZ\n\t\t%采样时点数\n\t\tSizeT\n\t\t%像素字节数\n\t\tSizeP\n\t\t%像素类型\n\t\tPixelType\n\t\t%各通道颜色\n\t\tChannelColors\n\t\t%维度顺序\n\t\tDimensionOrder\n\tend\n\tmethods(Static)\n\t\tfunction obj=Open(FilePath)\n\t\t\t%打开文件\n\t\tend\n\tend\n\tmethods(Abstract)\n\t\t%读入指定范围内的像素值。\n\t\tPixels=ReadPixels(obj,TStart,TSize,varargin)\n\tend\nend\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Febola-chan-bot%2Fimage5d","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Febola-chan-bot%2Fimage5d","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Febola-chan-bot%2Fimage5d/lists"}