基于梯度调整的矩不变自动阈值图像分割算法
来源:互联网 发布:java基础常见面试题 编辑:程序博客网 时间:2024/06/15 12:26
来源:电子技术应用 作者:罗诗途 罗飞路 张王已 王艳玲 文演
摘要:提出了一种改进的矩不变自动阈值算法。该算法针对矩不变自动阈值法忽略图像细节的缺点,在矩不变自动阈值的基础上增加了基于目标边缘像素的梯度调整,从而使分割效果兼顾图像的整体和细节。该算法无须迭代或搜索,运算速度快,可以满足实时性的要求。仿真结果表明,该算法能有效地对目标图像进行分割。
关键词:图像分割 阈值选取 矩不变法 梯度调整 目标跟踪
图像分割是计算机视觉中的一个关键问题,它是一种重要的图像分析技术。其目的是将图像中有意义的特征或者需要应用的特征提取出来。图像分割所遵循的基本原则是,使区域内部所考虑的特征或属性是相同或相似的。而这些特征或属性在不同的区域中则不同、存在差异[1]。人们通常将图像分割的方法归纳为基于灰度直方图的阈值化方法和基于区域增长法两大类。其中阈值化方法因其简单、计算量小、性能较稳定而成为图像分割中应用最广泛的分割技术。近年来,随着各学科新理论和方法的提出,人们也提出了许多结合特定理论、方法和工具的分割技术,例如基于数学形态学的分割技术、借助统计模式识别方法的分割技术、利用神经网络的分割技术等[2]。
图像阈值分割是根据一定的阈值将目标从视场背景分离出来的过程。在实际系统中,图像目标和背景之间并不具备截然不同的灰度,随着可见光照射角度的不同,目标的亮度和背景的亮度均要变化。因此阈值的正确选择是很重要的,直接影响着分割的精度及图像描述分析的正确性。通常采用自适应阈值选取,下面介绍基于梯度调整的矩不变自动阈值法,它克服了矩不变自动阈值法的缺陷,达到较好的分割效果。
1 矩不变阈值分割法介绍
矩是随机变量的数学特征。矩法是由 Karl pearson在1894年引入的参数点估计算法,其基本思想是:样本抽自总体,样本的矩在一定程度上反映了总体的矩。因此可以用样本矩函数的估计作为相应的总体矩函数的估计量。矩法是一种效率较高的正态性检验方法。具体作法是:样本矩作为相应总体矩的估计量;以样本矩的函数作为相应的总体矩同样函数的估计量。这种方法最常见的应用是用样本平均数估计总体数学期望。
从统计学观点来看,图像可以看作是二维随机过程(随机场)中的一个样本,这个样本可以看作是理想图像的模糊视觉,其特性反映了总体的特性。从统计的角度来看,分割就是由样本估计总体的特征,由样本的分布估计总体的分布,分割本身也是对整体的一种描述和估计,是一个参数估计的问题,可以用参数估计的方法进行目标图像的分割。矩不变阈值分割法就是把矩法用于图像的分割,其基本思想是:使阈值分割前后,图像的矩保持不变[3]。矩不变阈值法可以看作是一种图像变换,它将原始模糊图像变换成理想图像。
二维图像的第k阶矩mk定义为:
其中i为灰度值,pi为图像中灰度为i的像素比例。对于图像分割来说,如果进行二值分割,则分割后只有Zo和Z1两个灰度级,且Zo<Z1。低于阈值的像素比例和高于阈值的像素比例分别使用p0和p1表示,则分割后图像的前三阶矩:
对于划分目标和背景的最佳阈值,应当保持分割前后的图像的前三阶矩相等。即有:
mi'=mi
矩不变法的运算速度较快,可以满足实时性的要求,但其受目标影响较大,目标大小的变化会影响分割的准确性。
2 矩不变法的梯度调整
矩不变法是根据样本估计总体的特性推导而出,是根据图像的整体信息进行图像分割。这种分割方法在实际应用中,发现分割后的目标边缘细节信息有很大的丢失。通过对算法原理及不足点的分析,本文利用图像中目标边界和相邻背景的灰度差别较大、而目标区域或背景区域内部像素间的灰度差别较小的特性,提出了一种基于梯度调整的改进的矩不变自动阈值法。改进后的算法的基本原理如下:
首先由矩不变法得到初始分割阈值t,然后利用梯度算子对图像进行处理,计算出图像的梯度分布。设现行扫描点、后一行扫描点和下一行中相邻点的灰度为f(i,j),f(i+1,j)和f(i,j+1),在x、y方向上的一阶差分定义为:
梯度定义为:
G=Δxf(i,j)i+Δyf(i,j)j (8)
其模为:
为了简便计算,梯度模G[f(i,j)]选用如下的近似公式:
G[f(i,j)]=max[|Δxf(i,j)|,|Δyf(i,j)|] (10)
根据计算出的梯度模,找出边缘像素。设边缘像素的梯度为Gef(i,j),则有:
其中Te为边界梯度阈值,可适当选取为(Gmax-Gmin)/2左右。
再求出边缘像素的梯度均值:
MG=E[Ge[f(i,j]] (12)
这样,基于梯度调整的矩不变自动阈值分割法的阈值T为:
T=t-α·MG (13)
其中,α(0≤α≤0.3)为调整系数,根据经验在0.1左右选择。
3 算法仿真
在仿真试验中,选取了两幅图像,以矩不变自动阈值法和基于梯度调整的矩不变阈值法作分割,这两幅图像分别具有双峰直方图和单峰直方图的特性。由图1可以看出这两种阈值法在分割目标灰度分布简单的图像上的效果不相上下,都能比较好地分割出目标图像。由图2可以看出,当直方图为单峰或为单调函数时,用矩不变阈值法进行分割后的目标图像,虽然与原目标图像很相近,但是背景的干扰比较严重,存在较大的误判率,不利于后续的跟踪处理;而用基于梯度调整的矩不变阈值法对图像分割后,无明显的误判,分割出来的目标图像轮廓鲜明,可以极为方便地确定目标质心,有利于后续跟踪处理。从结果上可以看出其分割效果明显优于矩不变阈值法;且基于梯度调整的矩不变阈值法的算法相对简单,无须迭代或搜索,运算速度快。
到目前为止,虽然人们已经提出了很多种图像分割方法,但没有任何一种图像分割方法能够适用于所有的图像[4]。如何选择分割方法,主要是根据实际的应用环境和具体的目标而定。笔者所从事的“车载电视跟踪系统”中,目标图像分割是自动目标识别和跟踪的重要环节,其性能对跟踪系统具有显著影响。应用基于梯度调整的矩不变自动阈值分割法,由实验结果可以看出,能满足系统实时处理的要求,而且在处理相对复杂的目标图像时,能够取得比较好的效果。
int Karl(Mat& img){ //int Z0=0,Z1=255; int rows = img.rows; int cols = img.cols; int Hist[256]; float PIs[256]; // 图像直方图,256个点 int i,j,x,y; int nps; int Size=rows*cols; // 对直方图置零... //memset(ihist, 0, sizeof(ihist)); for (i = 0; i <256; i++) { Hist[i]=0; } // 生成直方图 for (i =0; i < rows; i++) { uchar* ptr = img.ptr<uchar>(i);for (j = 0; j < cols; j++) { //nps =(int) image[i*cols+j];nps = ptr[j];Hist[nps]++;} } for (i = 0; i <256; i++){PIs[i]=(float)Hist[i]/Size;} double m0=1,m1=0,m2=0,m3=0;double C0,C1,G,P0,P1=0,Tr; for (i = 0; i <256; i++) //计算三个矩{m1+=PIs[i]*i;m2+=PIs[i]*i*i;m3+=PIs[i]*i*i*i; } C0=double((m1*m3-m2*m2)/(m2-m1*m1));//转换 C1=double((m1*m2-m3)/(m2-m1*m1)); G=double((sqrt(C1*C1-4*C0)-C1)/2); P0=double((G-m1)/(2*G+C1));//计算机P0 for (i = 0; i <256; i++) { P1+=PIs[i];if(P1==P0){Tr=i;break;}else if(P1>P0){Tr=i-1;break;} } int Gf[500][500]; int xf,yf, Temp; int max0=0,min0=255; for (i =0; i < rows-1; i++) { uchar* ptr = img.ptr<uchar>(i); uchar* ptr1 = img.ptr<uchar>(i+1); for (j = 0; j < cols-1; j++) { //xf=abs((int) image[(i+1)*cols+j]-(int) image[i*cols+j]); //yf=abs((int) image[(i)*cols+j+1]-(int) image[i*cols+j]); xf=abs(ptr1[j]-ptr[j]); yf=abs(ptr[j+1]-ptr[j]); Gf[i][j]=max(xf,yf); if(Gf[i][j]>max0) { max0=Gf[i][j]; } if(Gf[i][j]<max0) { min0=Gf[i][j]; } } } int Te=(max0-min0)/2; double MG=0,Cont=0; for (i =0; i < rows-1; i++) { for (j = 0; j < cols-1; j++) {if(Gf[i][j]>=Te) { MG+=Gf[i][j]; Cont++; } } } MG=double(MG/Cont); Tr=abs(Tr-0.4*MG); return Tr;}
- 基于梯度调整的矩不变自动阈值图像分割算法
- 基于梯度调整的矩不变自动阈值图像分割算法
- Karl算子(基于梯度调整的矩不变自动二值化阈值选取)
- 图像分割 1.基于阈值的算法
- 基于matlab的图像阈值分割算法---参数法(自动阈值选择)
- 图像分割—基于图像数据的自动选择阈值(基本全局阈值处理方法)
- 基于粒子群算法的图像阈值分割
- 基于Otsu算法的图像自适应阈值分割
- 基于阈值图像分割
- 基于阈值法的图像分割技术
- 基于阈值法的图像分割技术
- 图像算法:图像阈值分割
- 图像算法:图像阈值分割
- 基于OTSU算法和基本粒子群优化算法的双阈值图像分割
- 基于OTSU算法和基本粒子群优化算法的双阈值图像分割
- 图像分割中阈值的自动选取的研究及其算法实现
- 图像分割中阈值的自动选取的研究及其算法实现
- 图像分割中阈值的自动选取的研究及其算法实现
- 在android中如何实现在应用首页按两次返回键(back)退出应用
- 十七周 被墨水污染的数字
- Linux引导过程内幕
- 双系统如何正确的删除Ubuntu
- PhoneGap(Cordova)之js调用本地native的方法 2
- 基于梯度调整的矩不变自动阈值图像分割算法
- Linux初始RAM磁盘介绍
- iOS中使用blend改变图片颜色
- 反射
- hive中的order by+sort by+distribute by+cluster by
- 关于json的一些误解
- UML建模工具Trufun Plato的下载及安装为Eclipse的插件
- jqGrid方法
- NDK入门(环境搭建与demo编写)