itk::InvalidRequestedRegionError

来源:互联网 发布:windows 10 fall 推送 编辑:程序博客网 时间:2024/05/16 10:22

    计算机系统:Win8.1 (64 bit)

    ITK:4.7.2 (64bit)

1 问题描述

    本人使用ITK进行CT序列图像的分割,使用的是3D区域生长法。由于总体序列图像的容量比较大,因此希望通过对这些序列图像进行分组分割,从而节约计算机内存。在分组的时候,前面的组的序列图像张数是一样的,只有最后一组序列图像的的数量可能会比前面组要少。

    当所有组的序列图像的张数一样时,分割过程并没有出现错误;但是,当最后一组序列图像数目少于前面的组别的时候,就发生了一下错误:    

itk::InvalidRequestedRegionError (00000083A57FF308)

Location: "void __cdecl itk::DataObject::PropagateRequestedRegion(void)"

File: E:\ITK\InsightToolkit-4.7.2\Modules\Core\Common\src\itkDataObject.cxx

Line: 393

Description: Requested region is (at least partially) outside the largest possible region.

2 错误分析

    上面的错误是由itk::SeriesWriter引起的。由于第一次调用itk::SeriesWriter时设定了序列图像的范围(假如:0~100,共101张图像)。在循环过程中,就算改变序列图像的索引起始和结束值(例如:100~200,共101张图像),只要其范围没有变,是不会出现上述错误的;然而,当将序列图像索引的范围变化时(例如:200~250,共51张图像),将会引发上述问题。

    根据第1章问题描述中红色字体的错误信息的最后一行提示:所请求的区域不在最大可能的范围之内!因此可以猜测,在第一次设定序列图像索引的同时,也设定了最大允许请求范围,而再次改变索引范围时,这个最大允许请求范围并没有同步改变。

3 解决方法

    根据第2章的分析,我们需要做的就是在改变索引范围的同时,也要改变其最大允许请求范围。方法就是在调用itk::SeriesWriter:Update()之前,先调用下面的函数:

itk::SeriesWriter::UpdateLargestPossibleRegion()
    如果itkSeriesWriter的输入对象有这个函数,也应该在调用itkSeriesWriter:Update()之前先调用,例如图像类型转换器itk::CastImageFilter。

4 拓展

    itk::SeriesWriter的设置也同理。

参考资料

[1]SphinxExamples/src/Core/Common/ReRunPipelineWithChangingLargestPossibleRegion/Code.cxx

0 0
原创粉丝点击