[Insight-users] Signed Danielsson

Einstein, Daniel R daniel.einstein at pnl.gov
Thu Oct 20 13:04:32 EDT 2005


Hi Zach,

Thanks for the reply. Try this:


ftp://ftp.radiology.uiowa.edu/skabilan/SignedDanielsson

username: guestftp
password:go_hawks
 
Does it matter if the input image is unsigned or not?

Dan


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


-----Original Message-----
From: Zachary Pincus [mailto:zpincus at stanford.edu] 
Sent: Thursday, October 20, 2005 9:58 AM
To: Einstein, Daniel R
Cc: insight-users at itk.org
Subject: Re: [Insight-users] Signed Danielsson

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