[Insight-users] Problems with bilateral filtering
Stuart Golodetz
itk at gxstudios.net
Wed Jun 23 06:03:35 EDT 2010
Ah ok - thanks. Would you otherwise expect the 2D and 3D versions to
produce exactly the same output? (If so, I might switch to using the 2D
version when the volume I'm smoothing is essentially 2D.)
Cheers,
Stu
Bill Lorensen wrote:
> Yes, boundary checking slows it down.
>
> On Tue, Jun 22, 2010 at 3:18 PM, Stuart Golodetz <itk at gxstudios.net> wrote:
>
>> Stuart Golodetz wrote:
>>
>>> 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
>>>
>> A separate (but related) question I have is: why would 3D anisotropic
>> diffusion filtering on a 512x512x1 volume be substantially slower than 2D
>> anisotropic diffusion filtering on a 512x512 slice? I know the time step has
>> to be smaller for the 3D version, but I recall it still being substantially
>> slower than before. However, 3D anisotropic diffusion filtering on a larger
>> volume e.g. 512x512x20 wasn't all that slow considering what it was doing. I
>> was wondering whether boundary checking might be slowing it down? Or is
>> there actually some other reason I haven't thought of?
>>
>> Cheers,
>> Stu
>> _____________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.html
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-users
More information about the Insight-users
mailing list