[Insight-users] setting the spacing when writing an image to disk

Lucas Lorenzo lucas at cvrti.utah.edu
Tue, 24 Feb 2004 16:51:59 -0700


--Apple-Mail-9-575271918
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=US-ASCII;
	delsp=yes;
	format=flowed

Hi Luis,

thanks for your answer.

My code has been taken from one testing file:  
itkGeodesicActiveContourShapePriorLevelSetImageFilterTest_2.cxx

The typedefs are as follows:

	//  
*********************************************************************  
//
   	/* Typedefs of components. */
   	const unsigned int    ImageDimension = 2;
  	 typedef unsigned short InputPixelType;
	  typedef unsigned char BinaryPixelType;
	  typedef double         PCAPixelType;
	  typedef float         InternalPixelType;

	  typedef itk::Image<InputPixelType,ImageDimension> OriginalImageType;
	  typedef itk::Image<PCAPixelType,ImageDimension> PCAImageType;
	  typedef itk::Image<InternalPixelType,ImageDimension>  
InternalImageType;


	  typedef  
itk:: 
GeodesicActiveContourShapePriorLevelSetImageFilter<InternalImageType,Int 
ernalImageType> FilterType;
	  typedef itk::PCAShapeSignedDistanceFunction<double,ImageDimension>  
ShapeFunctionType;
	  typedef  
itk::ShapePriorMAPCostFunction<InternalImageType,InternalPixelType>  
CostFunctionType;
	  typedef itk::AmoebaOptimizer OptimizerType;
	  typedef FilterType::ParametersType ParametersType;

	//create a reader for the image to be segmented:
	  typedef itk::ImageFileReader< OriginalImageType  >   
OriginalReaderType;
	  OriginalReaderType::Pointer original_reader =  
OriginalReaderType::New();
	//  
*********************************************************************  
//


The part of the code inherent to this class is the following one:


	  /**
	   * Create an initial level.
	   * Use fast marching to create an signed distance from a seed point.
	   */
	  typedef itk::FastMarchingImageFilter<InternalImageType>  
FastMarchingFilterType;
	  FastMarchingFilterType::Pointer fastMarching =  
FastMarchingFilterType::New();

	  typedef FastMarchingFilterType::NodeContainer NodeContainer;
	  typedef FastMarchingFilterType::NodeType      NodeType;

	  NodeContainer::Pointer seeds = NodeContainer::New();

	  // The initial contour is a circle centered at {x_ini,y_ini} with  
radius
	  // 2.0
	  int x_ini = std::atoi(argv[4]);
	  int y_ini = std::atoi(argv[5]);
	  InternalImageType::IndexType seedPosition;
	  seedPosition[0] = x_ini;
	  seedPosition[1] = y_ini;

	  NodeType node;
	  node.SetValue( -2.0 );
	  node.SetIndex( seedPosition );

	  seeds->Initialize();
	  seeds->InsertElement( 0, node );

	  fastMarching->SetTrialPoints( seeds );
	  fastMarching->SetSpeedConstant( 1.0 );

	  OriginalImageType::RegionType inputRegion =  
original_reader->GetOutput()->GetLargestPossibleRegion();
	  OriginalImageType::SizeType imageSize = inputRegion.GetSize();
	  fastMarching->SetOutputSize( imageSize );

	  try
	    {
	      fastMarching->Update();
	   }
	  catch( itk::ExceptionObject & exp )
  	   {
	      std::cerr << "Exception caught ! fastMarching" << std::endl;
	      std::cerr <<     exp    << std::endl;
	      return -1;
	    }


	  typedef itk::ImageFileWriter< InternalImageType  >  FMWriterType;
	  FMWriterType::Pointer FM_writer = FMWriterType::New();
	  FM_writer->SetFileName("fast_marching.vtk");
	  FM_writer->SetInput(fastMarching->GetOutput());
	  FM_writer->Update();
	

What is strange to me is that with the old version of  
itk::FastMarchingImageFilter (the one I was using before checking out  
the cvs copy) I could run the program with the only problem of the  
spacing mentioned in the first email.

Sorry if this is confusing but I'm trying to make it as clear as  
possible.
Thanks,


Lucas

On Feb 24, 2004, at 1:22 PM, Luis Ibanez wrote:

>
> Hi Lucas,
>
> This exception indicates that the object you
> are connecting is not actually an image.
> The CopyInformation() method perform a dynamic_cast
> from a DataObject pointer into an ImageBase pointer.
>
> dynamic_casting throws exceptions when the pointer
> is not actually the type that you are trying to
> convert to.
>
> Can you please post the typedef declarations that
> your are using for:
>
> 1) The input image type  of the Fast Marching filter
> 2) The output image type of the Fast Marching filter
> 3) The Fast Marcnhing filter itself
>
>
> The current tests of the FastMarching filter
> are passing fine on all platforms. Including
> the Examples in Insight/Examples/Segmentation.
>
>
> Thanks
>
>
>   Luis
>
>
>
> --------------------
> Lucas Lorenzo wrote:
>
>> Hi Luis and Lydia,
>> I've just checked out a CVS copy so I'm using the last version of  
>> FastMarchingImageFilter.
>> When doing an Update on this filter I'm catching this exception:
>> /Exception caught ! fastMarching
>> itk::ExceptionObject (0x11021d0)
>> Location: "Unknown"
>> File: /bin/ITK-1.6.0/include/InsightToolkit/Common/itkImageBase.txx
>> Line: 159
>> Description: itk::ERROR: Image(0x1101f00):  
>> itk::ImageBase::CopyInformation() cannot cast PKN3itk10DataObjectE to  
>> PN3itk9ImageBaseILj2EEE
>> /
>> Could you please give me some feed back on this ?
>> Thanks,
>> Lucas
>> On Feb 19, 2004, at 12:05 AM, Luis Ibanez wrote:
>>     Hi Lucas,
>>     The changes to the FastMarchingImageFilter have
>>     been commited. The output image now uses the
>>     spacing and origin of the input image.
>>     Please let us know if you find any problem.
>>     Thanks
>>     Luis
>>     ------------------------
>>     Lucas Lorenzo wrote:
>>         Hi Luis,
>>         sorry for answering so late.
>>         I've tried what you suggested but I have a run time error  
>> "Abort
>>         trap" when trying to apply the GetOutput() method to my
>>         FastMarchingImageFilter object.
>>         Let me know if there are any other changes we could try.
>>         Thanks,
>>         Lucas
>>         On Feb 11, 2004, at 5:58 AM, Luis Ibanez wrote:
>>             Hi Lucas,
>>             Thanks for pointing this out.
>>             Please try the following:
>>             Edit the file:
>>             Insight/Code/Algorithms/
>>             itkFastMarchingImageFilter.txx
>>             Go to to line : 150
>>             and after the statement
>>                 output->Allocate();
>>             add
>>             output->CopyInformation( this->GetInput() );
>>             Then, go to line : 157
>>             and after the statement
>>                 m_LabelImage->Allocate();
>>             add
>>             m_LabelImage->CopyInformation( this->GetInput() );
>>             This should copy the origin and spacing
>>             of the input image into the output and
>>             label images.
>>             Then recompile your application and try
>>             running it to see if the correct spacing
>>             appears in the file.
>>             Please let us know what you find, so we proceed
>>             to do the same changes in the repository.
>>             Thanks
>>             Luis
>>             ----------------------
>>             Lucas Lorenzo wrote:
>>                 Hi Luis,
>>                 sorry for having such a mess in my code.
>>                 I'm using an application based on
>>                 ITK/Testing/Code/Algorithms/
>>                  
>> itkGeodesicActiveContourShapePriorLevelSetImageFilterTest_2.cxx
>>                 The spacing is being carried through the pipeline with
>>                 no problem, except when arriving to the point when I
>>                 have to generate my initial contour (signed distance
>>                 map) from a seed point using FastMarchingImageFilter.  
>> It
>>                 is the output from this filter the one that has the
>>                 "default" spacing (and I think that this new spacing  
>> is
>>                 carried to the end to the output image) and I can't  
>> find
>>                 any method to set the correct spacing.
>>                 Thanks,
>>                 Lucas
>>                 On Tuesday, February 10, 2004, at 08:38 PM, Luis  
>> Ibanez
>>                 wrote:
>>                 Hi Lucas,
>>                 Why are you setting the spacing on the ImageIO
>>                 object instead of the image itself ?
>>                 You should just carry the spacing through the
>>                 pipeline. Does your input image has an invalid
>>                 spacing ?
>>                 An option in that case is to use the
>>                 ChangeInformationImageFilter
>>                 http://www.itk.org/Insight/Doxygen/html/
>>                 classitk_1_1ChangeInformationImageFilter.html
>>                 This filter carries the data buffer of the
>>                 input image to the output image, and allows
>>                 you to alter the meta-data such as image
>>                 origin and spacing.
>>                 Please don't use this filter for processing
>>                 images of human beings or any other living
>>                 organisms, since chances are that you will
>>                 make somebody operate in a liver instead of
>>                 a lung.
>>                 In the long term the right thing to do is
>>                 to fix the source of your images which is
>>                 where the real spacing information should
>>                 be comming from.
>>                 Regards,
>>                 Luis
>>                 ======================================
>>                 -------------------
>>                 Lucas Lorenzo wrote:
>>                 Hi all,
>>                 I'm trying to write an image to disk in vtk format.
>>                 By default the spacing is set to 1 1 1. I'd like to
>>                 change it so
>>                 I'm doing the following:
>>                 /#include "itkVTKImageIO.h"
>>                 int main( int argc, char * argv[] )
>>                 {
>>                 /* /* Typedefs of components. */*/
>>                 const unsigned int ImageDimension = 2;
>>                 typedef unsigned char BinaryPixelType;
>>                 typedef itk::Image<BinaryPixelType,ImageDimension>
>>                 BinaryImageType;
>>                 /*// read the input image and get the spacing from  
>> it:*/
>>                 typedef itk::VTKImageIO ImageIOType;
>>                 ImageIOType::Pointer IO1 = ImageIOType::New();
>>                 original_reader->SetImageIO(IO1);
>>                 double dx,dy,dz;
>>                 original_reader->Update();
>>                 dx = IO1->GetSpacing(0);
>>                 dy = IO1->GetSpacing(1);
>>                 dz = IO1->GetSpacing(2);
>>                 /*// here I'm omitting when I process the input image
>>                 // write the image to a file but perviously set the  
>> spacing
>>                 */
>>                 binary_writer->SetFileName("out.vtk");
>>                 binary_writer->SetInput(thresholder->GetOutput());
>>                 ImageIOType::Pointer IO2 = ImageIOType::New();
>>                 IO2->SetSpacing(0,dx);
>>                 IO2->SetSpacing(1,dy);
>>                 IO2->SetSpacing(2,dz);
>>                 binary_writer->SetImageIO(IO2);
>>                 try
>>                 {
>>                 binary_writer->Update();
>>                 }
>>                 catch( itk::ExceptionObject & exp )
>>                 {
>>                 std::cerr << "Exception caught ! binary image writer"  
>> <<
>>                 std::endl;
>>                 std::cerr << exp << std::endl;
>>                 return -1;
>>                 }
>>                 return 0;
>>                 }
>>                 /
>>                 When I execute this program I have a "segmentation
>>                 fault" run
>>                 time error.
>>                 If I ommit the line setting the spacing in the z axis  
>> ("/
>>                 IO2->SetSpacing(2,dz); /") the programs executes  
>> without
>>                 crashing but the spacing is not really set, that is,  
>> in the
>>                 header of the output vtk file (out.vtk) you can still  
>> see
>>                 "SPACING 1 1 1.0" instead of "SPACING dx dy 1.0".
>>                 Any clue of what am I doing wrong ?
>>                 Thanks,
>>                 Lucas Lorenzo
>>                 University of Utah
>>                 Nora Eccles Harrison CardioVascular Research and
>>                 Training Institute
>>                 Fellows Room
>>                 95 South 2000 East
>>                 Salt Lake City, UT 84112-5000
>>                 e-mail: lucas at cvrti.utah.edu
>>                 telephone: 801-587-9536
>>                 _______________________________________________
>>                 Insight-users mailing list
>>                 Insight-users at itk.org
>>                 http://www.itk.org/mailman/listinfo/insight-users
>>                 Lucas Lorenzo
>>                 University of Utah
>>                 Nora Eccles Harrison CardioVascular Research and
>>                 Training Institute
>>                 Fellows Room
>>                 95 South 2000 East
>>                 Salt Lake City, UT 84112-5000
>>                 e-mail: lucas at cvrti.utah.edu
>>                 telephone: 801-587-9536
>>         Lucas Lorenzo
>>         University of Utah
>>         Nora Eccles Harrison CardioVascular Research and Training  
>> Institute
>>         Fellows Room
>>         95 South 2000 East
>>         Salt Lake City, UT 84112-5000
>>         e-mail: lucas at cvrti.utah.edu
>>         telephone: 801-587-9536
>>         _______________________________________________
>>         Insight-users mailing list
>>         Insight-users at itk.org
>>         http://www.itk.org/mailman/listinfo/insight-users
>> Lucas Lorenzo
>> University of Utah
>> Nora Eccles Harrison CardioVascular Research and Training Institute
>> Fellows Room
>> 95 South 2000 East
>> Salt Lake City, UT 84112-5000
>> e-mail: lucas at cvrti.utah.edu
>> telephone: 801-587-9536
>
>
>
>
Lucas Lorenzo

University of Utah
Nora Eccles Harrison CardioVascular Research and Training Institute
Fellows Room
95 South 2000 East
Salt Lake City, UT 84112-5000

e-mail:  lucas at cvrti.utah.edu
telephone: 801-587-9536

--Apple-Mail-9-575271918
Content-Transfer-Encoding: 7bit
Content-Type: text/enriched;
	charset=US-ASCII

Hi Luis,


thanks for your answer.


My code has been taken from one testing file:
itkGeodesicActiveContourShapePriorLevelSetImageFilterTest_2.cxx


The typedefs are as follows:


<italic><fontfamily><param>Helvetica Neue</param>	//
*********************************************************************
//

  	/* Typedefs of components. */

  	const unsigned int    ImageDimension = 2;

 	 typedef unsigned short InputPixelType;

	  typedef unsigned char BinaryPixelType;

	  typedef double         PCAPixelType;

	  typedef float         InternalPixelType;


	  typedef itk::Image<<InputPixelType,ImageDimension>
OriginalImageType;

	  typedef itk::Image<<PCAPixelType,ImageDimension> PCAImageType;

	  typedef itk::Image<<InternalPixelType,ImageDimension>
InternalImageType;



	  typedef
itk::GeodesicActiveContourShapePriorLevelSetImageFilter<<InternalImageType,InternalImageType>
FilterType;

	  typedef itk::PCAShapeSignedDistanceFunction<<double,ImageDimension>
ShapeFunctionType;

	  typedef
itk::ShapePriorMAPCostFunction<<InternalImageType,InternalPixelType>
CostFunctionType;

	  typedef itk::AmoebaOptimizer OptimizerType;

	  typedef FilterType::ParametersType ParametersType;


	//create a reader for the image to be segmented:

	  typedef itk::ImageFileReader<< OriginalImageType  > 
OriginalReaderType;

	  OriginalReaderType::Pointer original_reader =
OriginalReaderType::New();

	//
*********************************************************************
//</fontfamily></italic>



The part of the code inherent to this class is the following one:



<italic><fontfamily><param>Helvetica Neue</param>	  /**

	   * Create an initial level.

	   * Use fast marching to create an signed distance from a seed point.

	   */

	  typedef itk::FastMarchingImageFilter<<InternalImageType>
FastMarchingFilterType;

	  FastMarchingFilterType::Pointer fastMarching =
FastMarchingFilterType::New();


	  typedef FastMarchingFilterType::NodeContainer NodeContainer;

	  typedef FastMarchingFilterType::NodeType      NodeType;


	  NodeContainer::Pointer seeds = NodeContainer::New();


	  // The initial contour is a circle centered at {x_ini,y_ini} with
radius

	  // 2.0

	  int x_ini = std::atoi(argv[4]);

	  int y_ini = std::atoi(argv[5]);

	  InternalImageType::IndexType seedPosition;

	  seedPosition[0] = x_ini;

	  seedPosition[1] = y_ini;


	  NodeType node;

	  node.SetValue( -2.0 );

	  node.SetIndex( seedPosition );


	  seeds->Initialize();

	  seeds->InsertElement( 0, node );


	  fastMarching->SetTrialPoints( seeds );

	  fastMarching->SetSpeedConstant( 1.0 );


	  OriginalImageType::RegionType inputRegion =
original_reader->GetOutput()->GetLargestPossibleRegion();

	  OriginalImageType::SizeType imageSize = inputRegion.GetSize();

	  fastMarching->SetOutputSize( imageSize );


	  try

	    {

	      fastMarching->Update();

	   }

	  catch( itk::ExceptionObject & exp )

 	   {

	      std::cerr <<<< "Exception caught ! fastMarching" <<<< std::endl;

	      std::cerr <<<<     exp    <<<< std::endl;

	      return -1;

	    }   

</fontfamily></italic>


	  typedef itk::ImageFileWriter<< InternalImageType  >  FMWriterType;

	  FMWriterType::Pointer FM_writer = FMWriterType::New();

	  FM_writer->SetFileName("fast_marching.vtk");

	  FM_writer->SetInput(fastMarching->GetOutput());

	  FM_writer->Update();

	


What is strange to me is that with the old version of
<italic><fontfamily><param>Helvetica Neue</param>itk::FastMarchingImageFilter</fontfamily></italic>
(the one I was using before checking out the cvs copy) I could run the
program with the only problem of the spacing mentioned in the first
email.


Sorry if this is confusing but I'm trying to make it as clear as
possible.

Thanks,



Lucas


On Feb 24, 2004, at 1:22 PM, Luis Ibanez wrote:


<excerpt>

Hi Lucas,


This exception indicates that the object you

are connecting is not actually an image.

The CopyInformation() method perform a dynamic_cast

from a DataObject pointer into an ImageBase pointer.


dynamic_casting throws exceptions when the pointer

is not actually the type that you are trying to

convert to.


Can you please post the typedef declarations that

your are using for:


1) The input image type  of the Fast Marching filter

2) The output image type of the Fast Marching filter

3) The Fast Marcnhing filter itself



The current tests of the FastMarching filter

are passing fine on all platforms. Including

the Examples in Insight/Examples/Segmentation.



Thanks



  Luis




--------------------

Lucas Lorenzo wrote:


<excerpt>Hi Luis and Lydia,

I've just checked out a CVS copy so I'm using the last version of
FastMarchingImageFilter.

When doing an Update on this filter I'm catching this exception:

/Exception caught ! fastMarching

itk::ExceptionObject (0x11021d0)

Location: "Unknown"

File: /bin/ITK-1.6.0/include/InsightToolkit/Common/itkImageBase.txx

Line: 159

Description: itk::ERROR: Image(0x1101f00):
itk::ImageBase::CopyInformation() cannot cast PKN3itk10DataObjectE to
PN3itk9ImageBaseILj2EEE

/

Could you please give me some feed back on this ?

Thanks,

Lucas

On Feb 19, 2004, at 12:05 AM, Luis Ibanez wrote:

    Hi Lucas,

    The changes to the FastMarchingImageFilter have

    been commited. The output image now uses the

    spacing and origin of the input image.

    Please let us know if you find any problem.

    Thanks

    Luis

    ------------------------

    Lucas Lorenzo wrote:

        Hi Luis,

        sorry for answering so late.

        I've tried what you suggested but I have a run time error
"Abort

        trap" when trying to apply the GetOutput() method to my

        FastMarchingImageFilter object.

        Let me know if there are any other changes we could try.

        Thanks,

        Lucas

        On Feb 11, 2004, at 5:58 AM, Luis Ibanez wrote:

            Hi Lucas,

            Thanks for pointing this out.

            Please try the following:

            Edit the file:

            Insight/Code/Algorithms/

            itkFastMarchingImageFilter.txx

            Go to to line : 150

            and after the statement

                output->Allocate();

            add

            output->CopyInformation( this->GetInput() );

            Then, go to line : 157

            and after the statement

                m_LabelImage->Allocate();

            add

            m_LabelImage->CopyInformation( this->GetInput() );

            This should copy the origin and spacing

            of the input image into the output and

            label images.

            Then recompile your application and try

            running it to see if the correct spacing

            appears in the file.

            Please let us know what you find, so we proceed

            to do the same changes in the repository.

            Thanks

            Luis

            ----------------------

            Lucas Lorenzo wrote:

                Hi Luis,

                sorry for having such a mess in my code.

                I'm using an application based on

                ITK/Testing/Code/Algorithms/

               
itkGeodesicActiveContourShapePriorLevelSetImageFilterTest_2.cxx

                The spacing is being carried through the pipeline with

                no problem, except when arriving to the point when I

                have to generate my initial contour (signed distance

                map) from a seed point using FastMarchingImageFilter.
It

                is the output from this filter the one that has the

                "default" spacing (and I think that this new spacing is

                carried to the end to the output image) and I can't
find

                any method to set the correct spacing.

                Thanks,

                Lucas

                On Tuesday, February 10, 2004, at 08:38 PM, Luis Ibanez

                wrote:

                Hi Lucas,

                Why are you setting the spacing on the ImageIO

                object instead of the image itself ?

                You should just carry the spacing through the

                pipeline. Does your input image has an invalid

                spacing ?

                An option in that case is to use the

                ChangeInformationImageFilter

                http://www.itk.org/Insight/Doxygen/html/

                classitk_1_1ChangeInformationImageFilter.html

                This filter carries the data buffer of the

                input image to the output image, and allows

                you to alter the meta-data such as image

                origin and spacing.

                Please don't use this filter for processing

                images of human beings or any other living

                organisms, since chances are that you will

                make somebody operate in a liver instead of

                a lung.

                In the long term the right thing to do is

                to fix the source of your images which is

                where the real spacing information should

                be comming from.

                Regards,

                Luis

                ======================================

                -------------------

                Lucas Lorenzo wrote:

                Hi all,

                I'm trying to write an image to disk in vtk format.

                By default the spacing is set to 1 1 1. I'd like to

                change it so

                I'm doing the following:

                /#include "itkVTKImageIO.h"

                int main( int argc, char * argv[] )

                {

                /* /* Typedefs of components. */*/

                const unsigned int ImageDimension = 2;

                typedef unsigned char BinaryPixelType;

                typedef itk::Image<<BinaryPixelType,ImageDimension>

                BinaryImageType;

                /*// read the input image and get the spacing from
it:*/

                typedef itk::VTKImageIO ImageIOType;

                ImageIOType::Pointer IO1 = ImageIOType::New();

                original_reader->SetImageIO(IO1);

                double dx,dy,dz;

                original_reader->Update();

                dx = IO1->GetSpacing(0);

                dy = IO1->GetSpacing(1);

                dz = IO1->GetSpacing(2);

                /*// here I'm omitting when I process the input image

                // write the image to a file but perviously set the
spacing

                */

                binary_writer->SetFileName("out.vtk");

                binary_writer->SetInput(thresholder->GetOutput());

                ImageIOType::Pointer IO2 = ImageIOType::New();

                IO2->SetSpacing(0,dx);

                IO2->SetSpacing(1,dy);

                IO2->SetSpacing(2,dz);

                binary_writer->SetImageIO(IO2);

                try

                {

                binary_writer->Update();

                }

                catch( itk::ExceptionObject & exp )

                {

                std::cerr <<<< "Exception caught ! binary image
writer" <<<<

                std::endl;

                std::cerr <<<< exp <<<< std::endl;

                return -1;

                }

                return 0;

                }

                /

                When I execute this program I have a "segmentation

                fault" run

                time error.

                If I ommit the line setting the spacing in the z axis
("/

                IO2->SetSpacing(2,dz); /") the programs executes
without

                crashing but the spacing is not really set, that is,
in the

                header of the output vtk file (out.vtk) you can still
see

                "SPACING 1 1 1.0" instead of "SPACING dx dy 1.0".

                Any clue of what am I doing wrong ?

                Thanks,

                Lucas Lorenzo

                University of Utah

                Nora Eccles Harrison CardioVascular Research and

                Training Institute

                Fellows Room

                95 South 2000 East

                Salt Lake City, UT 84112-5000

                e-mail: lucas at cvrti.utah.edu

                telephone: 801-587-9536

                _______________________________________________

                Insight-users mailing list

                Insight-users at itk.org

                http://www.itk.org/mailman/listinfo/insight-users

                Lucas Lorenzo

                University of Utah

                Nora Eccles Harrison CardioVascular Research and

                Training Institute

                Fellows Room

                95 South 2000 East

                Salt Lake City, UT 84112-5000

                e-mail: lucas at cvrti.utah.edu

                telephone: 801-587-9536

        Lucas Lorenzo

        University of Utah

        Nora Eccles Harrison CardioVascular Research and Training
Institute

        Fellows Room

        95 South 2000 East

        Salt Lake City, UT 84112-5000

        e-mail: lucas at cvrti.utah.edu

        telephone: 801-587-9536

        _______________________________________________

        Insight-users mailing list

        Insight-users at itk.org

        http://www.itk.org/mailman/listinfo/insight-users

Lucas Lorenzo

University of Utah

Nora Eccles Harrison CardioVascular Research and Training Institute

Fellows Room

95 South 2000 East

Salt Lake City, UT 84112-5000

e-mail: lucas at cvrti.utah.edu

telephone: 801-587-9536

</excerpt>




</excerpt>Lucas Lorenzo


University of Utah

Nora Eccles Harrison CardioVascular Research and Training Institute

Fellows Room

95 South 2000 East

Salt Lake City, UT 84112-5000


e-mail:  lucas at cvrti.utah.edu

telephone: 801-587-9536


--Apple-Mail-9-575271918--