MantisBT - ITK | |||||
View Issue Details | |||||
ID | Project | Category | View Status | Date Submitted | Last Update |
0010008 | ITK | public | 2009-12-07 17:58 | 2010-10-21 12:31 | |
Reporter | Bradley Lowekamp | ||||
Assigned To | Bradley Lowekamp | ||||
Priority | normal | Severity | major | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | OS | OS Version | |||
Product Version | |||||
Target Version | Fixed in Version | ||||
Resolution Date | |||||
Sprint | |||||
Sprint Status | |||||
Summary | 0010008: Unable to stream with JoinSeriesImageFilter, due to 0 sized requested region causing updates | ||||
Description | When a JoinSeriesImageFilter is requested to stream, not all of it's inputs need to be updated. To accomplish this the filter sets the input's requested regions to the buffered region ( which is size 0 ). This results in propagation and execution of the upstream pipeline with said 0 sized region. Which then causes excessive execution at best but likely exceptions of erroneous behavior for upstream filters. Many filters do not handle 0 size regions correctly, including ImageFileReader. Also the ImageRegion appears not to be robust with empty sizes regions as well. I contend that the pipeline should not execute ProcessObjects who's output has a zero size requested region. But the UpdateOutputInformation and PropagateRequestedRegion should. By setting the Image's requested region to 0 size a filter is explicitly requesting that no pixel be updated. Therefore, there is no need to execute the up stream filters. The attach test shows how this bug results in the source image being read N^2 times where N is the number of z slices. ( the input and output must be of metaImage type for IO streaming to work). | ||||
Steps To Reproduce | |||||
Additional Information | The bug can be resolved by adding the following method to ImageBase:: template<unsigned int VImageDimension> void ImageBase<VImageDimension> ::UpdateOutputData() { if( this->GetRequestedRegion().GetNumberOfPixels() > 0 || this->GetLargestPossibleRegion().GetNumberOfPixels() == 0 ) { this->Superclass::UpdateOutputData(); } else { // itkWarningMacro(<<"Not executing UpdateOutputData RequestedRegion:" << this->GetRequestedRegion() << " BufferedRegion: " << this->GetBufferedRegion()); } } The check for the empty LargestPossibleRegion's size is needed because, some test expect UpdateOutputData to throw an exception when no input has been set. | ||||
Tags | No tags attached. | ||||
Relationships | |||||
Attached Files | itkJoinSeriesImageFilterStreamingTest.cxx (3,421) 2009-12-07 17:58 https://public.kitware.com/Bug/file/2709/itkJoinSeriesImageFilterStreamingTest.cxx | ||||
Issue History | |||||
Date Modified | Username | Field | Change | ||
2009-12-07 17:58 | Bradley Lowekamp | New Issue | |||
2009-12-07 17:58 | Bradley Lowekamp | File Added: itkJoinSeriesImageFilterStreamingTest.cxx | |||
2009-12-07 18:01 | Bradley Lowekamp | Description Updated | |||
2009-12-07 18:01 | Bradley Lowekamp | Additional Information Updated | |||
2009-12-07 18:02 | Bradley Lowekamp | Additional Information Updated | |||
2009-12-14 10:45 | Bradley Lowekamp | Status | new => assigned | ||
2009-12-14 10:45 | Bradley Lowekamp | Assigned To | => Bradley Lowekamp | ||
2009-12-14 14:41 | Bradley Lowekamp | Note Added: 0018871 | |||
2009-12-23 10:31 | Bradley Lowekamp | Note Added: 0018986 | |||
2010-01-15 09:26 | Bradley Lowekamp | Note Edited: 0018986 | |||
2010-01-15 09:27 | Bradley Lowekamp | Note Added: 0019146 | |||
2010-01-15 09:27 | Bradley Lowekamp | Status | assigned => resolved | ||
2010-01-15 09:27 | Bradley Lowekamp | Resolution | open => fixed | ||
2010-10-21 12:31 | Gabe Hart | Status | resolved => closed |
Notes | |||||
|
|||||
|
|||||
|
|||||
|
|
||||
|
|||||
|
|