<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Paul,<div><br></div><div>Thanks for the information.</div><div><br></div><div>What sigma and alpha parameters do you use for the GaussianInterpolator? The frequently used 1*spacing for sigma, and even .8*spacing seem to give a rather soft image after sampling. Do very the parameters based on you task?</div><div><br></div><div>I will go ahead and make a patch which changes the default boundary condition for the interpolator.</div><div><br></div><div>Thanks,</div><div>Brad</div><div><br></div><div><br><div><div>On Dec 19, 2012, at 3:55 PM, Paul Yushkevich &lt;<a href="mailto:pauly2@mail.med.upenn.edu">pauly2@mail.med.upenn.edu</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><div dir="ltr">Hi Brad,<div><br></div><div style="">I think you are right, the default BC should be changed to use the zero flux. And probably the filter should be changed to integrate the kernel. I haven't actually been using it much myself, the underlying problem with the sinc filter is that it causes ringing at the edges, and these days I tend to use a Gaussian filter when linear/bspline are not sufficient.</div>

<div style=""><br></div><div style="">Paul.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Dec 19, 2012 at 10:34 AM, Nicholas Tustison <span dir="ltr">&lt;<a href="mailto:ntustison@gmail.com" target="_blank">ntustison@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I love that you can just run testing like that with only a couple lines.<br>
That's really cool.<br>
<br>
Unfortunately, I don't know the answer to your question but Paul might.<br>
I'm cc'ing him on this and hopefully he'll see it and be able to answer.<br>
<br>
Nick<br>
<br>
<br>
On Dec 19, 2012, at 9:22 AM, Bradley Lowekamp &lt;<a href="mailto:blowekamp@mail.nih.gov">blowekamp@mail.nih.gov</a>&gt; wrote:<br>
<br>
&gt; Hello Nick,<br>
&gt;<br>
&gt; Thanks for getting back to me on this.<br>
&gt;<br>
&gt; I also ran the Sinc interpolators on a constant image, and I got a larger error than expected. The following Python code was run with the ZeroFlux boundary condition and the radius template parameter of 5:<br>
&gt;<br>
&gt; # Create a image of all ones<br>
&gt; img = sitk.Image( 10, 10 , sitk.sitkFloat64 )<br>
&gt; img += 1<br>
<div class="im">&gt;<br>
&gt; iterps = [sitk.sitkNearestNeighbor,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkLinear,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkBSpline,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkGaussian,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkHammingWindowedSinc,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkCosineWindowedSinc,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkWelchWindowedSinc,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkLanczosWindowedSinc,<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkBlackmanWindowedSinc]<br>
&gt;<br>
</div>&gt; for i in iterps:<br>
&gt; &nbsp; &nbsp;eimg= sitk.Expand( img, [10,10], i )<br>
&gt; &nbsp; &nbsp;print "RMS:",(sum( (1-eimg)**2)/len(eimg))**.5, "Abs:", max(sitk.Abs(1-eimg))<br>
&gt;<br>
&gt; RMS: 0.0 Abs: 0.0<br>
&gt; RMS: 0.0 Abs: 0.0<br>
&gt; RMS: 1.90178968104e-16 Abs: 5.55111512313e-16<br>
&gt; RMS: 0.0 Abs: 0.0<br>
&gt; RMS: 0.00519432546396 Abs: 0.007170554427<br>
&gt; RMS: 0.00111584107245 Abs: 0.00190357704047<br>
&gt; RMS: 0.000697067283848 Abs: 0.00118879124085<br>
&gt; RMS: 0.00143647177089 Abs: 0.00245097611656<br>
&gt; RMS: 0.000491351024756 Abs: 0.000833429218405<br>
&gt;<br>
&gt; Skimming through the code it looks like the kernel is point sampled and not integrated over the pixel. I wonder if that is the issue.<br>
&gt;<br>
&gt; Brad<br>
<div class="HOEnZb"><div class="h5">&gt;<br>
&gt; On Dec 18, 2012, at 3:03 PM, Nicholas Tustison &lt;<a href="mailto:ntustison@gmail.com">ntustison@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt; Hi Brad,<br>
&gt;&gt;<br>
&gt;&gt; Yeah, we just use the default. &nbsp;We've probably never noticed it since,<br>
&gt;&gt; as you say, we typically are interpolating a blob in the middle of a black<br>
&gt;&gt; background.<br>
&gt;&gt;<br>
&gt;&gt; I think Paul Yushkevich wrote those windowed sinc interpolators. &nbsp;You<br>
&gt;&gt; might want to ask him why they're the default.<br>
&gt;&gt;<br>
&gt;&gt; Nick<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Dec 18, 2012, at 1:09 PM, Bradley Lowekamp &lt;<a href="mailto:blowekamp@mail.nih.gov">blowekamp@mail.nih.gov</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Hello,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; As I am finally integrating the different interpolators into SimpleITK. I am giving them a close look over.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The set of WindowSincInterpolateImageFunctions takes a Boundary condition template parameter. This defaults to ConstantBoundaryCondition. That is by default the pixels are zero outside the image, and they are not zero flux. This results in quite a bit of ringing and fading around my test images. It seems just wrong.<br>


&gt;&gt;&gt;<br>
&gt;&gt;&gt; I can easily specify this parameter as the ZeroFluxNeumannBoundaryCondition (I don't think we have a mirror/reflective boundary, which is another possibility), and things look quite good and as I expect the output to be. I was curious as to what others were doing so I perused BRAINS and ANTS, grepping for the sinc interpolator. And to my surprise they are using the default!<br>


&gt;&gt;&gt;<br>
&gt;&gt;&gt; Is there a reason that this default is preferred? Or is it that I am not processing a single blob in the center of a black image (aka a brain)?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Also in terms of consistency across the interpolators, this is the only one which takes a boundary condition template parameters. The other interpolators appear to behave sensibly, and exhibit a zero-flux type boundary condition. I think the default for this may need to be changed.<br>


&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I have this little example I have been working on in SimpleITK with the famed cthead1.png data input. Here is a code snippet:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; image = image[(size[0]//2-25):(size[0]//2+25),(size[1]//2-25):(size[1]//2+25)]<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; iterps = [sitk.sitkNearestNeighbor,<br>
&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkLinear,<br>
&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkBSpline,<br>
&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkGaussian,<br>
&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkHammingWindowedSinc,<br>
&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkCosineWindowedSinc,<br>
&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkWelchWindowedSinc,<br>
&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkLanczosWindowedSinc,<br>
&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp;sitk.sitkBlackmanWindowedSinc]<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; eFactor=5<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; image_list = []<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; for i in iterps:<br>
&gt;&gt;&gt; &nbsp;image_list.append( sitk.Expand( image, [eFactor]*3, i ))<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; tiles = sitk.Tile( image_list, [3,0] )<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; And the following is the output with the different boundary conditions:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; <a href="http://erie.nlm.nih.gov/~blowek1/images/expand_interp_cbc.png" target="_blank">http://erie.nlm.nih.gov/~blowek1/images/expand_interp_cbc.png</a><br>
&gt;&gt;&gt; <a href="http://erie.nlm.nih.gov/~blowek1/images/expand_interp_zfbc.png" target="_blank">http://erie.nlm.nih.gov/~blowek1/images/expand_interp_zfbc.png</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Thanks for you feedback,<br>
&gt;&gt;&gt; Brad<br>
&gt;&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Paul A. Yushkevich, Ph.D. <br>Assistant Professor<br>Penn Image Computing and Science Laboratory<br>Department of Radiology<br>University of Pennsylvania<br>


</div>
</blockquote></div><br></div></body></html>