IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> OTSU算法(大津法—最大类间方差法)原理及实现 -> 正文阅读

[人工智能]OTSU算法(大津法—最大类间方差法)原理及实现

OTSU算法(大津法—最大类间方差法)原理及实现

背景

大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。

方差:

在这里插入图片描述
它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。

优点:

计算简单,方便,不受图像的亮度的影响,在简单双峰场景中能进行快速分割

缺点:

噪声的干扰大,当图像没有典型的双峰时,不能够精确分割,对于多峰图像则失去效果。

应用:

医学影像分割,目标识别等,常和其它算法结合使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基本原理:

OPENCV实现:

#include<opencv2/opencv.hpp>
#include<vector>
#include<iostream>


using namespace std;
using namespace cv;


void otsu(Mat input,Mat&output,int&thres)
{
	const int Grayscale = 256;
	int width = input.cols;
	int height = input.rows;

	double Graystatistics[Grayscale] = { 0 };


	for (int i = 0; i < height; i++)
	{
		for (int j = 0; j < width;j++)
		{
			int Grayvalue = input.at<uchar>(i, j);
			Graystatistics[Grayvalue]++;//直方图统计

		}
	}

	double allnum = width * height;
	double Pi[Grayscale] = { 0 };//单个个灰度的概率
	double P[Grayscale] = { 0 };//累计灰度概率
	double Mi[Grayscale] = { 0 };//累计灰度平均和

    double Psum = 0;
	double cumgray = 0;
	for (int i = 0; i < Grayscale; i++)
	{
		Pi[i] = Graystatistics[i] / allnum;
		P[i] = Pi[i] + Psum;
		Psum = P[i];
		Mi[i] = cumgray + (double)i * Pi[i];
		cumgray = Mi[i];
	}

	//计算类间方差
	double var = 0;
	thres = 0;
	for (int i = 0; i < Grayscale; i++)
	{
		double fenzi = (Mi[Grayscale - 1] * P[i] - Mi[i]) * (Mi[Grayscale - 1] * P[i] - Mi[i]);
		double fenmu = P[i] * (1 - P[i]);
		double vau = fenzi / fenmu;
		if (vau > var)
		{
			var = vau;
			thres = i;
		}

	}
	cout << thres << endl;
	
	input.copyTo(output);


	for (int i = 0; i < height; i++)
	{
		for (int j = 0; j < width; j++)
		{
			int value = output.at<uchar>(i, j);
			if (value >thres)
			{
				output.at<uchar>(i, j) = 255;
			}
			else
			{
				output.at<uchar>(i, j) = 0;
			}
		}
	}
	

}



int main()
{
	Mat a = imread("1.bmp");
	cvtColor(a, a, COLOR_RGB2GRAY);
	Mat b;
	int th = 0;
	otsu(a, b, th);

	int Otsu1 = cv::threshold(a, b, 0, 255, THRESH_OTSU +THRESH_BINARY);
	cout << Otsu1 << endl;
	imshow("1", b);
	return 0;
}

opencv接口:

double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)

效果:

在这里插入图片描述在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 11:02:36  更:2022-02-04 11:04:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 3:42:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码