自适应阈值算法(大津阈值法)

最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU。它是按图像的灰度特性,将图像分成背景和目标2部分。背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均

灰度记为μ,类间方差记为g。假设图像的背景较暗,并且图像的大小为M×N,图像中像素的灰度值小于阈值T的像素个数记作N0,像素灰度大于阈值T的像素个数记作N1,则有:

      ω0=N0/ M×N                                                         (1)

      ω1=N1/ M×N                                                         (2)

      N0+N1=M×N                                                           (3)

      ω0+ω1=1                                                            (4)

      μ=ω0μ0+ω1μ1                                                   (5)

      g=ω0(μ0-μ)2+ω1(μ1-μ)2                                        (6)



将式(5)代入式(6),得到等价公式:

            g=ω0ω1(μ0-μ1)^2                                                  (7)

采用遍历的方法得到使类间方差最大的阈值T,即为所求。

由于,当图像在254或255灰度值上没有像素点时,求平均灰度时会出现0/0的情况,为避免抛出异常,可在当出现前景像素数为零时,跳出循环。

以下是c++代码(用到OpenCV):

  1. int otsuThreshold(IplImage* img)
  2. {
  3. int T = 0;//阈值
  4. int height = img->height;
  5. int width = img->width;
  6. int step = img->widthStep;
  7. int channels = img->nChannels;
  8. uchar* data = (uchar*)img->imageData;
  9. double gSum0;//第一类灰度总值
  10. double gSum1;//第二类灰度总值
  11. double N0 = 0;//前景像素数
  12. double N1 = 0;//背景像素数
  13. double u0 = 0;//前景像素平均灰度
  14. double u1 = 0;//背景像素平均灰度
  15. double w0 = 0;//前景像素点数占整幅图像的比例为ω0
  16. double w1 = 0;//背景像素点数占整幅图像的比例为ω1
  17. double u = 0;//总平均灰度
  18. double tempg = -1;//临时类间方差
  19. double g = -1;//类间方差
  20. double Histogram[256]={0};// = new double[256];//灰度直方图
  21. double N = width*height;//总像素数
  22. for(int i=0;i<height;i++)
  23. {//计算直方图
  24. for(int j=0;j<width;j++)
  25. {
  26. double temp =data[i*step + j * 3] * 0.114 + data[i*step + j * 3+1] * 0.587 + data[i*step + j * 3+2] * 0.299;
  27. temp = temp<0? 0:temp;
  28. temp = temp>255? 255:temp;
  29. Histogram[(int)temp]++;
  30. }
  31. }
  32. //计算阈值
  33. for (int i = 0;i<256;i++)
  34. {
  35. gSum0 = 0;
  36. gSum1 = 0;
  37. N0 += Histogram[i];
  38. N1 = N-N0;
  39. if(0==N1)break;//当出现前景无像素点时,跳出循环
  40. w0 = N0/N;
  41. w1 = 1-w0;
  42. for (int j = 0;j<=i;j++)
  43. {
  44. gSum0 += j*Histogram[j];
  45. }
  46. u0 = gSum0/N0;
  47. for(int k = i+1;k<256;k++)
  48. {
  49. gSum1 += k*Histogram[k];
  50. }
  51. u1 = gSum1/N1;
  52. //u = w0*u0 + w1*u1;
  53. g = w0*w1*(u0-u1)*(u0-u1);
  54. if (tempg<g)
  55. {
  56. tempg = g;
  57. T = i;
  58. }
  59. }
  60. return T;
  61. }


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

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

相关文章

数据在链路层传播相关时间计算

本来很懵逼的 看到这篇文章基本全懂了 一般这种题目会让我感觉很是煎熬&#xff0c;不知道怎么算。终于打通这类题目&#xff0c;总结到这里。 先看这类题目的常见表述&#xff1a;如图所示&#xff0c;图中路由器采用存储–转发的方式&#xff0c;所有链路的传播速率均为100…

多年以后重发:多线程安全的变量模板

大家好&#xff0c;这里是我以xghome这个用户名&#xff0c;02年在CSDN上发布的《多线程安全的变量模板》&#xff0c;这次在《0bug -- C/C商用工程之道》一书中&#xff0c;作为“资源锁”和多线程通信核心示例&#xff0c;也再次出现。这个模板我当初大约写了19遍&#xff0c…

高等数学的函数连续,可导,可微和偏导数连续的关系(多元)

最近在自学机器学习 顺便把高数捡回来 结论&#xff08;一元函数范畴内&#xff09; 可导与连续的关系&#xff1a;可导必连续&#xff0c;连续不一定可导&#xff1b; 可微与连续的关系&#xff1a;可微与可导是一样的&#xff1b; 可积与连续的关系&#xff1a;可积不一定连续…

也说 ASP.NET MVC的 Script 管理

WebForm下的ScriptManager在ASP.NET MVC下自然是不能使用的。于是很多人开始困惑如何管理页面上可能发生冲突的脚本。CodePlex上还有一个项目专门做这件事情&#xff0c;当然也有人简单地通过HtmlHelper来解决。如果你看过jQuery UI Extensions for ASP.NET MVC&#xff0c;或者…

在控制台中实现“单词竞猜”游戏 C# 猜词游戏

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/u011528448/article/details/24670471 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_v…

byvoid 神牛的tarjan算法讲解!

[有向图强连通分量] 在有向图G中&#xff0c;如果两个顶点间至少存在一条路径&#xff0c;称两个顶点强连通 (strongly connected)。如果有向图G的每两个顶点都强连通&#xff0c;称G是一个强连通图 。非强连通图有向图的极大强连通子图&#xff0c;称为强连通分量 (strongly …

在Linux下快速搭建LAMP开发平台.doc

1.安装环境操作系统&#xff1a;Red Hat Linux Enterprise AS 4.0 update4数据库&#xff1a;MySQL 5.0.27Web服务器&#xff1a;Apache 2.2.4脚本语言&#xff1a;PHP 5.2.1<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />2.安…

关于NLP你还不会却必须要学会的事儿—NLP实践教程指南第一编

作者 | Dipanjan (DJ) Sarkar 编译 | 姗姗 出品 | 人工智能头条&#xff08;公众号ID&#xff1a;AI_Thinker&#xff09; 【人工智能头条导读】在研究和处理自然语言处理的很多问题时&#xff0c;除了关注各种各样基础的数据&#xff0c;高级的深度学习模型、算法外&#x…

ORACLE中表死锁的处理

在进行数据库管理的过程中,经常会出现数据表被用户的一些不合理操作而导致表被锁定的情况,以下主要介绍如何查找哪些表被哪个用户所锁定,以及如何解除锁定: 1.查找被锁定的表: select object_name,session_id,os_user_name,oracle_username,process,locked_mode,status from v$…

记录重要的NLP学习资源链接

整理一些NLP学习资源(不止NLP&#xff0c;本人主要关注NLP)&#xff0c;如果有更好的&#xff0c;欢迎分享_ NLP 中文自然语言处理相关资料 https://github.com/crownpku/Awesome-Chinese-NLP Contents 列表 Chinese NLP Toolkits 中文NLP工具 Toolkits 综合NLP工具包 Pop…

asp.net文件上传进度条控件(破解版~没有时间限制) 多项自定义

原版只能用30天&#xff0c;这个破解版可以长期用了&#xff08;设置了时间2010-2110&#xff09;. 注册控件&#xff1a;<% Register TagPrefix"fup" Namespace"OboutInc.FileUpload" Assembly"FileUpload" %>调用控件&#xff1a;<fo…

2010年开年的一地鸡毛

2010年开年的一地鸡毛文 小刀马2010年的网络开年一点儿也不顺利&#xff0c;刚刚半月有余&#xff0c;就接连爆发出两个大事。一是百度被黑&#xff0c;李彦宏惊叹地连说史无前例&#xff0c;史无前例。二是谷歌的退出。两大互联网搜索巨头接连“出事”&#xff0c;不知道是不是…

Java中的向下转型与向上转型

java转型问题其实并不复杂&#xff0c;只要记住一句话&#xff1a;父类引用指向子类对象。 什么叫父类引用指向子类对象&#xff0c;且听我慢慢道来. 从2个名词开始说起&#xff1a;向上转型(upcasting)、向下转型(downcasting). 举个例子&#xff1a;有2个类&#xff0c;Fathe…

细粒度审计 FGA

传统的 Oracle 数据库审计选件允许您在宏观级别上跟踪用户在对象上所执行的操作 — 例如&#xff0c;如果您审计对某个表的 SELECT 语句&#xff0c;则可以跟踪是谁从表中选择了数据。但是&#xff0c;您不知道他们选择了什么。利用数据操纵语句 — 如 INSERT、UPDATE 或 DELET…

矩阵连乘问题的算法分析

问题描述&#xff1a;给定n个矩阵&#xff1a;A1,A2,...,An&#xff0c;其中Ai与Ai1是可乘的&#xff0c;i1&#xff0c;2...&#xff0c;n-1。确定计算矩阵连乘积的计算次序&#xff0c;使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模&…

等一分钟看了会流泪

转载于:https://blog.51cto.com/hljheiwangwei/269127

Silverlight 解谜游戏 之十六 消失的蒙娜丽莎

在《Silverlight 解谜游戏 之三 消除名单》中我们通过在物品轮廓画出Path 来达到消除物品的效果&#xff0c;由于游戏中的物品都是Office 图片的一部分所以无法使其真正消失&#xff0c;本篇我们将添加一个独立于Office 图片的物品&#xff0c;使其能动态消失。 看看题板上多出…

明令禁止工作“996”,是对“生而为人”的基本尊重

离GitHub上996.ICU项目的发布时间已过去好一段时间了&#xff0c;作为一名计算机专业的在读生&#xff0c;对996有一点体会&#xff0c;最直观的体会就是为了提升技术&#xff0c;连续一个学期在实验室工作超过10个小时。 人民日报发文《被“996”围困的年轻人&#xff0c;像是…

ASP.NET教程5

添加方法&#xff0c;在Sql Server创建表&#xff0c;主表与外键表关联&#xff0c;在asp.net中如何绑定下拉式选单DropDownList&#xff0c;并如何重构DropDownList Web控件&#xff0c;创建SELECT与Insert存储过程&#xff0c;以及应用Transaction事务。 文件格式&#xff1a…

火柴 UVa11375

1.题目描述&#xff1a;点击打开链接 2.解题思路&#xff1a;本题利用递推关系解决。首先可以把“已经使用过的火柴数i”看做状态&#xff0c;可以得到一个图&#xff0c;从前往后每添加一个数字x&#xff0c;就从状态i转移到了ic[x]&#xff0c;其中c[x]代表数字x需要的火柴数…