Otsu多阈值快速求解算法
Otsu多阈值快速分割算法及其在彩色图像中的应用
面做 了些 有效 的尝 试 。首先 引入 独 立峰 值 划分 分割 区域 实现 Os 多闽值 的 自动 选 取 , t u法 而后 采 用松 弛 因子 法进 一 步 降低 了算 法运 算量 , 最后把 它应 用于彩 色 图像颜 色 自动 分割 上 , 证 了算 法的 准确性 验
和 实 时性 。
Jn 0 6 u e2 O
Os 阈值 快 速 分 割算 法及 其在 彩 色 图像 中的应 用 t u多
王祥 科 , 郑志 强
( 国防科技大学 机 电工程与 自 动化学院, 湖南 长沙 4 07 ) 103
( x2 6 5 7 @1 3 cm w l 6 O 7 1 6 .o ) 【
摘
要:t Os 主要 用在灰 度 图像 单 闽值 的 自动 分 割 上 , 文在 彩 色 图像 多 阈值 的 快 速分 割 方 u法 本
中 , 只考虑 局部 区域 A— 如果 B或 B— , 以用最大类 间方 c可
差法很好地找 到( B 或 ( c) A, ) B, 之间 的分割 阈值 , 为局部 称
最佳 阈值 。把 图 1 如 图 中的 划分 , 作 分别 找 出 ( , ) ( , A B , B
c) … , D, ) , ( E 的局部最佳 阈值 , 就可 以分割开各个 独立的波 峰, 从而完成 图像 的多 阈值分割 。
关键 词 : t Os u法 ; 局部 最佳 闽值 ; 立峰值 ; 弛 因子 ; 色图像 分 割 独 松 彩
中图分 类号 : P9 .1 T 3 14
文 献标识 码 : A
值, 实际应用 中对 目 标一 背景类 的图像具有很好 的分割效果 ,
但 在多阈值 分割 中不满足这一条件 。从另一个角度分析 Os t u 法原理 , 的实质 是在两个 波峰之 间找到 一个统计意义上 的 它 最佳波谷 , 波谷划 分开两 个独立 的波 峰 , 用 从而 区分 开 目标 ,
简述 otsu 算法的原理和步骤。
简述 otsu 算法的原理和步骤。
OStsu 算法是一种基于阈值分割的图像去噪算法,其基本原理是在原始图像上选取一个阈值,将像素值低于该阈值的像素设置为噪声,将像素值高于该阈值的像素设置为清晰的图像。
具体步骤如下:
1. 选取一个阈值 T = 255/n,其中 n 是像素值的范围。
2. 计算像素值差 U = (P - Q) / n,其中 P 和 Q 分别是清晰的图像和噪声的图像的像素值,n 是像素值的范围。
3. 将像素值 U 小于等于阈值 T 的像素设为噪声,即 N(T, U) = {(U, V)},其中 V 表示该像素值下的样本集合,V 的索引从 1 到 n。
4. 将像素值 U 大于阈值 T 的像素设置为清晰的图像,即 C(T, U) = {(X, Y)},其中 X 和 Y 表示该像素值下的样本集合,X 的索引从 1 到 n,Y 的索引从 1 到 n。
5. 将像素值 U 介于阈值 T 和 255/n 之间的像素设置为噪声,即 N(T, U) = {(U, V)},其中 V 表示该像素值下的样本集合,V 的索引从 1 到 n。
6. 重复步骤 3 到步骤 5,直到所有像素都被划分为清晰和噪声两部分。
7. 返回清晰和噪声的图像集合 C(T, U) 和 N(T, U)。
OStsu 算法的优点在于简单易用,能够快速地去掉大量的噪声,
同时保持图像的基本特征。
但是其缺点在于对于低光照环境下的图像可能会失效,并且在处理高分辨率图像时需要更多的计算资源。
otsu阈值法
otsu阈值法Otsu阈值法是一种基于图像直方图的自适应阈值分割算法,能够将图像分成两类,一类为目标,一类为背景。
Otsu阈值法适用于二值化、图像分割等领域,其较其他阈值法具有更高的分类精度和更好的适应性。
一、Otsu阈值法原理Otsu阈值法基本原理是寻找一条阈值,使得选定阈值后,目标和背景之间的类间方差最大,而目标内部的类内方差最小。
具体实现步骤如下:1.计算图像直方图以及归一化直方图,得到每个灰度级的像素数分布占比。
2.设图像总像素数为N,计算每个灰度级的平均值以及总平均灰度值。
3.遍历每个灰度级,计算在此处取阈值后的类内方差和类间方差。
4.找到使类间方差最大的灰度值作为最终阈值,实现图像分割。
二、Otsu阈值法优点1. Otsu阈值法是一个自适应的阈值选择方法,无需人工干预,能够自动适应图像的复杂度及灰度分布的变化。
2. Otsu阈值法分割效果较好,比一般的基于灰度的阈值选择方法有更高的分类精度和更好的适应性。
该算法分割结果明显,重要结构清晰。
3. Otsu阈值法计算简单,算法复杂度较低,可快速实现。
三、Otsu阈值法应用1. 对于基于形态学等运算的图像分析方法,通常要求目标区域和背景在灰度值上有较明显的差异,Otsu阈值法可用于实现灰度二值化,将图像转化为黑白格式,方便后续处理。
2. Otsu阈值法可用于实现形态学滤波操作,改善图像质量,可用于实现去噪、平滑等操作。
3. Otsu阈值法可用于实现形态学变形操作,改变目标形态,实现图像增强、特征提取等功能。
四、Otsu阈值法的不足1. 当图片存在较多噪点时,Otsu阈值法对噪点敏感,可能会产生误分割。
2. 当图像存在较多亮度变化时,Otsu阈值法可能无法有效分割,影响分割效果。
3. 阈值的选择过程可能会受到灰度值分布不均等因素影响,因此需要对图像的灰度值分布情况进行加以考虑。
综上可知,Otsu阈值法是一种简单而又实用的图像分割方法,具有较高的分类精度和较好的适应性。
二维Otsu阈值法的快速算法
h so rm n o r go s a d t o a h e in a on t o m e t — i n in l h so r m, t ih 2 Otu i g a i t e in , n o k e c r go s a p i t o fr a n w wo dme so a itg a t o whc D s tr s od n lo tm n h a t e u sv g rt m w r p l d e t g te r go u e fte t r s o d h n te t o h e h li g a g r h a d te fs e ri ea o i e e a p i ,g t n e in n mb ro e h l .T e h w i r l h e i h h h
J un lo o ue piain o ra fC mp trAp lct s o
I S 1 01 9 81 S N 0 . 0
201 0 01 2. 5—
计 算机 应用,0 2 3 () 15 2 1 ,2 5 :2 8—16 20 文章编号 :0 1 9 8 (0 2 0 10 — 0 1 2 1 )5—15 0 2 8— 3
xu a g xn . PENG o h Ch n - i Gu - ua ( colfSi c,x 7 0 2 ,C ia Sho o e e ot etnP l e i i sy inS a ni 0 9 hn ) cn h e y h a U ei a 1
COD YID EN J I U
ht : / w .o a c t / w w jc . n p
d i1.7 4 S ..0 7 2 1 . 15 0:0 3 2 / P J 18 .0 2 02 8
OTSU算法学习OTSU公式证明
OTSU算法学习OTSU公式证明OTSU算法学习 OTSU公式证明1 otsu的公式如下,如果当前阈值为t,w0 前景点所占⽐例w1 = 1- w0 背景点所占⽐例u0 = 前景灰度均值u1 = 背景灰度均值u = w0*u0 + w1*u1 全局灰度均值g = w0(u0-u)*(u0-u) + w1(u1-u)*(u1-u) = w0*(1 – w0)*(u0 - u1)* (u0 - u1)⽬标函数为g, g越⼤,t就是越好的阈值.为什么采⽤这个函数作为判别依据,直观是这个函数反映了前景和背景的差值.差值越⼤,阈值越好.下⾯是⼀段证明g的推导的matlab代码syms w0 u0 u1 %w0 前景均值 u0 前景灰度均值 u1 背景灰度均值%背景均值w1 =1- w0;%全局灰度均值u=w0*u0+w1*u1;%⽬标函数g=w0*(u0-u)*(u0-u)+w1*(u1-u)*(u1-u);%化简的形式g1 =w0*w1*(u0-u1)*(u0-u1);%因式展开a1 = expand(g)%结果是 - u0^2*w0^2 + u0^2*w0 + 2*u0*u1*w0^2 - 2*u0*u1*w0 - u1^2*w0^2 + u1^2*w0a2 = expand(g)%结果是 - u0^2*w0^2 + u0^2*w0 + 2*u0*u1*w0^2 - 2*u0*u1*w0 - u1^2*w0^2 + u1^2*w0%对g进⾏因式分解a2 = factor(g)%结果 -w0*(u0 - u1)^2*(w0 - 1)这⾥是matlab初等代数运算的讲解2 关于最⼤类间⽅差法(otsu)的性能:类间⽅差法对噪⾳和⽬标⼤⼩⼗分敏感,它仅对类间⽅差为单峰的图像产⽣较好的分割效果。
当⽬标与背景的⼤⼩⽐例悬殊时,类间⽅差准则函数可能呈现双峰或多峰,此时效果不好,但是类间⽅差法是⽤时最少的。
3 代码实现public int GetThreshValue(Bitmap image){BitmapData bd = image.LockBits(new Rectangle(0,0, image.Width, image.Height), ImageLockMode.WriteOnly,image.PixelFormat);byte* pt =(byte*)bd.Scan0;int[] pixelNum = new int[256];//图象直⽅图,共256个点byte color;byte* pline;int n, n1, n2;int total;//total为总和,累计值double m1, m2, sum, csum, fmax, sb;//sb为类间⽅差,fmax存储最⼤⽅差值int k, t, q;int threshValue =1;// 阈值int step =1;switch(image.PixelFormat){case PixelFormat.Format24bppRgb:step =3;break;case PixelFormat.Format32bppArgb:step =4;break;case PixelFormat.Format8bppIndexed:step =1;break;}//⽣成直⽅图pline = pt + i * bd.Stride;for(int j =0; j < image.Width; j++){color =*(pline + j * step);//返回各个点的颜⾊,以RGB表⽰pixelNum[color]++;//相应的直⽅图加1}}//直⽅图平滑化for(k =0; k <=255; k++){total =0;for(t =-2; t <=2; t++)//与附近2个灰度做平滑化,t值应取较⼩的值{q = k + t;if(q <0)//越界处理q =0;if(q >255)q =255;total = total + pixelNum[q];//total为总和,累计值}//平滑化,左边2个+中间1个+右边2个灰度,共5个,所以总和除以5,后⾯加0.5是⽤修正值pixelNum[k]=(int)((float)total /5.0+0.5);}//求阈值sum = csum =0.0;n =0;//计算总的图象的点数和质量矩,为后⾯的计算做准备for(k =0; k <=255; k++){//x*f(x)质量矩,也就是每个灰度的值乘以其点数(归⼀化后为概率),sum为其总和sum +=(double)k *(double)pixelNum[k];n += pixelNum[k];//n为图象总的点数,归⼀化后就是累积概率}fmax =-1.0;//类间⽅差sb不可能为负,所以fmax初始值为-1不影响计算的进⾏n1 =0;for(k =0; k <255; k++)//对每个灰度(从0到255)计算⼀次分割后的类间⽅差sb{n1 += pixelNum[k];//n1为在当前阈值遍前景图象的点数if(n1 ==0){continue;}//没有分出前景后景n2 = n - n1;//n2为背景图象的点数//n2为0表⽰全部都是后景图象,与n1=0情况类似,之后的遍历不可能使前景点数增加,所以此时可以退出循环if(n2 ==0){break;}csum +=(double)k * pixelNum[k];//前景的“灰度的值*其点数”的总和m1 = csum / n1;//m1为前景的平均灰度m2 =(sum - csum)/ n2;//m2为背景的平均灰度sb =(double)n1 *(double)n2 *(m1 - m2)*(m1 - m2);//sb为类间⽅差if(sb > fmax)//如果算出的类间⽅差⼤于前⼀次算出的类间⽅差{fmax = sb;//fmax始终为最⼤类间⽅差(otsu)threshValue = k;//取最⼤类间⽅差时对应的灰度的k就是最佳阈值}}image.UnlockBits(bd);image.Dispose();return threshValue;}参考了这篇⽂章4 ⼆维otsu算法下图是⼆维otsu的⽴体图,是对右边的A进⾏⼆维直⽅图统计得到的图像, 遍历区域为5*5.这是对应的matlab代码%统计⼆维直⽅图 i 当前点的亮度 j n*n邻域均值亮度function hist2 = hist2Function(image, n)%初始化255*2565矩阵hist2 = zeros(255,255);[height, width]= size(image);for i =1:heightfor j =1:widthdata = image(i,j);tempSum =0.0;for l =-n:1:nfor m =-n:1:nx = i + l;y = j+m;if x <1x =1;elseif x > widthx = width;endif y <1y =1;elseif y > heighty = height;endtempSum = tempSum + double(image(y,x));endendtempSum = tempSum /((2*n+1)*(2*n+1));hist2(data,floor(tempSum))= hist2(data,floor(tempSum))+1;endend%加载图像imagea = imread('a.bmp');%显⽰图像%imshow(imagea);%显⽰直⽅图%figure;imhist(imagea);%计算⼆维直⽅图hist2 = hist2Function(imagea,2);%显⽰⼆维直⽅图[x,y]=meshgrid(1:1:255);mesh(x,y,hist2)<灰度图象的⼆维Otsu⾃动阈值分割法.pdf> 这篇⽂章讲解的不错.⽂章这⾥有下载下⾯⽤数学语⾔表达⼀下i :表⽰亮度的维度j : 表⽰点区域均值的维度w0: 表⽰在阈值(s,t)时所占的⽐例w1: 表⽰在阈值(s,t)时, 所占的⽐例u0(u0i, u0j): 表⽰在阈值(s,t)时时的均值.u0时2维的u1(u1i, u1j): 表⽰在阈值(s,t)时的均值.u1时2维的uT: 全局均值和⼀维otsut函数类似的⽬标函数sb = w0(u0-uT)*(u0-uT)’ + w1(u1-uT)*(u1-uT)’= w0[(u0i-uTi)* (u0i-uTi) + (u0j-uTj)* (u0j-uTj)] + w1[(u1i-uTi)* (u1i-uTi) + (u1j-uTj)* (u1j-uTj)]这⾥是代码实现.出⾃这篇⽂章:int histogram[256][256];double p_histogram[256][256];double Pst_0[256][256];//Pst_0⽤来存储概率分布情况double Xst_0[256][256];//存储x⽅向上的均值⽮量int OTSU2d(IplImage * src){int height = src->height;int width = src->width;long pixel = height * width;int i,j;for(i =0;i <256;i++)//初始化直⽅图for(j =0; j <256;j++)histogram[i][j]=0;}IplImage * temp = cvCreateImage(cvGetSize(src),8,1);cvSmooth(src,temp,CV_BLUR,3,0);for(i =0;i < height;i++)//计算直⽅图{for(j =0; j < width;j++){int data1 = cvGetReal2D(src,i,j);int data2 = cvGetReal2D(temp,i,j);histogram[data1][data2]++;}}for(i =0; i <256;i++)//直⽅图归⼀化for(j =0; j <256;j++)p_histogram[i][j]=(histogram[i][j]*1.0)/(pixel*1.0);Pst_0[0][0]= p_histogram[0][0];for(i =0;i <256;i++)//计算概率分布情况for(j =0;j <256;j++){double temp =0.0;if(i-1>=0)temp = temp + Pst_0[i-1][j];if(j-1>=0)temp = temp + Pst_0[i][j-1];if(i-1>=0&& j-1>=0)temp = temp - Pst_0[i-1][j-1];temp = temp + p_histogram[i][j];Pst_0[i][j]= temp;}Xst_0[0][0]=0* Pst_0[0][0];for(i =0; i <256;i++)//计算x⽅向上的均值⽮量for(j =0; j <256;j++){double temp =0.0;if(i-1>=0)temp = temp + Xst_0[i-1][j];if(j-1>=0)temp = temp + Xst_0[i][j-1];if(i-1>=0&& j-1>=0)temp = temp - Xst_0[i-1][j-1];temp = temp + i * p_histogram[i][j];Xst_0[i][j]= temp;}double Yst_0[256][256];//存储y⽅向上的均值⽮量Yst_0[0][0]=0* Pst_0[0][0];for(i =0; i <256;i++)//计算y⽅向上的均值⽮量for(j =0; j <256;j++){double temp =0.0;if(i-1>=0)temp = temp + Yst_0[i-1][j];if(j-1>=0)temp = temp + Yst_0[i][j-1];if(i-1>=0&& j-1>=0)temp = temp - Yst_0[i-1][j-1];temp = temp + j * p_histogram[i][j];Yst_0[i][j]= temp;}int threshold1;int threshold2;double variance =0.0;double maxvariance =0.0;for(i =0;i <256;i++)//计算类间离散测度for(j =0;j <256;j++){longdouble p0 = Pst_0[i][j];longdouble v0 = pow(((Xst_0[i][j]/p0)-Xst_0[255][255]),2)+ pow(((Yst_0[i][j]/p0)-Yst_0[255][255]),2);longdouble p1 = Pst_0[255][255]-Pst_0[255][j]-Pst_0[i][255]+Pst_0[i][j];longdouble vi = Xst_0[255][255]-Xst_0[255][j]-Xst_0[i][255]+Xst_0[i][j];longdouble vj = Yst_0[255][255]-Yst_0[255][j]-Yst_0[i][255]+Yst_0[i][j];longdouble v1 = pow(((vi/p1)-Xst_0[255][255]),2)+pow(((vj/p1)-Yst_0[255][255]),2);variance = p0*v0+p1*v1;if(variance > maxvariance){maxvariance = variance;threshold1 = i;threshold2 = j;}}//printf("%d %d",threshold1,threshold2);return(threshold1+threshold2)/2;}总结: ⼆维otsu算法得到⼀个阈值,然后对图像做⼆值化.仍然不能解决光照不均匀⼆值化的问题.⽐⼀维otsu效果好⼀些,但不是很明显.这个算法的亮点在于考虑的点的附近区域的均值.。
阈值分割公式
阈值分割公式阈值分割公式阈值分割是一种常用的图像处理技术,它可以将图像根据给定的阈值进行二值化处理,使得图像中的目标物体与背景色彩有所区分,便于后续的处理。
随着图像处理技术的不断发展,阈值分割也不断完善,其中最常用的就是基于阈值的分割公式。
一、常见阈值分割算法1. Otsu阈值法Otsu是一种基于直方图的阈值分割方法,它的基本思想是寻找一个最佳阈值,使得图像中目标物体与背景的差异最大化。
这种方法适用于灰度图像,具有较好的分割效果。
Otsu算法的计算公式如下:$$\sigma^2(w_0,w_1) =w_0(t)\sigma^2_0(t)+w_1(t)\sigma^2_1(t)$$2. 最大熵阈值法最大熵阈值法是一种基于信息熵的阈值分割方法,它通过最大化图像的熵值,来确定最佳阈值。
这种方法适用于处理具有复杂背景的图像,它的计算公式如下:$$\max H(T)= - \sum_{i=1}^{k}p_i\log_2(p_i)$$3. 基于聚类的阈值分割法基于聚类的阈值分割法是一种就是把原始图像分成若干个子集,使得每个子集都包含一部分图像的像素值,从而将图像进行分割。
它计算每个子集的灰度均值和方差来确定分割阈值,公式如下:$$\max \varepsilon(i)=\frac{(T*\mu_i-\mu)^2}{T*\sigma_i^2+(1-T)*\sigma_{i+1}^2}$$二、阈值分割的应用阈值分割在实际应用中广泛,例如人脸识别、车牌号识别等。
通过对图像二值化处理可以提高算法的精度,使得对目标物体的检测更加准确。
例如,在车牌号识别中,阈值分割可以先进行图像二值化处理,再进行腐蚀、膨胀等操作,从而将车牌号与背景进行分离,然后再进行字符识别等操作,提高了算法的效率和准确性。
三、总结阈值分割是图像处理中最为常见和实用的方法之一,其应用范围广泛,通过选择不同的阈值分割算法和参数,可以实现不同的图像处理任务。
otsu阈值处理 确定阈值的算法
otsu阈值处理确定阈值的算法
otsu阈值处理是一种自适应的二值化图像处理方法,它通过计算像素灰度值的方差来确定最佳的二值化阈值。
这种方法适用于背景和前景之间的灰度差异较大的图像。
otsu阈值处理的具体算法如下:
1. 统计图像灰度级的直方图,计算每个灰度级出现的频率。
2. 初始化类间方差为0,然后逐个尝试每个灰度级作为阈值,并将图像分为两个部分,每个部分的像素分别计算其均值和方差。
3. 根据分割后两部分的像素数量比例,分别计算出两个部分的加权均值。
然后根据这两个加权均值和分割后两部分的像素数量比例计算出类间方差。
4. 如果计算出的类间方差大于当前最大类间方差,则将当前灰度级作为最佳阈值,并将当前类间方差作为最大类间方差。
5. 重复步骤2至4,直到尝试完所有灰度级为止。
6. 返回最佳阈值。
otsu阈值处理的优点是可以自动确定最佳阈值,不需要人工干预,具
有更好的适应性。
在图像的二值化处理中,otsu阈值处理也被广泛应用。
在实际应用中,otsu阈值处理算法还需要注意一些问题。
首先是需要
对图像进行预处理,包括去噪和灰度级缩放等。
其次是需要根据具体
情况选择合适的处理方法。
例如,对于漏斗状的图像,可以使用形态
学操作进行处理,以提高分割效果。
综上所述,otsu阈值处理是一种基于类间方差的自适应二值化方法,
其算法简单、运算速度快、效果好。
在图像处理领域得到了广泛应用,并且是一种十分经典和有效的算法。
otsu阈值
otsu阈值Otsu阈值图像处理中,阈值分割技术是一种比较简单而且有效的方法,用于将图像分为不同的物体或背景等部分,而Otsu阈值则是其中一种非常优秀的阈值分割方法。
本文将会介绍Otsu阈值的原理、方法以及应用。
原理Otsu阈值是基于图像的灰度值来确定阈值的。
其原理是利用方差作为判断依据。
在Otsu阈值算法中,将整个灰度级别划分为两部分:一个是高于某个阈值的像素,另一个是低于该阈值的像素。
计算两部分的方差,然后把两部分的方差加起来,得到一个总体方差。
通过改变分割的阈值,可以得到许多不同的总体方差值,最终选择方差最小的那个点作为最佳分割点。
方法Otsu阈值的计算步骤如下:1. 首先,统计图像中每个像素灰度级的出现次数,构建灰度级直方图。
将直方图归一化,使得表示灰度分布的概率分布和最终分割结果都在0到1之间。
2. 然后,计算每个像素灰度级的累积分布函数(CDF),并将其归一化。
CDP是指图像中低于或等于该灰度值的像素占总像素数的比例。
例如,灰度级为50的像素的CDF是所有灰度值小于或等于50的像素数目除以总像素数。
3. 接下来,计算每个像素灰度值的均值,或者说期望值。
4. 然后,计算总体方差。
如果将所有像素分成高于和低于某个阈值的两部分,则总方差可以用这两部分的方差加起来来求得。
5. 最后,选择能够使总方差最小的阈值作为最终的分割阈值。
应用Otsu阈值分割方法在图像二值化中应用广泛,尤其是在图像分割,目标检测和图像识别中。
在Otsu阈值分割中可以得到二值图像,即黑白图像。
在OCR识别、人脸识别、指纹识别等多个领域中,Otsu阈值分割都有着广泛的应用。
总结Otsu阈值是一种非常有效的阈值分割方法,其原理简单,易于操作,适用于大多数图像处理领域。
通过计算整幅图像的方差来确定阈值,使得分割结果达到最佳的效果。
在图像处理技术的研究中,Otsu阈值分割将成为一种不可或缺的技术。
Otsu多阈值快速求解算法
0 引 言
图像分割是将 图像划 分成若干个互不相交 的小 区域 的过 程, 常见 的图像 分割方法有很多 , 比如 : 于阈值 的图像 分割 、 基 模糊方法 、 缘 检测 的方 法 、 征空 间 聚类 的方 法等 J 边 特 。其 中基于 阈值 的方法计算 简单 , 割效果好 J 在基 于阈值 的 分 方法 中, t Os u方法 是 一 种性 能较 好 的方 法 , 以两个 评价 它 函数即最大类问方差 和最小类 内方 差为基 1 01 2月
计算机应 用
Ju nlo o ue piain o r a fC mp trAp l t s c o
V0. 1 No 1 13 . 2 D c 2 1 e .0 1
文章编号 :0 1 9 8 ( 0 1 1 3 6 10 — 0 1 2 1 ) 2— 33—0 3
Ke r s ma e s g e t t n h so r ne a ; o a r s o d O s t o ; l - r s o d y wo d :i g e m n ai ; itg a i tr l lc t e h l ; tu me h d mu t t e h l o m v l h ih
Ab t a t sr c :Otu h sb e d l s d b c u e o s smp ii n c l u ai n a d g o e me t t n rs h An n s a e n wie y u e e a s fi i l t i ac lt n o d s g n ai e u . t cy o o d ma y s h lr a e p tf r a d mu t t r s o d O s t o o ma e i mo e u eu n moe c mp e it r s B t ti l ・ c o as h v u o w r l i h e h l tu me h d t k t - r s f l i r o lx p cu e . u h s mu t i t r s od Otu meh d i o w e ce c d t o s mi g h e h l s t o s f o f i n y a i c n u n .Co c r i g ti h r g ,t i a e d itg a i tr as l i n me n en n ss ot e h sp p rma e h s r m e v h a o n l i t n h n t e rp d d c oo a d t e k f rt e t r s od i h ne v f s, a d t e h a i ih t my w s u e o s e o h h e h l n te i tr a . T e i r v me ti h s p p r c n r s 1 h mp o e n n ti a e a man an g o e e tt n r s l a d s v os o me h x ei n s s o t a h g r h i efc ie i ti o d s g na i e u t n a e lt ft .T e e p r m o i me t h w tt e a o i m s f t . h l t e v
opencv otsu阈值
opencv otsu 阈值介绍在图像处理中,阈值处理是一种常见而重要的操作。
通过阈值处理,我们可以将图像分割成不同的区域,便于后续的图像分析和处理。
而Otsu 阈值法是一种自动确定二值图像阈值的方法,它可以根据图像的直方图自适应地选择最佳的阈值,从而使得前景区域和背景区域的差异最大化。
Otsu 阈值法原理Otsu 阈值法是由日本学者大津展之于1979年提出的,它的原理基于图像的灰度直方图。
假设图像的灰度级别为L ,每个灰度级别对应的像素数为Ni ,总像素数为N 。
Otsu 阈值法的目标是找到一个阈值T ,通过将灰度级别小于等于T 的像素归为一类,灰度级别大于T 的像素归为另一类,从而使得两个类之间的类内方差最小,类间方差最大。
具体来说,Otsu 阈值法将图像分为前景和背景两个类别,通过计算类别内像素的方差和类别间像素的方差,并选择使得类别间方差最大的阈值作为最终的阈值。
在Otsu 阈值法中,我们需要计算两个方差:类别内方差和类别间方差。
类别内方差用来评估单个类别内像素的分布情况,它可以通过以下公式计算:σintra 2(T )=∑N i N Ti=0⋅(μ0−μT )2 其中,T 为阈值,Ni 为灰度级别i 对应的像素数,N 为总像素数,μ0和μT 分别为类别0(灰度级别小于等于T )和类别T (灰度级别大于T )的平均灰度。
类别间方差用来评估两个类别之间的差异,它可以通过以下公式计算:σinter 2(T )=∑N i N L−1i=T+1⋅(μT −μi )2 其中,L 为总的灰度级别数。
通过计算不同阈值下的类别内方差和类别间方差,我们可以选择使得类别间方差最大化的阈值作为最终的阈值。
Otsu阈值法的实现在使用Otsu阈值法时,我们常使用OpenCV库中的cv2.threshold函数。
这个函数接收一个输入图像和一个初始阈值,然后返回最终的阈值和二值化后的图像。
以下是使用Otsu阈值法的代码示例:import cv2# 读取图像img = cv2.imread('image.jpg', 0)# 进行Otsu阈值处理ret, thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 显示结果cv2.imshow("Original Image", img)cv2.imshow("Otsu Threshold", thresh)cv2.waitKey(0)cv2.destroyAllWindows()在这个示例中,我们首先读取一张灰度图像,并将其传递给cv2.threshold函数,同时指定阈值为0。
ostu法计算阈值
ostu法计算阈值OSTU法是一种常用的图像分割方法,用于将图像分成两个部分:前景和背景。
本文将介绍OSTU法的原理和计算阈值的步骤。
一、OSTU法的原理OSTU法是基于图像的灰度直方图的分析来确定阈值的。
它的基本思想是使得图像的前景和背景之间的类间方差最大化,即使得前景和背景之间的差异最大化。
二、计算阈值的步骤1. 首先,读取图像并将其转换为灰度图像。
通过将彩色图像转换为灰度图像,可以简化计算并减少计算量。
2. 然后,计算灰度图像的直方图。
直方图表示了图像中每个灰度级的像素数量。
3. 接下来,计算每个可能的阈值下的类内方差。
类内方差是指在某个阈值下,将图像分成前景和背景两部分后,前景和背景内部的像素灰度值的方差之和。
4. 然后,计算每个可能的阈值下的类间方差。
类间方差是指在某个阈值下,将图像分成前景和背景两部分后,前景和背景之间的像素灰度值的方差。
5. 最后,选取使得类间方差最大化的阈值作为最终的分割阈值。
三、OSTU法计算阈值的优势OSTU法计算阈值的优势在于它能够自动选择最佳的阈值,而无需用户进行手动调整。
这一点尤其适用于大量图像的处理和分割任务。
四、OSTU法的应用领域OSTU法广泛应用于图像处理和计算机视觉领域。
例如,它可以用于图像分割、边缘检测、目标识别等任务中。
在医学影像领域,OSTU法也常用于肿瘤分割、血管分割等应用中。
五、OSTU法的局限性虽然OSTU法在很多情况下表现良好,但它也有一些局限性。
首先,OSTU法假设图像的前景和背景之间的差异是明显的,但在一些复杂的图像场景中,前景和背景之间的差异可能较小。
其次,OSTU 法对噪声敏感,当图像包含大量噪声时,OSTU法可能产生错误的分割结果。
六、总结OSTU法是一种常用的图像分割方法,通过使得图像的前景和背景之间的类间方差最大化来确定阈值。
它具有自动选择最佳阈值的优势,并广泛应用于图像处理和计算机视觉领域。
然而,OSTU法也有一些局限性,需要根据具体的应用场景进行选择和调整。
otsu阈值处理
otsu阈值处理Otsu阈值处理(又称最大类间方差法、最大类间差法)是一种可以自动计算出最适合于图像分割的阈值的方法,它是根据图像的直方图,在直方图的灰度分布上计算特定的阈值,以进行二值化处理,将其应用于图像分割中,可以自动分割出事先想要的目标物体,可以有效地进行图像处理。
一、Otsu阈值处理的原理Otsu阈值处理是根据图像的直方图,来计算适合进行图像分割的阈值,直方图可以表示出一幅图像中每个灰度值的像素数量,若把图像分成了两个灰度阶段,可以将直方图分成两部分,显然需要寻找一个阈值,使得两个灰度阶段之间的灰度差别最大,从而使分割得到的每个阶段内的灰度变化尽可能小。
Otsu阈值是指所求的最理想阈值,它是根据图像的直方图而计算而出。
二、Otsu阈值处理的算法Otsu阈值处理的核心算法步骤如下:(1)统计灰度分布情况:统计图像中像素点的灰度分布,得到存放像素点的数量信息的一个灰度直方图;(2)计算质量函数:计算灰度直方图中每一灰度的总质量函数,及其最大的类间质量函数;(3)计算最优阈值:根据类间质量函数的曲线,寻找出一个最大的类间质量函数,将图像分割成两部分,找出阈值;(4)图像分割:根据所求出的阈值,将图像分割成背景与目标两部分,就能从图像中提取出想要的目标物体。
三、Otsu阈值处理的应用Otsu阈值处理方法主要用于图像分割,它可以自动提取图像中有用的信息,对于一些不容易判断的图像,或者一些非线性的图像,Otsu阈值处理可以帮助我们有效的分割图像,提取出有用的信息。
另外,Otsu阈值处理还应用在图像的压缩,去噪,边缘检测,二值化等多种图像处理方面都有用武之地。
四、Otsu阈值处理的优缺点Otsu阈值处理的优点在于能有效地进行灰度图像处理,而且只需要给出一个灰度值,即可自动进行图像分割。
缺点在于它只能处理灰度图像,在处理彩色图像时,需要进行额外的颜色变换才能获得分割的效果。
总之,Otsu阈值处理是一种简单易懂的计算机视觉技术,它可以有效的进行图像分割,而且操作会比较简单,节省时间,在图像处理中具有很重要的作用。
Otsu多阈值快速求解算法精品文档4页
Otsu多阈值快速求解算法?フ? 要:最大类间方差(Otsu)方法计算简单,分割效果良好,广泛应用于图像的单阈值分割。
为了使Otsu方法能够适应于更加复杂的图像,很多学者对其进行了多阈值的推广,但存在计算量大、效率低的问题。
针对此不足,对Otsu方法也进行了多阈值的推广,首先划分直方图区间,然后采用快速二分法求取区间中的阈值以实现Otsu方法的多阈值扩展,使其在保持良好分割效果的基础上大大节省了时间。
实验说明了该算法的有效性。
?ス丶?词:图像分割;直方图区间;局部阈值;最大类间方差法;多阈值Abstract: Otsu has been widely used because of its simplicity in calculation and good segmentation result. And many scholars have put forward multithreshold Otsu method to make it more useful in more complex pictures. But this multithreshold Otsu method is of low efficiency and time consuming. Concerning this shortage, this paper made histogram intervals first, and then the rapid dichotomy was used to seek for the threshold in the interval. The improvement in this paper can maintain good segmentation result and save lots of time. The experiments show that the algorithm is effective.0 引言图像分割是将图像划分成若干个互不相交的小区域的过程,常见的图像分割方法有很多,比如:基于阈值的图像分割、模糊方法、边缘检测的方法、特征空间聚类的方法等[1]。
Otsu多阈值分割算法的研究
R esearch of O tsu multi threshold segm entation algorithm
HU Y in g , CU IW ei feng
(D ep t. of C o mp. Sci . , Shangq iu N ormal Univ. , Shangq iu 476001, China)
文章编号 : 1004 1478( 2010) 02 0079 03
O tsu 多阈值分割算法的研究
胡颖, 崔伟峰
( 商丘师范学院 计算机科学系 , 河南 商丘 476001) 摘要: 在图像分割中, 确定阈值是关键, 但已有选择阈值的方法多是单阈值法 , 不适用于多目标识别 . 鉴于此 , 提出了一种改进的基于一维 O tsu 的多阈值分割算法. 该算法通过对图像多次分类、 使用分 离变量合并多余的分类、 使用松弛变量搜索阈值等方法提高了运算速度. 实验效果验证了该算法的 有效性 . 关键词 : 图像分割 ; 一维 O tsu 法 ; 多阈值 中图分类号 : TP 312 文献标志码: A
( t) =
t< i∃ m - 1
#
p ( i) ,
背景部分点数 N 1 ( t ) = MN
0
t∃ i∃ m - 1
#
p ( i ) , 目 标均值
1
( t) =
0∃ i ∃ t 1
#
ip ( t) /
0
( t) , 背 景 均 值 =
0
( t) = ( t) + &
t< i ∃ m - 1 1
#
1 0 0
+ ∋ 其中 ,
k 0
m- 1 k1
k
Otsu 法的多阈值推广及其快速实现
i=1 i=1 L L
t
k+1
t
i= t
∑i 2 Pi - 2μk ∑i Pi + μ2 k ∑Pi
k
k+1
t
k+1
i= t
k
i= t
k
=
ωk
1
t
μ2k + ωk μ2k ] ∑i 2 Pi - 2ωk i= t
k
k+1
t
k+1
i= t
收稿日期 : 2004 - 10 - 26
的单阈值分割问题 ; 尽管也有人试图将 Ot su 法推 广到 双 阈 值 分 割 10 , 但 若 推 广 到 多 阈 值 , 由 于 Ot su 法采用盲目搜索 , 其计算量随着阈值数的增 多呈几何级数增长 。因此 , 目前 Ot su 法的应用基 本上局限于单阈值分割 , 实用性受到很大限制 。
Otsu 法的多阈值推广及其快速实现
殷蔚明 , 王典洪
( 中国地质大学机械与电子工程学院 , 武汉 430074)
【摘要】 : 对传统的 Ot su 法进行了推广 , 使其可以应用于图像的多阈值分割 ; 提出以双峰法引导 来提高 Ot su 法多阈值分割图像的实时性和稳定性 。对于直方图具有明显多峰谷特性的灰度图 像 , 利用本文算法进行了实验验证 。 【关键词】 : 多阈值图像分割 ; ot su 法 【中图分类号】 : TP 391 【文献识别码】 : A
n- 1
ωk ω μ = ∑∑ j k (μ k - j)
k = 0 j ≠k n- 1 k=0j> k n- 1
ωkω μ = ∑∑ j k (μ k k=0 j< k
Otsu多阈值算法推广实现
第34卷第6期2009年11月测绘科学Science of Surveying and M app ingVol 134No 16Nov 1作者简介:刘立(19782),女,河北深泽县人,河北秦皇岛燕山大学信息科学与工程学院,硕士研究生,主要从事遥感图像处理方面的研究。
E 2mail:liuli052560@yahoo 1com 1cn收稿日期:2008206226基金项目:河北省教育厅基金:星载CCD 相机高分辨率成像技术研究(课题 编号:2007143)O tsu 多阈值算法推广实现刘 立,焦斌亮,刘钦龙(燕山大学信息科学与工程学院,河北秦皇岛 066004)【摘 要】遥感图像处理中的地物分割是分析和解译遥感图像的必要环节。
本文分析了O tsu 算法进行阈值分割的原理和有效性,针对O tsu 多阈值分割算法计算效率低的缺点,提出了用Nelder 2M ead 单纯形法对O tsu 的多阈值分割进行优化。
将优化的O tsu 算法与传统方法进行了比较,从理论分析和实验结果来看,此方法不仅能获得与传统方法分割一致的结果,而且应用到大尺寸遥感图像的多阈值分割中大大提高了分割效率。
【关键词】 图像分割;多阈值;遥感图像;O tsu 算法;Nelder 2M ead 【中图分类号】TP391;TP751 【文献标识码】A 【文章编号】100922307(2009)06202402031 引言图像分割(I m age seg mentati on )就是按照一定的规则将一幅图像分成若干部分或子集的过程[1],是一种基本的图像分析技术。
简单的说,就是把图像中的物体与背景或物体与物体分割开。
图像分割算法种类繁多,从大的方面来说主要有阈值法、边缘检测法和区域法。
其中阈值法是简单有效的,应用最为广泛。
O tsu 最大类间方差法(也称为大津方法)是阈值法中最基本的算法之一,自提出以来一直被认为是最优的阈值自动选取方法。
Otsu传统算法和快速算法的matlab实现
Otsu传统算法和快速算法的matlab实现说明:每个%%都表示一个模块,每个模块可以单独执行,也可以将%%去掉整体执行。
将读入图像修改成自己机子上的,Otsu传统算法执行顺序如下:cell1-cell2-cell3, Otsu快速迭代算法执行顺序如下:cell1-cell2-cell4。
%%%%%%%%%%%%%%%%%%%%%%%%%% %% cell1 读入图像1I=imread('e:/photo/m/rice.png');%% cell2 显示原图及其直方图subplot(2,2,1);imshow(I);xlabel('a,原图');subplot(2,2,2);imhist(I);%% cell3 Otsu法传统算法的参数说明及步骤%参数说明:%M,N---图像大小%TT,T-----阈值,使得方差为最大的阈值%Ib,Ibav,Ibavm----背景图像,背景图像的灰度平均值,合适阈值时对应的背景图像的灰度平均值%If,Ifav,Ifavm----前景图像,前景图像的灰度平均值,合适阈值时对应的前景图像的灰度平均值%Iav----图像的平均灰度值(数学期望)%Ivar,Ivarm----方差,值最大的方差%%%%%%%%%%%步骤:%1.阈值T从图像的最小灰度值开始遍历,直到最大灰度值。
%2.划分前景和后景:所有I>=T的为背景Ib,得出背景所占比例pb与背景的平均灰度值Ibav;%2.划分前景和后景:所有I<t的为前景if,得出前景所占比例pf与前景的平均灰度值ifav;< p="">%3.求出图像的平均灰度Iav和方差Ivar%4.遍历结束后,Tm即为所求,然后二值化分割。
%%%%%%%%%%%%%%%%%%%%%% [M,N]=size(I);Ivarm=0;T=0;Iav=mean(mean(I));tic;for TT=min(min(I)):max(max(I))%划分前景背景Ib=I(I>=TT);pb=length(Ib)/(M*N);Ibav=mean(Ib);If=I(I<tt);< p="">pf=length(If)/(M*N);Ifav=mean(If);%求类间方差,并找出最大方差Ivar=pb*pf*(Ibav-Ifav)^2if Ivar>IvarmIvarm=Ivar;T=TT;endendtoc;% 输出disp(strcat('大律法计算出的阈值: ',num2str(T)));Iotsu=im2bw(I,double(T)/255);subplot(2,2,2);imshow(Iotsu,[]);xlabel('b,大律法'); %%%%%%%%%%%%%%%%%%%%%%%%%% cel4 OTSU传统算法的快速实现----迭代%参数说明:%M,N---图像大小%T-----阈值(即使得方差为最大的阈值)%gmin,gmax---图像灰度级最小值和最大值%p---图像灰度级概率分布,一维数组长度gmin*gmax%Ibp,Ibav,Ibavm----背景图像灰度级概率,背景图像的灰度平均值,合适阈值时对应的背景图像的灰度平均值%Ifp,Ifav,Ifavm----前景图像灰度级概率,前景图像的灰度平均值,合适阈值时对应的前景图像的灰度平均值%Iav----图像的平均灰度值(数学期望)%Ivar,Ivarm----方差,值最大的方差%%%%%%%%%%%步骤:%1.先求解gmin,gmax,p,Iav,并令Ibp=0,Ibav=0,Ivarm=0;%2.i从gmin+1到gmax+1迭代搜索,(下面为方便说明,使用了序列)Ibp(i)=Ibp(i-1)+p(i),Ibav(i)=(Ibp(i-1)*Ibav(i-1)+i*p(i))/Ibp(i),Ivar(i)=(Ibp(i)*(Iav-Ibav(i))^2)/(1-Ibp(i));%2.判断Iavm是否大于Iav,若是,则i=i+1,重复第2步;若否,则Iavm=Iav,T=i,Ibavm=Ibav,Ifavm=Ifav,i=i+1,重复第2步;%3.迭代结束,T即为所求,二值化分割。
求阈值最佳方法
OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法。
1. OTSU算法原理简介对于一幅图像,设当前景与背景的分割阈值为t时,前景点占图像比例为w0,均值为u0,背景点占图像比例为w1,均值为u1。
则整个图像的均值为u = w0*u0+w1*u1。
建立目标函数g(t)=w0*(u0-u)^2+w1*(u1-u)^2,g(t)就是当分割阈值为t时的类间方差表达式。
OTSU算法使得g(t)取得全局最大值,当g(t)为最大时所对应的t称为最佳阈值。
OTSU算法又称为最大类间方差法。
2.OTSU算法例程下面是OSTU算法的C语言代码及其测试,代码基于opencv。
[cpp]view plaincopy1.#include <cv.h>2.#include <highgui.h>3.4.int otsu(IplImage *image)5.{6. assert(NULL != image);7.8.int width = image->width;9.int height = image->height;10.int x=0,y=0;11.int pixelCount[256];12.float pixelPro[256];13.int i, j, pixelSum = width * height, threshold = 0;14.15. uchar* data = (uchar*)image->imageData;16.17.//初始化18.for(i = 0; i < 256; i++)19. {20. pixelCount[i] = 0;21. pixelPro[i] = 0;22. }23.24.//统计灰度级中每个像素在整幅图像中的个数25.for(i = y; i < height; i++)26. {27.for(j = x;j <width;j++)28. {29. pixelCount[data[i * image->widthStep + j]]++;30. }31. }32.33.34.//计算每个像素在整幅图像中的比例35.for(i = 0; i < 256; i++)36. {37. pixelPro[i] = (float)(pixelCount[i]) / (float)(pixelSum);38. }39.40.//经典ostu算法,得到前景和背景的分割41.//遍历灰度级[0,255],计算出方差最大的灰度值,为最佳阈值42.float w0, w1, u0tmp, u1tmp, u0, u1, u,deltaTmp, deltaMax = 0;43.for(i = 0; i < 256; i++)44. {45. w0 = w1 = u0tmp = u1tmp = u0 = u1 = u = deltaTmp = 0;46.47.for(j = 0; j < 256; j++)48. {49.if(j <= i) //背景部分50. {51.//以i为阈值分类,第一类总的概率52. w0 += pixelPro[j];53. u0tmp += j * pixelPro[j];54. }55.else//前景部分56. {57.//以i为阈值分类,第二类总的概率58. w1 += pixelPro[j];59. u1tmp += j * pixelPro[j];60. }61. }62.63. u0 = u0tmp / w0; //第一类的平均灰度64. u1 = u1tmp / w1; //第二类的平均灰度65. u = u0tmp + u1tmp; //整幅图像的平均灰度66.//计算类间方差67. deltaTmp = w0 * (u0 - u)*(u0 - u) + w1 * (u1 - u)*(u1 - u);68.//找出最大类间方差以及对应的阈值69.if(deltaTmp > deltaMax)70. {71. deltaMax = deltaTmp;72. threshold = i;73. }74. }75.//返回最佳阈值;76.return threshold;77.}78.79.int main(int argc, char* argv[])80.{81. IplImage* srcImage = cvLoadImage("D:\\technology\\CV\\Database\\image\\rice.png",0);82. assert(NULL != srcImage);83.84. cvNamedWindow("src");85. cvShowImage("src",srcImage);86.87. IplImage* biImage = cvCreateImage(cvGetSize(srcImage),8,1);88.89.//计算最佳阈值90.int threshold = otsu(srcImage);91.//对图像二值化92. cvThreshold(srcImage,biImage,threshold,255,CV_THRESH_BINARY);93.94. cvNamedWindow("binary");95. cvShowImage("binary",biImage);96.97. cvWaitKey(0);98.99. cvReleaseImage(&srcImage);100. cvReleaseImage(&biImage);101. cvDestroyWindow("src");102. cvDestroyWindow("binary");103.104.return 0;105.}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Otsu多阈值快速求解算法作者:刘艳赵英良来源:《计算机应用》2011年第12期摘要:最大类间方差(Otsu)方法计算简单,分割效果良好,广泛应用于图像的单阈值分割。
为了使Otsu方法能够适应于更加复杂的图像,很多学者对其进行了多阈值的推广,但存在计算量大、效率低的问题。
针对此不足,对Otsu方法也进行了多阈值的推广,首先划分直方图区间,然后采用快速二分法求取区间中的阈值以实现Otsu方法的多阈值扩展,使其在保持良好分割效果的基础上大大节省了时间。
实验说明了该算法的有效性。
关键词:图像分割;直方图区间;局部阈值;最大类间方差法;多阈值中图分类号: TP391.41 文献标志码:AAbstract: Otsu has been widely used because of its simplicity in calculation and goodOtsu method to make ittime consuming. Concerning this shortage, this paper made histogram intervals first, and then the rapid dichotomy was used to seek for the threshold in the interval. The improvement in this paper can maintain good segmentation result and save lots of time. The experiments show that the algorithm is effective.Key words:image segmentation;histogram interval;local threshold;Otsu method;0 引言图像分割是将图像划分成若干个互不相交的小区域的过程,常见的图像分割方法有很多,比如:基于阈值的图像分割、模糊方法、边缘检测的方法、特征空间聚类的方法等[1]。
其中基于阈值的方法计算简单,分割效果好[2]。
在基于阈值的方法中,Otsu方法[3]是一种性能较好的方法,它以两个评价函数即最大类间方差和最小类内方差为基础,稳定性好,成功率高、使用率也很高[4]。
但Otsu方法实质上是一个穷举法,因此计算量较大。
另外,实际中的图像不仅仅是目标和背景的二值分割,更多情况下需要对图像进行多阈值分割,因此单阈值分割效果并不好[5]。
鉴于这些问题,很多学者也尝试了多种扩展方法使Otsu方法能够应用于图像的多阈值分割。
文献[5-6]运用了松弛余量的办法使得多阈值的求取范围进一步减小,同时也提高了算法的效率;文献[7-8]将Otsu单阈值方法进行了多阈值推广并将其应用到彩色图像的分割中;文献[9]引入了单纯形法来优化多阈值算法,提高算法效率。
本文也针对传统Otsu方法中的不足进行了推广与改进,先划分直方图区间,然后采用快速二分法求取区间中的阈值,实验证明本文方法在节省大量时间的同时保持了良好的分割效果。
1 单阈值Otsu算法分析记为大小为M×N的图像在(i, j)点处的灰度值,灰度级数为L,因此可认为f(i, j)的灰度取值范围为[0,L-1]。
设每一灰度级所占的比例为,的计算公式为:。
如果以阈值t去分割图像的目标和背景两部分内容,则目标(本文以为目标)所占的比例为,平均灰度为,背景所占的比例为-单阈值方法就是找出使类间方差最大的t值即可,方差越大说明目标和背景的区别越大,如果分错,方差就会变小[6]。
2 多阈值Otsu方法的推广与实现2.1 多阈值Otsu算法分析单阈值Otsu法基本思想是按阈值把直方图分割成两类:目标类和背景类,这里的多阈值分割其实就是指将图像分成多个类,使得多个类的类间的方差-1i=0∑n--[4]最大。
单阈值Otsu 方法本质上是一种穷举搜索算法,因此多阈值Otsu算法搜索运算的循环次数近似等于,其中L为灰度级数,m为阈值的个数[4-5,9-10],这样的计算过程十分耗时。
2.2 改进的多阈值Otsu算法单阈值Otsu方法的实质是在两个波峰之间找到一个统计意义上的最佳阈值,划分开两个独立的波峰[8]。
复杂图像的直方图也多呈多峰值形状,这也使得多阈值的分割是必要的。
因此,本文首先对直方图进行小区间划分,使得每个小区间内尽量保持只有一个谷底,如图1所示,这样再在小区间内反复使用单阈值Otsu方法可以得到良好的分割效果。
经过上述做法可以使得运算量降为。
为了更近一步降低算法的时间复杂度,本文采取了快速二分法[11]去求解直方图小区间中的分割阈值。
2.3 改进的多阈值算法的具体实现过程2.3.1 直方图区间划分1)对直方图进行多尺度滤波[12-13]可得到更为精确的直方图逼近图像,但是这种算法耗时大,需要进行多次循环运算。
为了得到平滑的直方图并节省时间,本文对直方图进行两次均值滤波,以得到平滑的直方图,这样的处理既能保持原始直方图的良好性状,还有利于后期的进一步处理。
2)在平滑后的直方图中找出峰值集合:-,其中h(l)为直方图原始值,L为灰度级数,为比例系数,可凭经验设置,即如果此灰度是个波峰且原直方图中的值占有一定比例时,峰值被保留下来。
去除距离相近的峰值:在峰值集合中进行筛选,如果两个峰值的距离小于δ(本文取15)时,将小的峰值从中去除[14]。
去除波谷不明显的峰值,假设两个峰值的灰度为i和j,其波谷计算方式为valley=h(i)+h(j)j-i+1h(i)+h(j)2,当波谷满足一定值时就认为这两个峰值是相似的,可以合并。
经过筛选当峰值数仍然大于一定的数目m时,可适当调整参数,重复步骤3)、4)进行二次筛选;否则,结束筛选。
利用最后留下来的峰值进行对直方图进行区间划分,假设筛选后的峰值为,则划分后的区间为。
2.3.2 快速二分法求解阈值在划分好的区间中反复利用快速二分法求取最佳局部阈值,具体步骤如下:1)对单阈值Otsu的目标函数-进行连续域上的扩展,即认为t在连续域上取值,对其求一阶导数,得到满足-2t=0的阈值可使得类间方差σ最大。
2)在划分好的小区间中,定义函数-2k,令,计算f(t)。
如果f(t)足够小,且f(t-1)与f(t+1)异号,那么t即为该区间的分割阈值;如果f(t)>0,则令,继续求f(t)的值并进行判断;如果f(t)3 实验结果比对文献[5-8]虽然对多阈值分割方法进行了改进,使得迭代次数比有明显下降,但它们的本质还是穷举法,只是缩小了搜索的范围。
而本文所采用的图像分割方法是在区间内利用快速二分法求解得到阈值,其迭代次数可以更进一步减少,并保持良好的分割效果。
为了加以比较,本文采用了文献[8]中的测试图像进行结果比对,图像来自网络,与文献[8]中的测试图像并不完全一样,大小为425×318,如图2所示,图3是图2的灰度直方图,图4和图5是多阈值分割和单阈值分割的结果。
多阈值分割时先在灰度直方图中筛选,剩下三个峰值122和160和229,因此直方图划分的区间有四个:[0~122),[122~160),[160~229),[229~256),在这四个区间中应用快速二分法进行求解即可得出分割图像的四个阈值;当然也可不加入0和256级灰度值,只在[122~160),[160~229),区间中求取阈值,本文采用第一种形式。
结果如表1所示。
从分割结果来看,多阈值的分割结果比单阈值分割结果保留了更多细节信息。
其中,松弛余量法是在分好的直方图区间中又另外以一定参数确定一个小范围进行阈值的搜索,文献[5-6,8]等都采用了这种方式,本文采用的松弛余量为直方图小区间的1/4。
经过比较,本文方法在迭代次数上远优于其他方法,同时又没有降低图像分割的效果。
另外,文献[8]是按颜色直方图对图像分割,为了进一步对比,本文也按图像的颜色直方图对图像进行分割,结果如图7所示,分割阈值为16.0, 53.0, 137.0,迭代次数为10,比文献[8]中40次要少很多,同样说明了本算法的有效性。
为了更进一步验证本文算法的有效性,本文在SIMPLicity系统测试集中的张图像上进行了分割实验,并统计了它们的迭代次数,结果如表2所示。
在表2中,每一列分别记录了三种分割方法的平均迭代次数和平均阈值数,通过对比,本文的方法在效率上优于其他两种方法,同时又保持了良好的分割效果。
4 结语传统的多阈值Otsu分割是一个比较耗时的工作,本文利用直方图分段与改进的单阈值Otsu方法结合的方式实现了图像的快速分割。
与传统的方法相比,本文的改进方法既能保持好的分割效果又能提高分割运算的效率。
参考文献[1] 林开颜,吴军辉,徐立鸿.彩色图像分割方法综述[J].中国图象图形学报,2005,10(1):1-10.performance evaluation[J].Journal of Electronic Imaging, 2004, 13(1):146-165.[J].IEEE Transactions on Systems, Man and Cybernetics, 1979, 9(1):62-66.殷蔚明,王典洪.Otsu法的多阈值推广及其快速实现[J].中国体视学与图像分析,2004,9(4):219-223.segmentation through a fast statistical recursive algorithm[J].Pattern Recognition Letters, 2008,29(2):119-125.王磊,段会川.Otsu方法在多阈值图像分割中的应用[J].计算机工程与设计,2008,29(11):2844-2845.李中健,杜鹃,郭璐.将Otsu用于多阈值彩色图像分割的方法及优化[J].计算机工程与应用,2010,46(11):176-178.王祥科,郑志强.Otsu多阈值快速分割算法及其在彩色图像中的应用[J].计算机应用,2006,26(z1):14-15.刘立,焦斌亮,刘钦龙.Otsu多阈值算法推广实现[J].测绘科学,2009,34(6):240-241.李哲学,陈树越.快速多阈值图像分割法[J].计算机应用,2010,30(5):1335-1337.李大卫,姜鹏远,王华强,等.一种基于改进OTSU评价函数的图像分割方法[J]. 测绘科学,2010,35(1):26-27.[J].IEEE Transactions on Pattern Analysis and Machine Intelligence, 1987, 9(1):121-129.邹丹平,冯涛,李咸伟,等.基于EM的直方图逼近及其应用[J].中国图象图形学报,2005,10(11):1458-1461.using homogeneity[J].IEEE Transactions on Image Processing, 2000, 9(12):2071-2082.。