That’s brilliant, Brad. Thanks.
> On Nov 5, 2014, at 11:28 AM, Bradley Lowekamp <[email protected]> wrote: > > I'll pick up this issue of adding these new methods to better control the > tolerances. > > Brad > On Nov 4, 2014, at 9:54 AM, Bradley Lowekamp <[email protected] > <mailto:[email protected]>> wrote: > >> >> Was it just the DisplacementFieldTransform being the problem or was it other >> filters in general and randomly? >> >> The proposed new variable should be a static member variable of >> ImageToImageFilter, hence the term global. It would be used to set the value >> here, instead of a constant [1]. This is similar to the >> GlobalDefaultNumberOfThreaders, as it effects the initial value for all new >> filters. The complication is that this base class is templated, and this >> global need to transcend the templates. A similar things was done with the >> ImageSource class by adding a second private parent without templates [2], >> [3]. The complexity there with lazy initialization is not needed for this >> case, as we just have a simple float. Additionally I have developed a >> preference for private namespace local statics for this type of case, as it >> produces a cleaner symbol table for shared libraries. >> >> Clearly for the DisplacementField, the tolerance variables should be exposed >> similarly as done in the ImageToImageFilter. And it could pull the default >> from the variable from above, however getting the default for a transform >> from a filter may not make since. >> >> >> >> >> [1] >> https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkImageToImageFilter.hxx#L40-L41 >> >> <https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkImageToImageFilter.hxx#L40-L41> >> [2] >> https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkImageSource.h#L50-L87 >> >> <https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkImageSource.h#L50-L87> >> [3] >> https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/src/itkImageSource.cxx#L27-L46 >> >> <https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/src/itkImageSource.cxx#L27-L46> >> >> >> On Nov 4, 2014, at 9:28 AM, brian avants <[email protected] >> <mailto:[email protected]>> wrote: >> >>> so - just to be clear ... same thing needs to be done here: >>> >>> ITKv4/Modules/Filtering/DisplacementField/include/itkDisplacementFieldTransform.h >>> >>> and how does Get/SetGlobalDefault differ from Set/GetCoordinateTolerance >>> Set/GetDirectionTolerance >>> >>> which already exists in the image to image filter (but not displacement >>> field)? >>> >>> >>> >>> brian >>> >>> >>> >>> On Tue, Nov 4, 2014 at 9:26 AM, Bradley Lowekamp <[email protected] >>> <mailto:[email protected]>> wrote: >>> I agree that would be good. >>> >>> The other thing which can be done concurrently is add the >>> ImageToImageFilter::Get/SetGlobalDefault methods. Any one want to volunteer >>> for that one? >>> >>> Brad >>> >>> On Nov 4, 2014, at 9:21 AM, brian avants <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>>> i guess the next step is to dig up a couple of examples of this behavior >>>> and post them somewhere. >>>> >>>> >>>> brian >>>> >>>> >>>> >>>> On Tue, Nov 4, 2014 at 9:14 AM, Bradley Lowekamp <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> That is a question: why is an exact copy not happening? Is is due to >>>> runtime errors or accumulation of errors during IO? >>>> >>>> Brad >>>> >>>> >>>> On Nov 4, 2014, at 3:51 AM, <[email protected] <mailto:[email protected]>> >>>> <[email protected] <mailto:[email protected]>> wrote: >>>> >>>> > Hi all, >>>> > >>>> > Would it be possible to fix this issue by passing the physical space by >>>> > reference, or by performing an exact copy? >>>> > >>>> > Regards, Marius >>>> > >>>> >> -----Original Message----- >>>> >> From: Insight-developers [mailto:[email protected] >>>> >> <mailto:[email protected]>] On >>>> >> Behalf Of Matt McCormick >>>> >> Sent: maandag 3 november 2014 18:39 >>>> >> To: brian avants >>>> >> Cc: [email protected] <mailto:[email protected]> >>>> >> Subject: Re: [ITK-dev] image and deformation field physical space check >>>> >> >>>> >> Hi Brian, >>>> >> >>>> >> Thanks for discussing this. >>>> >> >>>> >> I think a combination of fixing the underlying issue that is being >>>> >> brought up by >>>> >> the exception, relaxing the tolerance, and improving the documentation >>>> >> is a >>>> >> good approach. >>>> >> >>>> >> 2 cents, >>>> >> Matt >>>> >> >>>> >> On Mon, Nov 3, 2014 at 11:40 AM, brian avants <[email protected] >>>> >> <mailto:[email protected]>> wrote: >>>> >>> This email is motivated by this issue: >>>> >>> >>>> >>> https://github.com/stnava/ANTs/issues/74 >>>> >>> <https://github.com/stnava/ANTs/issues/74> >>>> >>> >>>> >>> but it is not isolated to ants. Worth a read for additional context. >>>> >>> >>>> >>> 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. >>>> >>> >>>> >>> 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: >>>> >>> >>>> >>> itk::ERROR: ImageToImageFilter(0x7fb3b2307ac0): Inputs do not occupy >>>> >>> the same physical space! >>>> >>> >>>> >>> >>>> >>> 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: >>>> >>> >>>> >>> 1) change: >>>> >>> >>>> >>> ITKv4/Modules/Filtering/DisplacementField/include/itkDisplacementField >>>> >>> Transform.hxx >>>> >>> >>>> >>> and >>>> >>> >>>> >>> ITKv4/Modules/Core/Common/include/itkImageToImageFilter.hxx >>>> >>> >>>> >>> changing direction tolerance and coordinate tolerance to 1.e-4 >>>> >>> >>>> >>> https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/F >>>> >>> <https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/F> >>>> >>> iltering/DisplacementField/include/itkDisplacementFieldTransform.hxx#L >>>> >>> 454-L457 >>>> >>> >>>> >>> https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/C >>>> >>> <https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/C> >>>> >>> ore/Common/include/itkImageToImageFilter.hxx#L40-L41 >>>> >>> >>>> >>> and change the documentation too: >>>> >>> >>>> >>> https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/C >>>> >>> <https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/C> >>>> >>> ore/Common/include/itkImageToImageFilter.h#L76-L87 >>>> >>> >>>> >>> 2) Change the exception to a warning. This would at least allow >>>> >>> complex pipelines to execute while notifying the user of a possible >>>> >>> issue. >>>> >>> >>>> >>> 3) Document all of the places that the user/developer should call: >>>> >>> >>>> >>> Set/GetCoordinateTolerance Set/GetDirectionTolerance . >>>> >>> >>>> >>> This last solution would require adding Set/GetCoordinate and >>>> >>> Direction tolerance to: >>>> >>> >>>> >>> https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/F >>>> >>> <https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/F> >>>> >>> iltering/DisplacementField/include/itkDisplacementFieldTransform.h >>>> >>> >>>> >>> as well, for consistency. >>>> >>> >>>> >>> Anyway, I raise this issue b/c of the many man and computer hours lost >>>> >>> by this check. >>>> >>> >>>> >>> Not once has this check actually helped us, in any measurable way, >>>> >>> avoid errors. >>>> >>> >>>> >>> >>>> >>> >>>> >>> _______________________________________________ >>>> >>> Powered by www.kitware.com <http://www.kitware.com/> >>>> >>> >>>> >>> Visit other Kitware open-source projects at >>>> >>> http://www.kitware.com/opensource/opensource.html >>>> >>> <http://www.kitware.com/opensource/opensource.html> >>>> >>> >>>> >>> Kitware offers ITK Training Courses, for more information visit: >>>> >>> http://kitware.com/products/protraining.php >>>> >>> <http://kitware.com/products/protraining.php> >>>> >>> >>>> >>> Please keep messages on-topic and check the ITK FAQ at: >>>> >>> http://www.itk.org/Wiki/ITK_FAQ <http://www.itk.org/Wiki/ITK_FAQ> >>>> >>> >>>> >>> Follow this link to subscribe/unsubscribe: >>>> >>> http://public.kitware.com/mailman/listinfo/insight-developers >>>> >>> <http://public.kitware.com/mailman/listinfo/insight-developers> >>>> >>> >>>> >> _______________________________________________ >>>> >> Powered by www.kitware.com <http://www.kitware.com/> >>>> >> >>>> >> Visit other Kitware open-source projects at >>>> >> http://www.kitware.com/opensource/opensource.html >>>> >> <http://www.kitware.com/opensource/opensource.html> >>>> >> >>>> >> Kitware offers ITK Training Courses, for more information visit: >>>> >> http://kitware.com/products/protraining.php >>>> >> <http://kitware.com/products/protraining.php> >>>> >> >>>> >> Please keep messages on-topic and check the ITK FAQ at: >>>> >> http://www.itk.org/Wiki/ITK_FAQ <http://www.itk.org/Wiki/ITK_FAQ> >>>> >> >>>> >> Follow this link to subscribe/unsubscribe: >>>> >> http://public.kitware.com/mailman/listinfo/insight-developers >>>> >> <http://public.kitware.com/mailman/listinfo/insight-developers> >>>> > _______________________________________________ >>>> > Powered by www.kitware.com <http://www.kitware.com/> >>>> > >>>> > Visit other Kitware open-source projects at >>>> > http://www.kitware.com/opensource/opensource.html >>>> > <http://www.kitware.com/opensource/opensource.html> >>>> > >>>> > Kitware offers ITK Training Courses, for more information visit: >>>> > http://kitware.com/products/protraining.php >>>> > <http://kitware.com/products/protraining.php> >>>> > >>>> > Please keep messages on-topic and check the ITK FAQ at: >>>> > http://www.itk.org/Wiki/ITK_FAQ <http://www.itk.org/Wiki/ITK_FAQ> >>>> > >>>> > Follow this link to subscribe/unsubscribe: >>>> > http://public.kitware.com/mailman/listinfo/insight-developers >>>> > <http://public.kitware.com/mailman/listinfo/insight-developers> >>>> >>>> >>> >>> >> >> _______________________________________________ >> Powered by www.kitware.com <http://www.kitware.com/> >> >> Visit other Kitware open-source projects at >> http://www.kitware.com/opensource/opensource.html >> <http://www.kitware.com/opensource/opensource.html> >> >> Kitware offers ITK Training Courses, for more information visit: >> http://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-developers >> _______________________________________________ >> Community mailing list >> [email protected] >> http://public.kitware.com/mailman/listinfo/community > > _______________________________________________ > 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://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-developers
_______________________________________________ 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://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-developers
