[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