itk序列文件使用单个图像读取器读取后不再保持序列问题的研究

itk序列文件使用单个图像读取器读取后不再保持成一个序列的问题

情形说明

医学图像中,一个三维图像通常保存为一个序列二维图像,即多张2D图像。反过来,也即是一系列二维图像重建后可以形成一个三维图像,这些相互关联的二维图像我称为一个序列图像。 即1*3D = N * 2D。
一个3D图像
保存为多个2D图像

对于这一序列图像,其中存在一些标志信息用以标识其属于同一序列。

具体情况

如果使用 i t k I m a g e F i l e R e a d e r . h itkImageFileReader.h itkImageFileReader.h, 并为其设置一个 i t k G D C M I m a g e I O . h itkGDCMImageIO.h itkGDCMImageIO.h实例 用于读取序列图像中的一张,再使用 i t k I m a g e F i l e W r i t e r . h itkImageFileWriter.h itkImageFileWriter.h 并为其设置一个 i t k G D C M I m a g e I O . h itkGDCMImageIO.h itkGDCMImageIO.h实例用于将该图像保存到本地,则保存后的单个图像和未被读写的图像通常不再属于同一个序列。

在这里插入图片描述
上图为一个序列,含有256张图像。
在这里插入图片描述
上图为其中一张图像经过读写之后, 该序列被分成了两个序列,其中一个为 单独读写过后的图像, 未被读写的255张图像仍然保持为原来的序列。

如果对序列中的所有图像都经过一次单独读写,则256张图像会成为256个序列,每个序列只有1张图像。

问题引出

某些情况下,需要对序列中单个图像进行处理,并且整个序列中的单个文件都需要进行相同操作(比如修改序列文件的tag标签),则上述直接的单个修改文件方法将不合适。上述修改标签在单个2D文件上进行修改,序列中所有2D标签都需要执行相同的操作,最重要的是修改完成后仍使其保持为同一个序列文件。

解决方案

使用 I O F a c t o r y IOFactory IOFactory代替单个 I O IO IO,比如在处理单个文件的类中,注册一个 I O F a c t o r y IOFactory IOFactory,然后在处理整个序列的类中都使用该单个文件类的实例进行处理。

比如,单个文件tag信息处理类 D i c o m S i n g l e F i l e T a g U p d a t e r DicomSingleFileTagUpdater DicomSingleFileTagUpdater中,注册一个IO工厂 i t k : : G D C M I m a g e I O F a c t o r y : : R e g i s t e r O n e F a c t o r y ( ) ; itk::GDCMImageIOFactory::RegisterOneFactory(); itk::GDCMImageIOFactory::RegisterOneFactory();
在这里插入图片描述
然后在处理整个序列时(如类 D i c o m S e r i e s F i l e s U p d a t e r DicomSeriesFilesUpdater DicomSeriesFilesUpdater),只使用一个 D i c o m S i n g l e F i l e T a g U p d a t e r DicomSingleFileTagUpdater DicomSingleFileTagUpdater类实例 s i n g l e U p d a t e r singleUpdater singleUpdater来处理,在这里插入图片描述
则可以实现整个序列处理完后,仍为一个完整序列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值