大津法 OTSU的算法

图像处理-大津阈值法(最大类间方差法) 该方法通过自动选择一个阈值来将图像分成两个类别,以达到最大化两个类别之间的方差,从而实现图像的二值化分割。方差可通过以下公式计算: 类间方差 = w0 * w1 * (μ0 - μ1) ^ 2 其中,w0和w1分别为类别0和类别1的像素概率之和,μ0和μ1分别为类别0和类别1的平均灰度值。应用阈值:将原始图像根据最佳阈值进行二值化,像素灰度值大于阈值的设为一个类别,小于等于阈值的设为另一个类别。寻找最大类间方差:在所有可能的阈值T上,选择使类间方差最大的阈值作为最佳阈值。使得上式值最大时对应的k。 阅读详情

 大津法(OTSU法)

大津法由大津于1979年提出,对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2 最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为 w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大, 当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。

直接应用大津法计算量较大,因此我们在实现时采用了等价的公式g=w0*w1*(u0-u1)2。部分计算过程如下:


 
//遍历所有灰度值求Max g。

for intCurrentLevel:=0 to intArrLen do

  begin

    if intSclGrayLevel[intCurrentLevel]=0 then

      continue

    else

      begin

              //计算当阈值为intCurrentLevel时的g

        intCount:=0;

        intSumPels:=0;

        for intLoop:=0 to intCurrentLevel do

          begin

            intCount:=intCount+intSclGrayLevel[intLoop];

            intSumPels:=intSumPels+intSumPelsArr[intLoop];

          end;

        w0:=intCount/intSize;

        u0:=intSumPels/intCount;

        w1:=1-w0;

        if intSize-intCount<>0 then

          u1:=(intTotalPels-intSumPels)/(intSize-intCount)

        else

          u1:=0;



        RlTempO:=w0*w1*(u0-u1)*(u0-u1);

        if RlTempO>RlMaxO then

        begin

          RlMaxO:=RlTempO;

          Result:=intCurrentLevel;

        end;

      end;

我们在测试中发现:大津法选取出来的阈值非常理想,对各种情况的表现都较为良好。虽然它在很多情况下都不是最佳的分割,但分割质量通常都有一定的保障,可以说是最稳定的分割。由上可知,大津算法是一种较为通用的分割算法。在它的思想的启迪下,人们进一步提出了多种类似的评估阈值的算法,具体可参加【5】、【6】等。

 OTSU的算法,很好用,好不容易才找到的。
/*
OTSU 算法可以说是自适应计算单阈值(用来转换灰度图像为二值图像)的简单高效方法。下面的代码最早由 Ryan Dibble提供,此后经过多人Joerg.Schulenburg, R.Z.Liu 等修改,补正。

算法对输入的灰度图像的直方图进行分析,将直方图分成两个部分,使得两部分之间的距离最大。划分点就是求得的阈值。

parameter: *image --- buffer for image
rows, cols --- size of image
x0, y0, dx, dy --- region of vector used for computing threshold
vvv --- debug option, is 0, no debug information outputed
*/
/*======================================================================*/
/* OTSU global thresholding routine */
/* takes a 2D unsigned char array pointer, number of rows, and */
/* number of cols in the array. returns the value of the threshold */
/*======================================================================*/
int otsu (unsigned char *image, int rows, int cols, int x0, int y0, int dx, int dy, int vvv)
{

unsigned char *np; // 图像指针
int thresholdValue=1; // 阈值
int ihist[256]; // 图像直方图,256个点

int i, j, k; // various counters
int n, n1, n2, gmin, gmax;
double m1, m2, sum, csum, fmax, sb;

// 对直方图置零...
memset(ihist, 0, sizeof(ihist));

gmin=255; gmax=0;
// 生成直方图
for (i = y0 + 1; i < y0 + dy - 1; i++) {
np = ℑ[i*cols+x0+1];
for (j = x0 + 1; j < x0 + dx - 1; j++) {
ihist[*np]++;
if(*np > gmax) gmax=*np;
if(*np < gmin) gmin=*np;
np++; /* next pixel */
}
}

// set up everything
sum = csum = 0.0;
n = 0;

for (k = 0; k <= 255; k++) {
sum += (double) k * (double) ihist[k]; /* x*f(x) 质量矩*/
n += ihist[k]; /* f(x) 质量 */
}

if (!n) {
// if n has no value, there is problems...
fprintf (stderr, "NOT NORMAL thresholdValue = 160/n");
return (160);
}

// do the otsu global thresholding method
fmax = -1.0;
n1 = 0;
for (k = 0; k < 255; k++) {
n1 += ihist[k];
if (!n1) { continue; }
n2 = n - n1;
if (n2 == 0) { break; }
csum += (double) k *ihist[k];
m1 = csum / n1;
m2 = (sum - csum) / n2;
sb = (double) n1 *(double) n2 *(m1 - m2) * (m1 - m2);
/* bbg: note: can be optimized. */
if (sb > fmax) {
fmax = sb;
thresholdValue = k;
}
}

// at this point we have our thresholding value

// debug code to display thresholding values
if ( vvv & 1 )
fprintf(stderr,"# OTSU: thresholdValue = %d gmin=%d gmax=%d/n",
thresholdValue, gmin, gmax);

return(thresholdValue);
}

大津算法(Nobuyuki Otsu method) 时间:2020-12-02 目的:掌握图像分割的基础算法 1. 算法原理 图像分割,顾名思义将图像中的目标和背景进行区分。通常我们使用固定的阈值进行二值化,但是阈值如何迭代筛选。这个过程可不可以使用程序帮我们迭代呢?迭代条件又是什么呢? 大津算法,其根据直方图(假定前景和背景在直方图上呈现出两峰的情况),计算能将两类分开的最佳阈值(前景和背景类间方差最大),然后根据求得的最佳阈值对图像进行全局二值化。大津算法满足我们前述的疑问,只要找到一个直方图基本符合双峰情况,且存在满足类间方差最大的灰阶即可。 方. 阅读详情

相关推荐

大津法---OTSU算法

OPENCV的二值化操作中,有一种“大津阈值处理”的方法,使用函数 cvThreshold(image,image2,0,255,CV_THRESH_OTSU) 实现,该函数就会使用大律法OTSU得到的全局自适应阈值来进行二值化图片,而参数中的threshold不再起作用。OTSU算法 OTSU算法也称最大类间差法,有时也称之为大津算法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法

凡事预则立,不预则废! 3057

Otsu算法——最大类间方差法(大津算法)

Otsu算法,又被称为最大类间方差法(大津算法),是一种确定阈值的算法。 算法理解 Otsu算法之所以称为最大类间方差法是因为,该方法主要是通过阈值进行前后背景分割,而该方法确定最佳阈值的方法是该值使类间方差最大,它是按图像的灰度特性,将图像分成背景和前景两部分,使类间方差最大的分割意味着错分概率最小。 算法原理 以灰度图像为例,对于图像imgimgimg,我们可以将其看作一个M×NM\times NM×N大小的矩阵,即图像中的像素,每一个值即为像素值,其中像素值在(0 255)(0~255.

狂想者 2万+

分割算法-大津算法

1、本文首先简要介绍一些什么是大津算法 2、接着用文字说明一下大津算法的原理 3、其次详解大津算法的公式 4、然后介绍大津算法的代码实现 5、最后介绍大津算法的适用性

puqian13的博客 2397

OTSU算法(大津法—最大类间方差法)原理及实现

写在前面 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。 它被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分

二爷的博客 2万+

大津法(OTSU)是一种确定图像二值化分割阈值的算法 最大类间方差法 1979年

简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大(何为类间方差?原理中有介绍)。 OTSU算法 OTSU算法也称最大类间差法,有时也称之为大津算法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差

CookieCheng的博客 2737

易语言-简单的图像二值化处理

简单的图像二值化处理源码

OTSU算法(大津法—最大类间方差法)原理及实现

写在前面 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。 它被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差...

小武的博客 21万+

在MacBook M1/M2上,手把手教你打包包含嵌入模型的RagFlow Docker镜像(避坑指南)

本文详细指导如何在MacBook M1/M2上构建ARM64架构的RagFlow Docker镜像,涵盖环境准备、依赖处理、镜像构建及性能优化全流程。特别针对Apple Silicon芯片的兼容性问题提供解决方案,帮助开发者高效完成本地开发环境搭建。

weixin_26908317的博客 241

【智能车】图像二值化算法--大津法OTSU

大津算法是一种图像二值化算法,作用是确定将图像分成黑白两个部分的阈值。 原理:方差越大,相关性越低,黑白越分明。 目的:找出一个灰度值阈值Threshold,对该灰度值以上或以下的像素的分别计算方差,满足Threshold以上计算出来的方差和Threshold以下计算出来的方差的和最大。 附:算法推导、C语言代码实现。通俗易懂,比赛可用。

Ethan-Code's blog 2万+

N32G003学习——第九章 第三节1 串口 发送

经过第九章前2节的学习,基础打下之后,开始敲代码。

qq_34525008的博客 1030

手把手教你用Kokoro-82M-v1.1-zh搭建本地TTS服务(含WebSocket接口)

本文详细介绍了如何使用Kokoro-82M-v1.1-zh模型搭建本地TTS服务,包括环境配置、模型部署、WebSocket接口实现及性能优化。通过实战指南,开发者可以快速掌握本地部署TTS系统的关键技术,提升语音交互应用的开发效率。

weixin_30776273的博客 183

otsu阈值分割算法原理_大津法---OTSU算法

简介:大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大(何为类间方差?原理中有介绍)。OTSU算法OTSU算法也称最大类间差法,有时也称之为大津算法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对...

weixin_35780426的博客 7198

别再傻傻分不清!Synopsys DC综合中link/target/symbol/synthetic四大库的保姆级配置指南

本文详细解析了Synopsys DC综合中link_library、target_library、symbol_library和synthetic_library四大库的配置方法,帮助工程师避免常见错误。通过实战示例和调试技巧,指导如何正确设置工艺库与IP库,提升数字芯片设计效率。

weixin_42562079的博客 422

otsu阈值分割算法原理_otsu(大津法阈值分割原理)

在英语里只有threshold这个字,而没有otsu这个字,otsu是俄语,写作отцу,是父亲的第三格形式。一、名词第三格的构成:1 单数 阳性:硬变化词尾为-у,软变化词尾为-.图像分割中的最大类间方差(Otsu)和最佳熵(KSW)的英文全称是什么OTSU-最大类间方差是由日本学者大津(OTSU)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU。KSW 双阈值方法19...

weixin_34551601的博客 7257

【Seurat绘图进阶】从参数调优到美学定制:解锁DimPlot与FeaturePlot的隐藏技巧

本文深入探讨了Seurat包中DimPlot与FeaturePlot的进阶使用技巧,旨在解决单细胞数据可视化中的常见痛点。通过参数调优(如order、shuffle、raster)、颜色美学定制(使用RColorBrewer、viridis配色)以及性能优化(栅格化处理),并结合scCustomize包与patchwork排版,帮助用户将基础图表提升为信息清晰、可直接用于论文发表的出版级可视化结果。

lake5的博客 628

2025.05.29【Network】多组学分析:网络互作图绘制

本文介绍了使用R语言进行网络图绘制的方法与技巧。重点讲解了三个核心R包的使用:igraph用于网络图数据准备与基础绘制,ggraph基于图形语法实现高级可视化,networkD3则为网络图添加交互功能。文章涵盖了从基本概念、包安装、创建网络图对象,到自定义样式布局、添加交互性等完整流程,并提供了度分布、聚类系数等网络分析指标的计算方法。通过清晰的代码示例,帮助读者掌握生物信息学数据可视化的关键技能,为复杂数据的直观展示和分析提供实用工具。

227

【转】二值化 大津法---OTSU算法

传送门:https://www.cnblogs.com/ranjiewen/p/6385564.html 传送门:https://blog.youkuaiyun.com/u012198575/article/details/81128799 简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的...

qq_20252351的博客 836

基于YOLOv5/v8/v10的答题卡填涂识别与评分系统(附数据集+UI界面+完整代码)

在教育信息化的大背景下,传统的手工阅卷方式正在被智能化技术所取代。答题卡识别作为标准化考试的核心环节,其准确率和效率至关重要。本文将详细介绍如何利用YOLO系列目标检测算法(YOLOv5、YOLOv8、YOLOv10)构建一个答题卡填涂识别与评分系统。文章从数据集的制作与标注开始,逐步深入到模型的训练、评估与对比,最后基于PyQt5设计了一个用户友好的桌面端UI界面,实现了从图像输入到得分输出的全流程自动化。

YOLO 634

matlab大津法,大津算法(OTSU)

大津算法(OTSU)在图像处理领域,我们会遇到如下需求:把图像中的目标物体和背景分开。比如背景用白色表示,目标物体用黑色表示。此时我们知道目标物体的灰度值相互接近,背景灰度值相互接近,那么用大津算法能很好把目标从背景当中区分开来。算法思想目标比如对于下面这张灰度图片目标物体是中间黑色的几何物体,我们想让这些物体和背景区分更明显一些,比如让物体为纯黑,背景全白。那么我们就需要找到一个合适的阈值,使图...

weixin_39917485的博客 1553

使用FPGA实现MIPI DSI接口

通过使用FPGA,我们可以实现MIPI DSI接口,并在FPGA上生成相应的时序和电平转换电路。通过使用FPGA,我们可以实现MIPI DSI接口,并在FPGA上生成相应的时序和电平转换电路。在本文中,我们将探讨如何使用FPGA实现MIPI DSI接口,并提供相应的源代码。根据不同的发送状态,我们设置相应的输出信号。请注意,这只是一个基本的示例,用于说明如何使用FPGA实现MIPI DSI接口的发送功能。请注意,这只是一个基本的示例,用于说明如何使用FPGA实现MIPI DSI接口的发送功能。

ZdqDeveloper的博客 1695

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

图像二值化(Image Binarization):平均值法、双峰法、大津算法(OTSU)

图像二值化(Image Binarization):平均值法、双峰法、大津算法(OTSU)编程实现图像的二值化,分析不同的阈值对二值化图像的影响。

This blog is a space to document my professional learnings, personal reflections, and everything in between. 4万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

基于阈值方法的大津法(OTSU算法)---图像分割

基于阈值方法的大津法(OTSU算法)---图像分割 主要分为三部分去实现:  1.基本概念   大津法:属于阈值分割的范畴。阈值分割方法:利用图像中要提取的目标物体和背景在灰度上的差异,选择一个合适的阈值,通过判断每一个像素点的特征属性来确定该像素点属于目标区还是背景区域,从而产生二值图像。确定一个最优阈值是分割的关键   其确定阈值的过程为:记为前景与背景的分割阈值t.前景点数占图像比例为w0,...

RELANGGUSHI的博客 6193

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

算法001:大津法OTSU学习记录

OTSU算法 一、大津法主要的工作是什么? 大多数时候,我们需要获取到一幅图像中的特定目标。如果可以根据像素值将图像进行合理的分割,例如全局阈值分割那样,找到一个阈值TTT,大于阈值TTT的赋予一个像素值,小于阈值TTT的赋予一个像素值,那么就可以很容易的将目标与背景分离开来,如下公式所述: g(x,y)={1,f(x,y)>T0,f(x,y)≤T g(x,y) = \begin{cases} 1, f(x,y) > T\\ 0, f(x,y) \leq T\\ \en

DongZhaoCheng 724
上一篇: win32开发环境下调试opencv程序的一些技巧
下一篇: 使用directshow代替opencv的vfw的源代码
hardVB
博客等级 码龄26年 257粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值