opencv-OTSU大津法—最大类间方差法
从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大(就是能自动区分图像前景与背景的二值化)
它被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小
应用:是求图像全局阈值的最佳方法,应用不言而喻,适用于大部分需要求图像全局阈值的场合。
优点:计算简单快速,不受图像亮度和对比度的影响。
缺点:对图像噪声敏感;只能针对单一目标分割;当目标和背景大小比例悬殊、类间方差函数可能呈现双峰或者多峰,这个时候效果不好
算法流程描述:
1.遍历图像像素,统计每个像素值出现的次数,即255个bin,统计每个bin像素值的个数;
2.遍历0到255每个像素,以i像素值为当前分类的阈值,在(0~i)范围内计算前景像素平均灰度u0,前景部分像素点数所占比例w0;在(i~155)计算背景像素平均灰度u1,背景部分像素点数所占比例w1;
3.计算当前类间方差varValueI=w0*w1*(u1-u0)*(u1-u0);
4.选择最大类间方差varValueI时的i像素阈值作为区分前景与背景的最佳阈值
5.png
#include<opencv2/opencv.hpp> #include<iostream> int main(int argc, char** argv) { cv::Mat src = cv::imread("D:/bb/tu/5.png",0); cv::Mat dst; threshold(src, dst, 0, 255, cv::THRESH_OTSU); //大津法(OTSU) //参数1:灰色单通道图像 cv::imshow("src", src); cv::imshow("dst", dst); cv::waitKey(0); return 0; }