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相关推荐

  1. 前景背景分割——ostu算法的原理及实现 OpenCV (八)

    OpenCV [八]--前景背景分割--ostu算法的原理及实现 实验结果 代码实现 实现原理 参考资料 实验结果 代码实现 #include<opencv2/opencv.hpp> #i ...

  2. OSTU大律法二值化原理

    介绍 Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为: 1) 先计算图像的直方图,即将图像所有的像素点按照0~255共256个bin,统计落在每个 ...

  3. 【OpenCV】(三)opencv入门之图像的基本操作——图像阈值分割(ostu算法)

    所谓图像分割是根据灰度.彩色.空间纹理.几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内表现出一致性和相似性. 现有的图像分割有以下几类: 1.基于阈值分割:通过设定不同的特征 ...

  4. OSTU(大津算法)

    一.前言 Ostu方法又名最大类间差方法,通过统计整个图像的直方图特性来实现全局阈值T的自动选取,其算法步骤为: 1)  先计算图像的直方图,即将图像所有的像素点按照0~255共256个bin,统计落 ...

  5. 图像处理合集:图像基础操作(图像翻转、图像锐化、图像平滑等)、图像阈值分割(边缘检测、迭代法、OSTU、区域增长法等)、图像特征提取(图像分割、灰度共生矩阵、PCA图像压缩)

    文章目录 说明 一.图像锐化或增强相关 1. 图像点处理 1.1 图像翻转 1.2 幂运算和对数运算 2. 直方图处理 3. 图像平滑 4. 图像锐化 5. 图像增强 二.图像阈值分割 1. 边缘检测 ...

  6. opencv学习5——大律二值化(ostu)

    opencv中有多种方法进行图像的二值化,前面的3中直接设置二值化的阈值,比较粗暴无脑,而且用人眼看的话根本看不出来最佳阈值,因此人为的设置阈值是一种很不科学不严谨的方法,在opencv中ostu二值 ...

  7. OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)

    1. 由于宏名称的变更照成的"未声明的标识符"系列问题 有时候,遇到此类问题加入一句 #include <cv.h> 便可以让 OpenCV3 或者 OpenCV4 也 ...

  8. visual studio 2013 中配置OpenCV2.4.13 姿势

    首先在path中添加 "C:\OpenCV\opencv\build\x64\vc12\bin"   (地址随实际变化) 注:添加的都是*86不使用*64 在visualstudi ...

  9. ubuntu16.04 下安装Opencv2.4.9

    ubuntu16.04 下安装Opencv2.4.9 OpenCV的源码download from:  https://sourceforge.net/projects/opencvlibrary/? ...

最新文章

  1. python的try exception捕获异常
  2. 软件设计原则——接口隔离原则
  3. 查看journalnode节点状态信息_OpenStack Cinder服务状态排错
  4. CodeForces - 555A Case of Matryoshkas(思维)
  5. 工具|渗透测试之5种工具分享(Shiro插件、CTFR、JR-scan、dirsearch-Web等)
  6. Vue父组件使用子组件时,需要携带参数,函数内如何获取子组件给的值
  7. centos7ubuntu搭建Vulhub靶场(推荐Ubuntu)
  8. 【QT 数据库专辑】【02】WIN7下搭建本地MYSQL数据库02 - 建立数据库的驱动程序-QT为例-完备版
  9. springboot中application.yml 使用数组
  10. 985 211 PHP,你们要的985、211高校官方报录比汇总来了
  11. 卷积法求解光斑质心(附源码,C++、opencv)
  12. 基于javaweb,springboot银行管理系统
  13. Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!
  14. 实验室信息管理系统(LIMS)软件大盘点
  15. mysqld: [ERROR] Found option without preceding group in config file D:\MySql\MyS ql\my.ini at line 1
  16. 盘点 Java 线程池配置的常见误区
  17. 安卓自定义 View 进阶: 图片文字
  18. 玩转华为数据中心交换机系列 | 配置MUX VLAN示例(汇聚层设备)
  19. 自动锁定计算机快捷键,教你电脑锁屏怎么设置,让电脑自动锁屏
  20. 爬虫-使用代理ip,使用session

热门文章

  1. chcon mysql_Linux中的SELinux与chcon以及Samba实现【转】
  2. Qt处理路径里的斜杠和反斜杠
  3. Metasploitable3-Joker 第七个flag
  4. 智能设计应用于视频广告,从鲁班的视觉引擎谈起
  5. springboot接口返回数据类型解析问题
  6. 专访微软亚洲研究院首席研发经理邹欣:AI 时代程序员将往哪走?
  7. 【9】SCI易中期刊推荐——工程技术-计算机:软件工程(中科院4区)
  8. idea 修改快捷键为 Eclipse
  9. 两年阿里面试官,面过200+人:给大家说点面试阿里技术岗的干货!
  10. oracle主键自增