Hello,
It seems like your ported version does not produce the correct threshold
between the two peaks in the smoothed histogram in certain cases where you
have flat areas in the smoothed histogram.
For example, try this one.
I = 40*ones(40);
I(10:30,10:30) = 120;
T = th_minimum(I);
You'll find the threshold becomes 121. This is of course not between the
two peaks at 40 and 120.
The code in v1.02 did not assign any value to the threshold in this
example case and in similar cases, so it clearly needed to be fixed.
I now realize that a much more elegant fix than what I put in v1.03 would
be this (gives T=41 in my simple example):
for k = 2:n
if y(k-1) > y(k) & y(k+1) >= y(k)
T = k-1;
break
end
end
The "break" from the loop is essential, in addition to changing the latter
">" to a ">=". I would definitely use this code in your port.
Antti
On Mon, 18 Feb 2013, Barry DeZonia wrote:
Thanks Antti. I've already begun porting it into ImageJ2. I noticed that the
release includes a tweak to the th_minimum.m code. I was going to
incorporate it into our stuff but came across three versions (one our own)
and wanted to make sure that if our code differs it is a mistake and not a
bug we found.
At the end of th_minimum.m the code looks like this in 1.02:
% The threshold is the minimum between the two peaks.
for k = 2:n
if y(k-1) > y(k) & y(k+1) > y(k)
T = k-1;
end
end
Our version (I believe ported from 1.02) is very similar except the test
line looks like:
if y(k-1) > y(k) & y(k+1) >= y(k) // NOTICE THE SINGLE >= INSTEAD OF >
Finally your much changed version looks like this in 1.03:
% The threshold is the minimum between the two peaks.
peakfound = false;
for k = 2:n
if y(k-1) < y(k) & y(k+1) < y(k)
peakfound = true;
end
if peakfound & y(k-1) >= y(k) & y(k+1) >= y(k)
T = k-1;
return
end
end
I think Gabriel can shed light maybe on our change and if it was by design
or not. (Gabriel its been present since 1.0). And I see your new version is
>='s on both ends. So maybe this email is overkill. Any clarification on
your thinking re: the 1.03 change would be appreciated.
On Wed, Feb 13, 2013 at 8:15 AM, Antti Niemistö <[email protected]>
wrote:
Hi Johannes,
On Tue, 12 Feb 2013, Johannes Schindelin wrote:
Hi Gabriel and Antti,
On Mon, 11 Feb 2013, Gabriel Landini wrote:
On Monday 11 Feb 2013 23:23:11 Antti
Niemistö wrote:
Then that's what we'll do. I
actually found a little bug
in one of the
methods (th_maxlik) some
time ago, so I was thinking
I'll put out a
new version of the toolbox
with that fixed. I'm not
exactly a software
guy and do not routinely
deal with licensing, so can
you give me a
walkthrough as to how to go
about making this new
release with a dual
BSD/GPL license? Or point me
to one? I'll then update the
toolbox page
at
http://www.cs.tut.fi/~ant/histthresh/
The bug fix is ready so I'll
get this up as soon as the
licensing is sorted.
The maximum likelihood estimator method
was never implemented in the
ImageJ plugin because I could never make
it replicate the results of the
Matlab code.
I look forward to trying that maximum likelihood
method!
The updated version of the maximum likelihood method is now available
with the brand new release 1.03 of HistThresh Toolbox for MATLAB at
http://www.cs.tut.fi/~ant/histthresh/
I hope that it is useful to you.
--
Antti Niemistö DSc(Tech) office: TE410
Research Fellow phone: +358-40-849-0587 (GSM)
Department of Signal Processing +358-3-3115-4989 (fax)
Tampere University of Technology URI:
http://www.cs.tut.fi/~ant/
--
Antti Niemistö DSc(Tech) office: TE410
Research Fellow phone: +358-40-849-0587 (GSM)
Department of Signal Processing +358-3-3115-4989 (fax)
Tampere University of Technology URI: http://www.cs.tut.fi/~ant/
_______________________________________________
ImageJ-devel mailing list
[email protected]
http://imagej.net/mailman/listinfo/imagej-devel