help, I'll go crazy

azrael jura.grozni at gmail.com
Wed Sep 19 03:57:41 EDT 2007


Some time ago I started a thread about the Otsu Threshold. Well I
didn' manage to make any progress to acomplish this task.
I tried to implement it from other Languages including Java and C.

Well, this is the example list.
histogram=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 2, 1, 2, 0, 1, 3, 3, 3, 3, 1, 3, 1, 3,
5, 2, 3, 3, 3, 6, 3, 4, 5, 4, 9, 6, 11, 6, 10, 3, 11, 9, 9, 12, 22,
18, 34, 22, 28, 32, 25, 34, 38, 34, 54, 65, 106, 160, 167, 203, 282,
364, 446, 637, 816, 1022, 1264, 1456, 1646, 1753, 1845, 1922, 2203,
2231, 1973, 2245, 2369, 2349, 2258, 2130, 2066, 1835, 1640, 1554,
1414, 1179, 1024, 974, 938, 838, 785, 756, 803, 921, 952, 865, 722,
625, 608, 547, 498, 412, 438, 408, 413, 415, 339, 366, 330, 320, 293,
315, 368, 411, 434, 500, 531, 538, 552, 665, 811, 869, 998, 1021,
1075, 1080, 1030, 934, 926, 1074, 942, 941, 1014, 1440, 2966, 5301,
2729, 3400, 5563, 13096, 9068, 6045, 2813, 686, 180]

# var() is from the numpy module
My Example is This
def otsu(hi):
    s=sum(hi)
    border=len(hi)
    for i in range(border):
        if hi[i]!=0:break
    for j in range(border-1,0-1,-1):
        if hi[j] != 0:break
    li=[]
    for l in range(len(hi)):
        hi[l]=float(hi[l])/s
    for k in range(i+1,j+1):
        q1=sum(hi[i:k])
        q2=sum(hi[k:j+1])
        v1=var(hi[i:k])
        v2=var(hi[k:j+1])
        a=q1*v1 + q2*v2
        li.append(a)
    print min(li)
    m,n=li[0],i
    for k in range(len(li)):
        if li[k]>m:
            m=li[k]
            n=k
     return n

This is a Threshold Method that accepts a list like a histogram and
return the optimal threshold value.
As I have been surfing the internet, I found several formulas.

Please, dear comunity, help me.I am desperate, I'll go mad. I can't
bealive it that I can't implement something so simple looking.
For this example list the thresh value should be 218. I know it
because I i tested it on an image in ImageJ, and then I exported the
histogram. If any other examples needed I cant'get you as much as
needed
If needed, I can Paste 3 other algorithms I tried.

Thaks in advance




More information about the Python-list mailing list