ah cool!

I was thinking of doing a multi-thresh method like the one 
here: http://people.csail.mit.edu/jayadev/papers/mlt_thr_img.pdf

this should make it easier...thank you!


On Monday, November 10, 2014 10:24:26 AM UTC+8, Jason Merrill wrote:
>
> On Saturday, November 8, 2014 1:52:09 PM UTC-6, Jason Merrill wrote:
>>
>> Here's a sketch of a different algorithm that I believe converges to the 
>> same value:
>>
>> 1. Initialize thresh to the mean value of the image pixels
>> 2. Compute the mean of the pixels that are larger than thresh, mplus, and 
>> smaller than thresh, mminus.
>> 3. Set thresh to the mean of mminus and mplus, and then loop back to 1. 
>> Iterate to a fixed point.
>>
>> You can implement this version without allocating any extra data 
>> structures, so it may well be much faster.
>>
>> Sorry I don't have any references here. Writing from a phone.
>>
>
> Here's a little bit of follow up on this algorithm. It turns out it is 
> just the "standard algorithm" for k-means clustering, specialized to 2 
> clusters in 1 dimension:
>
>     https://en.wikipedia.org/wiki/K-means_clustering#Standard_algorithm
>
> Here's an implementation:
>
>     https://gist.github.com/jwmerrill/179aae6c3d2d4e770614
>
> I wasn't able to benchmark against your version because it fails with
>
>     `linrange` has no method matching 
> linrange(::Gray{UfixedBase{Uint16,16}}, ::Gray{UfixedBase{Uint16,16}}, 
> ::Int64)
>
> for me.
>
> This code works on either in_img or data(in_img), but it is much faster on 
> data(in_img). I'm not totally sure why.
>
>     @time graythresh_kmeans(data(in_img))
>     elapsed time: 0.072612812 seconds (132 bytes allocated)
>
>     @time graythresh_kmeans(in_img)
>     elapsed time: 4.849397962 seconds (3737126436 bytes allocated, 55.69% 
> gc time)
>
>
>  
>

Reply via email to