[Insight-users] Signed Danielsson

Zachary Pincus zpincus at stanford.edu
Thu Oct 20 12:58:29 EDT 2005


The FTP server doesn't seem to be working particularly well -- the  
FTP data port (as opposed to the control port) seems to be blocked.  
Or perhaps it's a permissions issue. I've tried it with several  
clients in several locations where I know FTP to be working  
otherwise. Can you post to a web server somewhere?

In general, I suggest reviewing the doxygen man pages / headers for  
the signed Danielsson filter and it's unsigned relative to make sure  
you understand the parameters and are setting them correctly. Also,  
try to see if you can compute an un-signed distance map on your  
input. Finally, as per ITK level-set convention, the "inside" of the  
signed distance map will be negative and "outside" regions will be  
positive.

If you could describe in a bit more detail your inputs and outputs  
(or if you could post them to the web) I'll try to help more.

Zach


On Oct 20, 2005, at 11:01 AM, Einstein, Daniel R wrote:

>
> Hello friends,
>
> I am trying to compute the Euclidean distance map on a binary  
> volume and am getting weird results.
>
> Data is available at ftp://ftp.pnl.gov/outgoing/SignedDanielsson
>
> See Screenshot.png for a look at what the cross section looks like.  
> This is a simplification, but basically the volume is a cylinder of  
> that cross-section. ScreenShot2.png shows the result of the Signed  
> Danielsson Map - not what I expected. I expected zero to be the  
> border; negative to be 'outside'; and positive to be 'inside'. Sort  
> of like and image within an image. Reduced.mha is the header and  
> reduced.raw.zip is the image. It is a binary image of 1 and 11 - I  
> pass the image as floats to the itkSignedDanielssonFilter. Am I  
> expecting the wrong thing or doing it wrong.
>
> Any help would be greatly appreciated.
>
> Dan
>
> See code snippet below.
>
> //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
> ++++++++++++
> // ITK Signed Danielsson Distance Map
> //
> void ThreeDFilters::distanceFilter(float *ddvimage, int xdim, int  
> ydim, int zdim,
>                                       int numiter, QApplication *app)
> {
> //
> //
> //  
> ********************************************************************** 
> *
> //         Preliminaries to copy the  ddv array into an ITK Image  
> type   *
> //  
> ********************************************************************** 
> *
> //
> //              Pass the dimensions and type of ddv array
>   typedef float PixelType;
>   const unsigned int Dimension = 3;
>   typedef itk::Image< PixelType, Dimension > ImageType;
>   typedef itk::Image< float, 3 > ImageType;
>
> // image origin
>   float ox = 0.0;
>   float oy = 0.0;
>   float oz = 0.0;
> // pixel spacing
>   float dx = 1.0;
>   float dy = 1.0;
>   float dz = 1.0;
>
>   ImageType::Pointer itkimage = ImageType::New();
>    ImageType::SizeType size;   size[0] = xdim;   size[1] = ydim;
>   size[2] = zdim;
>    ImageType::IndexType start;   start[0] = 0;   start[1] = 0;
>   start[2] = 0;
>    ImageType::RegionType region;   region.SetSize( size );    
> region.SetIndex( start );   itkimage->SetRegions( region);
>    itkimage->Allocate();
>    double spacing[3];   spacing[0] = dx;   spacing[1] = dy;
>   spacing[2] = dz;   itkimage->SetSpacing( spacing );
>    double origin[3];   origin[0] = ox;   origin[1] = oy;
>   origin[2] = oz;   itkimage->SetOrigin( origin );
>    typedef itk::ImageRegionIterator< ImageType> IteratorType;    
> IteratorType it( itkimage, region );   it.GoToBegin();   float *  
> data = ddvimage;   while( ! it.IsAtEnd() )     {     it.Set 
> ( *data);     ++it;     ++data;     }
>
> // ****************************************************************
> //                      End preliminaries                         *
> // ****************************************************************
> //
> //  typedef itk::RescaleIntensityImageFilter<
> //              ImageType, ImageType > preRescaleFilterType;
> //  preRescaleFilterType::Pointer prerescaler =  
> preRescaleFilterType::New();
> //  prerescaler->SetOutputMinimum(   0 );
> //  prerescaler->SetOutputMaximum( 255 );
> //  prerescaler->SetInput( itkimage );
> //
> //       SIGNED DISTANCE MAP WITH AUTOMATIC RESCALING
>   typedef    float    OutputPixelType;
>   typedef itk::Image< OutputPixelType, 3 >   OutputImageType;
>   typedef itk::SignedDanielssonDistanceMapImageFilter<
>                                          ImageType,
>                                          OutputImageType >   
> FilterType;
>   FilterType::Pointer filter = FilterType::New();
>   filter->SetInput( itkimage );
>
>   typedef itk::RescaleIntensityImageFilter<
>               OutputImageType, OutputImageType > RescaleFilterType;
>   RescaleFilterType::Pointer rescaler = RescaleFilterType::New();
>   rescaler->SetOutputMinimum(   0L );
>   rescaler->SetOutputMaximum( 65535L );
>   rescaler->SetInput( filter->GetOutput() );
> //
> //
> // **************************************************************
> //                          End Filter                          *
> // **************************************************************
> //
> // **************************************************************
> // Begin Conclusion: This writes the image back to the local    *
> // buffer and should be written as a generic callable function  *
> // **************************************************************
> //
>   PixelType* pixelData= static_cast<PixelType* >(ddvimage);   const  
> bool filterWillDeleteTheInputBuffer = false;   const unsigned int  
> totalNumberOfPixels = xdim*ydim*zdim;   rescaler->GetOutput()- 
> >GetPixelContainer()->SetImportPointer(pixelData,                   
> totalNumberOfPixels,filterWillDeleteTheInputBuffer);   rescaler- 
> >GetOutput()->Allocate();   rescaler->Update();
>
> //
> //
> printf("done ITK Signed Danielsson Distance Map\n");
>   if ( pd ) {
>     delete pd;
>     QApplication::restoreOverrideCursor();
>   }
>
> }
> Daniel R Einstein, PhD
> Biological Monitoring and Modeling
> Pacific Northwest National Laboratory
> P.O. Box 999; MSIN P7-58
> Richland, WA 99352
> Tel: 509/ 376-2924
> Fax: 509/376-9064
> daniel.einstein at pnl.gov
>
>
>
> Daniel R Einstein, PhD
> Biological Monitoring and Modeling
> Pacific Northwest National Laboratory
> P.O. Box 999; MSIN P7-58
> Richland, WA 99352
> Tel: 509/ 376-2924
> Fax: 509/376-9064
> daniel.einstein at pnl.gov
>
>
> _______________________________________________
> 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