[Insight-users] Gradient time issues

Miller, James V (Research) millerjv at crd.ge.com
Fri Oct 29 12:55:36 EDT 2004


Neilson, 

Get to get better answers, you would need to use a better 
gradient "function". The CentralDifferenceImageFunction evaluates
the gradient using digital derivatives. No smoothing of the data
is performed, so any noise in the data affects the gradients 
calculated by the CentralDifferenceImageFunction.  

Try the GaussianDerivativeImageFunction, instead of the
CentralDifferenceImageFunction. The GaussianDerivativeImageFunction
has a parameter "sigma" to control the smoothing of the image
during the gradient calculation. This should give results similar
to using the RecusiveGaussianGradientImageFilter.

Jim




-----Original Message-----
From: N.E. Mackenzie Mackay [mailto:9nem at qlink.queensu.ca]
Sent: Friday, October 29, 2004 12:38 PM
To: Miller, James V (Research)
Cc: 'insight-users at itk.org'
Subject: Re: [Insight-users] Gradient time issues


Hey James,

	I just did the changes you suggested.  The registration seems to be 
running but very differently.  The results are much worse.  ( If you 
like I can send you an ouput of the derivative at each iteration using 
the CentralDifferenceImageFunction and using the 
GradientRecursiveGaussianImageFilter.

What I was hoping for is to get the same results pixel by pixel as the 
GradientRecursiveGaussianImageFilter.

Right now I replaced the

		m_GradientImage->GetPixel( mappedIndex );

	to
		
		m_FixedImageGradientCalculator->EvaluateAtIndex( mappedIndex
)

		(m_FixedImageGradientCalculator is a object of the 
CentralDifferenceImageFunction)

Is there a way that I could manipulate that value to gave me the same 
value as "m_GradientImage->GetPixel( mappedIndex );"?

I don't mind doing some lazy calculations at runtime.  There is no way 
it would be slower then pre-processing.

	Just to give you an idea: My image is 640 X 480 X 5 = 1,536,000
pixels 
.  I only use about 50 pixels per iteration.  So I would need about 
1,536,000 / 50 = 30,720 iterations to have the same slow down as the 
pre- processing.  This is just an estimate.

Oh, and yes the time improvements as of now are great.  Much much 
faster, just not the same result :P

Thanks again,
Neilson







On Oct 28, 2004, at 4:04 PM, Miller, James V (Research) wrote:

> Neilson,
>
> If you just want to try this out, comment out the code in
> itkImageToImageMetric that actually calculates the gradient.
>
> Then in the metric that you using, look for the code that uses the 
> gradient
> value.  For instance, in the MeanSquaresImageToImageMetric, there is a 
> line
> of code that says:
>
> 	m_GradientImage->GetPixel( mappedIndex );
>
> Replace this line with a line of code that uses a
> CentralDifferenceImageFunction.  The DemonsRegistrationFunction uses 
> this
> function to compute gradients on a point by point basis.  You can look 
> at
> the DemonsRegistrationFunction to see how to use the
> CentralDifferenceImageFunction.
>
> Let us know the speed test results.  If it looks promising, we might 
> want to
> add a "lazy" gradient calculation to the metrics.
>
> Jim
>
>
>
> -----Original Message-----
> From: N.E. Mackenzie Mackay [mailto:9nem at qlink.queensu.ca]
> Sent: Thursday, October 28, 2004 12:30 PM
> To: 'insight-users at itk.org'
> Subject: [Insight-users] Gradient time issues
>
>
> Hi,
>
> 	I am having some time issues with my current registration method.
> Not
> in the registration it self but with the pre processing.
>
> 	The Gradient Recursive Gaussian Image filter seems to be taking
> quite
> a long time to pre-calculate a gradient field.  As of now my
> registration method only needs a few pixels from my image at a time.
> (About 5% of the total number of pixels)  I want to see if calculating
> the gradient on the fly would produce faster results.  The only problem
> is I am not sure of how to do this.
>
> 	Ideally I would like a method that would accept a index or pixel
> location in the image and return a gradient value.
>
> 		e.g.  gradientValue = gradientCalculator->GetGradient(
> pixelLocation
> );
>
> 	This is very similar to how I use the out out of the
> GradientRecursiveGaussianImageFilter.  The only difference is I don't
> want the preprocessing because it take much to long.
>
> Thank you,
> Neilson
>
> _______________________________________________
> 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