大津法理解

简介:

大津法(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,即为所求。

matlab函数:

matlab中函数graythresh既是使用大津法求得分割阈值T。用法如下:

      T = graythresh(img);

      BW = im2bw(img,T);

大津法的形象理解:

对于直方图有两个峰值的图像,大津法求得的T近似等于两个峰值之间的低谷。

      imhist(img);

T = graythresh(img);

如下图为图像的直方图,使大津法求得的T=0.5294,转换在[0,255]之间为134.9970,只好是两个峰值之间低谷的位置。

时间: 2024-10-12 10:34:04

大津法理解的相关文章

大津法

转自http://blog.163.com/yuyang_tech/blog/static/216050083201302113341762/ 大津法理解 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大(何为类间方差?原理中有介绍). 原理: 对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比

大津法---OTSU算法

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

大津法(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-