初识 OpenCV 之阈值分割

阈值 是什么?简单点说是把图像分割的标尺。

就是相当于

if(val > 1) a = 1;

else a = 0;

然后苹果就变成这样了、、、、、、、、、

初识 OpenCV 之阈值分割_第1张图片

图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。难点在于如何选择一个合适的阈值实现较好的分割。

当T是一个适用于整个图像的常数时,该公式给出的处理成为全局阈值处理;

当T值在一副图像上改变时,称为可变阈值处理;

当T取决于空间坐标x,y本身的时候,则可变阈值处理称为动态阈值处理。

阈值类型:

阈值类型一阈值二值化(threshold binary)

阈值类型一阈值反二值化(threshold binary Inverted)

阈值类型一截断 (truncate)

阈值类型一阈值取零 (threshold to zero)

阈值方法:

单阈值分割(左图)和多阈值分割(右图)

初识 OpenCV 之阈值分割_第2张图片

单阈值算法实现:找到第一个峰值和第二个峰值, 再找到第一和第二个峰值之间的谷值,谷值就是那个阀值了

 

双阈值初识 OpenCV 之阈值分割_第3张图片

 

Otsu算法:

①把图像的灰度数按灰度级分成2个部分,使得两个部分之间的灰度值差异最大,每个部分之间的灰度差异最小;

②通过方差的计算来寻找一个合适的灰度级别来划分;

因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小;

对图像I(x,y),前景和背景的分割阈值记作T,

前景像素点数占整幅图像的比例为ω0,其平均灰度μ0;

背景像素点数占整幅图像的比例为ω1,其平均灰度μ1;

图像的总平均灰度记为μ=ω0∗μ0 +ω1∗μ1;

类间方差记为g

像素灰度值小于阈值T的像素个数记作N0,

像素灰度值大于阈值T的像素个数记作N1,

则有:

      ω0 = N0 / M×N ;      (1)

      ω1 = N1 / M×N ;      (2)

      N0 + N1 = M×N ;       (3)

      ω0+ω1=1;           (4)

      μ=ω0*μ0+ω1*μ1;  (5)

      g =ω0(μ0-μ)^2+ω1(μ1-μ)^2;(6)

将式(5)代入式(6),得到等价公式:

      g=ω0*ω1*(μ0-μ1)^2;  (7) 

采用遍历的方法得到使类间方差g最大的阈值T,即为所求。

 

迭代选择法是首先猜测一个初始阈值,然后再通过对图像的多趟计算对阈值进行改进的过程。重复地对图像进行阈值操作,将图像分割为对象类和背景类,然后来利用每一个类中的灰阶级别对阈值进行改进。

迭代算法:

迭代法是基于逼近的思想,其步骤如下: 

1. 求出图象的最大灰度值和最小灰度值,分别记为ZMAX和ZMIN,令初始阈值T0=(ZMAX+ZMIN)/2; 

2. 根据阈值TK将图象分割为前景和背景,分别求出两者的平均灰度值ZO和ZB

N0小于阈值T0的个数,N1大于阈值T0的个数

ZO = N0 / M×N       ZB = N1 / M×N

3. 求出新阈值TK+1=(ZO+ZB)/2; 

4. 若TK==TK+1,则所得即为阈值;否则转2,迭代计算。 

 

     

你可能感兴趣的:(Opencv)