python实现Otsu双阈值算法

最近在做双阈值的对比实验需要用到Otsu,发现网上没有python的实现,所以写下来记录一下。

 

Otsu双阈值算法的思想与单阈值的思想类似,单阈值的思想为:

g = w0(u0-u)^2+w1(u1-u)^2

使得g最大。

Otsu双阈值的思想则为:

g = w0(u0-u)^2+w1(u1-u)^2+w2(u2-u)^2

使得g最大。

u0为背景区域的平均值,u1为中间区域的平均值,u2为前景区域的平均值。

w0为背景区域的概率,w1为中间区域的概率,w2为前景区域的概率。

所以用python做简单的实现:

def Otsu2Threshold(src):
    Threshold1 = 0
    Threshold2 = 0
    weight, height = np.shape(src)
    hest = np.zeros([256], dtype=np.int32)
    for row in range(weight):
        for col in range(height):
            pv = src[row, col]
            hest[pv] += 1
    tempg = -1
    N_blackground = 0
    N_object = 0
    N_all = weight * height
    for i in range(256):
        N_object += hest[i]
        for k in range(i, 256, 1):
            N_blackground += he
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值