大津阈值分割matlab实验,OTSU(大津法)分割源程序(MATLAB版)

接下来介绍OTSU方法的原理:

***************************************************************************************************************************************************************

OTSU法对于具有双峰性质的灰度图像或是彩色图像的某一通道的分割效果很好,程序为了增加健壮性加了个可以根据实际情况确定的修正值th_set.

**************************************************************************************************************************************************************

function y1=OTSU(image,th_set)

�=imread('color1.bmp');

gray=rgb2gray(image);%原图像的灰度图

low_high=stretchlim(gray);%增强图像,似乎也不是一定需要

gray=imadjust(gray,low_high,[]);

% subplot(224);imshow(gray);title('after adjust');

count=imhist(gray);

[r,t]=size(gray);

n=r*t;

l=256;

count=count/n;%各级灰度出现的概率

for i=2:l

if count(i)~=0

st=i-1;

break

end

end

%以上循环语句实现寻找出现概率不为0的最小灰度值

for i=l:-1:1

if count(i)~=0;

nd=i-1;

break

end

end

%实现找出出现概率不为0的最大灰度值

f=count(st+1:nd+1);

p=st;q=nd-st;%p和分别是灰度的起始和结束值

u=0;

for i=1:q;

u=u+f(i)*(p+i-1);

ua(i)=u;

end

%计算图像的平均灰度值

for i=1:q;

w(i)=sum(f(1:i));

end

%计算出选择不同k的时候,A区域的概率

d=(u*w-ua).^2./(w.*(1-w));%求出不同k值时类间方差

[y,tp]=max(d);%求出最大方差对应的灰度级

th=tp+p;

if th

th=tp+p;

else

th=th_set; %根据具体情况适当修正门限

end

y1=zeros(r,t);

for i=1:r

for j=1:t

x1(i,j)=double(gray(i,j));

end

end

for i=1:r

for j=1:t

if (x1(i,j)>th)

y1(i,j)=x1(i,j);

else

y1(i,j)=0;

end

end

end

%上面一段代码实现分割

% figure,imshow(y1);

% title('灰度门限分割的图像');

接下来介绍OTSU方法的原理以及用C语言实现:

阈值将原图像分成前景、背景两个图像。

前景:用n1,csum,m1来表示在当前阈值下的前景的点数,质量矩,平均灰度;

背景:用n2,sum-csum,m2来表示在当前阈值下的背景的点数,质量矩,平均灰度;

当取最佳阈值时,背景应该与前景差别最大,关键在于如何选择衡量差别的标准;

而在otsu算法中这个衡量差别的标准就是最大类间方差;

在以下程序中类间方差用是sb表示,最大类间方差用fmax,关于最大类间方差(otsu)的性能:

类间方差对噪音和目标大小十分敏感,它仅对类间方差为单峰值的图像产生较好的分割效果,

当目标与背景的大小比例悬殊时,类间方差准则函数可能呈现双峰或多峰,此时效果不好,但是类间方差使用是最少的。

最大类间方差(otsu)的公式推导:

记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1;

则图像的总平均灰度为:u=w0*u0+w1*u1;

前景和背景图像的方差:g=w0*(u0-u).^2+w1*(u1-u).^2

=w0*w1*(u0-u1).^2

此公式为方差公式。

上面的g公式也就是下面程序中得 sb的表达式:

当方差g最大时,可以认为此时前景与背景差异最大,也就是此时的灰度值是最佳阈值;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BZOJ-1798 维护序列

线段树。支持区间加、区间乘、区间查询和。 标记下移还有取模要注意。 var n,p,q,i,s,t:longint; a:int64; num,n1,n2,n3:array[0..500000] of int64; procedure build(o,l,r:longint); var m,i:longint; begin m:(lr) div 2; if lr then begin n1[o]:num[l];…

matlab pca可视化,利用Matlab实现PCA demo展示

input_data rand(1000,3);%随机生成1000个样本,每个样本有x,y,z三个属性 figure(1);%控制画图的窗口为1hold off;%使当前轴和图形不再具备被刷新的性质,关闭在此基础上再画图plot3(input_data(:,1), input_data(:,2), input_data(:,3), ‘ro‘);%% Func…

matlab短均线滞后项,均线理论的滞后性问题

对移动平均线有一定了解的人都会发现移动平均线理论存在一个缺点,那就是移动平均线的信号具有一定的滞后性,这是制约移动平均线运用的最大因素。介绍了均线的计算方法.从它的计算方法中也能看出目前均线的数值要受到前一阶段股价的影响,而且均…

IOS侧滑框架合集

侧滑框架 https://github.com/gresrun/GHSidebarNav https://github.com/ipup/PPRevealSideViewController https://github.com/gotosleep/JASidePanels https://github.com/jamztang/JTRevealSidebarDemo https://github.com/ECSlidingViewController/ECSlidingViewController…

python捕获摄像头帧_Xuggler教程:帧捕获和视频创建

python捕获摄像头帧注意:这是我们的“ Xuggler开发教程 ”系列的一部分。 到目前为止,在我们的Xuggler教程系列中,我们已经对视频处理的Xuggler进行了介绍,并讨论了转码和媒体修改 。 在本教程中,我们将看到如何解码视…

【python核心编程】第六章 序列

1、操作符 (1)成员关系操作符:in 、not in >>> string abcdefg>>> a in stringTrue>>> h in stringFalse>>> h not in stringTrue *补充知识*:string模块 >>> import string>>…

java物业管理系统设计,JAVA物业管理系统设计与实现(论文+源代码)

【实例简介】JAVA物业管理系统设计与实现(论文源代码)【实例截图】【核心代码】JAVA物业管理系统设计与实现(论文源代码)└── JAVA物业管理系统设计与实现(论文源代码)├── JAVA物业管理系统设计与实现(论文源代码)│ ├── JAVA物业管理系统│ │ ├── JWS│ │…

MyEclipse 编写 ExtJS 卡死问题解决方法

MyEclipse 8.6 在 jsp 中编写 ExtJS时,会出现卡死现象,让人甚是头疼。网上找了很多方法,折腾半天,还是不管用。 什么MyEclipse 优化,Validation 取消,MyEclipse 在 JSP 中打 "点" 时&#xff0…

matlab试用版的user id,免费试用MATLAB

请选择其一AlabamaAlaska美属萨摩亚APO/FPO AAAPO/FPO AEAPO/FPO APArizonaArkansasCaliforniaCaroline IslandsColoradoConnecticutDelawareDistrict of ColumbiaFlorida格鲁吉亚关岛HawaiiIdahoIllinoisIndianaIowaKansasKentuckyLouisianaMaineMariana Islands马绍尔群岛Mar…

java的aqs是什么,AQS在Java中的应用

上篇文章我们详细分析了AQS的底层实现原理,这节就来探索jdk中使用AQS实现的工具类ReentrantLock一, 是什么?怎么用?是什么?是一个独占锁,也就是在并发环境下同一时刻只能有一个线程获得资源,也是一个可重入锁.可重入锁: 一个线程已经获取到了该资源,下次再次获取资源时不会出…

jasper 获取当前日期_入侵Jasper以获取JSP页面的对象模型

jasper 获取当前日期为了对我的JSP执行一些检查和统计分析,我需要一个包含在其中的元素的类似于DOM的层次模型。 但是,解析JSP页面并不是一件容易的事,最好留给它一个出色的工具-Tomcat,Jetty,GlassFish以及其他所有工…

php怎么把字符转成大写,php怎么把字符串转换为大写

php把字符串转换为大写的方法:可以利用内置函数strtoupper()来进行转换。strtoupper()函数可以把指定的字符串转换为大写,并返回被转换为大写的字符串。使用函数:(学习视频推荐:php视频教程)strtoupper() 函数把字符串转换为大写&…

C#开发 —— 基础知识

C# 用于开发可以运行在 .Net 平台上的应用程序,C# 本身只是一种语言,尽管它是用于生成面向 .Net 环境的代码,但它本身不是 .Net 的一部分 Console.WriteLine 命名空间 —— using 指令将命名空间名所标识的命名空间内的类型成员导入到当前编译…

JMS 2.0的新增功能

这篇文章列出了JMS 2.0 ( Java EE 7平台的一部分)引入的所有新API(接口/类/注释等)。 这些分类如下 API简化 使用方便 异常处理 杂 这是一个简短的摘要以及一些代码片段 API简化 JMSContext 在Connection和Session对象之上…

oracle存储过程与函数的区别及作用,Oracle存储过程与存储函数-入门

文章思维导图一. 存储过程和存储函数的定义定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数。复杂点的解释:存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL 语句集,该SQL语句…

CC++初学者编程教程(8) VS2013配置编程助手与QT

1. 2. 配置编程助手 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39 40 41 42 43 这个时候我们就在VS2013里面集成了QT,编程助…

java内存模型概述_Java内存模型-快速概述和注意事项

java内存模型概述在计算中, 内存模型描述了线程如何通过内存交互,或更一般地,它指定了为分段内存或分页内存平台生成代码时允许编译器进行的假设。 在给定程序和该程序的执行跟踪的情况下,它实质上描述了执行跟踪是否是该程序的合…

oracle目录删除后恢复,Oracle删除后不能重新安装的解决方法

很多朋友只用了Oracle的删除,但很多情况下,他会发现重新安装时,点了下一步安装界面就消失了,往往无奈下只好重装系统,其实只是你数据库没删干净,删干净就不会出现这种情况了。实现方法:1、 开始…

jquery简单实现树形结构收缩展开效果

代码量很少&#xff0c;注意要取消冒泡 e.stopPropagation(); <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title></title><style type"text/css">.child{ display: none;}li{ cu…

转子碰磨 matlab,航空科普:什么是航空发动机转子碰磨?

中国航空报讯&#xff1a;随着人们对航空发动机油耗、推重比等要求的逐步提高&#xff0c;提升航空发动机运行效率&#xff0c;尤其是提升民用航空发动机的经济性已经变得越来越重要。航空发动机的总体运行效率是气动效率、燃烧效率、冷却效率与机械效率等共同决定的。其中&…