[Insight-users] extract filter problem
Miller, James V (Research)
millerjv at crd.ge.com
Tue Sep 7 17:23:26 EDT 2004
I think I have a fix for this. I need to run all the tests.
I'll probably check it in tomorrow.
Jim
-----Original Message-----
From: Miller, James V (Research) [mailto:millerjv at crd.ge.com]
Sent: Tuesday, September 07, 2004 1:09 PM
To: 'Luis Ibanez'; Michael Kuhn
Cc: insight-users at itk.org
Subject: RE: [Insight-users] extract filter problem
I've been looking at this issue this morning. In my setup,
it is not crashing on freeing the operators. However, there
are some array bound write errors and invalid pointer reads.
I am running on a degenerate 3D volume (single slice) and
extracting a portion of the last column.
It looks like the problem is in the region decomposition when filtering in
the z-dimension. The subregions are not wholly contained in the original
image. So this may be an issue in the
face calculator.
Jim
-----Original Message-----
From: Luis Ibanez [mailto:luis.ibanez at kitware.com]
Sent: Monday, September 06, 2004 5:38 PM
To: Michael Kuhn
Cc: insight-users at itk.org
Subject: Re: [Insight-users] extract filter problem
Hi Michael,
Thanks for running the tests and sending
the results. After experimenting with
your code we were able to reproduce the
problem that you reported.
This seems to be a bug on the use of
regions in the DiscreteGradientImageFilter.
A bug report has been created in the
phpBugtracker database. You will find it
under Bug #1136
http://www.itk.org/Bug/bug.php?op=show&bugid=1136&pos=0
You can register your email in the CC field in
order to get updates on the status of this bug.
Regards,
Luis
--------------------
Michael Kuhn wrote:
> Hi,
>
> A) here the output of "preFilter->GetOutput()->Print(std::cout)" after
> modifying the program.
>
>
> Image (0136A100)
> RTTI typeinfo: class itk::Image<double,3>
> Reference Count: 2
> Modified Time: 199
> Debug: Off
> Observers:
> none
> Source: (0136A220)
> Source output index: 0
> Release Data: Off
> Data Released: False
> Global Release Data: Off
> PipelineMTime: 126
> UpdateMTime: 200
> LargestPossibleRegion:
> Dimension: 3
> Index: [0, 0, 0]
> Size: [65, 65, 127]
> BufferedRegion:
> Dimension: 3
> Index: [0, 0, 0]
> Size: [65, 65, 127]
> RequestedRegion:
> Dimension: 3
> Index: [0, 0, 0]
> Size: [65, 65, 127]
> Spacing: [0.127664, 0.127664, 0.127664]
> Origin: [0, 0, 0]
> PixelContainer:
> ImportImageContainer (0136A090)
> RTTI typeinfo: class itk::ImportImageContainer<unsigned
long,double>
> Reference Count: 1
> Modified Time: 134
> Debug: Off
> Observers:
> none
> Pointer: 0136A0C0
> Container manages memory: true
> Size: 536575
> Capacity: 536575
>
>
> B) The behaviour using the RegionOfInterestImageFilter is identical.
>
> When going through the program with a debugger, it crashes in
> DiscreteGaussianImageFilter after line 201.
>
> Thanks,
>
> Michael
>
> P.S.: When should I use the RegionOfInterestImageFilter and when the
> ExtractImageFilter (only if I want to change the dimensionality?)?
>
>
>
>
>
>
>>Hi Michael
>>
>>
>>
>>Please do the following:
>>
>>
>>
>>A) Check on image size
>>
>>1) In the try/catch block
>>
>> > try {
>> > extractFilter->Update();
>> > } catch (itk::ExceptionObject &e) {
>>
>>replace "extractFilter" with the gradientFilter
>>"preFilter". Then just after Update() add
>>
>> preFilter->GetOutput()->Print( std::cout );
>>
>>2) Rerun your program
>>
>>3) Let us know the region sized that are printed.
>>
>>
>>
>>
>>B) Check for a bug in the ExtractImageFilter
>>
>> 1) Replace the ExtractImageFilter with the
>> "RegionOfInterestImageFilter"
>>
>> This filter is described in the SoftwareGuide
>>
>> http://www.itk.org/ItkSoftwareGuide.pdf
>>
>> Section 7.4, pdf-page 225.
>>
>>
>>If your program works with this filter, then there
>>is probably a buggy condition in the ExtractImageFilter.
>>
>>
>>
>> Please let us know what you find.
>>
>>
>> Thanks
>>
>>
>> Luis
>>
>>
>>
>>---------------------------
>>michakuhn at gmx.ch wrote:
>>
>>
>>>Hi,
>>>
>>>I've written the following program, which is supposed to create the
>>
>>gradient
>>
>>>image for a particular region of the input image.
>>>
>>>----
>>>
>>>#include <iostream>
>>>
>>>#include "itkImage.h"
>>>#include "itkImageFileReader.h"
>>>#include "itkImageFileWriter.h"
>>>#include "itkGradientImageFilter.h"
>>>#include "itkGradientRecursiveGaussianImageFilter.h"
>>>#include "itkNumericTraits.h"
>>>#include "itkImageRegionConstIterator.h"
>>>#include "itkDiscreteGaussianImageFilter.h"
>>>#include "itkCastImageFilter.h"
>>>#include "itkExtractImageFilter.h"
>>>
>>>int main(int argc, char** argv)
>>>{
>>> const unsigned int Dimension = 3;
>>> typedef short PixelType;
>>> typedef itk::Image<PixelType, Dimension> ImageType;
>>>
>>> typedef double RealType;
>>>
>>> typedef itk::Image<RealType, Dimension> IntermediateImageType;
>>>
>>> typedef itk::CovariantVector<RealType, Dimension> GradientPixelType;
>>> typedef itk::Image<GradientPixelType, Dimension> GradientImageType;
>>>
>>>
>>> typedef itk::ImageFileReader<ImageType> ReaderType;
>>>
>>> ReaderType::Pointer reader = ReaderType::New();
>>>
>>> if (argc < 2) {
>>> std::cout << "image in required" << std::endl;
>>> return -1;
>>> }
>>> reader->SetFileName(argv[1]);
>>>
>>> try {
>>> reader->Update();
>>> } catch (itk::ExceptionObject &e) {
>>> std::cout << e << std::endl;
>>> return -1;
>>> }
>>>
>>> typedef itk::CastImageFilter<ImageType, IntermediateImageType>
>>> CastFilterType;
>>>
>>> CastFilterType::Pointer castFilter = CastFilterType::New();
>>>
>>> castFilter->SetInput(reader->GetOutput());
>>>
>>>
>>> typedef itk::DiscreteGaussianImageFilter<IntermediateImageType,
>>> IntermediateImageType> PreFilterType;
>>>
>>> PreFilterType::Pointer preFilter = PreFilterType::New();
>>> preFilter->SetInput(castFilter->GetOutput());
>>> preFilter->SetUseImageSpacing(false);
>>> preFilter->SetMaximumKernelWidth(8);
>>> std::cout << "default variance: " << preFilter->GetVariance() <<
>>
>>std::endl;
>>
>>> preFilter->SetVariance(1);
>>>
>>> typedef itk::GradientImageFilter<IntermediateImageType, RealType,
>>> RealType> Filter1Type;
>>>
>>> Filter1Type::Pointer filter1 = Filter1Type::New();
>>> filter1->SetInput(preFilter->GetOutput());
>>>
>>> typedef itk::ExtractImageFilter<GradientImageType,
GradientImageType>
>>> ExtractFilterType;
>>> ExtractFilterType::Pointer extractFilter = ExtractFilterType::New();
>>>
>>> extractFilter->SetInput(filter1->GetOutput());
>>>
>>> typedef GradientImageType::RegionType RegionType;
>>> RegionType region;
>>> RegionType::SizeType size;
>>> RegionType::IndexType index;
>>>
>>> size[0] = 1;
>>> size[1] = 32;
>>> size[2] = 32;
>>>
>>> index[0] = 64;
>>> index[1] = 0;
>>> index[2] = 0;
>>>
>>> region.SetSize(size);
>>> region.SetIndex(index);
>>>
>>> extractFilter->SetExtractionRegion(region);
>>>
>>> try {
>>> extractFilter->Update();
>>> } catch (itk::ExceptionObject &e) {
>>> std::cout << e << std::endl;
>>> return -1;
>>> }
>>>
>>> GradientImageType::Pointer image1 = extractFilter->GetOutput();
>>>
>>> std::cout << "image1: " << image1 << std::endl;
>>>
>>> return 0;
>>>}
>>>
>>>----
>>>
>>>This program crashes, if my input image has a size of 65x65x127 pixels.
>>
>>It
>>
>>>works fine, however, as soon as I change (in the source code) "index[0]
>>
>>=
>>
>>>64" to "index[0] = 63". It still works when increasing size[0] to 2
>>
>>after
>>
>>>changing the index. Can somebody explain me, why I am not allowed to
>>
>>extract
>>
>>>this particular region I've set in the code? Or is there something else
>>>wrong?
>>>
>>>Thanks,
>>>
>>>Michael
>>>
>>>P.S.: Below the input image file (in.mhd):
>>>
>>>----
>>>
>>>ObjectType = Image
>>>NDims = 3
>>>BinaryData = True
>>>BinaryDataByteOrderMSB = False
>>>ElementSpacing = 0.127664 0.127664 0.127664
>>>DimSize = 65 65 127
>>>ElementType = MET_SHORT
>>>ElementDataFile = in.raw
>>>
>>>----
>>>
>>
>>
>>
>>
>>_______________________________________________
>>Insight-users mailing list
>>Insight-users at itk.org
>>http://www.itk.org/mailman/listinfo/insight-users
>>
>
>
_______________________________________________
Insight-users mailing list
Insight-users at itk.org
http://www.itk.org/mailman/listinfo/insight-users
_______________________________________________
Insight-users mailing list
Insight-users at itk.org
http://www.itk.org/mailman/listinfo/insight-users
More information about the Insight-users
mailing list