APP下载

基于Otsu算法的图像阀值自动选取算法研究与应用

2015-01-16任晓娜

电子设计工程 2015年11期
关键词:类间阀值方差

任晓娜

(河南工业职业技术学院 网络中心,河南 南阳 473000)

随着社会的发展,我国大部分城市都出现了或多或少的交通问题,如何利用计算机实现智能交通系统成为社会的实际需求,汽车作为智能交通系统的主体,在行驶过程中对其进行检测和分类识别显得非常重要。文中选取图像分割算法中的Otsu算法进行研究分析,并将其应用到运动物体检测和跟踪的工程实践中。主要工作有:对现有的图像分割算法进行阐述,重点对Otsu分割算法进行数学模型分析,给出该算法的设计流程和C++代码。最后将算法应用到车辆目标检测项目中,通过读取视频帧,作帧差,Otsu分割,形态学处理,连通分量分析,检测目标,该系统实现了跟踪汽车运动目标。实验结果表明,该方法可以快速有效地跟踪运动汽车,满足工程应用的需要。

1 相关技术

1.1 图像分割技术概述

图像分割就是目标和背景进行分离的过程,通过图像分割,可以对感兴趣的目标进行一步的处理,在图像处理领域中起到中间桥梁作用。目前传统分割方法主要几类:阈值分割、区域分割、边缘分割以及特定理论分割等[1]。随着研究的深入,学者们不断改进原有的图像分割方法并把其它学科的一些新理论和新方法用于图像分割,提出了不少新的分割方法。图像分割后提取出的目标可以用于交通安全、图像搜索、地质勘探以及医学等领域[2]。

1.2 阀值分割

阀值分割算法是一种最常用的并行区域技术,它是图像分割中应用数量最多的一类。其关键问题是如何确定阈值,只要能确定一个合适的阈值,就可以较好的将图像分割开来。阀值分割的有点是算法的时间复杂度和空间复杂度较好,算法易于实现,因此有着效率高、速度快的美誉。至今,人们已经发明多种阀值分割算法,诸如全局阀值、自适应阀值、最佳阀值等等[3]。

1.3 区域分割

区域生长是一种典型的区域分割技术,其中心思想就是将某些具有相似特征的像素点集合起来构成一块区域[4]。在具体实现过程中,首先找一个生长的起点,就是从每个要分割的区域中找一个像素,称为种子像素;然后在该像素周围像素中,寻找相同或相似的像素,然后与种子像素进行合并,得到新的像素区域;此后将新的像素作为新的起点,重复之前的步骤,直到没有新的像素点可以加进来为止。区域生长法计算简单,对于连通性好的目标,具有较好的分割效果。缺点是需要人的干预来确定种子像素,同时它也对噪声敏感,可能导致区域内有空洞。另外,它是一种串行算法,当目标较大时分割速度较慢。

1.4 边缘分割

边缘分割算法的中心思想是通过检测图像中灰度级或者结构发生突变的地方,来界定目标与背景的分界线。通常背景和目标在分界出会有比较明显的灰度变化,利用此特征,就可以提取出感兴趣的目标。在数学分模型析上,通常利用微分算子进行处理,如 Roberts算子和Sobel算子,Laplace算子和Kirsh算子等[5]。这些算子对噪声敏感,因此只适合于噪声较小且不太复杂的图像。

2 Otsu阀值分割算法

常用的阀值分割方法有:手动人工选择法,自动阈值选择法,分水岭算法等。其中自动阀值选择法中,常用的方法有:迭代式阀值选择法,类间方差阀值分割法(Otsu),最小误差阀值选择法。本文选择了类间方差阀值分割法作为研究的算法,其具有诸多优点和可实现性、成熟性[2]。

2.1 Otsu阀值分割算法概述

Otsu阀值分割法的理论基础是基于二元统计分析得到的,其中心思想是选取的最佳阈值应当尽可能的使图像分割产生的区域类内方差最小,类间方差最大。具有性能稳定、分割效果好的优势[6]。本文就是对类间方差法进行研究和实现,具体内容将在下文中详细介绍。与传统的直方图不同,Otsu阈值分割利用直方图统计来进行分割,即使用混合集概率密度函数估计来代替图像的灰度值,它默认图像中的每个像素点在灰度上都是满足独立同分布的,通过分析图像的概率密度,达到图像的分布误差尽可能小,实现对图像的有效分割。

2.2 Otsu阀值分割算法原理

Otsu分割法是一种常用的阀值选取方法,该方法利用类间方差最大自动确定阀值,算法简单、处理速度快。一维Otsu算法的中心思想是:假设要分割的图像中具有N个像素点,像素灰度级为L(L一般为256),在图像中灰度级为i的所有像素点的个数为ni,则图像中灰度级为i的像素点的个数占整幅图像中的概率为:

其中所有灰度级出现的概率和应当为1,即

图像分割的目的是将目标和背景相分离,因此在计算的时候,也把图像分成两个部分:C0和C1,其中C0表示背景区域,C1表示目标区域。假定图像的分割阈值为k,则此法图像的灰度均值为:

C0和C1的均值分别为:

其中:

综上可得:

类间方差定义为:

算法让k在整个图像的灰度级范围内依次取值,然后计算相对应的当最大时对应的k值即为 Otsu算法的最佳阀值。通过以上公式不难看出,该算法公式简单,且易于实现。

3 Otsu阀值分割算法C++实现思想

考虑图像阀值选择算法的理论性和不易检测性,作者将其应用到具体的实际领域中取检验其效果,该方法能够有效检验算法的准确性和实际可操作性,同时也是一个可供借鉴的算法测试方法,理论的研究最终需要应用到实际的应用中才能发挥其应有的作用。因此,文章选择以运动目标检测方向为切入点,以汽车目标检测为项目背景,将Otsu阀值分算法作为其中的子模块,来检验算法的实际效果。

基于之前的Otsu理论分析,本节利用Opencv基础库,给出了Otsu算法的C++程序设计机制。其算法流程如图1所示。

程序开始,对图像进行直方图统计,得出二维灰度图像中各个灰度级在整个灰度图像中出现的概率。接着计算灰度图像的概率密度,得出累计分布。由之前公式定义,我们得出类间方差,进而计算出类间方差的最大值,也就是我们想要的阀值,至此,程序流程运行分析完毕。

具体代码如下:

int otsuThresh(const cv::Mat&gray)

{

图1 Otsu算法流程图Fig.1 Flow chart of Otsu algorithm

int i,j;

const int numBins=256;

double counts[numBins];

memset(counts,0,sizeof(double)*numBins);

for(i=0;i

{

const uchar*ptr=gray.ptr(i);

for(j=0;j

counts[ptr[j]]++;

}

double p[numBins];

double sumT=gray.rows*gray.cols;

for(i=0;i

p[i]=counts[i]/sumT;

double omega[numBins];

double mu[numBins];

omega[0]=p[0];

mu[0]=p[0]*1;

for(i=1;i

{

omega[i]=omega[i-1]+p[i];

mu[i]=mu[i-1]+p[i]*(i+1);

}

double mu_t=mu[numBins-1];

double sigma_b_squared[numBins];

for(i=0;i

{

double tmp=mu_t*omega[i]- mu[i];

double tmp2=omega[i]*(1-omega[i]);

if(tmp2==0)

sigma_b_squared[i]=-1;

else

sigma_b_squared[i]=(tmp*tmp)/tmp2;

}

double maxVal=sigma_b_squared[0];

for(i=1;i

if(sigma_b_squared[i]>maxVal)

maxVal=sigma_b_squared[i];

if(maxVal==-1)

return 0;

else

{

j=0;

sumT=0;

for(i=0;i

if(sigma_b_squared[i]==maxVal)

{

sumT+=(i+1);

j++;

}

int idx=(int)floor((sumT/j+0.5));

return (idx-1);

} }

4 系统测试与总结

4.1 测试环境搭建

在本系统中,编程环境选用Opencv2.4.8和微软VS2010编译器。Opencv2.4.8是一种开源的用于图像处理和计算机视觉的函数库,由Intel公司使用C++高级语言开发,其可以应用到诸多图像处理领域,如人机互动、物体识别、图象分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析、汽车安全驾驶等领域。VS2010是微软公司开发的编程工具,支持最新的C++标准。操作系统我们选用win7 32位系统。

4.2 系统测试

为了验证算法在工程应用方面的性能,将其应用到了车辆目标检测的具体项目中,采用一段交通视频来验证提出的模型,图2是实验的最后结果,其中左图是原始图像,右图是检测和跟踪结果,检测方框可随着目标的大小而改变。由实验结果可以看出,该算法具有较好的工程实用性。

图2 系统测试结果Fig.2 The result of the system test

5 结束语

文中主要对图像分割算法Otsu[7]进行了原理分析说明,给出了数学模型和C++程序设计机制,将其应用到汽车车辆目标检测系统中,并在编译器环境下进行了测试,结果表明,该方法在运动物体的检测系统中,快速有效,能够满足实时跟踪的目的,具有较强的工程实践意义。

[1]孙凤杰,王鹤,范杰清.基于遗传算法的图像阈值分割研究[J].电力系统通信,2008,29(193):35-38.SUN Feng-jie,WANG He,FAN Jie-qing.Study on image threshold segmentation based on genetic algorithm[J].Telecommunication for Electric Power System,2008,29(193):35-38.

[2]杨帆,廖庆敏.基于图论的图像分割算法的分析与研究[J].电视技术,2006(7):80-83.YANG Fan,LIAO Qing-fan.Analysis and research of graphbased segmentation method[J].Video Engineering,2006(7):80-83.

[3]韩思奇,王蕾.图像分割的阈值法综述[J].系统工程与电子技术,2002,6(4):91-102.HAN Si-qi,WANG Lei.A survey of thresholding methods for image segmentation[J].Systems Engineering and Electronics,2002,6(4):91-102.

[4]王钧铭,高立鑫.GrabCut彩色图像分割算法的研究[J].电视技术.2008,6(32):15-17.WANG Jun-ming,GAO Li-xin.Research of GrabCu color image segmentation algorithm[J].Video Engineering, 2008,6(32):15-17.

[5]梁艳梅,翟宏琛,常胜江,等.基于最大隶属度原则的彩色图像分割方法[J].物理学报,2003,11(52):2655-2659.LIANG Yan-mei,ZHAI Hong-chen,CHANG Sheng-jiang,et al.Color image segmentation based on the principle of maximum degree of membership[J].ACTA Physica Sinica,2003,11(52):2655-2659.

[6]刘金梅,赵春晖.组合均值平移和区域合并的图像分割算法[J].哈尔滨工程大学学报,2008,10(29):1126-1130.LIU Jin-mei,ZHAO Chun-hui.Image segmentation with mean shift and region merging methods[J].Journal of Harbin Engineering University,2008,10(29):1126-1130.

[7]安健,张扬.基于Otsu和模糊核聚类算法的极化SAR图像分类[J].电子科技,2014(2):42-45.AN Jian,ZHANG Yang.Polarization SAR image classification based on Otsu and fuzzy kernel clustering algorithm[J].Electronic Science and Technology,2014(2):42-45.

猜你喜欢

类间阀值方差
概率与统计(2)——离散型随机变量的期望与方差
基于OTSU改进的布匹检测算法研究
基于贝叶斯估计的多类间方差目标提取*
光敏传感器控制方法及使用其的灭蚊器
方差越小越好?
计算方差用哪个公式
基于类间相对均匀性的纸张表面缺陷检测
基于小波分析理论的桥梁监测信号去噪研究
激光多普勒测速系统自适应阀值检测算法
方差生活秀