本节介绍数字图像处理中的迭代法阈值分割,针对灰度图进行自动寻找阈值。收敛证明目前未找到相关资料。
1. 迭代法阈值分割步骤
(1) 选取初始分割阈值,通常可选图像灰度平均值 \(T\)。
(2) 根据阈值 \(T\) 将图像像素分割为背景和前景,分别求出两者的平均灰度 \(T_0\) 和 \(T_1\)。
(3) 计算新的阈值 \(T' = \frac{T_0 + T_1}{2}\)。
(4) 若 \(T == T'\),则迭代结束,\(T\) 即为最终阈值。否则令 \(T = T'\),转第 (2) 步。
2. 效果
3. Python实现
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
def show(img):
if img.ndim == 2:
plt.imshow(img, cmap='gray', vmin=0, vmax=255)
else:
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()
img = cv.imread('pic/eagle500x500.jpg', 0)
T = img.mean()
while True:
t0 = img[img < T].mean()
t1 = img[img >= T].mean()
t = (t0 + t1) / 2
if abs(T - t) < 1:
break
T = t
T = int(T)
print(f"Best threshold = {T}")
th, img_bin = cv.threshold(img, T, 255, 0)
show(img_bin)
说明:
- 未经许可,谢绝转载。
- 本教程为《数字图像处理Python OpenCV实战》的配套代码相关内容。
免费视频教程为0-6章(标题号≤6),可在此处点击观看。
所有课件及源代码可在此处下载:
链接:https://pan.baidu.com/s/198PySe_vebO3e06idHSQ6g
提取码:11o4
有问题可在QQ群(1079300899)指出,进群答案:数字图像处理。在本文评论指出可能导致回复很晚。