图像处理之:最大类间方差法法进行图像二值化处理
方法简介:
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;
}
处理效果对比:
图像处理之:最大类间方差法法进行图像二值化处理相关推荐
- 图像二值化之最大类间方差法(大津法,OTSU)
参考文章1:图像二值化与otsu算法介绍 参考文章2:python opencv cv2.threshold() (将固定级别的阈值应用于每个数组元素)ThresholdTypes 最大类间方差法(大 ...
- 图像二值化(Image Binarization):平均值法、双峰法、大津算法(OTSU)
图像二值化(Image Binarization):平均值法.双峰法.大津算法(OTSU) 编程实现图像的二值化,分析不同的阈值对二值化图像的影响. 问题描述 传统的机器视觉通常包括两个步骤:预处理和 ...
- C#,图像二值化(17)——全局阈值的ISODATA算法(亦称作InterMeans法)及其源程序
二值算法综述请阅读: C#,图像二值化(01)--二值化算法综述与二十三种算法目录https://blog.csdn.net/beijinghorn/article/details/128425225 ...
- 【智能车】图像二值化算法--大津法OTSU
图像二值化算法–大津法OTSU 大津算法是一种图像二值化算法,作用是确定将图像分成黑白两个部分的阈值. 大津法是针对灰度值进行阈值分割二值化,如果是彩色图像的话需要先转化成灰度图再进行计算. 方差越大 ...
- VTK修炼之道31:图像二值化_阈值法
1.阈值法实现图像二值化操作 二值图像和label图像是图像分割中经常用到的两种图像. 二值图像的每个像素只有两种可能的取值,例如0或者255.通常0代表图像的背景,而255代码图像前景.图像二值化是 ...
- 图像二值化_三角阈值法
前言 一.三角阈值法是什么? 二.算法原理 1.算法 总结 参考文献 前言 图像二值化有很多方法,比较经典的为OTSU,三角阈值法,本文主要想一探三角阈值法的算法原理. 一.三角阈值法是什么? 三角阈 ...
- 【医学图像处理】 2 灰度直方图、图像二值化(阈值分割)
文章目录 1 灰度直方图 1.1 直方图理解 1.2 直方图计算 1.3 直方图均衡化 1.3.1 全局均衡化 1.3.2 自适应(局部)均值化 2 图像二值化(阈值分割) 2.1 二值化理解 2.2 ...
- 【图像处理】Qt+OpenCV自制mini软件——图像二值化器
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前段时间杂事很多,这几天突然觉得自己有段时间没有碰Qt了,手有点生了.心血来潮,花了两 ...
- 【编程语言】利用CImage类对图像像素的处理(图像二值化)
最近做的课程作业需要用到CImage函数处理图像,其中涉及到读取图像以及对图像像素进行操作,在这里记录一下自己的理解. 首先是CImage类的定义和读取图片 CImage srcImage;CIm ...
- 【Zedboard】FPGA边缘提取 图像处理 基于ZYNQ完成 灰度图像 在VGA显示与 边缘提取 二值化 Verilog代码实现
[Zedboard]FPGA边缘提取 图像处理 基于ZYNQ完成 灰度图像 在VGA显示与 边缘提取 二值化 Verilog代码实现 在项目开始到目前为止已经完成了在Zedboard的PL部分即FPG ...
最新文章
- 新建一个doophp项目
- 【电信增值业务学习笔记】10基于业务节点的增值业务提供技术
- 送给程序员终身受用的建议
- .net core上 K8S(七).netcore程序的服务发现
- ObjectTive C语言语法,[译]理解 Objective-C 运行时(下篇)
- input和output哪个是充电_input是什么接口?告诉大家这个小常识,以后音箱接线更容易...
- php发送163邮件554,PHPMailer配置163邮箱发送邮件
- 滑动窗口算法_从一道题讲解滑动窗口算法该如何实现
- Hadoop3——集群搭建以及初体验
- java中各种集合的用法和比较
- IOS安全、逆向、反编译
- 【转】乐观锁和悲观锁的区别
- 华为手机如何给应用加锁_华为手机正确防止应用后台运行被清理的操作方法
- 随机变量的特征函数的定义
- 计算机系统保密软件,计算机系统保密检查工具
- 清理谷歌浏览器注册表_将谷歌浏览器的注册表彻底删除的方法
- oracle的shell命令,shell脚本执行oracle insert语句seraph
- LVGL lv_btn 按钮(9)
- springboot供应商管理系统毕业设计源码121518
- 本地生活服务商家小程序开发解决方案