[ITK-users] Anti-alias filter

Bill Lorensen bill.lorensen at gmail.com
Mon Aug 11 15:22:44 EDT 2014


How are you extracting the final isosurface?

On Mon, Aug 11, 2014 at 3:22 PM, Bill Lorensen <bill.lorensen at gmail.com> wrote:
> If you change
>  typedef  short PixelType;
> to
>  typedef  double PixelType;
>
> do the results change.
>
>
> On Mon, Aug 11, 2014 at 2:47 PM, Tobias Gass <gass at vision.ee.ethz.ch> wrote:
>>
>>> Can you post your code. The results do not look correct.
>>
>>
>> Sure. The {write,read}Image functions are just convenient wrappers for the
>> respective ITK tools.
>>
>>
>> #include <stdio.h>
>>
>> #include <iostream>
>>
>> #include "argstream.h"
>>
>> #include "ImageUtils.h"
>>
>> #include "itkAntiAliasBinaryImageFilter.h"
>>
>> using namespace std;
>>
>> using namespace itk;
>>
>>
>>
>>
>> int main(int argc, char ** argv)
>>
>> {
>>
>>
>> feenableexcept(FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW);
>>
>>     typedef  short PixelType;
>>
>>     typedef double OutputPixelType;
>>
>>     const unsigned int D=3;
>>
>>     typedef Image<PixelType,D> ImageType;
>>
>>
>>
>>     typedef ImageType::Pointer ImagePointerType;
>>
>>
>>
>>     typedef Image<OutputPixelType,D> OutputImageType;
>>
>>     typedef OutputImageType::Pointer OutputImagePointerType;
>>
>>
>>
>>     argstream * as=new argstream(argc,argv);
>>
>>     string inFile, outFile;
>>
>>     double thresh=0.0;
>>
>>     (*as) >> parameter ("in", inFile, " filename...", true);
>>
>>     (*as) >> parameter ("out", outFile, " filename...", true);
>>
>>
>>     (*as) >> help();
>>
>>     as->defaultErrorHandling();
>>
>>
>>     ImagePointerType img = ImageUtils<ImageType>::readImage(inFile);
>>
>>
>>     typedef itk::AntiAliasBinaryImageFilter <ImageType, OutputImageType>
>>
>>         AntiAliasBinaryImageFilterType;
>>
>>
>>
>>     AntiAliasBinaryImageFilterType::Pointer antiAliasFilter
>>
>>         = AntiAliasBinaryImageFilterType::New ();
>>
>>     antiAliasFilter->SetInput(img);
>>
>>     antiAliasFilter->SetNumberOfIterations(5);
>>
>>     antiAliasFilter->SetMaximumRMSError(0.02);
>>
>>
>>     antiAliasFilter->Update();
>>
>>
>>   // For increased code coverage.  Does nothing.
>>
>>   antiAliasFilter->GetMaximumRMSError();
>>
>>
>>
>>
>>   antiAliasFilter->Update();
>>
>>
>>   std::cout << "Maximum RMS change value threshold was: 0.02 " << std::endl;
>>
>>   std::cout << "Last RMS change value was: " <<
>> antiAliasFilter->GetRMSChange() << std::endl;
>>
>>
>>   std::cout<< antiAliasFilter->GetElapsedIterations() <<endl;
>>
>>
>>   std::cout<<antiAliasFilter->GetLowerBinaryValue()<<" "<<
>> antiAliasFilter->GetUpperBinaryValue()<<std::endl;
>>
>>
>>     OutputImagePointerType out=antiAliasFilter->GetOutput();
>>
>>
>>     ImageUtils<OutputImageType>::writeImage(outFile,out);
>>
>>
>> return 1;
>>
>> }
>>
>>
>> I tried different values for maxIter (1,2,3,4,5,10,100,1000) and maxRMSError
>> (0.02 0.07 0.08 0.8), and the best visual results are achieved after one
>> iteration where RMSE changes by about 0.08. This increases for all following
>> iterations, which have an RMSE-change of about 0.25 for all number of
>> iterations tested. All this is using ITK 4.5 pulled from the GIT repository
>> a while ago, running on an intel i7 on Debian.
>>
>> Thanks a lot!
>> Tobias
>>
>>>
>>>
>>> On Mon, Aug 11, 2014 at 12:18 PM, Tobias Gass <gass at vision.ee.ethz.ch>
>>> wrote:
>>> > Dear all,
>>> >
>>> > I'm having problems using the anti-alias filter, which I want to use in
>>> > order to smooth a binary segmentation volume. I'm using essentially the
>>> > example code from the repository, which for my input file seems to start
>>> > oscillating after 2 iterations, leading to weird 'pointy' artifacts on
>>> > the
>>> > surface as can be seen from the attached screenshot (AA filter output is
>>> > on
>>> > the left, input on the right).
>>> >
>>> > Is there any parameter to set/implement which could improve the behavior
>>> > of
>>> > this filter? I'm assuming that my input is reasonable, or is this
>>> > something
>>> > the filter is expected to have problems with? It is notable that such
>>> > errors
>>> > seem to mainly appear in 'flat' regions of the volume, and are not
>>> > apparent
>>> > in the curved shaft of the bone.
>>> >
>>> > Any help, or pointers to further resources are appreciated,
>>> > thanks,
>>> > Tobias
>>> >
>>> > _____________________________________
>>> > 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.php
>>> >
>>> > 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://public.kitware.com/mailman/listinfo/insight-users
>>> >
>>>
>>>
>>>
>>> --
>>> Unpaid intern in BillsBasement at noware dot com
>>
>>
>
>
>
> --
> Unpaid intern in BillsBasement at noware dot com



-- 
Unpaid intern in BillsBasement at noware dot com


More information about the Insight-users mailing list