[Insight-developers] OtsuThresholdCalculator versus OtsuMultipleThresholdsCalculator

Johnson, Hans J hans-johnson at uiowa.edu
Tue Jul 2 13:08:20 EDT 2013


I agree with brad.  The two should produce the same results, even tough it
may introduce a different numerical result in the
OtsuMultipleThresholdCalculator.

-----Original Message-----
From: Bradley Lowekamp <blowekamp at mail.nih.gov>
Date: Tuesday, July 2, 2013 12:01 PM
To: "Padfield, Dirk R (GE Global Research)" <padfield at research.ge.com>
Cc: ITK <insight-developers at itk.org>, "Richard.Beare at ieee.org"
<Richard.Beare at ieee.org>
Subject: Re: [Insight-developers] OtsuThresholdCalculator
versus  OtsuMultipleThresholdsCalculator

Dirk,

I would vote to have the two produce the same results, and create a little
migration guide which notes the change.

Regarding, the refactoring, is there any difference in the algorithm
complexity of the two? Any measurements of the performance difference
between the two?

Brad

On Jul 2, 2013, at 11:04 AM, "Padfield, Dirk R (GE Global Research)"
<padfield at research.ge.com> wrote:

> Hi Richard,
>
> Thank you for your response and insight.  If anything would need to be
>changed, I would also lean towards changing the OtsuMultiple because I
>think we shouldn't change Otsu since I am sure many more people are using
>the Otsu because it is a standard thresholding algorithm.  I will do some
>comparisons of the two against other implementations to see what I find.
>
> But the question still remains: is it okay to change the OtsuMultiple to
>give the same output as Otsu for one threshold?  I am thinking in terms
>of those people who use OtsuMultiple whose results will then be slightly
>different.  Here are the advantages and disadvantages for keeping things
>the same:
>
> Advantages: everyone's code still works as it did before
> Disadvantages: the two implementations are inconsistent with each other
>even though they are the same algorithm.  The overlapping code cannot be
>merged (inheritance).  And future enhancements will need to be made in
>both places.
>
> My vote is: change OtsuMultiple to be consistent with Otsu.
>
> What do others think?
>
> Dirk
>
>
> ________________________________
> From: Richard Beare [richard.beare at gmail.com]
> Sent: Monday, July 01, 2013 5:40 PM
> To: Bradley Lowekamp
> Cc: Padfield, Dirk R (GE Global Research); <insight-developers at itk.org>
>Developers
> Subject: Re: [Insight-developers] OtsuThresholdCalculator versus
>OtsuMultipleThresholdsCalculator
>
> Hi,
> I think the order was - I introduced new filters copied from ImageJ,
>then Gaetan started refactoring to use the histogram framework. We both
>did some work to make that correspond to old versions. I don't remember
>working on the MultipleThreshold  version, but the code does look
>similar, so perhaps it was done somewhere along the way - will need to
>check the logs.
>
> I'm pretty sure that Otsu was producing the same results that it used to
>- I didn't compare to other implementations. Thus, if the original Otsu
>was correct then the current one should be too, which would suggest that
>the MultipleThresholds version should probably change.
>
> Not sure when I'll get a chance to look at this in detail.
>
> I don't have a current email for Gaetan to CC for confirmation.
>
>
> On Mon, Jul 1, 2013 at 11:02 PM, Bradley Lowekamp
><blowekamp at mail.nih.gov<mailto:blowekamp at mail.nih.gov>> wrote:
> Dirk,
>
> I believe Richard Beare did the refactoring of the thresholding
>framework an Insight Journal Article. He will likely know why it is this
>way better than anyone else.
>
> You also didn't say which implementation is correct.
>
> Brad
>
>
> On Jun 30, 2013, at 10:03 PM, "Padfield, Dirk R (GE Global Research)"
><padfield at research.ge.com<mailto:padfield at research.ge.com>> wrote:
>
>> Hi ITK Developers,
>>
>> I was just looking through the OtsuThresholdCalculator and
>>OtsuMultipleThresholdsCalculator to see whether I could refactor them so
>>that the Otsu inherits from the OtsuMultiple since the latter is a more
>>general case of the former.  Currently, the code for these two filters
>>is totally different resulting in significant code duplication and a
>>need to keep both filters in sync.
>>
>> As a first step, I wrote a CMake test to check that the output of the
>>OtsuMultiple with 1 threshold is the same as the output of the Otsu.
>>Unfortunately, they are not!  The two filters output thresholds that are
>>different by 1 histogram bin!  This can be a quite extreme difference
>>when the numberOfHistogramBins is low, and it leads to different
>>thresholds even when the numberOfHistogramBins is reasonably high (say
>>256).  I tracked it down to this code in the Calculators:
>>
>> The relevant code from Otsu:
>>  const double tolerance = 0.00001;
>>  if ( (varBetween - tolerance) > maxVarBetween )
>>    {
>>    maxVarBetween = varBetween;
>>    maxBinNumber = j;
>>    }
>>  }
>> this->GetOutput()->Set( static_cast<OutputType>(
>>histogram->GetMeasurement( maxBinNumber + 1, 0 ) ) );
>>
>> The relevant code from MultipleOtsu:
>>  if ( varBetween > maxVarBetween )
>>    {
>>    maxVarBetween = varBetween;
>>    maxVarThresholdIndexes = thresholdIndexes;
>>    }
>>  }
>> for ( j = 0; j < m_NumberOfThresholds; j++ )
>>  {
>>  m_Output[j] = histogram->GetBinMax(0, maxVarThresholdIndexes[j]);
>>  }
>>
>> The difference is that the Otsu adds one to the computed threshold
>>whereas the MultipleOtsu does not.  This is problematic because users
>>would expect them to give the same result.
>>
>> My question is: how should we proceed?  If we change one or the other,
>>people's code that use the changed one will give slightly different
>>answers.  If we don't change them, the two filters will give different
>>outputs for the same input, and it will not be possible to refactor them
>>to share code.
>>
>> What are your thoughts?
>>
>> Thanks,
>> Dirk
>> _______________________________________________
>> Powered by www.kitware.com<http://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://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

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://www.itk.org/mailman/listinfo/insight-developers



________________________________
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.
________________________________


More information about the Insight-developers mailing list