一、定义
二值化,就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0~255,在二值化后的图像中的灰度值范围是0或者255。假如取阀值为127(相当于0~255的中数),让灰度值小于等于127的变为0(黑色),灰度值大于127的变为255(白色),这样做的好处是计算量小速度快,但是缺点也是很明显的,因为这个阀值在不同的图片中均为127,但是不同的图片,他们的颜色分布差别很大,所以用127做阀值,白菜萝卜一刀切,效果肯定是不好的。OTSU算法就是为了解决自适应寻找阈值点的问题。
二、原理
Otsu 算法的详细步骤:
1.计算直方图:首先,计算图像的灰度直方图,统计每个灰度级别的像素数量。
2.归一化直方图:将直方图中每个灰度级别的像素数量除以图像的总像素数,得到每个灰度级别的归一化频率。
3.计算累积分布函数:计算归一化直方图的累积分布函数,即累积概率密度函数。这可以通过累加每个灰度级别的归一化频率来实现。
4.初始化类间方差和最佳阈值:初始化类间方差为 0,并将最佳阈值设为 0。
5.遍历阈值:对每个可能的阈值 t 进行遍历(从 0 到最大灰度级别)。
6.计算类间方差:对于每个阈值 t,计算两个类别的均值和方差,然后根据这些统计量计算类间方差。类间方差可通过下式计算得到:
其中,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1,图像的总平均灰度为u,前景和背景图象的方差g。
三、FPGA实现
使用system generator搭建算法模型如下:
四、实现效果
分别找了灰度效果不同的图比较如下,从效果来看,OTSU算法还是挺不错的。