openCV2——ostu
ostu:大津阈值法,通过选择某个阈值,来使亮度不同的背景和前景尽可能分开来。
原理及步骤:
0.建立直方图数组count[256],存放着0~255亮度值各自的像素量;1.选择某个阈值k,将一幅像素量total=rows*cols的图像分为亮部和暗部
,亮部像素量W,暗部像素量B,则亮部比例w1=W / total,暗部比例w2=B / total;2.整体图像平均灰度u0=(count[0,255].*[0,255])/total
,亮部平均灰度u1=(count[0,k-1].*[0,k-1]) / sum(count[0,k-1])
,暗部平均灰度u2=(count[k,255].*[k,255]) / sum(count[k,255])
,且满足u0=u1*w1+u2*w2(式0);3.方差值=w1(u1-u0)^2+w2*(u2-u0)^2
,根据式0,可整理为:
方差值=w1*w2*(u1-u2)^2;4.循环1-3步,直到方差值最大时,即为所求k值
c++函数为:
unsigned char myOstu(const cv::Mat &gray)
{
int row=gray.rows, col=gray.cols;
unsigned long long size=row*col;//total pixs
int count[256];// histogram space
for (int ind=0;ind<256;ind++)
{count[ind]=0;
}for(int i=0;i<row;i++)for(int j=0;j<col;j++){count[gray.at<unsigned char>(i,j)]++;}double w1,w2;//black background//white frontground
double blackNum, whiteNum;
double maxVar=0, tmp;
double meanBlackLevel=0.0, meanWhiteLevel=0.0;
unsigned char ostu;
for (int k=0;k<256;k++)
{//compute the w1 and w2blackNum=0; whiteNum=0;for (int i=0;i<k;i++){blackNum+=count[i];}whiteNum=size-blackNum;w1=blackNum/size;w2=1-w1;//compute the meanBlackLevel and meanWhiteLevelfor(int kk=0;kk<256;kk++){if (kk<k) meanBlackLevel+=kk*count[kk];else meanWhiteLevel+=kk*count[kk];}if (blackNum==0) meanBlackLevel=0.0;else meanBlackLevel/=blackNum;if (whiteNum==0) meanWhiteLevel=0.0;else meanWhiteLevel/=whiteNum;//g=ω0ω1(μ0-μ1)^2,compute the max ostutmp=w1*w2*(meanBlackLevel-meanWhiteLevel)*(meanBlackLevel-meanWhiteLevel);if (tmp>maxVar) {maxVar=tmp;ostu=k;}
}
return ostu;
}
openCV2——ostu相关推荐
- 前景背景分割——ostu算法的原理及实现 OpenCV (八)
OpenCV [八]--前景背景分割--ostu算法的原理及实现 实验结果 代码实现 实现原理 参考资料 实验结果 代码实现 #include<opencv2/opencv.hpp> #i ...
- OSTU大律法二值化原理
介绍 Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为: 1) 先计算图像的直方图,即将图像所有的像素点按照0~255共256个bin,统计落在每个 ...
- 【OpenCV】(三)opencv入门之图像的基本操作——图像阈值分割(ostu算法)
所谓图像分割是根据灰度.彩色.空间纹理.几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内表现出一致性和相似性. 现有的图像分割有以下几类: 1.基于阈值分割:通过设定不同的特征 ...
- OSTU(大津算法)
一.前言 Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为: 1) 先计算图像的直方图,即将图像所有的像素点按照0~255共256个bin,统计落 ...
- 图像处理合集:图像基础操作(图像翻转、图像锐化、图像平滑等)、图像阈值分割(边缘检测、迭代法、OSTU、区域增长法等)、图像特征提取(图像分割、灰度共生矩阵、PCA图像压缩)
文章目录 说明 一.图像锐化或增强相关 1. 图像点处理 1.1 图像翻转 1.2 幂运算和对数运算 2. 直方图处理 3. 图像平滑 4. 图像锐化 5. 图像增强 二.图像阈值分割 1. 边缘检测 ...
- opencv学习5——大律二值化(ostu)
opencv中有多种方法进行图像的二值化,前面的3中直接设置二值化的阈值,比较粗暴无脑,而且用人眼看的话根本看不出来最佳阈值,因此人为的设置阈值是一种很不科学不严谨的方法,在opencv中ostu二值 ...
- OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)
1. 由于宏名称的变更照成的"未声明的标识符"系列问题 有时候,遇到此类问题加入一句 #include <cv.h> 便可以让 OpenCV3 或者 OpenCV4 也 ...
- visual studio 2013 中配置OpenCV2.4.13 姿势
首先在path中添加 "C:\OpenCV\opencv\build\x64\vc12\bin" (地址随实际变化) 注:添加的都是*86不使用*64 在visualstudi ...
- ubuntu16.04 下安装Opencv2.4.9
ubuntu16.04 下安装Opencv2.4.9 OpenCV的源码download from: https://sourceforge.net/projects/opencvlibrary/? ...
最新文章
- python的try exception捕获异常
- 软件设计原则——接口隔离原则
- 查看journalnode节点状态信息_OpenStack Cinder服务状态排错
- CodeForces - 555A Case of Matryoshkas(思维)
- 工具|渗透测试之5种工具分享(Shiro插件、CTFR、JR-scan、dirsearch-Web等)
- Vue父组件使用子组件时,需要携带参数,函数内如何获取子组件给的值
- centos7ubuntu搭建Vulhub靶场(推荐Ubuntu)
- 【QT 数据库专辑】【02】WIN7下搭建本地MYSQL数据库02 - 建立数据库的驱动程序-QT为例-完备版
- springboot中application.yml 使用数组
- 985 211 PHP,你们要的985、211高校官方报录比汇总来了
- 卷积法求解光斑质心(附源码,C++、opencv)
- 基于javaweb,springboot银行管理系统
- Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!
- 实验室信息管理系统(LIMS)软件大盘点
- mysqld: [ERROR] Found option without preceding group in config file D:\MySql\MyS ql\my.ini at line 1
- 盘点 Java 线程池配置的常见误区
- 安卓自定义 View 进阶: 图片文字
- 玩转华为数据中心交换机系列 | 配置MUX VLAN示例(汇聚层设备)
- 自动锁定计算机快捷键,教你电脑锁屏怎么设置,让电脑自动锁屏
- 爬虫-使用代理ip,使用session