第一范文网 - 专业文章范例文档资料分享平台

OTSU阈值分割的实现

来源:用户分享 时间:2025/6/26 6:26:25 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

武汉理工大学《专业综合课程设计》

C0类像素所占的总面积的比例为:

?0??Pi (4)

i?0k?1 C1类像素所占的总面积的比例为:

?1?1??0 (5) C0类像素的平均灰度级为:

?0??0(k)/?0 (6) C1类像素的平均灰度级为:

?1??1(k)/?1 (7) 其中,

?0(k)??iPi (8)

i?0k?1 ?1(k)??iPi?1??0(k) (9)

i?kL?1 最大类间方差的公式为:

?2(k)??0(???0)2??1(???1)2 (10) 令k从0~L-1变化,计算在不同k值下的类间方差?2(k),使得?2(k)最大值时的那个k值就是所要求的最优阈值。

方法二:使用库函数的算法

在matlab工具箱提供的graythresh函数求取阈值采用的就是OTSU算法,使用库函数求取阈值就是调用graythresh函数选择阈值。

3

武汉理工大学《专业综合课程设计》

2 设计实现程序

依据本次课程设计的要求,在程序设计中,我用了非库函数和库函数两种方法进行图像的阈值求取,然后将图像进行人工选择不同阈值的阈值分割,以便进行对比。由于要实现的功能不止一个,程序比较复杂,所以为了方便程序的阅读与理解,我将程序进行分模块编写。具体程序如下:

function main %主程序

clear;close all; %清除变量,关闭所有窗口 [name path]=uigetfile('e\\dx1102.jpg'); %获取图片路径及文件名 I=imread([path name]); %读图 I=rgb2gray(I); %彩色转黑白 while 1 %循环执行

disp('0 原图 1 OTSU 2 全局阈值'); %显示功能提示信息 select=input('请选择:'); %选择相应功能 switch select

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

case 1 %输入1 OTSU法

fun1(I);

case 2 %输入2 全局阈值法 fun2(I);

otherwise %其他值不处理 end end

function yuantu(I) %显示原图 figure

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

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

4

武汉理工大学《专业综合课程设计》

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); à类像素所占面积的比例 w1=1-w0; á类像素所占面积的比例 if w0==0|w0==1 %当w0为1或0时提前结束本次循环 continue end

u0=dot([0:k-1],Ni(1:k)/N)/w0; à类像素的平均灰度 u1=dot([k:255],Ni(k+1:256)/N)/w1; á类像素的平均灰度

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

5

武汉理工大学《专业综合课程设计》

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

level=round(level*255); %四舍五入计算调用系统函数的阈值 disp('调用库函数求得的阈值:') disp(level)

function fun2(I) %阈值分割程序 [width height]=size(I); th=input('请输入阈值:'); for i=1:width for j=1:height

if(I(i,j)

else BW1(i,j)=1; end end end figure

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

%获取图片宽高 %灰度小于阈值时则为黑色 % 灰度大于等于阈值时则为白色 6

搜索更多关于: OTSU阈值分割的实现 的文档
OTSU阈值分割的实现.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c9gj443g5tp1j03u4hzdp_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top