当前位置:文档之家› 数字图像处理课程设计

数字图像处理课程设计

数字图像处理课程设计
数字图像处理课程设计

数字图像处理课程设计报告题目:图像OTSU阈值分割的程序设计

姓名:杨德凯

班级:软件1101

学号:3110608021

指导老师:刘哲

完成时间:2014年6月1日

完成时间:2014年6月1日

目录

摘要............................................................................................................................................. I II 1 原理与实现 (1)

1.1图像分割 (1)

1.2 阈值分割 (1)

1.3 OTSU算法 (2)

1.4 迭代法 (3)

2 程序设计 (4)

2.1 主程序 (4)

2.2 OTSU (5)

2.3 全局阈值 (6)

2.4 迭代法 (6)

3结果与分析 (8)

4 心得体会 (10)

参考文献 (11)

摘要

数字图像处理的目的之一是图像识别, 而图像分割是图像识别工作的基础。图像分割的算法有阈值分割法,边缘检测法,区域分割等,本设计重点介绍了阈值分割法中的最大类间方差法(OTSU)的原理,matlab的实现代码与运行结果,并与matlab自带的库函数运行结果进行比较,还扩展了迭代法分割,手动输入一个阈值进行分割。本程序中很多地方都有输入输出提示,有一定的人机交互。

关键词:OTSU;图像分割;matlab;

1 原理与实现

1.1图像分割

数字图像处理的目的之一是图像识别, 而图像分割是图像识别工作的基础。图像分割是将图像分成一些有意义的区域, 然后对这些区域进行描述, 相当于提取出某些目标区域图像的特征, 判断图像中是否有感兴趣的目标。图像分割的基础是像素间的相似性和跳变性。所谓“相似性”是指在某个区域内像素具有某种相似的特性, 如灰度一样, 纹理相同;所谓“跳变性”是指特性不连续, 如灰度值突变等。从总体上说, 图像分割就是把图像分成若干有意义的区域的处理技术。这些区域互不交叠, 每一个区域内部的某种特性或特征相同或接近, 而不同区域间的图像特征则有明显差别, 即同一区域内部特性变化平缓, 相对一致, 而区域边界处则特性变化比较剧烈。区域内是一个所有像素都有相邻或相接触像素的集合, 是像素的连通集。在一个连通集中任意两个像素之间, 都存在一条完全由这个集合的元素构成的连通路径。连通路径是一条可在相邻像素间移动的路径。所以, 在一个连通集中,你可以跟踪在任意两个像素间的连通路径而不离开这个集合。

图像分割的方法有多种, 依据工作对象来分, 可分为点相关分割和区域相关分割; 按算法分类, 可分为阈值法、界限检测法、匹配法、跟踪法等。近年来出现了一些新的算法和设想。如先使用经典的边缘检测算子对图像做初步的边缘检测, 然后再利用边缘之间空间结构关系来协调, 增强初始检测结果。

1.2 阈值分割

阈值处理是一种区域分割技术, 将灰度根据主观愿望分成两个或多个等间隔或不等间隔灰度区间, 它主要是利用图像中要提取的目标物体和背景在灰度上的差异, 选择一个合适的阈值, 通过判断图像中的每一个像素点的特征属性是否满足阈值的要求来确定图像中该像素点属于目标区还是应该属于背景区域, 从而产生二值图像, 它对物体与背景有较强对比景物的分割特别有用。它计算简单, 而且总能用封闭而且连通的边界定义不交叠的区域。

在使用阈值法进行分割技术时, 阈值的选取成为能否正确分割的关键, 若将所有灰度

10

L i

i N N -==∑

i

i N P N =1

00k i i P

ω-==∑10

1ωω=-10

L i

i iP

μ-==∑

值大于或等于某阈值的像素都被判属于物体, 则将所有灰度值小于该阈值的像素被排除在物体之外, 如果阈值选取得过高, 则过多的目标区域将被划分为背景, 相反如果阈值选取得过低, 则过多的背景将被划分到目标区。因此, 边界就由这样一些内部点的集合组成, 这些点都至少有一个邻点不属于该物体。

由于物体和背景以及不同物体之间的灰度级有明显的差别, 因此, 在图像的灰度级直方图中会呈现明显的峰值。当图像灰度直方图峰型分布明显时, 常以谷底作为门限候选值。

所以只要适当地选择阈值, 即可对图像进行分割, 因而成为一种简单而广泛应 用的方法。

1.3 OTSU 算法

OTSU 算法,又称最大类间方差法,是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU 。它是按图像的灰度特性,将图像分成背景和目标2部分。背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。

设X 是一幅具有L 级灰度级的图像,其中第i 级像素为i N 个,其中i 的值在0~L-1之间,图像的总像素点个数为:

(1)

第i 级出现的概率为:

(2) 在OTSU 算法中,以阈值k 将所有的像素分为目标0C 和背景1C 两类。其中,0C 类的像素灰度级为0~k-1,1C 类的像素灰度级为

k~L-1。

图像的总平均灰度级为:

(3) 0C 类像素所占的总面积的比例为:

(4) 1C 类像素所占的总面积的比例为:

(5)

1

()k i

i k iP μ-==∑

1

10()1()

L i i k k iP k μμ-===-∑0C 类像素的平均灰度级为: 000()/k μμω= (6) 1C 类像素的平均灰度级为:

111()/k μμω= (7)

其中,

(8)

(9) 最大类间方差的公式为:

2220011()()()

k δωμμωμμ=-+- (10) 令k 从0~L-1变化,计算在不同k 值下的类间方差2

()k δ,使得2()k δ最大值时的那个k

值就是所要求的最优阈值。

1.4 迭代法

迭代法的原理是:图像中前景与背景之间的灰度分布为相互不均衡,在这个前提下,实现对两类对象的阈值分割。其算法步骤如下: (1)设定参数0T ,选择一个T 的初始阈值估计值1T 。

(2)用1T 分割图像。将图像分成两组像素:1G 由所有灰度值大于1T 的像素组成,而2G 的所有灰度值小于或等于1T 的像素组成。

(3)对区域1G 和2G 中的所有像素计算平均灰度值1μ和2μ。 (4)计算新的阈值:2T =(1μ+2μ)/2.

(5)如果012||T T T <-,则推出,2T 即所求的全局阈值;否则,将2T 赋给1T ,重复步骤(2)~(5)。

2 程序设计

程序除了有题目中要求的自编程序实现最大类间方差法外,还扩展了手动输入阈值进行分割和迭代法阈值分割,功能较多,为了使程序有良好的人机界面,主程序中提供了简单的菜单界面。同时为了增加程序的可读性,分模块编写,然后在主函数中调用。

2.1 主程序

function main %主程序

clear;close all; %清除变量,关闭所有窗口

[name path]=uigetfile('*.jpg');%获取图片路径及文件名

I=imread([path name]);%读图

I=rgb2gray(I);%彩色转黑白

while 1 %循环执行

disp('0 原图 1 OTSU 2 全局阈值 3 迭代法 4 退出');%提示信息

select=input('请选择:'); %选择相应功能

switch select

case 0

yuantu(I); %输入0 显示原图

case 1 %输入1 OTSU法

fun1(I);

case 2 %输入2 全局阈值法

fun2(I);

case 3

fun3(I) %输入3 迭代法

case 4

return; %输入4 退出

otherwise %其他值不处理

end

end

2.2 OTSU

function fun1(I) %阈值计算程序

Ni=imhist(I);%计算直方图数组

N=sum(Ni); %总像素点个数

delamax=0; %类间方差最大值

threshold=0; %阈值

for k=2:255

u=dot([0:255],Ni/N); %图像的总平均灰度级

w0=sum(Ni(1:k)/N); %C0类像素所占面积的比例

w1=1-w0; %C1类像素所占面积的比例

if w0==0|w0==1 %当w0为1或0时提前结束本次循环continue

end

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 if dela(k)>delamax

delamax=dela(k);

threshold=k-1;

end

end

BW1=im2bw(I,threshold/255); %阈值分割

figure

imshow(BW1),title('自编程序运行结果')%显示图片

disp('自编程序求的的阈值:')%显示提示信息

disp(threshold) %显示结果

%调用系统函数OTSU阈值分割

level=graythresh(I);%调用系统函数计算阈值

BW2=im2bw(I,level); %阈值分割

figure

imshow(BW2),title('调用库函数运行结果')

level=round(level*255);

disp('调用库函数求得的阈值:')

disp(level)

2.3 全局阈值

function fun2(I) %阈值分割程序

[width height]=size(I);;%获取图片宽高

th=input('请输入阈值:');

for i=1:width

for j=1:height

if(I(i,j)

BW1(i,j)=0;

else% 灰度大于等于阈值时则为白色 BW1(i,j)=1;

end

end

end

figure

imshow(BW1),title('全局阈值')

2.4 迭代法

function fun3(I) %迭代法求阈值

J=double(I);

T=(min(J(:))+max(J(:)))/2; %T的初始阈值

done=false; %done 的初始值为false

i=0;

while ~done %当done为false是则执行循环

r1=find(J<=T); %找出不大于T的所有像素点索引值 r2=find(J>T); %找出大于T的所有像素点索引值

Tnew=(mean(J(r1))+mean(J(r2)))/2; %计算新的阈值 done=abs(Tnew-T)<1; %判断|T2-T1|是否小于T0

T=Tnew;

i=i+1;

end

J(r1)=0; %小于等于阈值的为黑

J(r2)=1 ; %大于阈值的为白

figure

imshow(J),title('迭代法求阈值')

function yuantu(I) %显示原图

figure

imshow(I);title('原图')

3结果与分析

将程序文件名保存为main.m,以下为MATLAB主窗口运行的过程与结果

图1 命令窗口运行结果

图2 原图

以下为不同的算法得到的阈值分割结果

结果分析:调用系统函数与自编的程序求得的阈值一样,处理的结果完全一样。手动输入阈值分割的话只要输入的阈值和OTSU 算出的阈值一样,处理结果就完全一样。另外采用迭代法,通过多次用不同的图片处理发现算出的阈值和最大类间方差法基本一样,但有时会有误差,处理结果基本一样。

图3 全局阈值 图4 迭代法

图5 自编程序运行结果 图6 系统函数运行结果

4 心得体会

经过其他同学的帮助以及自己的努力,在六一假期总算把综合课程设计做完了。

通过该课程设计,全面系统的理解了数字图像处理的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的数字图像处理基础原理的知识强化,能够把课堂上学的知识通过自己编写的程序表示出来,加深了对理论知识的理解。

在这次课程设计中,我先是认真阅读课本上的相关知识,理解透后又翻阅关于matlab 的书籍,学习matlab中一些函数及运算符的用法。总体来说,这次课设我学到了很多。在设计过程中,加深了对可内知识的理解就,真正懂得了学以致用,熟悉了matlab的使用,了解了matlab在数字图像处理中的重大应用。做课程设计我体会到了设计的艰辛的同时,更让我体会到成功的喜悦和快乐. 这次数字图像处理课程设计,虽然短暂但是让我得到多方面的提高:

首先,提高了我们的对matlab语言的运用能力。以前也曾用matlab做过课程设计,但以前写的程序既没有人机交互功能,这次课程设计首次运用模块化思想,将多个功能分模块编写,然后通过主函数调用,并且有一定的人机交互。matlab程序设计中也有顺序、选择、循环三种结构,这一点和C语言很像。

其次,掌握了数字图像的原理及运用matlab进行图像处理的方法。通过matlab中提供的图片读取函数可以将一幅黑白图片转换为二维数组,然后运用C语言里掌握的编程思想和图像处理的原理,就能编写出相应程序。以前用过photoshop之类的软件进行过图像处理,但未能理解数字图像处理的本质。通过此次课程设计,能够自己编写函数来进行图像处理,有一种成就感。

最后,查阅参考书和资料的独立思考的能力以及培养非常重要。Matlab我们在设计程序时,遇到很多不曾用过的函数,如im2bw。一方面我们可以查看教材和参考书,另一方面通过网络为我们提供了丰富的学习资源,我们可以快速的在网上查到某个函数的详细用法说明,还能找到很多别人的程序。

参考文献

[1]邱光源.《电路》. 高等教育出版社,2005

[2]张强, 王正林.《精通MATLAB图像处理》. 电子工业出版社,1997

[3]吴锡龙.《电路分析》.高等教育出版社,2004

[4]陈怀琛.《MATLAB及其在课程中的应用指南》. 西安电子科技大学出版社,2000

[5]朱习军.《MATLAB在信号与系统与图象处理中的应用》. 电子工业出版社,2002

相关主题
相关文档 最新文档