用otsu算法进行图像分割
下面是好好范文网小编收集整理的用otsu算法进行图像分割,仅供参考,欢迎大家阅读!
OTSU是阈值分割中一种常用的算法,它可以根据图像自动生成最佳分割阈值。OTSU的核心思想是类间方差最大化。
令 left{ 0,1,2,...,L-1 right} 表示一幅大小为 Mtimes N 像素的数字图像中的 L 个不同的灰度级, n_{i} 表示灰度级为 i 的像素数。
图像中的像素总数为: n=n_{0}+n_{1}+...+n_{L-1} 。
像素的灰度级为 i 的概率为: p_{i}=frac{n_{i}}{n} 。且有: sum_{i=0}^{L-1}{p_{i}}=1 。
现在,假设我们选择一个阈值 T(k)=k,0<k<L-1 。并使用它把输入图像阈值化处理为两类 C_{1} 和 C_{2} ,其中C_{1}由图像中灰度值在范围 [0,k] 内的所有像素组成, C_{2} 由灰度值在范围 [k+1,L-1] 内所有像素组成。
则像素被分类到C_{1}中的概率为: P_{1}(k)=sum_{i=0}^{k}{p_{i}} (1)
像素被分类到C_{2}中的概率为:P_{2}(k)=sum_{i=k+1}^{L-1}{p_{i}}=1-P_{1}(k)
则分配到类C_{1}的像素的平均灰度值为:
m_{1}(k)=sum_{i=0}^{k}{iP(i|C_{1})}=sum_{i=0}^{k}{frac{iP(C_{1}|i)P(i)}{P(C_{1})}}=frac{1}{P_{1}(k)}sum_{i=0}^{k}{ip_{i}}
类似的,分配到类 C_{2} 中的像素的平均灰度值为:
m_{2}(k)=sum_{i=k+1}^{L-1}{iP(i|C_{2})}=frac{1}{P_{2}(k)}sum_{i=k+1}^{L-1}{ip_{i}}
灰度级为0到k的像素的平均灰度值为: m_{k}=sum_{i=0}^{k}{ip_{i}} (2)
整个图像的平均灰度值为:m_{G}=sum_{i=0}^{L-1}{ip_{i}} (3)
可以验证以下式成立:
P_{1}(k)cdot m_{1}(k)+P_{2}(k)cdot m_{2}(k)=m_{G} (4)
P_{1}(k)+P_{2}(k)=1 (5)
则类间方差定义为(为方便书写省略 k):(由式(4)、(5)可推得)
sigma_{B}^{2}=P_{1}(m_{1}-m_{G})^{2}+P_{2}(m_{2}-m_{G})^{2}=P_{1}P_{2}(m_{1}-m_{2})=frac{(m_{G}P_{1}-m)^{2}}{P_{1}(1-P_{1})}(6)
全局方差为:
sigma_{G}^{2}=sum_{i=0}^{L-1}{(i-mG)^{2}p_{i}} (7)
令 eta=frac{sigma_{B}^{2}(k)}{sigma_{G}^{2}} ,其中 sigma_{B}^{2}(k)=frac{(m_{G}cdot P_{1}(k)-m(k))^{2}}{P_{1}(k)cdot(1-P_{1}(k))} (8)
由式(6)可知,两个均值 m_{1}和 m_{2}彼此隔得越远, sigma_{B}^{2}越大,这表明类间方差是类之间的可分性度量。因为sigma_{G}^{2} 是一个常数,所以 eta 是一个归一化后的可分性度量。
所以我们要求得最佳阈值 k^{*} ,使得 sigma_{B}^{2} 最大,即:
sigma_{B}^{2}(k^{*})=max_{0 leq kleq L-1}{sigma_{B}^{2}(k)}
OTSU算法步骤
计算输入图像的归一化直方图。使用 p_{i} , i=0,1,2,...,L-1 表示该直方图的各个分量。
用式(1),对于 k=0,1,2,...,L-1 ,计算 P_{1}(k) 。
用式(2),对于 k=0,1,2,...,L-1 ,计算 m(k) 。
用式(3)计算全局灰度均值 m_{G} 。
用式(8),对于 k=0,1,2,...,L-1,计算类间方差 sigma_{B}^{2}(k) 。
得到OTSU阈值 k^{*},即使得sigma_{B}^{2}(k)最大的 k 值。如果最大值不唯一,则将各个最大k 值平均得到 k^{*} 值。
在 k=k^{*} 处计算可分性度量 eta 。