大津二值化算法(Otsu)

1. 简介

我们在最灰度图做二值化时,需要设定一个分割阈值,我们并没有一个万能的阈值。而Otsu大津算法则是根据灰度图本身的信息,自动确定最佳阈值,实现以最佳阈值对灰度图进行二值化。
需要注意的是,大津算法并不是直接进行二值化处理,而是得到一个整型数字,也即阈值,我们得到阈值再进行二值化。

2. 原理

我们对图片进行二值化时,是希望将图片分割成两部分,暂且称之为前景和背景:
在这里插入图片描述
一般情况下,我们将我们感兴趣的部分称为前景,比如图中的人;对于不感兴趣的称为背景。

大津算法的思想是比较简单的,我们认为分为的前景和背景之间差异是较大的,而前景部分中的像素是相似的,背景部分中的像素是相似的:同一类中差异小,不同类中差异大。那么如果存在一个阈值,使得图像分为了前景和背景,应当符合同一类中差异最小,不同类中差异最大,这个值就是最佳阈值。根据这个最佳阈值分割的图像效果应当是最好的(即将前景和背景彻底分割开)。

那么所谓的“差异”如何表示?其实就是用方差来表示:如果单个的数据其越偏离于中心,那么,其方差值也就越大。如果同一类中方差越小,那么表示同一类中差异也小;不同类之间方差越大,表示不同类中差异越大。

方差:
在这里插入图片描述
在这里插入图片描述

3. 详细步骤

在这里插入图片描述
第6步中求得方差是类间方差:
f:表示front,前景
b:表示back,背景
p f p_f pf:前景像素个数/总个数,即前景占总图的比率
p b p_b pb:背景像素个数/总个数,即背景占总图的比率
M f M_f Mf:前景所有像素灰度值均值
M b M_b Mb:背景所有像素灰度值均值
M M M:所有像素灰度值均值

一个典型的2个类的方差求法

实际上图像的像素个数、每个像素的值都是已知的,唯一的变量是 T 0 T_0 T0,所以实际上是求当 δ 2 δ^2 δ2最大时, T 0 T_0 T0的值,典型的求导,反正只有255级,直接遍历,保存方差最大和对应的阈值即可

大津二值化Otsu's Binarization)是一种基于直方图的图像二值化技术,由日本学者 Nobuyuki Otsu 在 1979 年提出。这个算法用于自动确定灰度图像的最佳阈值,使得两个类别的像素数量(通常是前景和背景)之间的方差最大化,从而实现最佳的边缘分割。 以下是编码实现大津二值化的步骤: 1. **计算累计分布函数** (Cumulative Distribution Function, CDF):对输入图像的像素值按灰度级排序并累加,得到每个灰度级对应的像素频率。 2. **构建累积分布函数与均值的关系**:对于每个灰度级,计算累计频数对应的像素均值,形成一个新的序列。 3. **计算总体方差**:假设当前灰度级为分界点,将图像分为前景和背景两部分,分别计算它们的均值和方差。 4. **寻找最佳阈值**:遍历所有灰度级,计算以该灰度级为分界的方差,并存储最大方差对应的阈值。这是通过对比前景和背景的均值差异以及它们的权重来计算的。 5. **应用阈值**:选择找到的最大方差阈值,将原始图像的像素值转换为二值图像,低于阈值的像素设为0(前景),高于或等于阈值的像素设为255(背景)。 ```python from skimage.filters import threshold_otsu # 假设img是输入的灰度图像 binary_img = threshold_otsu(img) ``` 在 Python 中,可以利用 Scikit-image 库中的 `threshold_otsu` 函数直接实现大津二值化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一个对称矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值