[Insight-developers] So -- no concensus on smoothing re MultiResolutionPyramidImageFilter?

kent williams norman-k-williams at uiowa.edu
Thu Apr 9 10:53:51 EDT 2009


OK, once again I feel like there is still no consensus.

To summarize  the positions -- I think

1. Tom Vercauteren's latest proposal: Have an enum { NeverSmoothUnitShrink,
AlwaysSmoothUnitShrink, SmoothUnitShrinkIffScheduleNotBackwardsCompatible.
2. Leave filters as is/backwards compatible with Smoothing on for
MultiRes... and off for RecursiveMultiRes...
3. Hans' proposal, which I'm not sure I understand. I think it is #2 + added
documentation + SmoothUnitShrink flag.
4. The Luis Solution, which is #2 + adding new classes that explicity follow
#1, with the old classes having the existing name.

As I've said, I've been assigned the task of addressing this but I have no
dog in this fight.  I just need to know what to implement.

My only observation of the existing code is that the work I recently did
involved copying code out of MultRes... into RecursiveMultiRes... -- and
this means that the same or almost identical code is in two different
classes, one derived from the other. The common code needs to be put in
method/member variable combinations called from both places.

The Luis solution, which is probably the most Software-Engineering-Correct,
requires some careful refactoring to avoid further code-line replication.
And I don't know AT ALL what the new classes should be called, except that
the VTK 'append a 2 to the name' solution (e.g. vtkImageViewer2) is
annoying, and making a longer name out of
RecursiveMultiResolutionPyramidImageFilter isn't very attractive either.

On 4/9/09 8:28 AM, "Luis Ibanez" <luis.ibanez at kitware.com> wrote:

> 
> 
>            This filter is reaching the point
>            where it is not recoverable.
> 
> 
> This discussion start looking like a symposium on how
> to fix a duck-tape patch with another duck-tape patch.
> 
> 
> I vote for :
> 
> 
>      a) Leaving it in a state that is closer to what we
>         could call backward compatible.
> 
>      b) Then mark it as deprecated,
>         and discourage anybody from using it again.
> 
>      c) Write a new filter(s), with a new name(s).
>         From a fresh start based on the requirements
>         that we know today.
> 
> 
> The requirements could be:
> 
>      1) Performance when no smoothing is needed.
> 
>      2) Keeping the center of mass of the images at different levels.
> 
>      3) ...more.. ?
> 
> 
> If the requirements turn out to be conflictive, then I would vote
> for writing separate variations of the filter, and make each one
> of them fine tunned for its correct use.
> 
> Saturating a class with booleans and enums is a symptom that we
> are failing to design a hierarchy of classes where the various
> behaviors should be implemented in separate derived classes.
> 
> Using the "boolean" and "enum" approach, one would have to wonder
> why is that we don't have a single monstrous itkOptimizer class,
> and through dark-magic combinations of boolean settings we make it
> behave like a : GradientDescent, or Powell, or Evolutionary....,
> or why don't we have a single itkImageMetric class, and through
> enums settings we make it behave as Mutual Information, or MeanSquares,
> or NormalizedCorrelations...
> 
> There is no reason why we have to stick to a single
> "MultiResolutionPyramidImageFilter" when we could have a clean
> framework/hierarchy with multiple classes, where each one:
> 
> 
>                "do one thing, do it well"
> 
> 
> 
>     Luis
> 
> --
> 
> 
> PS.
> 
>      High density of "if" statements (and its cousin, the "switch")
>      is an indicator of poor software design, and/or poor software
>      maintenance practices. We can do much better than that...
> 
> 
> ----------------------
> Stephen Aylward wrote:
>> I could be misunderstanding...but shouldn't the default be "true" to
>> keep backward compatibility?
>> 
>> Having an option to offer backward compatibility, but having the
>> default be to not enable backward compatibility seems very odd (ok, it
>> seems simply wrong).
>> 
>> Bill?
>> 
>> Luis?
>> 
>> Stephen
>> 
>> On Thu, Apr 9, 2009 at 7:30 AM, Hans Johnson <hans-johnson at uiowa.edu> wrote:
>> 
>>> Since this is considered a bug for over a year
>>> http://www.vtk.org/Bug/view.php?id=7002 we should consider the fact that
>>> MultiResolutionPyramidImageFilter smooths for unit shrink factors a bug that
>>> would allow us to fix it (even through numerical sameness/backwards
>>> compatibility will be lost).
>>> 
>>> This is not the behavior that I would expect by reading the documentation on
>>> how an Image Pyramid should be constructed (i.e. The top level should be an
>>> exact copy of the reference images).
>>> 
>>> I think that this is a bug that also affects the
>>> RecursiveMultiResolutionPyramidImageFilter because it would produce
>>> different results for the unit shrink factor image if I change the shrink
>>> schedule from being downward divisible to being non-downward divisible.
>>> This is particularly nasty because given the same "shrink schedule
>>> [8,4,2,1]" the unit shrink result will be different depending on the size of
>>> the input image.
>>> 
>>> ===============
>>> If there are no objects today, then the solution that will be implemented
>>> will be:
>>> 
>>> 1) Add a test that fails when the unit shrink image is not the same as the
>>> reference image (and the m_SmoothIfUnitShrinkFactors =false).
>>> 2) Add the m_SmoothIfUnitShrinkFactors conditional flag to allow explicit
>>> smoothing of the unit shrink factors.
>>> 3) Set the default to "false" in all cases.
>>> ===============
>>> 
>>> 
>>> Regards,
>>> Hans
>>> 
>>> 
>>> On 4/9/09 1:56 AM, "Tom Vercauteren" <tom.vercauteren at gmail.com> wrote:
>>> 
>>> 
>>>> Hi Kent,
>>>> 
>>>> Even if there is no consensus about what the default should be, it
>>>> could be add a flag that lets the user decide (as Stephen suggested).
>>>> 
>>>> Maybe something like:
>>>>  m_SmoothIfUnitShrinkFactors
>>>> 
>>>> For backwards compatibility, the default for this flag would be:
>>>>  - true for MultiResolutionPyramidImageFilter
>>>>  - false for RecursiveMultiResolutionPyramidImageFilter
>>>> 
>>>> Now, I also would like to propose a NON-backward compatible change to
>>>> fix something that might be very confusing to the user.
>>>> 
>>>> Since RecursiveMultiResolutionPyramidImageFilter wil call
>>>> MultiResolutionPyramidImageFilter if the schedule is not downward
>>>> divisible, I suggest that RecursiveMultiResolutionPyramidImageFilter
>>>> sets
>>>> 
>>>> internalNonRecursivePyramid->SetSmoothIfUnitShrinkFactors(this->m_SmoothIfU
>>>> nit
>>>> ShrinkFactors)
>>>> when the schedule is not downward divisible.
>>>> 
>>>> With this small non-backward compatible change, it would at least make
>>>> things a bit clearer.
>>>> 
>>>> Otherwise we might need a three state flag for
>>>> RecursiveMultiResolutionPyramidImageFilter:
>>>>  - AlwaysSmoothIfUnitShrinkFactors
>>>>  - NeverSmoothIfUnitShrinkFactors
>>>>  - SmoothIfUnitShrinkFactorsAndScheduleDownardDivisible (this being
>>>> the default for true backwards compatibility)
>>>> 
>>>> Thoughts anyone?
>>>> 
>>>> Tom
>>>> 
>>>> On Wed, Apr 8, 2009 at 23:27, kent williams <norman-k-williams at uiowa.edu>
>>>> wrote:
>>>> 
>>>>> It seems Hans assigned me yesterday to fix this 'bug':
>>>>> 
>>>>> http://www.vtk.org/Bug/view.php?id=7002
>>>>> 
>>>>> As is noted there, there still doesn't appear to be a consensus on how to
>>>>> handle this problem.  So I've taken ownership of a bug with no clear way
>>>>> to
>>>>> fix it.
>>>>> 
>>>>> If the issue is truly tabled, does it need to hang around as an open bug?
>>>>> 
>>>>> 
>>>>> 
>>>>> Notice: This UI Health Care e-mail (including attachments) is covered by
>>>>> the
>>>>> Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is
>>>>> confidential
>>>>> and may be legally privileged.  If you are not the intended recipient, you
>>>>> are hereby notified that any retention, dissemination, distribution, or
>>>>> copying of this communication is strictly prohibited.  Please reply to the
>>>>> sender that you have received the message in error, then delete it.  Thank
>>>>> you.
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Powered by www.kitware.com
>>>>> 
>>>>> Visit other Kitware open-source projects at
>>>>> http://www.kitware.com/opensource/opensource.html
>>>>> 
>>>>> 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://www.itk.org/mailman/listinfo/insight-developers
>>>>> 
>>>> 
>>>> _______________________________________________
>>>> Powered by www.kitware.com
>>>> 
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>> 
>>>> 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://www.itk.org/mailman/listinfo/insight-developers
>>> 
>>> _______________________________________________
>>> Powered by www.kitware.com
>>> 
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>> 
>>> 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://www.itk.org/mailman/listinfo/insight-developers
>>> 
>> 
>> 
>> 
>> 



More information about the Insight-developers mailing list