Opencv中的大津阈值分割算法
大津阈值分割算法,返回的阈值可以用于分割图像,对图像进行二值化处理、边缘检测等。
输入:
Mat 类型的地址(如Otsu(&src);)
输出:
返回一个int类型的阈值。
int Otsu(Mat* src)
{int iHeight = src->rows; // 图片高度int iWidth = src->cols; // 图片宽度long lSize = iHeight * iWidth; // 图片大小float fHistogram[256] = { 0 };for (int i = 0; i < iHeight; i++) {unsigned char* p = (unsigned char*)src->data + src->step * i;for (int j = 0; j < iWidth; j++)fHistogram[int(*p++)]++;}int iThreshold; // 返回的阈值long lFrontgroundTotalGrayValue = 0,lBackgroundTotalGrayValue = 0; // 存储前景的灰度总和和背景灰度总和 long lFrontgroundTotalNum = 0,lBackgroundTotalNum = 0; // 前景的总个数和背景的总个数 double dbFrontgroundRation = 0,dbBackgroundRation = 0; // 前景和背景所占整幅图像的比例 double dbFrontgroundAveGrayValue = 0,dbBackgroundAveGrayValue = 0; // 前景和背景的平均灰度 double dbVariance = 0; // 最大类间方差 double dbAveGrayValue = 0;double dbMaxVariance = 0;for (int i = 1; i < 256; i++) //一次遍历每个像素 {// 重新初始化lFrontgroundTotalGrayValue = 0;lBackgroundTotalGrayValue = 0;lFrontgroundTotalNum = 0;lBackgroundTotalNum = 0;dbFrontgroundRation = 0;dbBackgroundRation = 0;for (int j = 0; j < i; j++){lFrontgroundTotalNum += (long)(fHistogram[j]);lFrontgroundTotalGrayValue += (long)(j * fHistogram[j]);}dbFrontgroundAveGrayValue = (double)lFrontgroundTotalGrayValue / lFrontgroundTotalNum;dbFrontgroundRation = (double)lFrontgroundTotalNum / lSize;for (int j = i; j < 256; j++){lBackgroundTotalNum += (long)fHistogram[j];lBackgroundTotalGrayValue += (long)(j * fHistogram[j]);}dbBackgroundAveGrayValue = (double)lBackgroundTotalGrayValue / lBackgroundTotalNum;dbBackgroundRation = 1 - dbFrontgroundRation; // (double)lBackgroundTotalNum / size; dbAveGrayValue = dbFrontgroundAveGrayValue * dbFrontgroundRation+ dbBackgroundAveGrayValue * dbBackgroundRation; //图像的平均灰度 dbVariance = dbFrontgroundRation * dbBackgroundRation * (dbFrontgroundAveGrayValue - dbBackgroundAveGrayValue)* (dbFrontgroundAveGrayValue - dbBackgroundAveGrayValue);if (dbVariance > dbMaxVariance){dbMaxVariance = dbVariance;iThreshold = i;}}printf("iThreshold = %d\n", iThreshold);return iThreshold;
}
Opencv中的大津阈值分割算法相关推荐
- matlab大津法函数,matlab 大津阈值分割【相关词_ 大津法阈值分割matlab】
阈值法 阈值分割程序 Otsu Thresholding 赞(0) 踩(0) 收藏(0) 说明:大津法实现图像阈值分割的matlab源程序代码 (Otsu Thresholding Image sou ...
- 基于OpenCV和C++实现最大阈值分割算法
代码如下:: /******************************************************************************************** ...
- 大津阈值分割matlab实验,OTSU(大津法)分割源程序(MATLAB版)
接下来介绍OTSU方法的原理: ************************************************************************************ ...
- otsu阈值分割算法原理_大津法---OTSU算法
简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...
- Retinex、log对数变换、直方图均衡化区别,边缘增强Retinex算法与拉普拉斯算法联系、均衡化与亮度调节算法、大津阈值计算
1.其中Retinex算法具有的功能:动态范围压缩(即滤掉了低频部分,提取了高频).色调再现(即还有图像色彩):具有锐化.颜色恒常性.动态范围压缩大.色彩保真度高等特点. 从算法公式上的个人理 ...
- OpenCV与图像处理学习七——传统图像分割之阈值法(固定阈值、自适应阈值、大津阈值)
OpenCV与图像处理学习七--传统图像分割之阈值法(固定阈值.自适应阈值.大津阈值) 一.固定阈值图像分割 1.1 直方图双峰法 1.2 OpenCV中的固定阈值分割 二.自动阈值图像分割 2.1 ...
- 利用阈值分割原理,对给定图像编程实现二值、反二值、截断、反截断、大津阈值、自适应阈值等类型阈值图像分割,给出实现源码和结果图像。
程序 import cv2 import numpy as np from matplotlib import pyplot as pltimg = cv2.imread('1.jpg', 0) # ...
- 大津阈值法(OTSU)功能实现
具体的公式推导参见冈萨雷斯 <数字图像处理> Otsu方法又称最大类间方差法,通过把像素分配为两类或多类,计算类间方差,当方差达到最大值时,类分割线(即灰度值)就作为图像分割阈值.Otsu ...
- 具有掩膜功能的大津阈值法(Otsu)
学习记录- 前文说到大津阈值法是一种自适应的基于全局的阈值分割算法,只有在图像直方图分布为双峰的情况下才会呈现出一种比较好的分割效果,但是待分割图像直方图分布并不是每次都是理想的结果.可能会是光照的影 ...
最新文章
- python发送文件到邮箱_python发送文件夹内容到邮箱
- Android Fragment懒加载
- 使用Spring Boot打造文件文档在线预览平台
- 使用CXF发布WebService服务简单实例
- 澎思科技新出行人再识别(ReID)算法,刷新三大数据集最高记录
- 2020年10月DB-Engines排行:商业开源平分秋色 并驾齐驱四大天王
- unity2018设置雾在哪_《Babel》项目技术整理:雾
- !!!SQL sever 函数表达
- ECharts4简单入门
- 在线版和离线版电路仿真以及开源电子硬件设计介绍
- 数据埋点是什么?设置数据埋点的意义?
- PG数据库:分组后取每组第一条数据
- LINUX暂停、挂起进程,开启进程
- java 锁旗标_Java基础知识点整理(一)
- 江苏省计算机二级c语言题型分值,计算机二级C语言题型和评分标准
- 英特尔助力腾讯云深度优化云硬盘CBS 产品,打造极速云存储体验
- 22考研:考取985、211名校的忠告!
- Rocscience Slide v6.002 边坡稳定性分析\
- cordova移动端的导航栏滚动侦听
- 精灵宝可梦剑正在维护服务器,最期待在《精灵宝可梦:剑/盾》中保留/回归的玩法功能...