图像处理之:最大类间方差法法进行图像二值化处理

article/2025/8/7 19:20:14

 方法简介:

g=ω0ω1(μ0-μ1)^2
对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;
背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1,类间方差记为g。采用遍历的方法得到使类间方差最大的阈值T

int Process::image_binary(unsigned char* buffer, int w, int h)
{int height = h;int width = w;int size = h*w;int histogram[256] = { 0 };int tmp_val = 0;for (int i = 0; i<height; i++)  //计算直方图{for (int j = 0; j<width; j++){histogram[(int)buffer[i*width + j]]++;}}//计算阈值int gSum0 = 0, gSum1 = 0, N0 = 0, N1 = 0;float w0 = 0.0, w1 = 0.0, u0 = 0.0, u1 = 0.0, g = 0.0, tempg = 0.0;int thr = 0;for (int i = 0; i<256; i++){gSum0 = 0;gSum1 = 0;N0 += histogram[i];w0 = (float)N0 / size;N1 = size - N0;w1 = 1 - w0;for (int j = 0; j <= i; j++){gSum0 += j*histogram[j];}u0 = (float)gSum0 / N0;for (int k = i + 1; k<256; k++){gSum1 += k*histogram[k];}u1 = (float)gSum1 / N1;g = w0*w1*(u0 - u1)*(u0 - u1);if (tempg<g){tempg = g;thr = i;}}for (int i = 0; i<height; i++)  //二值化处理{for (int j = 0; j<width; j++){tmp_val = buffer[i*width + j];if (tmp_val <= thr)buffer[i*width + j] = 0;elsebuffer[i*width + j] = 255;}}return 0;
}

处理效果对比:


http://chatgpt.dhexx.cn/article/sp5CXowH.shtml

相关文章

学习笔记———《最大类间方差法》

最大类间方差法是由日本学者大津(N.Otsu)于1979年提出的&#xff0c;又叫大津法&#xff0c;简称Otsu法&#xff0c;是一种自适应的阈值确定的方法。 它的基本思想是以某一灰度值(如t)为阈值&#xff0c;将图像中的像素分成两类C0和C1&#xff0c;然后计算它们的方差&#xff0…

自动选择阈值--最大类间方差法(OTSU)原理及matlab实现

原理 基本思想&#xff1a; 把一幅图像分成两部分C0,C1.使前景和背景与平均灰度的差别最大。这种差异用方差sigmaB表示。 所以目标就是求最大方差sigmaB对应的阈值T。 matlab代码 clc clear ximread(rice.png); ax;subplot(211); imshow(a,[]); %[count x]imhist(…

【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)

目录 概念C源码OtsuThreshold主函数 效果完整源码 平台&#xff1a;Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文所用源码修改自C opencv 图片二值化最佳阈值确定&#xff08;大津法,OTSU算法)——Sharon Liu 概念 Otsu算法&#xff0c;也叫最大类间方差法&#x…

使用matlab编程实现基于阈值分割的扫描文档二值化方法,MATLAB实现基于最大类间方差法的图像分割算法...

clear clc; %% 选择图片&#xff0c;并二值化 [fn,pn,fi]uigetfile(*.jpg,选择图片); Iimread([pn fn]); if ndims(I) 3 I rgb2gray(I); end % fxy imhist(I, 256); %统计每个灰度值的个数 [counts,x] imhist(I, 256) ; figure; subplot(2, 2, 1); imshow(I, []); title(原…

基于遗传算法的二维最大类间方差法的图像分割优化

一、背景 最大类间方差阈值分割法日本大津展之在1980年提出的&#xff0c;其基本思路是将图像的直方图以某一灰度为阈值&#xff0c;将图像分成两组并计算两组的方差&#xff0c;当被分成的两组之间的方差最大时&#xff0c;就以这个灰度值为國值分割图像。 遗传算法就是借鉴自…

数字图像处理——最大类间方差法(OTSU)图像阈值分割实例

数字图像处理——最大类间方差法&#xff08;OTSU&#xff09;图像阈值分割实例 数字图像处理——最大类间方差法&#xff08;OTSU&#xff09;图像阈值分割实例 图像阈值分割是指通过以某个确定的图像灰度值&#xff08;灰度级&#xff09;将图像分为不同的部分&#xff0c;…

【图像分割】最大类间方差法(otsu)图像分割

由Otsu(大津展之)于1978年提出的最大类间方差法&#xff0c;是引起较多关注的一种阈值选取方法。它是在判决分析或最小二乘原理的基础上推导出来的。 参考文献&#xff1a; [1] Otsu N. A threshold selection method from gray-level histogram. IEEE Trans,1979;SMC-9;62-66 …

最大类间方差法Ostu的C++实现

① 设灰度级为L&#xff0c;灰度值i的像素出现的频数为。分别为所纷呈的两个像素类的面积比&#xff0c;即 ② 分别为两个像素类的平均灰度值&#xff0c;即 ③计算类间方差&#xff0c;并找出最大类间方差以及对应的阈值。 ④ 求为最大值时的t&#xff0c;作为图像分割的最…

图像分割 - 阈值处理 - 最大类间方差法(OTSU)

目录 1. OTSU 介绍 2. 代码实现 1. OTSU 介绍 OTSU 大津法&#xff0c;也是最大类间方差算法 OTSU 算法的思想通过不同的阈值K&#xff0c;将图像的分为两个区域&#xff0c;一个是灰度值 0 < k < K 的子区域G1&#xff1b;另一个是灰度值 K1 < k < L-1 的子区…

【零散知识】最大类间方差法(大津法,Otsu)

前言&#xff1a; { 最近特别忙&#xff08;或者说时间规划出了问题&#xff09;&#xff0c;所以更新的都是短篇。 本次的内容是最大类间方差法&#xff08;大津法&#xff0c;Otsu&#xff09;。 } 正文&#xff1a; { 根据[1]中的介绍&#xff0c;大津法的主要作用是二值…

「 Redis 」 SkipList 跳表底层实现及应用

「 Redis 」 SkipList 跳表底层实现及应用 参考&鸣谢 Redis中ZSet的底层数据结构跳跃表skiplist&#xff0c;你真的了解吗&#xff1f; RiemannChow 深入理解跳表及其在Redis中的应用 京东云开发者 Redis跳表底层实现 来年花惜 文章目录 「 Redis 」 SkipList 跳表底层实现…

Redis 中的底层数据结构:SkipList

一、SkipList 简介 SkipList(5.0) 是zset的底层实现之一&#xff0c;它的数据结构定义如下&#xff1a; /* ZSETs use a specialized version of Skiplists */ typedef struct zskiplistNode {sds ele; //成员对象double score; //分值struct zskiplistNode *backward; //后退…

skiplist原理与实现

今天继续介绍分布式系统当中常用的数据结构&#xff0c;今天要介绍的数据结构非常了不起&#xff0c;和之前介绍的布隆过滤器一样&#xff0c;是一个功能强大原理简单的数据结构。并且它的缺点和短板更少&#xff0c;应用更加广泛&#xff0c;比如广泛使用的Redis就有用到它。 …

【数据结构】跳表Skiplist

文章目录 跳表--skiplistskiplist的概念skilplist的原理skilplist的实现随机值函数跳表节点 跳表框架查找函数寻找前置节点添加元素删除元素打印链表 测试结果Skiplist与其他Key-Value结构的比较 跳表–skiplist skiplist的概念 skiplist本质上也是一种查找结构&#xff0c;用…

Skiplist跳表详解及其模拟实现

文章目录 跳表1.跳表的概念2.Skiplist在插入时采用随机层数的方法是如何保证效率的呢?3.跳表的模拟实现4.跳表VS平衡搜索树和哈希表 跳表 1.跳表的概念 跳表是基于有序链表扩展实现的。对于一个普通的有序链表&#xff0c;我们查找数据的时间复杂度是O(N)。而跳表的出现&…

skiplist - 跳表

一 前言 跳表(skiplist、跳跃表) 是一个很优秀的数据结构&#xff0c;比如用于 Redis、levelDB等出名的开源项目上。跳表在原有的有序链表上面增加了多级索引&#xff0c;通过索引来实现快速查找。 它的结构特点在名称能很好的体现出来&#xff0c;就像兔子一样&#xff0c;蹦…

Leveldb skiplist 实现及解析

skiplist 原理介绍 skiplist 由William Pugh 在论文Skip Lists: A Probabilistic Alternative to Balanced Trees 中提出的一种数据结构,skiplist 是一种随机化存储的多层线性链表结构,插入,查找,删除的都是对数级别的时间复杂度。skiplist 和平衡树有相同的时间复杂度,但…

跳表SkipList介绍与实现

目录 一.跳表介绍 二.实现思路 &#xff08;一&#xff09;.结点结构 &#xff08;二&#xff09;.检索 &#xff08;三&#xff09;.插入 &#xff08;四&#xff09;.删除 三.实现代码 一.跳表介绍 跳表是一种随机化数据结构&#xff0c;主要用于快速检索数据。实质上…

SkipList(跳表)

SkipList(跳表) 文章目录 SkipList(跳表)参考前言跳表的原理跳表的插入和删除插入操作删除操作 跳表的时间空间复杂度分析时间复杂度空间复杂度 调表的基本操作插入数据删除数据 Go 实现小结 参考 https://juejin.cn/post/6844903955831619597#heading-2https://blog.csdn.net…

每日一博 - 如何理解跳表(SkipList)

文章目录 什么是跳跃表SkipList跳表关键字Why Skip ListCode跳表-查询跳表-删除跳表-插入 小结完整Code 什么是跳跃表SkipList 跳跃表(简称跳表)由美国计算机科学家William Pugh于1989年发明 论文&#xff1a; Skip lists: a probabilistic alternative to balanced trees 跳…