[Insight-users] get negative index by----TransformPhysicalPointToIndex
Baoyun Li
baoyun_li123 at yahoo.com
Wed Feb 25 17:10:37 EST 2009
Luis:
Thanks.
Can I put negative index as the seed points for region growing algorithm?
What I did now it is to force the negtive index to be positive? Big mistake or ok?
Thanks
Baoyun
________________________________
From: Luis Ibanez <luis.ibanez at kitware.com>
To: Baoyun Li <baoyun_li123 at yahoo.com>
Cc: insight-users at itk.org
Sent: Wednesday, February 25, 2009 4:00:21 PM
Subject: Re: get negative index by----TransformPhysicalPointToIndex
Hi Baoyn,
It is perfectly valid to get Indices with negative components when
using TransformPhysicalPointToIndex().
It is *your* responsibility to test for the indices to be inside of the
image before you use them to access data.
This can be done with
the IsInside() method of the ImageRegion class, and/or with
the IsInsideBuffer() method of the Interpolators.
This being said,
It is not a bad idea to double check your computation, to
make sure that there is not a bug in the conversion.
Regards,
Luis
----------------------------------------------------------------------------------
On Wed, Feb 25, 2009 at 4:20 PM, Baoyun Li <baoyun_li123 at yahoo.com> wrote:
Dear Luis and All:
I am trying to put some seed point for confidence level set segmenation. I give physical points:
point[0]=77; point[1]=190;point[2]=90;
and using TransformPhysicalPointToIndex( point, index ) to get index; my image resolution is [1.3 1.3 1.3]
the index I got is 58 -143 67. The y index is negative.
I checked the image direction in my template function, it is 1 0 0; 0 -1 0; 0 0 1.. The direction is consistent with the image I read in the main program, and the resolution of the image is also correct
It is clear 0 -1 0 of y axis direction cosine gives me the negative index. Can somebody teach me to solve this problem?
Best regards and thanks a lot.
Baoyun
Below is my template function, InputerFilter is derived from CasterImageFilter<short to float>, InternalFilter is from another CasterImageFilter<float to short int>
Basical, the image direction and resolution are all correct.
template <unsigned int Dim,class TInputFilter, class TInternalFilter, class TScale, class TDimension>
void GradientConfidence( TInputFilter* InputFilter, TInternalFilter* InternalFilter, TScale scale)
{
typedef typename TInputFilter::InputImageType OutputImageType;
typedef typename TInternalFilter::InputImageType InternalImageType;
typedef typename TInternalFilter::OutputImageType InputImageType;
//typedef TInputFilter InputImageType;
typedef itk::ImageFileWriter< InternalImageType > WriterType1;
typename WriterType1::Pointer writer1=WriterType1::New();
typedef itk::CastImageFilter< InputImageType,InternalImageType> CastingFilterType1;
typename CastingFilterType1::Pointer caster11 = CastingFilterType1::New();
typedef itk::CastImageFilter< InternalImageType,OutputImageType> CastingFilterType2;
typename CastingFilterType1::Pointer caster21 = CastingFilterType1::New();
typedef itk::RecursiveGaussianImageFilter<
InternalImageType,
InternalImageType > GaussianFilterType;
typedef itk::GradientMagnitudeRecursiveGaussianImageFilter<
InternalImageType,
InternalImageType > GradientFilterType;
typename GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New();
const double sigma =(float)1.0;
// gradientMagnitude-SetSpacing( InputFilter->GetOutput()->GetSpacing() );
gradientMagnitude->SetSigma( sigma );
gradientMagnitude->SetInput(InputFilter->GetOutput());
writer1->SetFileName("../data/gradient.hdr");
writer1->SetInput(gradientMagnitude->GetOutput());
InternalFilter->SetInput(gradientMagnitude->GetOutput());
gradientMagnitude->Update();
//to set seed points
typedef itk::Point< double, InternalImageType::ImageDimension > InternalPointType;
InternalPointType point;
point[0]=77; point[1]=190;point[2]=90;
typedef itk::Index< InternalImageType::ImageDimension > IndexType;
IndexType index;
gradientMagnitude->GetOutput()->TransformPhysicalPointToIndex( point, index );
std::cout << "index" << index << std::endl;
std::cout << "gradient image spacing"<<gradientMagnitude->GetOutput()->GetSpacing() << std::endl;
std::cout << "function input spacing"<<InputFilter->GetOutput()->GetSpacing() << std::endl;
std::cout << "gradient image direction"<<gradientMagnitude->GetOutput()->GetDirection() << std::endl;
std::cout << "function input direction"<<InputFilter->GetOutput()->GetDirection() << std::endl;
//
// // InternalFilter->SetInput(InputFilter->GetOutput());
//
try
{
writer1->Update();
}
catch( itk::ExceptionObject & excep )
{
std::cerr << "Exception caught !" << std::endl;
std::cerr << excep << std::endl;
}
std::cout << InternalFilter->GetOutput()->GetSpacing() << std::endl;
};
#endif
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20090225/2ef8932f/attachment-0001.htm>
More information about the Insight-users
mailing list