【图像处理】OTSU二值化原理及代码实现
来源:互联网 发布:东华理工大学软件学院 编辑:程序博客网 时间:2024/04/28 13:22
基本思想
OTSU算法主要用于在灰度图像中查找一个阈值k,该阈值把图像区分为前景图像C0和背景图像C1。
关键在于阈值是怎样确定的。OTSU算法的思路类似于聚类,聚类就是给定一定的数据,让你根据数据的特性进行分类,使得这两类的数据能够分类合理,即常说的无监督学习。相对应的监督学习则是给定数据及分类对训练器进行训练然后对新数据进行估计。
对于这个阈值k,我们可以得到两个分类对应的概率 w0, w1 和 均值 u0, u1。
以及对应的类方差。
而在分类的过程中,通常我们需要采用一个标准来评判阈值是否合适。经过OTSU在论文中的介绍,采用的是最大类间方差。
具体可以查看论文《[1979 IEEE] OTSU A threshold selection method from gray-level histograms》
最大类间方差:
代码实现
以下为获取阈值的代码:
<span style="font-size:14px;font-weight: normal;">int getOtsuTh(unsigned char buff[],long size){ int i,j; unsigned char indexMax=0; double w0; double u0; double w1; double u1; double u; unsigned int cnt0; unsigned int cnt1; unsigned int sum1; unsigned int sum0; double vaMax=-1; double va; jint* graylvl=(jint*)malloc(256*sizeof(jint)); memset(graylvl,0,256*sizeof(jint));// 灰度值统计 for(i=0;i<size;i++) { graylvl[buff[i]]++; } for(i=1;i<256;i++) { cnt0=0; cnt1=0; sum0=0; sum1=0; for(j=0;j<i;j++) { // 对类C0进行灰度值统计 cnt0+=graylvl[j]; sum0+=graylvl[j]*j; } w0= (double)cnt0/size; u0= (double)sum0/cnt0; for(j=i;j<256;j++) { // 对类C1进行灰度值统计 cnt1+=graylvl[j]; sum1+=graylvl[j]*j; } w1= 1-w0; u1= (double)sum1/cnt1; u= w0*u0+w1*u1; va = w0*w1*(u0-u1)*(u0-u1); if(va>vaMax) { vaMax=va; indexMax = i; } } free(graylvl); return indexMax;}</span>
该代码主要参考:http://blog.csdn.net/timidsmile/article/details/8493468
整个工程代码:下载地址代码中使用的是图片的bin格式,即文件保存的是图像的灰度值,可参考《【图像处理】matlab操作图像bin文件》
后续将再补充对该代码的优化。
0 0
- 【图像处理】OTSU二值化原理及代码实现
- Otsu算法原理及实现
- 算法解剖系列-Otsu二值化原理及实现
- 图像处理之基于Otsu阈值二值化
- 图像处理------基于Otsu阈值二值化
- 图像处理21:Otsu's二值化
- 图像处理之基于OTSU阈值二值化
- otsu(大津法)灰度图像二值化方法的原理和C实现
- 图像Ostu二值化原理及matlab实现代码
- otsu结合OpenCV实现灰度图像自动阈值处理
- 分段OTSU处理图像数据
- Otsu 大律法 图像二值化
- 订单的处理原理及代码实现.
- OpenCV+OCR 图像处理字符识别原理及代码
- 自适应阈值大津法(OTSU)介绍及代码实现
- Otsu最大类间方差法图像二值化MATLAB实现
- Android图像处理-像素化的原理及实现
- 图像的线性变换的原理及OpenCV代码实现~
- iOS之触摸事件和手势
- 在mac中使用gitflow
- 五笔中难打的几个字
- Excel 入门简单读写
- 虚拟机linux系统能够上网但是不能ping主机
- 【图像处理】OTSU二值化原理及代码实现
- 黑马程序员——反射
- java类加载 FAQ
- iOS9 getting error “an ssl error has occurred and a secure connection to the server cannot be made”
- 记录整合sprinmvc+log4j的的过程
- Valid Anagram
- linux 解压缩
- scikit-learn中PCA的使用方法
- UVA 644 Immediate Decodability (寻找前缀)