OTSU阈值分割的实现要点Word格式.docx
《OTSU阈值分割的实现要点Word格式.docx》由会员分享,可在线阅读,更多相关《OTSU阈值分割的实现要点Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
关键词:
图像分割阈值分割最大类间方差法
1原理与实现
1.1图像分割
数字图像处理的目的之一是图像识别,而图像分割是图像识别工作的基础。
图像分割是将一幅图像分解成若干互不交叠的、有意义的、具有相同性质的区域。
这些区域互不交叠,每一个区域内部的某种特性或特征相同或接近,而不同区域间的图像特征则有明显差别,即同一区域内部特性变化平缓,相对一致,而区域边界处则特性变化比较剧烈。
区域内是一个所有像素都有相邻或相接触像素的集合,是像素的连通集。
在一个连通集中任意两个像素之间,都存在一条完全由这个集合的元素构成的连通路径。
图像分割的基础是像素间的相似性和不连续性。
所谓“相似性”是指在某个区域内像素具有某种相似的特性,如灰度一样,纹理相同;
所谓“不连续性”是指特性不连续,如灰度值突变等。
图像分割的方法有多种,依据工作对象来分,可分为点相关分割和区域相关分割;
按算法分类,可分为阈值法、界限检测法、匹配法、跟踪法等。
然而大多数分割方法都不能将图像完美的分割,具体处理时总是在各种约束条件之间找一种合理的平衡。
1.2阈值分割
阈值处理是一种区域分割技术,它适用于物体与背景有较强对比的景物分割。
它主要是利用图像中要提取的目标物体和背景在灰度上的差异,选择一个合适的阈值,通过判断图像中的每一个像素点的特征属性是否满足阈值的要求来确定图像中该像素点应该属于目标区还是应该属于背景区域,从而产生二值图像。
它计算简单,而且总能用封闭而且连通的边界定义不交叠的区域。
在使用阈值法进行分割技术时,阈值的选取成为能否正确分割的关键,若将所有灰度值大于或等于某阈值的像素都被判属于物体,则将所有灰度值小于该阈值的像素被排除在物体之外,如果阈值选取得过高,则过多的目标区域将被划分为背景,相反如果阈值选取得过低,则过多的背景将被划分到目标区。
因此,边界就由这样一些内部点的集合组成,这些点都至少有一个邻点不属于该物体。
由于物体和背景以及不同物体之间的灰度级有明显的差别,因此,在图像的灰度级直方图中会呈现明显的峰值。
当图像灰度直方图峰型分布明显时,常以谷底作为门限候选值。
所以只要适当地选择阈值,即可对图像进行分割,因而成为一种简单而广泛应用的方法。
1.3OTSU算法
OTSU算法,又称最大类间方差阈值选择法,是一种自适应的阈值确定的方法。
它是按图像的灰度特性,将图像分成背景和目标两部分。
背景和目标之间的类间方差越大,说明构成图像的两部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小。
因此,使类间方差最大的分割意味着错分概率最小。
方法一:
不使用库函数的算法
设X是一幅具有L级灰度级的图像,其中第i级像素为个,其中i的值在0~L-1之间,图像的总像素点个数为:
(1)
第i级出现的概率为:
(2)
在OTSU算法中,以阈值k将所有的像素分为目标和背景两类。
其中,类的像素灰度级为0~k-1,类的像素灰度级为k~L-1。
图像的总平均灰度级为:
(3)
类像素所占的总面积的比例为:
(4)
(5)
类像素的平均灰度级为:
(6)
(7)
其中,
(8)
(9)
最大类间方差的公式为:
(10)
令k从0~L-1变化,计算在不同k值下的类间方差,使得最大值时的那个k值就是所要求的最优阈值。
方法二:
使用库函数的算法
在matlab工具箱提供的graythresh函数求取阈值采用的就是OTSU算法,使用库函数求取阈值就是调用graythresh函数选择阈值。
2设计实现程序
依据本次课程设计的要求,在程序设计中,我用了非库函数和库函数两种方法进行图像的阈值求取,然后将图像进行人工选择不同阈值的阈值分割,以便进行对比。
由于要实现的功能不止一个,程序比较复杂,所以为了方便程序的阅读与理解,我将程序进行分模块编写。
具体程序如下:
functionmain%主程序
clear;
closeall;
%清除变量,关闭所有窗口
[namepath]=uigetfile('
e\dx1102.jpg'
);
%获取图片路径及文件名
I=imread([pathname]);
%读图
I=rgb2gray(I);
%彩色转黑白
while1%循环执行
disp('
0原图1OTSU2全局阈值'
%显示功能提示信息
select=input('
请选择:
'
%选择相应功能
switchselect
case0%输入0显示原图
yuantu(I);
case1%输入1OTSU法
fun1(I);
case2%输入2全局阈值法
fun2(I);
otherwise%其他值不处理
end
end
functionyuantu(I)%显示原图
figure
imshow(I);
title('
原图'
)
functionfun1(I)%阈值计算程序
Ni=imhist(I);
%计算直方图数组
N=sum(Ni);
%总像素点个数
delamax=0;
%类间方差最大值
threshold=0;
%阈值
fork=2:
255
u=dot([0:
255],Ni/N);
%图像的总平均灰度级
w0=sum(Ni(1:
k)/N);
%C0类像素所占面积的比例
w1=1-w0;
%C1类像素所占面积的比例
ifw0==0|w0==1%当w0为1或0时提前结束本次循环
continue
u0=dot([0:
k-1],Ni(1:
k)/N)/w0;
%C0类像素的平均灰度
u1=dot([k:
255],Ni(k+1:
256)/N)/w1;
%C1类像素的平均灰度
dela(k)=w0*(u-u0)^2+w1*(u-u1)^2;
%类间方差公式
%求出类间方差的最大值,最大时的那个值对应的k值存入delamax
ifdela(k)>
delamax
delamax=dela(k);
threshold=k-1;
BW1=im2bw(I,threshold/255);
%阈值分割
imshow(BW1),title('
自编程序运行结果'
)%显示图片
自编程序求的的阈值:
)%显示提示信息
disp(threshold)%显示结果
%调用系统函数OTSU阈值分割
level=graythresh(I);
%调用系统函数计算阈值
BW2=im2bw(I,level);
imshow(BW2),title('
调用库函数运行结果'
level=round(level*255);
%四舍五入计算调用系统函数的阈值
调用库函数求得的阈值:
disp(level)
functionfun2(I)%阈值分割程序
[widthheight]=size(I);
%获取图片宽高
th=input('
请输入阈值:
fori=1:
width
forj=1:
height
if(I(i,j)<
th)%灰度小于阈值时则为黑色
BW1(i,j)=0;
else%灰度大于等于阈值时则为白色
BW1(i,j)=1;
全局阈值'
3程序运行结果与分析
3.1程序运行结果
运行matlab,输入程序运行,按照要求输入指令得到以下结果:
图1命令窗口运行结果
图2显示原图
图3自编程序运行结果
图4调用库函数运行结果
图5人工选择阈值为156的运行结果
图6人工选择阈值为120的运行结果
图7人工选择阈值为180的运行结果
3.2结果分析
由图1结果显示可以看出自编程序和调用库函数的阈值都是156,得到同样的分割阈值,由图3和图4两幅处理后的结果图也可以看出,处理的效果基本相同,满足设计要求。
当使用全局阈值法时,只要输入的阈值和OTSU算出的阈值一样,即输入156时,如图5可见处理结果就完全一样。
当输入的阈值高于或低于156时,处理结果便产生了差异。
由图6和图7可以看到,当输入阈值为120时,目标图像比例明显增加,背景图像明显减少;
当输入阈值为180时,目标图像则减少,背景图像增加。
这正验证了如果阈值选取得过高,则过多的目标区域将被划分为背景,相反如果阈值选取得过低,则过多的背景将被划分到目标区。
4心得体会
由于这一学期我们基本没有什么课程学习,所以在拿到这次课程设计的题目后,我认真的回顾了一遍课本上的知识,尤其重点复习了图像分割这一方面。
我这次课程设计的重点是用最大类间方差阈值选择法(OTSU),要求不使用库函数和使用库函数两种方法实现,并且针对不同的阈值进行阈值分割的结果进行分析。
本次课设的难度并不大,实现原理比较简单,但是编程的细节要注意,我在编程的过程中对有些函数不太熟悉,常常要停顿下来查阅资料,所以我决定先不急于做出结果,磨刀不误砍柴工,我查阅了很多相关的资料,认真学习了matlab的使用和一些函数的基本应用,总算对课程设计要求的知识学习达到了一定的标准,最后顺利的完成了课设要求。
通过本次课程设计,我对图像分割有了深入的了解,也加深了对matlab的掌握程度,在学到科学知识的同时,我也学到了做事的道理:
不要急于求成,要一步一个脚印,理论和时间都很重要,在实践遇到困难时,我们要加强自己的理论水平,用理论来指导实践,然后再用实践来检验理论。
感谢学校和老师给我这一次实践的机会!
参考文献
[1]杨杰,黄朝兵.数字图像处理及MATLAB实现电子工业出版社,2013
[2]陈怀琛.MATLAB及其在课程中的应用指南西安电子科技大学出版社,2000
[3]罗平辉,冯平.MATLAB7.0在图像处理中的应用机械工业出版社,2007
[4]朱习军.MATLAB在信号与系统与图象处理中的应用电子工业出版社,2002
[5]张强,王正林.精通MATLAB图像处理电子工业出版社,1997