• CV基础(2):OSTU算法


    Otsu算法是一种基于像素特征的算法,它采用最大类间阈值分割图像为前景和背景两部分,所以是一种基于全局特征的算法,对目标单一的图像分割效果较好,对多目标图像 此方法往往无能为力

    1、OTSU算法原理

    最大类间方差是由日本学者大津(Nobuyuki Otsu)于1979年提出,是一种自适应的阈值确定方法。算法假设图像像素能够根据阈值,被分成背景[background]和目标[objects]两部分。然后,计算使得两类像素类间方差最大(区分度最大)的像素值,该像素值就是分割阈值。

    推导过程:  记 M = 256 单通道灰度分级 Sum = 像素总数

    • 背景像素占比:
    • 前景像素占比:
    • 背景的平均灰度值:
    • 前景的平均灰度值:
    • 灰度图像整体累计值:
    • 前景、背景类间方差:
      将公式3.4.5带入公式6 可得最终简化公式:

    2、基于OpenCV的实现代码

    基于VS2017 + OepnCV4.10

    Mat base = imread(".//test//1.jpg");
    Mat grey;
    cvtColor(base, grey, COLOR_RGB2GRAY);
    	
    Mat seg;
    long timeStart = clock();
    uint32_t thresh = threshold(grey, seg, 0, 255, THRESH_OTSU);
    long timeFinish = clock();
    cout << "Calculating time: " << timeFinish - timeStart << endl;
    
    imshow("Origin", base);
    imshow("Middle", seg);
    imshow("Result", grey);
    cout << "The threshold is: " << thresh << endl;
    waitKey(0);
    

    运行结果:
    test.gif

    3、Reference

    详细及易读懂的大津法原理和实现

  • 相关阅读:
    test
    c# cook book -Linq 关于Object的比较
    关于UnitOfWork
    autofac学习
    webapi 开启跨域支持
    httpclient通过post提交到webapi
    jQuery之元素查找
    jQuery之过滤元素
    jQuery之回到顶部
    jQuery之_元素滚动
  • 原文地址:https://www.cnblogs.com/wnwin/p/11205051.html
Copyright © 2020-2023  润新知