点击上方蓝字关注我们
微信公众号:OpenCV学堂
关注获取更多计算机视觉与深度学习知识
概述:
运行与各种方法介绍:
首先看一下ImageJ种九种二值化方法的运行演示:
原图
对应基于各种局部二值化方法运行结果:
Bernsen
实现了Bernsen算法,ImageJ中的代码实现是基于圆形的掩膜而不是标准算法中的矩形掩膜。最初输入的对比度阈值(Contrast Threshold)为T=15,第二个参数在ImageJ的代码实现中没有用到。对矩形或者圆形窗口内的所有像素值根据最大值与最小值得到局部对比度Local Contrast = (Max - Min)跟给定输入参数Contrast Threshold做如下比较:
这样就实现了每个像素点的二值化赋值,从而得到最终的二值图像。
Contrast
基于对比度二值化方法,根据局部像素块最大值与最小值决定中心像素是否设为对象像素或者背景像素。
Mean
均值法,选择的阈值是局部像素的灰度均值(gray mean),该方法的一个变种是用常量C减去均值Mean,然后根据均值实现如下操作:
其中默认情况下参数C取值为0。均值法在OpenCV中的局部阈值方法中有两种实现,一种是普通均值,另外一种是基于高斯的权重均值方法。
Median
中间值法,选择的阈值是局部范围内像素的灰度中值,同样该方法也可以使用常量C来进行阈值调节。实现的操作如下:
MidGrey
中值法,选择的是局部范围内像素的最大与最小值之和的一半作为阈值。同样可以通过常量C来调节阈值大小
NiBlack
计算局部范围内像素的均值与方差之后,根据如下公式计算阈值
其中K的默认取值为0.2,如果取-0.2将会得到比较暗的二值图像
Otsu
该方法前面有一篇文章已经专门见过,感兴趣读者可以自己搜索【OpenCV学堂】相关文章即可得到!这里不再重复。OpenCV中也有基于Otsu的全局阈值实现。看这里即可《二值化算法OTSU源码解析》
Phansalkar
该方法对低对比度的图像实现二值化比较管用,计算阈值的公式如下:
其中mean表示局部均值,stdev表示方差。其它几个参数的默认取值如下:
k= 0.25,
r = 0.5,
p = 2,
q = 10.
Sauvola
该方法是NiBlack方法的一个变种,此方法中计算阈值的公式如下:
其中参数k的默认取值为0.5
相关源代码可以从下面的链接中获取
https://github.com/fiji/Auto_Threshold
推荐阅读
OpenCV4.8+YOLOv8对象检测C++推理演示
ZXING+OpenCV打造开源条码检测应用
攻略 | 学习深度学习只需要三个月的好方法
三行代码实现 TensorRT8.6 C++ 深度学习模型部署
实战 | YOLOv8+OpenCV 实现DM码定位检测与解析
对象检测边界框损失 – 从IOU到ProbIOU
初学者必看 | 学习深度学习的五个误区