基于阈值方法的大津法(OTSU算法)---图像分割

基于阈值方法的大津法(OTSU算法)---图像分割

主要分为三部分去实现:
 1.基本概念
  大津法:属于阈值分割的范畴。阈值分割方法:利用图像中要提取的目标物体和背景在灰度上的差异,选择一个合适的阈值,通过判断每一个像素点的特征属性来确定该像素点属于目标区还是背景区域,从而产生二值图像。确定一个最优阈值是分割的关键
  其确定阈值的过程为:记为前景与背景的分割阈值t.前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1;图像的总平均灰度为u=wo*u0+w1*u1:从最小到最大灰度值遍历t,当使得类间方差值a=w0*(u1-u)^2+w1*(u0-u)^2最大时,即为分割的最佳阈值。
  对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为w0,背景取值u1,概率为w1,总均值为u
 2代码如下及其算法:
 OTSU算法步骤如下:
 ❶统计灰度级中每个像素在整幅图像中的个数
 ❷计算每个像素在整幅图像的概率分布
 ❸对灰度级进行遍历搜索,计算当前灰度值下前景背景类间概率
 ❹通过目标函数计算类内与类间方差下对应阈值 
 代码如下:(代码源自朱伟老师著书籍《opencv图像处理编程实例》)

#include <stdio.h>
#include <string>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/opencv.hpp"
using namespace std;using namespace cv;
// 大津法函数实现
int OTSU(cv::Mat srcImage)//srcImage为主函数传送来的灰度图像
{
       
    int nCols = srcImage.cols;
    //获取灰度图像的列数
    int nRows = srcImage.rows;
    //获取灰度图像的行数
    //上述两个数值相乘的结果就是像素总数	
    int threshold = 0;
    //这个参数用来返回	最终得到的最佳阈值
    // 初始化统计参数	
    int nSumPix[256];//用来存放统计灰度级中每个像素在整幅图中的个数	
    float nProDis[256];//用来存放每个灰度级占整个图像的概率	
    for (int i = 0; i < 256; i
  • 11
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值