[Insight-users] Problems with bilateral filtering
Stuart Golodetz
itk at gxstudios.net
Tue Jun 22 15:14:32 EDT 2010
Hi,
I think I may be having some trouble using BilateralImageFilter
appropriately and just thought I should check. Essentially, I'm trying
it out as a replacement to multiple iterations of anisotropic diffusion
filtering for edge-preserving smoothing of my input image, using the
following code:
###
...
typedef itk::BilateralImageFilter<RealImage,RealImage> BilateralFilter;
BilateralFilter::Pointer bilateralFilter = BilateralFilter::New();
bilateralFilter->SetInput(realImage);
double domainSigmas[] = {6.0,6.0,6.0}; // test values (not connected
to the GUI yet)
double rangeSigma = 5.0; // ditto
bilateralFilter->SetDomainSigma(domainSigmas);
bilateralFilter->SetRangeSigma(rangeSigma);
bilateralFilter->Update();
realImage = bilateralFilter->GetOutput();
if(is_aborted()) return;
increment_progress();
...
###
I was hoping it was going to be faster than the anisotropic filtering
I'm currently doing, as that takes about a second per iteration per
512x512 slice (i.e. 30 seconds per slice for 30 iterations, which is not
ideal):
###
...
// Smooth this real image using anisotropic diffusion filtering.
typedef
itk::GradientAnisotropicDiffusionImageFilter<RealImage,RealImage> ADFilter;
for(int i=0; i<m_segmentationOptions.adfIterations; ++i)
{
ADFilter::Pointer adFilter = ADFilter::New();
adFilter->SetInput(realImage);
adFilter->SetConductanceParameter(1.0); // test value (not
connected to the GUI yet)
adFilter->SetNumberOfIterations(1); // done this way so that I can
update the progress after each iteration
adFilter->SetTimeStep(0.0625);
adFilter->Update();
realImage = adFilter->GetOutput();
if(is_aborted()) return;
increment_progress();
}
...
###
Unfortunately, it takes 3 minutes for a 512x512 slice, whilst producing
"worse" results (in my context) than the anisotropic diffusion filtering
I was doing before. So I have three questions:
1) Would you expect bilateral image filtering to take this long? If not,
do you have any idea what I might be doing wrong please? (If not, is
there anything I can investigate to try and track down the problem myself?)
2) Are the domain and range parameters having any effect on this, and
how should I go about setting them appropriately please?
3) Am I barking up the wrong tree by trying to use bilateral image
filtering as a drop-in alternative to anisotropic diffusion filtering
like this?
Cheers,
Stu
More information about the Insight-users
mailing list