Opencv教程-图像二值化

图像二值化的概念

图像二值化是指将指将256阶的灰度图通过合适的阈值,转换为黑白二值图。即像素或0和255。其目的通常为将图像的前后景进行分割,使图像变得简单,数据量减小,能凸显出感兴趣的目标的轮廓。主要用于目标物体检测,目标跟踪、物体分离等领域
Opencv教程-图像二值化_第1张图片
二值化的数学表达,对于图像中的像素[x,y],其灰度值为f(x,y), 设置门限值(阈值)为TH,则:
g ( x , y ) { 255 , i f   f ( x , y ) > = T H 0 , i f = = i f   f ( x , y ) < T H g(x,y) \begin{cases} 255, &if\ f(x,y) >=TH\\ 0, &if==if\ f(x,y) g(x,y){255,0,if f(x,y)>=THif==if f(x,y)<TH

图像二值化阈值选择算法

二值化的关键在于阈值的选择。合理的阈值应该尽可能的分离前景和背景,如何来确定阈值呢,有以下几种求阈值的方法

局部二值化法

全局二值化即使用单一阈值对画面中的所有像素进行分割。通常可以分割直方图具有双峰性的图像。前景和背景的分布有交错部分,表示部分前景和背景像素颜色相同。由于有交错部分存在,通过阈值将前后景完全分离是不可能的,只能寻找最优解
Opencv教程-图像二值化_第2张图片

p-tile法

需要预先获得图像中前景占完整画面的比值P%,依次累积灰度直方图,直
到该累积值大于或等于前景图像(目标)所占面积,此时的灰度级即为所
求的阈值。
Opencv教程-图像二值化_第3张图片

最小误判概率法

设前景像素点灰度概率密度函数为p(x),背景像素点灰度概率密度函数为q(x),分布函数如图。前景像素个数占图像总像素数的百分比为θ1,背景为θ2 =1- θ1
Opencv教程-图像二值化_第4张图片

设分割阈值为T,前景像素被错分为背景的概率为
E 1 ( T ) = ∫ T ∞ p ( x ) d x E1(T)=\int_T^\infty {p(x)dx} E1(T)=Tp(x)dx
背景像素被错分为前景的概率为:
E 2 ( T ) = ∫ − ∞ T q ( x ) d x E2(T)=\int_{-\infty}^T {q(x)dx} E2(T)=Tq(x)dx
阈值T造成的错误分割概率为:
E ( T ) = θ 1 E 1 ( T ) + θ 2 E 2 ( T ) E(T) = θ1E1(T)+θ2E2(T) E(T)=θ1E1(T)+θ2E2(T)

E ( T ) = θ 1 ∫ T ∞ p ( x ) d x + θ 2 ∫ − ∞ T q ( x ) d x E(T)=θ1\int_T^\infty {p(x)dx}+θ2\int_{-\infty}^T {q(x)dx} E(T)=θ1Tp(x)dx+θ2Tq(x)dx
E(T)取得最小值时,其导数为0。

E ( T ) = θ 1 ∫ T ∞ p ( x ) d x + θ 2 ∫ − ∞ T q ( x ) d x E(T)=θ1\int_T^\infty {p(x)dx}+θ2\int_{-\infty}^T {q(x)dx} E(T)=θ1Tp(x)dx+θ2Tq(x)dx
θ 1 p ( T ) − θ 2 q ( T ) = 0 θ1p(T)-θ2q(T)=0 θ1p(T)θ2q(T)=0
σ E σ T = θ 1 p ( T ) = θ 2 q ( T ) \frac{{\sigma}E}{{\sigma}T} =θ1p(T)=θ2q(T) σTσE=θ1p(T)=θ2q(T)
假设图像中前景和背景像素灰度都呈正态分布,均值和
方差分别为 μ1, σ 1 2 {\sigma_{1}}^2 σ12,μ2, σ 2 2 {\sigma_{2}}^2 σ22,所以有:

θ 2 ( μ 2 − T ) 2 2 σ 2 2 = θ 1 ( μ 1 − T ) 2 2 σ 1 2 {θ}_{2}{\frac{(\mu_{2}-{}T)^{2}}{2{\sigma}_{2}^{2}}}={θ}_{1}{\frac{(\mu_{1}-{}T)^{2}}{2{\sigma}_{1}^{2}}} θ22σ22(μ2T)2=θ12σ12(μ1T)2

为了便于计算,假设:
σ 1 2 = σ 2 2 = σ 2 {\sigma}_{1}^{2}={\sigma}_{2}^{2}={\sigma}^{2} σ12=σ22=σ2
θ 2 = θ 2 = 1 2 {θ}_{2}={θ}_{2}=\frac{1}{2} θ2=θ2=21
最佳阈值公式:
θ 2 ( μ 2 − T ) 2 2 σ 2 2 = θ 1 ( μ 1 − T ) 2 2 σ 1 2 {θ}_{2}{\frac{(\mu_{2}-{}T)^{2}}{2{\sigma}_{2}^{2}}}={θ}_{1}{\frac{(\mu_{1}-{}T)^{2}}{2{\sigma}_{1}^{2}}} θ22σ22(μ2T)2=θ12σ12(μ1T)2
( μ 2 − T ) 2 2 σ 2 2 = ( μ 1 − T ) 2 2 σ 1 2 {\frac{(\mu_{2}-{}T)^{2}}{2{\sigma}_{2}^{2}}}={\frac{(\mu_{1}-{}T)^{2}}{2{\sigma}_{1}^{2}}} 2σ22(μ2T)2=2σ12(μ1T)2
T = μ 1 + μ 2 2 T={\frac{\mu_{1}+\mu_{2}}{2}} T=2μ1+μ2

最小误判概率法迭代法实现

  1. 选择阈值T 的初始估计值。(求图像的最大灰度值A,最小灰度值B,令
    (A+B)/2为初始值。)
  2. 用T分割图像,得到两组像素,即分割结果。G1由所有灰度值大于T 的像
    素组成,G2由所有灰度值≤T 的像素组成。
  3. 对区域G1和G2中的所有像素计算平均灰度值μ1和μ2 。
  4. 计算新的阈值: T = μ 1 + μ 2 2 T={\frac{\mu_{1}+\mu_{2}}{2}} T=2μ1+μ2
  5. 重复步骤2到4,两次迭代所得的T值之差小于预设值,或者直接定义迭
    代次数。

局部二值化法

大津(OTSU)法

Opencv 二值化示例代码

你可能感兴趣的:(opencv,计算机视觉,图像处理)