CV基础(2):OSTU算法

1、OTSU算法原理

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

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

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

2、基于OpenCV的实现代码

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);

猜你喜欢

转载自www.cnblogs.com/wnwin/p/11205051.html