转载请注明出处,谢谢.

1. OpenCV - 区域生长算法
2. OpenCV - 均值迭代分割
3. OpenCV - 最大间方差(OTUS)分割
4. OpenCV - 最大熵分割

OpenCV中其实有对OTUS算法的实现,threhold()函数最后一个参数可以指定使用OTUS算法。

1、最大间方差(OTUS)算法的描述

和均值迭代算法相似,OTUS算法也是利用图像的直方图进行的。OTUS算法的思想是选取一个阈值T,T∈[0,m−1]T, T \in [0,m-1],mm为图像的灰度级将直方图两部分,TT值使得分成的两组间方差最大。

2、算法的步骤

待处理图像灰度值范围为[0,m−1][0, m-1], 记灰度值为ii的像素个数为nin_{i}.
1. 统计待处理图像中像素灰度总和NN:

N=∑i=0m−1ni

N=\sum_{i=0}^{m-1}n_{i}
2. 计算每个灰度值i,i∈[0,m−1]i, i \in [0,m-1]所占的概率:

pi=niN

p_{i}=\frac{n_{i}}{N}灰度均值 μ\mu:

μ=∑i=0m−1i∗pi

\mu=\sum_{i=0}^{m-1}i*p_{i}
3. 取灰度值 T=0,‘1,...m−1T = 0 ,`1,... m-1,利用 TT将所有灰度分成两组C0=0...T−1C_{0}={0 ... T-1}和 C1=T...m−1C_{1}={T ... m-1},两组的均值和概率表示为:

第一类所占的概率:

w0=∑i=0T−1pi

w_{0} = \sum_{i=0}^{T-1}p_{i}
第一类的均值:

μ0=∑i=0T−1i∗piw0

\mu_{0} = \sum_{i=0}^{T-1}\frac{i*p_{i}}{w_{0}}
第二类所占的概率:

w1=∑i=Tm−1pi=1−w0

w_{1} = \sum_{i=T}^{m-1}p_{i} = 1-w_{0}
第二类的均值:

μ1=∑i=Tm−1i∗piw1

\mu_{1} = \sum_{i=T}^{m-1}\frac{i*p_{i}}{w_{1}}
4. 计算两组间的方差:

δ2=w0(μ0−μ)2+w1(μ1−μ)2

\delta^{2} = w_{0}(\mu_{0}-\mu)^{2} + w_{1}(\mu_{1}-\mu)^{2}
5. 重复过程2 - 4,找到组间方差最大的灰度值 ii,使用ii对图像进行阈值分割即可。

3、OpenCV下的实现

Mat OstuSeg(Mat src)
{int tbHist[256] = {0};                      //直方图数组double average = 0.0;                       //平均像素值double cov = 0.0;                           //方差double maxcov = 0.0;                        //方差最大值int index = 0;                              //分割像素值Mat dst;int nCol = src.cols * src.channels();       //每行的像素个数for (int i = 0; i < src.rows; i++){uchar* pData = src.ptr<uchar>(i);for (int j = 0; j < nCol; ++j){tbHist[pData[j]] += 1;}}int sum = 0;for (int i=0; i<256; ++i)                   sum += tbHist[i];double w0=0.0, w1=0.0, u0=0.0, u1=0.0;int count0 = 0;for (int i = 0; i < 255; ++i){u0 = 0;count0 = 0;for (int j=0; j<=i; ++j){u0 += j * tbHist[j];count0 += tbHist[j];}u0 = u0/count0;w0 = (float)count0/sum;u1 = 0;for (int j=i+1; j<256; ++j)u1 += j*tbHist[j];u1 = u1/(sum - count0);w1 = 1 - w0;cov = w0*w1*(u1-u0)*(u1-u0);if (cov > maxcov){maxcov = cov;index = i;}}cv::threshold(src, dst, index, 255, 0);    //进行阈值分割return dst.clone();
}

4、拓展

和上一篇所述一样,如果我们需要分割的物体并不是规则的矩形,那么任然可以采用在直方图中将我们已知的无效像素去掉。

OpenCV - 最大间方差分割相关推荐

  1. 基于OTSU最大类间方差法的ROI分割、提取图像中的形状特征--面积、周长、离心率、zernike矩

    分享一下最近学习的图像分类方面知识,整体的思路如下(之前的汇报ppt里截的) 把这个过程拆分几个部分共同学习一下吧 1.Otsu法原理 最大类间方差法OTSU是一种自适应的全局阈值确定的方法,根据灰度 ...

  2. 数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)

    文章目录 一.实验目的 二.实验原理 (一) 阈值分割 1. 直方图法 2.OTSU法(最大类间方差法)确定阈值 3. 迭代阈值法 4. 点检测 (二)边缘检测 三.实验内容 (一)阈值分割 1. 直 ...

  3. opencv与C++实现最大类间方差法(OTSU)进行图像二值化

    直接上代码,使用最大类间方差法进行二值化的函数 void threshold_otsu(Mat &mat, Mat &mat_thresh) //mat为输入图像,mat_thresh ...

  4. 图像二值化----otsu(最大类间方差法、大津算法)(二)

    转自:http://blog.stevenwang.name/ostu-threshold-56002.html OTSU算法也称最大类间差法,有时也称之为大津算法,被认为是图像分割中阈值选取的最佳算 ...

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

    目录 概念 C++源码 OtsuThreshold 主函数 效果 完整源码 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文所用源码修改自C+ ...

  6. CUDA精进之路(五):图像处理——OTSU二值算法(最大类间方差法、大津法)

    引言 最近在做医疗设备相关的项目,故在项目中大量用到了各类图像分割的算法,为了在图像中分割出特定目标,用到的算法可以有很多,比如阈值分割,多通道分割,边缘分割以及一些前沿的组合分割.而对大多数图像来说 ...

  7. 最大类间方差(大津法)详解

    参考: https://www.cnblogs.com/xiaomanon/p/4110006.html 一.算法介绍 最大类间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫 ...

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

    一.Ostu的原理 最大类间方差法是由日本学者大津(Nobuyuki Ostu)在1979年提出的,该方法根据计算公式自动计算分割单域值,是一种根据灰度图像自动计算阈值的方法.它按照灰度图像的灰度值等 ...

  9. 图像二值化之最大类间方差法(大津法,OTSU)

    参考文章1:图像二值化与otsu算法介绍 参考文章2:python opencv cv2.threshold() (将固定级别的阈值应用于每个数组元素)ThresholdTypes 最大类间方差法(大 ...

最新文章

  1. mysql四-2:多表查询
  2. 用DFS 解决全排列问题的思想详解
  3. SpringBoot实现注册时头像上传与下载
  4. 暴力求解——最大乘积 Maximum Product,UVa 11059
  5. ajax 跨域请求api_【.NET Core 3.0】框架之十二 || 跨域 与 Proxy
  6. 【算法分析与设计】辗转相除法
  7. leetcode - 264. 丑数 II
  8. 三十分钟包会——正则表达式
  9. python开发之路---第二模块--OS模块
  10. 江湖二三事:听说你想做数据分析师?
  11. python读取二进制文件,转成十六进制格式
  12. Gson解析json数据
  13. 解决织梦CMS后台验证码不正确的四种方法
  14. 【Element-ui 踩坑记录 2022/10/31】
  15. Python dataframe绘制饼图_基于Python的图表绘图系统matplotlib,“饼图“”你真了解吗?...
  16. 迅雷磁盘缓存设置过高会影响其它网络应用软件的速度
  17. Tomcat 到底干了啥
  18. skylake服务器CPU型号芯片,Skylake与Kaby Lake顶级处理器到底有多大差别?Intel i7-7700K评测...
  19. 《我们应当怎样做需求分析》读书笔记
  20. 王道论坛《计算机网络》网课学习笔记

热门文章

  1. oracle 财报2017q2,唯品会发布2017Q2财报:净营收突破175亿
  2. HAProxy讲解及HAProxy 负载 mysql 集群
  3. python异常数据处理_Python 异常处理和捕获信息教程
  4. 基于6s模型的遥感影像大气校正方法
  5. 还在找游戏本推荐排行榜?这款游戏本才是你的菜!
  6. FSC® COC森林认证将增加ILO劳工要求标准
  7. 软考高项学习教程【第一阶段】:第1章-信息系统开发基础【考点笔记1】
  8. yolov5 从配置环境到自己训练数据集合
  9. 什么是人心?人心是义利的结合体
  10. 三洋服务器r系列和q系列区别,【经验分析】三菱Q系列和FX PLC系列的区别