大津法

转自http://blog.163.com/yuyang_tech/blog/static/216050083201302113341762/

大津法理解

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

原理:

对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均灰度记为μ,类间方差记为g。

假设图像的背景较暗,并且图像的大小为M×N,图像中像素的灰度值小于阈值T的像素个数记作N0,像素灰度大于阈值T的像素个数记作N1,则有:
      ω0=N0/ M×N (1)
      ω1=N1/ M×N (2)
      N0+N1=M×N (3)
      ω0+ω1=1    (4)
      μ=ω0*μ0+ω1*μ1 (5)
      g=ω0(μ0-μ)^2+ω1(μ1-μ)^2 (6)
将式(5)代入式(6),得到等价公式:
      g=ω0ω1(μ0-μ1)^2    (7) 这就是类间方差
采用遍历的方法得到使类间方差g最大的阈值T,即为所求。

时间: 2024-10-25 03:00:04

大津法的相关文章

大津法---OTSU算法

简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大(何为类间方差?原理中有介绍). OTSU算法 OTSU算法也称最大类间差法,有时也称之为大津算法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用.它是按图像的灰度特性,将图像分成背景和前景两

大津法理解

简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大(何为类间方差?原理中有介绍). 原理: 对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0:背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1.图像的总平均灰度记为μ,类间方差记为g. 假设图像的背景较暗,并且

大津法(Python实现)

在计算机视觉和图像处理中,大津法被用于自动获取图像的阈值,或者将灰度图像转换为二值化图像.该算法假设图像包含两个类别的像素(前景像素和背景像素),然后它计算一个最优的阈值用于分离前景和背景,使得前景和背景的类间方差最小. 下面定义类间方差的计算公式: 假设我们使用阈值T将灰度图像分割为前景和背景 size:图像总像素个数 u:图像的平均灰度 w0:前景像素点占整幅图像大小的比例 u0:前景像素点的平均值 w1:背景像素点占整幅图像大小的比例 u0:背景像素点的平均值 g:类间方差 u = w0

大津法阈值分割+直方图

声明: 如题吧,不想解释太多,凡是学过图像处理的,应该都知道原理,不知道的在后面的参考文献中,也可以找出. 我只是来贴代码的. 代码: 1 #include <iostream> 2 #include <stdio.h> 3 #include <math.h> 4 5 using namespace std; 6 7 int Histogram(unsigned short* a, int* hist,int h,int w) 8 { 9 if (a == NULL |

大津法阈值法代码

int otsu(IplImage *image) { assert(NULL != image); int width = image->width; int height = image->height; int x=0,y=0; int pixelCount[256]; float pixelPro[256]; int i, j, pixelSum = width * height, threshold = 0; uchar* data = (uchar*)image->image

HDOJ3374 String Problem [KMP最小循环节点]+[最小(大)表示法]

String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1442    Accepted Submission(s): 645 Problem Description Give you a string with length N, you can generate N strings by left shifts

边缘提取,大津算法

试编程实现提取图像Fig1006(a)(building).tif中的边缘. 解:采用Canny边缘检测器,代码如下: function Canny()%自己写的Canny算法,陈焜 clc; clear all; close all; img=imread('Fig1006(a)(building).tif'); figure(1);subplot(221);imshow(img);title('原图像'); figure(11);imshow(img);title('原图像'); img=d

历史故纸堆:程序员编程的三种编程命名规则(匈牙利法,小驼峰法,大驼峰法)

现在正在看spark的源代码,赶脚是小驼峰式的命名法,很好,不错!我最喜欢小驼峰! 一.匈牙利命名 开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写. For example: long lSum = 0;"l"是类型的缩写: 二.小驼峰式:(little camel-case) 第一个单词首字母小写,后面其他单词首字母大写. For example: string firstName = string.Empty;三.大驼峰式:(big camel-

HDU 3374 最小/大表示法+KMP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题意:给定一个串s,该串有strlen(s)个循环同构串,要求输出字典序最小的同构串的下标,字典序最小的出现次数,最大的同构串的下标,字典中最大的出现次数. 思路:对于求循环同构的字典序最小可以用最小表示法求得,最大也是一样.然后设ds为字符串s+s.然后就可以用KMP求最小串在ds出现的次数和最大串出现的次数了. #define _CRT_SECURE_NO_DEPRECATE #inclu