【图像处理1】迭代阈值分割

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import cv2

"""
迭代阈值图像分割

迭代法是基于逼近的思想,其步骤如下: 
1. 求出图象的最大灰度值和最小灰度值,分别记为ZMAX和ZMIN,令初始阈值T0=(ZMAX+ZMIN)/2; 
2. 根据阈值TK将图象分割为前景和背景,分别求出两者的平均灰度值ZO和ZB 
3. 求出新阈值TK+1=(ZO+ZB)/2; 
4. 若TK==TK+1,则所得即为阈值;否则转2,迭代计算。

"""
path = 'XXXX/'
img  = cv2.imread(path + '0002cc93b.jpg')

img_gray       = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
img_gray_array = np.array(img_gray)

zmax = int(img_gray_array.max())
zmin = int(img_gray_array.min())

t    = (zmax + zmin)/2

while True:

    img_zo = np.where(img_gray_array > t, 0, img_gray_array)#大于某个值的元素由0替代
    img_bo = np.where(img_gray_array < t, 0, img_gray_array)#小于某个值的元素由0替代

    zo = np.sum(img_zo)/np.sum(img_zo != 0)
    bo = np.sum(img_bo)/np.sum(img_bo != 0)

    k = (zo + bo)/2

    if abs(t - k) < 0.01:
        break;
    else:
        t = k


#根据最新的阈值进行分割
img_gray_array[img_gray_array > t]  = 255
img_gray_array[img_gray_array <= t] = 0

plt.imshow(img_gray_array, cmap='gray')
plt.show()






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值