[Insight-users] extract filter problem
Michael Kuhn
michakuhn at gmx.ch
Sat Sep 4 05:07:26 EDT 2004
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
>
--
NEU: Bis zu 10 GB Speicher für e-mails & Dateien!
1 GB bereits bei GMX FreeMail http://www.gmx.net/de/go/mail
More information about the Insight-users
mailing list