[Insight-users] Re: problems with median filter

Luis Ibanez luis . ibanez at kitware . com
Tue, 15 Jul 2003 20:54:23 -0400


Hi Carolyn,

Your code for setting up of the import filter looks fine.

As you said, it sounds just like one of those quantum mechanics
bugs that disapear when you insert a std::cout for debugging    :-)

BTW You may want to try removing the   ->Print(std::cout)
statements that you just added, and check if the bug reapears.

It may well be that the program is overriding some memory
positions as a consecuence of incorrectly set pointers.

Sometimes inserting new lines of code change the conditions
that make the bug visible.

If you are running on Unix, you may also try "Valgrind"
which is very useful when trying to find problems with
pointers and memory allocation.

Please let us know if you encounter further problems,


    Thanks


     Luis


--------------------------
Carolyn Johnston wrote:
> Hi Luis,
> 
> I should say first that for some reason... I am not having the shift 
> problem I described anymore. <<sigh>> It's like taking your car to the 
> shop.. the only change was the call to Image::Print. Perhaps it's a 
> quantum problem and simply trying to look at it fixes it? (Hm... are 
> some of these quantities only calculated on the fly, as needed?)
> 
>> The main suspects here are the regions:
>>
>>    LargestPossibleRegion
>>    BufferedRegion
>>    RequestedRegion
> 
> 
> I agree with you that these were the main worries, and thank you for 
> pointing out a way that I can look at the values of these regions.
> 
> I've included two things here: one, my import function: two, the results 
> you requested. The file "dem.raw" was created using an 
> ImportImageFilter, and "post_dem.raw" are the results from the median 
> filter.
> 
> ______________________________________________________________
> Here is the import function I use. ImageFilterType is typedef'd to 
> MedianImageFilter. writeImage contains the call to print out the 
> itk::IMage data.
> 
> 
> GDALToITK::ImageFilterType::Pointer
> GDALToITK::ImageFromDem(DemDataFloat& dem){
> 
>   typedef itk::ImportImageFilter<float, 2> ImportFilterType;
>   ImportFilterType::Pointer importFilter = ImportFilterType::New();
> 
>  // set up image coordinate environment
>  ImportFilterType::SizeType size;
>  ImportFilterType::IndexType start;
>  ImportFilterType::RegionType region;
>  size[0]=dem.size.x;
>  size[1]=dem.size.y;
>  start.Fill(0);
>  region.SetSize(size);
>  region.SetIndex(start);
>  importFilter->SetRegion(region);
> 
>  // set ground coordinate environment: origin and spacing
>  double origin[2];
>  double spacing[2];
>  Dpoint2d geo_origin = dem.PixToGeo(Ipoint2d(0,0));
>  origin[0]=geo_origin.x;
>  origin[1]=geo_origin.y;
>  Dpoint2d geo_spacing = GetCoordSpacing(dem);
> 
>  // cpj ++ 7.8.2003: added fabs to fix bug where registration code 
> expected positive values.
>  spacing[0]=fabs(geo_spacing.x);
>  spacing[1]=fabs(geo_spacing.y);
>  importFilter->SetOrigin(origin);
>  importFilter->SetSpacing(spacing);
> 
>  printf("Image information: \n");
>  printf("spacing: (%f, %f)\n", spacing[0], spacing[1]);
>  printf("origin: (%f, %f)\n", origin[0], origin[1]);
>  printf("size: (%u, %u)\n\n", (unsigned) size[0], (unsigned) size[1]);
>  //copy dem data into ITK image.
> 
>  float *buffer;
>  const int demsize=dem.imgdata.size();
>  assert(demsize==size[0]*size[1]);
>  if(demsize!=0)
>    buffer = &(dem.imgdata[0]);
>  else
>    throw itk::ExceptionObject("Specify nonzero size for input DEM");
> 
>  // 'true' value means that importFilter won't delete buffer (which 
> belongs to dem!) when it's destroyed
>  importFilter->SetImportPointer(buffer, demsize, true);
>  if(debug){
>    writeImage(importFilter, 
> "/home/cpj/tec_project/test/DemRegister/dem.raw");
>  }
> 
>  // Instantiate a filter and attach it to the importer.
>  // cpj: input type = ImageType =output image type.
>  // have used gradient manitude and median filters here.
>  ImageFilterType::Pointer filter = ImageFilterType::New();
>  filter->SetInput(importFilter->GetOutput());
> 
>  //++ 7.15.2003: debug code
>  importFilter->GetOutput()->Print(std::cout);
>  // ++ cpj 7.15.2003 test: use only with ThresholdImageFilter
>  // filter->SetOutsideValue(-1000);
>  // filter->ThresholdBelow(-10000);
>  // filter->ThresholdAbove(10000);
> 
>  if(debug){
>    writeImage(filter, 
> "/home/cpj/tec_project/test/DemRegister/post_dem.raw");
>  }
>  //++ 7.15.2003: debug code
>  filter->GetOutput()->Print(std::cout);
>  return filter;
> } // end of function
> 
> _______________________________________________________________
> 
> output from the print statements:
> 
> (OUTPUT FROM IMPORT-FILTERED IMAGE -- I've checked this, there's no shift)
> <GDALToITK::writeImage>: writing image 
> /home/cpj/tec_project/test/DemRegister/dem.raw
> Image (0x353b38)
>   Reference Count: 2
>   Modified Time: 30
>   Debug: Off
>   Observers:
>     none
>   Source: (0x3541e8)
>   Source output index: 0
>   Release Data: Off
>   Data Released: False
>   Global Release Data: Off
>   PipelineMTime: 14
>   UpdateTime: 32
>   LastRequestedRegionWasOutsideOfTheBufferedRegion: 0
>   LargestPossibleRegion:
>     Dimension: 2
>     Index: [0, 0]
>     Size: [3601, 3601]
>   BufferedRegion:
>     Dimension: 2
>     Index: [0, 0]
>     Size: [3601, 3601]
>   RequestedRegion:
>     Dimension: 2
>     Index: [0, 0]
>     Size: [3601, 3601]
>   Origin: [-122.999861, 45.999861]
>   Spacing: [0.000278, 0.000278]
>   PixelContainer: ImportImageContainer (0x3539f0)
>   Reference Count: 2
>   Modified Time: 31
>   Debug: Off
>   Observers:
>     none
>   Pointer: 0x353a1c
>   Container manages memory: false
>   Size: 12967201
>   Capacity: 12967201
> 
> 
>   IndexToPhysicalTransform: AffineTransform (0x353c00)
>   Reference Count: 2
>   Modified Time: 5
>   Debug: Off
>   Observers:
>     none
>   Matrix:
>     0.000278 0.000000 -122.999861
>     0.000000 0.000278 45.999861
> 
> 
>   PhysicalToIndexTransform: AffineTransform (0x355480)
>   Reference Count: 2
>   Modified Time: 6
>   Debug: Off
>   Observers:
>     none
>   Matrix:
>     3600.000000 0.000000 442799.499992
>     0.000000 3600.000000 -165599.500001
> 
> 
> (OUTPUT FROM MEDIAN FILTERED IMAGE -- does not contain shift any more!!!)
> <GDALToITK::writeImage>: writing image 
> /home/cpj/tec_project/test/DemRegister/post_dem.raw
> Image (0x355630)
>   Reference Count: 1
>   Modified Time: 71
>   Debug: Off
>   Observers:
>     none
>   Source: (0x3555b8)
>   Source output index: 0
>   Release Data: Off
>   Data Released: False
>   Global Release Data: Off
>   PipelineMTime: 56
>   UpdateTime: 73
>   LastRequestedRegionWasOutsideOfTheBufferedRegion: 0
>   LargestPossibleRegion:
>     Dimension: 2
>     Index: [0, 0]
>     Size: [3601, 3601]
>   BufferedRegion:
>     Dimension: 2
>     Index: [0, 0]
>     Size: [3601, 3601]
>   RequestedRegion:
>     Dimension: 2
>     Index: [0, 0]
>     Size: [3601, 3601]
>   Origin: [-122.999861, 45.999861]
>   Spacing: [0.000278, 0.000278]
>   PixelContainer: ImportImageContainer (0x353a38)
>   Reference Count: 2
>   Modified Time: 72
>   Debug: Off
>   Observers:
>     none
>   Pointer: 0x353a64
>   Container manages memory: true
>   Size: 12967201
>   Capacity: 12967201
>  IndexToPhysicalTransform: AffineTransform (0x3556f8)
>   Reference Count: 2
>   Modified Time: 48
>   Debug: Off
>   Observers:
>     none
>   Matrix:
>     0.000278 0.000000 -122.999861
>     0.000000 0.000278 45.999861
> 
> 
>   PhysicalToIndexTransform: AffineTransform (0x355868)
>   Reference Count: 2
>   Modified Time: 49
>   Debug: Off
>   Observers:
>     none
>   Matrix:
>     3600.000000 0.000000 442799.499992
>     0.000000 3600.000000 -165599.500001
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk . org
> http://www . itk . org/mailman/listinfo/insight-users
>