<div dir="ltr">I will try that tomorrow morning (living in GMT+1). I used paraview to extract the isosurface, but also looked at the output of the AA-filter directly (which looked fuzzy). I can also post an image of that tomorrow.<div>
<br></div><div>Thanks for your help!</div><div>Tobias</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-08-11 21:22 GMT+02:00 Bill Lorensen <span dir="ltr"><<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">How are you extracting the final isosurface?<br>
<div class="HOEnZb"><div class="h5"><br>
On Mon, Aug 11, 2014 at 3:22 PM, Bill Lorensen <<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>> wrote:<br>
> If you change<br>
>  typedef  short PixelType;<br>
> to<br>
>  typedef  double PixelType;<br>
><br>
> do the results change.<br>
><br>
><br>
> On Mon, Aug 11, 2014 at 2:47 PM, Tobias Gass <<a href="mailto:gass@vision.ee.ethz.ch">gass@vision.ee.ethz.ch</a>> wrote:<br>
>><br>
>>> Can you post your code. The results do not look correct.<br>
>><br>
>><br>
>> Sure. The {write,read}Image functions are just convenient wrappers for the<br>
>> respective ITK tools.<br>
>><br>
>><br>
>> #include <stdio.h><br>
>><br>
>> #include <iostream><br>
>><br>
>> #include "argstream.h"<br>
>><br>
>> #include "ImageUtils.h"<br>
>><br>
>> #include "itkAntiAliasBinaryImageFilter.h"<br>
>><br>
>> using namespace std;<br>
>><br>
>> using namespace itk;<br>
>><br>
>><br>
>><br>
>><br>
>> int main(int argc, char ** argv)<br>
>><br>
>> {<br>
>><br>
>><br>
>> feenableexcept(FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW);<br>
>><br>
>>     typedef  short PixelType;<br>
>><br>
>>     typedef double OutputPixelType;<br>
>><br>
>>     const unsigned int D=3;<br>
>><br>
>>     typedef Image<PixelType,D> ImageType;<br>
>><br>
>><br>
>><br>
>>     typedef ImageType::Pointer ImagePointerType;<br>
>><br>
>><br>
>><br>
>>     typedef Image<OutputPixelType,D> OutputImageType;<br>
>><br>
>>     typedef OutputImageType::Pointer OutputImagePointerType;<br>
>><br>
>><br>
>><br>
>>     argstream * as=new argstream(argc,argv);<br>
>><br>
>>     string inFile, outFile;<br>
>><br>
>>     double thresh=0.0;<br>
>><br>
>>     (*as) >> parameter ("in", inFile, " filename...", true);<br>
>><br>
>>     (*as) >> parameter ("out", outFile, " filename...", true);<br>
>><br>
>><br>
>>     (*as) >> help();<br>
>><br>
>>     as->defaultErrorHandling();<br>
>><br>
>><br>
>>     ImagePointerType img = ImageUtils<ImageType>::readImage(inFile);<br>
>><br>
>><br>
>>     typedef itk::AntiAliasBinaryImageFilter <ImageType, OutputImageType><br>
>><br>
>>         AntiAliasBinaryImageFilterType;<br>
>><br>
>><br>
>><br>
>>     AntiAliasBinaryImageFilterType::Pointer antiAliasFilter<br>
>><br>
>>         = AntiAliasBinaryImageFilterType::New ();<br>
>><br>
>>     antiAliasFilter->SetInput(img);<br>
>><br>
>>     antiAliasFilter->SetNumberOfIterations(5);<br>
>><br>
>>     antiAliasFilter->SetMaximumRMSError(0.02);<br>
>><br>
>><br>
>>     antiAliasFilter->Update();<br>
>><br>
>><br>
>>   // For increased code coverage.  Does nothing.<br>
>><br>
>>   antiAliasFilter->GetMaximumRMSError();<br>
>><br>
>><br>
>><br>
>><br>
>>   antiAliasFilter->Update();<br>
>><br>
>><br>
>>   std::cout << "Maximum RMS change value threshold was: 0.02 " << std::endl;<br>
>><br>
>>   std::cout << "Last RMS change value was: " <<<br>
>> antiAliasFilter->GetRMSChange() << std::endl;<br>
>><br>
>><br>
>>   std::cout<< antiAliasFilter->GetElapsedIterations() <<endl;<br>
>><br>
>><br>
>>   std::cout<<antiAliasFilter->GetLowerBinaryValue()<<" "<<<br>
>> antiAliasFilter->GetUpperBinaryValue()<<std::endl;<br>
>><br>
>><br>
>>     OutputImagePointerType out=antiAliasFilter->GetOutput();<br>
>><br>
>><br>
>>     ImageUtils<OutputImageType>::writeImage(outFile,out);<br>
>><br>
>><br>
>> return 1;<br>
>><br>
>> }<br>
>><br>
>><br>
>> I tried different values for maxIter (1,2,3,4,5,10,100,1000) and maxRMSError<br>
>> (0.02 0.07 0.08 0.8), and the best visual results are achieved after one<br>
>> iteration where RMSE changes by about 0.08. This increases for all following<br>
>> iterations, which have an RMSE-change of about 0.25 for all number of<br>
>> iterations tested. All this is using ITK 4.5 pulled from the GIT repository<br>
>> a while ago, running on an intel i7 on Debian.<br>
>><br>
>> Thanks a lot!<br>
>> Tobias<br>
>><br>
>>><br>
>>><br>
>>> On Mon, Aug 11, 2014 at 12:18 PM, Tobias Gass <<a href="mailto:gass@vision.ee.ethz.ch">gass@vision.ee.ethz.ch</a>><br>
>>> wrote:<br>
>>> > Dear all,<br>
>>> ><br>
>>> > I'm having problems using the anti-alias filter, which I want to use in<br>
>>> > order to smooth a binary segmentation volume. I'm using essentially the<br>
>>> > example code from the repository, which for my input file seems to start<br>
>>> > oscillating after 2 iterations, leading to weird 'pointy' artifacts on<br>
>>> > the<br>
>>> > surface as can be seen from the attached screenshot (AA filter output is<br>
>>> > on<br>
>>> > the left, input on the right).<br>
>>> ><br>
>>> > Is there any parameter to set/implement which could improve the behavior<br>
>>> > of<br>
>>> > this filter? I'm assuming that my input is reasonable, or is this<br>
>>> > something<br>
>>> > the filter is expected to have problems with? It is notable that such<br>
>>> > errors<br>
>>> > seem to mainly appear in 'flat' regions of the volume, and are not<br>
>>> > apparent<br>
>>> > in the curved shaft of the bone.<br>
>>> ><br>
>>> > Any help, or pointers to further resources are appreciated,<br>
>>> > thanks,<br>
>>> > Tobias<br>
>>> ><br>
>>> > _____________________________________<br>
>>> > Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
>>> ><br>
>>> > Visit other Kitware open-source projects at<br>
>>> > <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
>>> ><br>
>>> > Kitware offers ITK Training Courses, for more information visit:<br>
>>> > <a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
>>> ><br>
>>> > Please keep messages on-topic and check the ITK FAQ at:<br>
>>> > <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
>>> ><br>
>>> > Follow this link to subscribe/unsubscribe:<br>
>>> > <a href="http://public.kitware.com/mailman/listinfo/insight-users" target="_blank">http://public.kitware.com/mailman/listinfo/insight-users</a><br>
>>> ><br>
>>><br>
>>><br>
>>><br>
>>> --<br>
>>> Unpaid intern in BillsBasement at noware dot com<br>
>><br>
>><br>
><br>
><br>
><br>
> --<br>
> Unpaid intern in BillsBasement at noware dot com<br>
<br>
<br>
<br>
--<br>
Unpaid intern in BillsBasement at noware dot com<br>
</div></div></blockquote></div><br></div>