(1)对于给定阈值T,可以将图像分为目标和背景。其中,背景点数占图像比例为P0,平均灰度值为M0。 而目标点数占图像比例为P1,平均灰度值为M1。
(2)图像的平均灰度值为常数,与阈值无关,即:
(3)计算类间方差如下:
(4)代入 P0 + P1 = 1 和 M_mean, 化简上式为:
(5)遍历灰度值,找出使sigma^2最大的值。
import cv2 as cv
import matplotlib.pyplot as plt
# 封装图片显示函数
def image_show(image):
if image.ndim == 2:
plt.imshow(image, cmap='gray')
else:
image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
plt.imshow(image)
plt.show()
if __name__ == '__main__':
# 读取灰度图像
img_desk = cv.imread('desk.png', 0)
# 大津法阈值分割
threshold, img_bin = cv.threshold(img_desk, -1, 255, cv.THRESH_OTSU)
# 输出最佳阈值
print("最佳阈值 = ", threshold)
# 显示图像
image_show(img_bin)