12.图像二值化(OTSU和TRIANGLE自动阈值推导)

本文介绍了大律法(OtsusMethod)和三角法(TriangleMethod)两种全局阈值的图像二值化方法,它们通过分析图像灰度直方图选择最佳阈值。大律法基于最小化类间方差,而三角法依赖直方图的单峰特性。在OpenCV中,可以使用相应函数实现这两种算法,适用于边缘检测和目标分割等场景。
摘要由CSDN通过智能技术生成

目录

        1 概念讲解

        2 数学原理及数学推导公式

        2.1 大律法(Otsu's Method)

        2.2 三角法(Triangle Method)

        3 代码实现

        1 概念讲解

        大律法(OTSU)和三角法(TRIANGLE)都是基于全局阈值的图像二值化方法,它们通过计算图像灰度直方图的特征值来选择一个合适的全局阈值,将图像转换为二值图像。这两种方法可以广泛应用于边缘检测、目标分割、图像处理等领域。

        2 数学原理及数学推导公式

        2.1 大律法(Otsu's Method)

        大律法基于最小化类间方差的原则选择全局阈值。具体数学原理和推导如下:

        假设图像的灰度级别为L,对应的概率密度函数为p(i),定义总平均灰度为u(T),背景0的概率为w_{0}(t),前景1的概率为w_{1}(t),背景0的平均灰度为u_{0}(t),前景1的平均灰度为u_{1}(t)

背景0:[0, t],前景1:(t, L-1]。

背景0的概率:w_{0}(t) = \sum_{i=0}^{t}p(i)

前景1的概率:w_{1}(t) = \sum_{i=t+1}^{L-1}p(i)

背景0的平均灰度:u_{0}(t) = (\sum_{i=0}^{t}p(i))/w_{0}(t)

前景1的平均灰度:u_{1}(t) = (\sum_{i=1}^{L-1}p(i))/w_{1}(t)

总平均灰度:u(T) = \sum_{i=0}^{L-1}(i*p(i))

则类间方差可表示为: \sigma ^{2}=w_{0}(t)*w_{1}(t)*(u_{0}(t)-u_{1}(t))^{2}

大律法选择使类间方差最大的阈值t作为全局阈值。

        在opencv中利用cv::threshold(image, otsuBinaryImage, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU)来使用OTSU算法。

        2.2 三角法(Triangle Method)

        三角法基于直方图中的三角形特性选择全局阈值。具体数学原理如下:

        对图像的灰度直方图进行归一化处理,得到直方图函数h(i),其中i为灰度级别。通过连接(0,0)和(L-1, h(L-1))两点,形成直方图的边界线段。在直方图上从最高峰处bmx到最暗对应直方图bmin构造一条直线,从bmin处开始计算每个对应的直方图b到直线的垂直距离,直到bmax为止,其中最大距离对应的直方图位置即为图像二值化对应的阈值T。

        在opencv中利用cv::threshold(image, otsuBinaryImage, 0, 255, cv::THRESH_BINARY | cv::THRESH_TRIANGLE)来使用三角法算法。三角法适用于灰度直方图为单峰的图像。

        3 代码实现

        下面是一个示例代码,展示了如何使用OpenCV C++进行大律法和三角法图像二值化的代码实现:

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

int main() {
    // 读取灰度图像
    cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);

    // 定义变量存储大律法和三角法的二值化结果
    cv::Mat otsuBinaryImage, triangleBinaryImage;

    // 执行大律法的二值化操作
    cv::threshold(image, otsuBinaryImage, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);

    // 执行三角法的二值化操作
    double triangleThreshold = cv::threshold(image, triangleBinaryImage, 0, 255, cv::THRESH_BINARY | cv::THRESH_TRIANGLE);

    // 显示原图和二值化结果
    cv::imshow("Original Image", image);
    cv::imshow("Otsu's Binary Image", otsuBinaryImage);
    cv::imshow("Triangle Binary Image", triangleBinaryImage);
    cv::waitKey(0);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

别叭叭儿—好好学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值