<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Brian,<div><br></div><div>I was thinking that those methods should be added to the ImageToImageFilter.</div><div><br></div><div>While the Displacement filter can certainly use those values. I would like to further consider that that is an issue with the way the displacement fields are created.</div><div><br></div><div>I have discussed with Hans the correctness of preserving the center vs preserving the location before with the shrink image filters. I have a patch with an alternative approach (which I thought I had done as a optional flag) [1],</div><div><br></div><div>I have a thought that the ShrinkFilter and adaptor used to scale the displacement fields aren't symmetric. This will need exploration.. but if this error is as common as is indicated, then I am suspicious.</div><div><br></div><div>Brad</div><div><br></div><div><br></div><div>[1] <a href="http://review.source.kitware.com/#/c/8179/1">http://review.source.kitware.com/#/c/8179/1</a></div><div> <br><div><div>On Nov 3, 2014, at 12:04 PM, brian avants <<a href="mailto:stnava@gmail.com">stnava@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><div dir="ltr">Brad, <div><br></div><div>I think that you are right in suggesting that nifti is particularly susceptible to this.  But I dont know the data type.  </div><div><br></div><div>Where would the global <span style="font-size:12.8000001907349px;font-family:arial,sans-serif">Set/</span><span style="font-size:12.8000001907349px;font-family:arial,sans-serif">GetGlobalDefaultCoordinateTole</span><span style="font-size:12.8000001907349px;font-family:arial,sans-serif">rance (and </span><span style="font-size:12.8000001907349px;font-family:arial,sans-serif">Set/</span><span style="font-size:12.8000001907349px;font-family:arial,sans-serif">GetGlobalDefaultDirectionTole</span><span style="font-size:12.8000001907349px;font-family:arial,sans-serif">rance ) exist?  I would be happy if they could be called once within a given code base ( like Nick's suggestion ) but it might be ok to call once for each executable.  </span></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div><br></div>brian<br><div><br></div><div><br></div></div></div>
<br><div class="gmail_quote">On Mon, Nov 3, 2014 at 11:59 AM, Bradley Lowekamp <span dir="ltr"><<a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Nick,<div><br></div><div><br></div><div>Wouldn't a settable global default value be preferred? ie. Set/GetGlobalDefaultCoordinateTolerance.<br><div><br></div><div>Adding yet another CMake variable is rarely preferred, IMHO. </div><div><br></div><div><br></div><div>Also, you mention in the ANTs issue, that it may be related to specific filters such as the Shrink filter. Do you have more specifics or reproducible sequence for this? There are some complexities with how some of the multi-scale filters compute the changing origin, it would not surprise me if there is a minor bug some place for certain more complex images.</div><div><br></div><div>Also related does the nifti file format store this information as doubles or floats?</div><div><br></div><div>Brad</div><div><div class="h5"><br><div><div>On Nov 3, 2014, at 11:44 AM, Nicholas Tustison <<a href="mailto:ntustison@gmail.com" target="_blank">ntustison@gmail.com</a>> wrote:</div><br><blockquote type="cite">
<div style="word-wrap:break-word">Added to this list of suggestions, would it be possible to set a tolerance<div>in the list of cmake options?</div><div><br></div><div>Nick<br><div><br></div><div><br></div><div><br><div><blockquote type="cite"><div>On Nov 3, 2014, at 8:40 AM, brian avants <<a href="mailto:stnava@gmail.com" target="_blank">stnava@gmail.com</a>> wrote:</div><br><div><div dir="ltr"><div><div>This email is motivated by this issue:</div><div><br></div><div><a href="https://github.com/stnava/ANTs/issues/74" target="_blank">https://github.com/stnava/ANTs/issues/74</a><br></div><div><br></div><div>but it is not isolated to ants.   Worth a read for additional context.</div><div><br></div><div>ITK currently enforces a relatively strict check that image and displacement fields "occupy the same physical space."  However, for some unclear (to me) reasons, the direction matrices or origins of images can lose precision when passing through ITK pipelines ( especially through resampling or resolution-changing filters ).  This results in filters aborting and this can occur at various different places in a complex series of ITK-based operations.   </div><div><br></div><div>My concern with this is that it can lead to a very severe loss of productivity when this somewhat unpredictable error occurs.   For instance, a user downloads a toolkit based on ITK ( itk-snap, ants, elastic, brainsfit, joint label fusion, etc).   The user expects registration or segmentation filters to "work well" especially when the data is of a standard sort.   Then, after some oft-substantial execution time, this mysterious error appears:</div><div><br></div><div><h3 style="margin-top:0px;margin-bottom:0px;line-height:1.2;font-size:16px;color:rgb(51,51,51);font-family:Helvetica,arial,freesans,clean,sans-serif,'Segoe UI Emoji','Segoe UI Symbol'"><a href="https://github.com/stnava/ANTs/issues/31" style="color:rgb(51,51,51);text-decoration:none;background:transparent" target="_blank">itk::ERROR: ImageToImageFilter(0x7fb3b2307ac0): Inputs do not occupy the same physical space!</a></h3></div><div><br></div><div>While I am all for correctness, when the impact on productivity exceeds a certain threshold, I think it is useful to bend the rules a bit.   Perhaps one of these would improve the situation:</div><div><br></div><div>1)   <span style="color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:13.63636302948px;line-height:20.3636360168457px"> </span><span style="color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:13.63636302948px;line-height:20.3636360168457px">change:</span></div><div><span style="color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:13.63636302948px;line-height:20.3636360168457px"><br></span></div><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:13.63636302948px;line-height:20.3636360168457px">ITKv4/Modules/Filtering/DisplacementField/include/itkDisplacementFieldTransform.hxx</p><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:13.63636302948px;line-height:20.3636360168457px">and</p><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:13.63636302948px;line-height:20.3636360168457px">ITKv4/Modules/Core/Common/include/itkImageToImageFilter.hxx</p><p style="margin-top:0px;margin-bottom:16px;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:13.63636302948px;line-height:20.3636360168457px">changing direction tolerance and coordinate tolerance to 1.e-4</p><p style="margin-top:0px;margin-bottom:16px"><font color="#333333" face="Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif"><span style="line-height:20.3636360168457px"><a href="https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Filtering/DisplacementField/include/itkDisplacementFieldTransform.hxx#L454-L457" target="_blank">https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Filtering/DisplacementField/include/itkDisplacementFieldTransform.hxx#L454-L457</a></span></font><br></p><p style="margin-top:0px;margin-bottom:16px"><a href="https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkImageToImageFilter.hxx#L40-L41" target="_blank">https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkImageToImageFilter.hxx#L40-L41</a><br></p><p style="margin-top:0px;margin-bottom:16px">and change the documentation too:</p><p style="margin-top:0px;margin-bottom:16px"><a href="https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkImageToImageFilter.h#L76-L87" target="_blank">https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkImageToImageFilter.h#L76-L87</a><br></p><div>2)  Change the exception to a warning.  This would at least allow complex pipelines to execute while notifying the user of a possible issue.</div><div><br></div><div>3)  Document all of the places that the user/developer should call:</div><div><br></div><div><span style="color:rgb(153,153,136);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:11.8181819915771px;font-style:italic;line-height:15.27272605896px;white-space:pre-wrap;background-color:rgb(248,238,199)">Set/GetCoordinateTolerance</span>  <span style="color:rgb(153,153,136);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:11.8181819915771px;font-style:italic;line-height:15.27272605896px;white-space:pre-wrap;background-color:rgb(248,238,199)">Set/GetDirectionTolerance</span>  .</div><div><br></div><div>This last solution would require adding Set/GetCoordinate and Direction tolerance to:</div><div><br></div><div><a href="https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Filtering/DisplacementField/include/itkDisplacementFieldTransform.h" target="_blank">https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Filtering/DisplacementField/include/itkDisplacementFieldTransform.h</a><br></div><div><br></div><div>as well, for consistency. </div><div><br></div><div>Anyway, I raise this issue b/c of the many man and computer hours lost by this check.</div><div><br></div><div>Not once has this check actually helped us, in any measurable way, avoid errors.</div><div><br></div><div><br></div></div>
</div>
_______________________________________________<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://kitware.com/products/protraining.php" target="_blank">http://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-developers" target="_blank">http://public.kitware.com/mailman/listinfo/insight-developers</a><br></div></blockquote></div><br></div></div></div>_______________________________________________<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://kitware.com/products/protraining.php" target="_blank">http://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-developers" target="_blank">http://public.kitware.com/mailman/listinfo/insight-developers</a><br></blockquote></div><br></div></div></div></div></blockquote></div><br></div>
</blockquote></div><br></div></body></html>