OpenCVSharp之BinarizerSample示例
Niblack:二值化算法,阈值的计算公式:T=M+K*V,M为以该像素点为中心的区域的平均灰度值,K为修正系数,V为该区域的标准差
对输入图像应用Niblack进行阈值设定 public static void NiblackThreshold( InputArray src, OutputArray dst, double maxValue, ThresholdTypes type, int blockSize, double k, LocalBinarizationMethods binarizationMethod = LocalBinarizationMethods.Niblack )
Parameters:
src:输入图像
dst:输出图像
maxValue:当type类型为THRESH_BINARY 或THRESH_BINARY_INV 时,阈值的最大值
type:阈值设定类型(Binary:当前点值大于阈值时,取Maxval(即第四个参数),否则设置为0)
blockSize:用于计算像素阈值的像素邻域的大小,值为奇数
k:修正系数,取值范围0-1
binarizationMethod :二值化方法的使用
K值不同时的效果:Niblack为-0.2,Sauvola为0.1
Bernsen算法思想:这个算法的中心思想是:设当前像素为P,计算以P为中心的大小为(2w+1)*(2w+1)窗口内的所有像素的最大值M与最小值N,两者的均值T, if(M-N)> S 则当前点P的阈值为T。 else 当前窗口所在区域的灰度级差别较小,那么窗口在目标区或在背景区,若T>T'则当前点灰度值为255,否则,当前点灰度值为0. 使用Bernsen进行二值化 public static void Bernsen( Mat src, Mat dst, int kernelSize, byte constrastMin, byte bgThreshold )
Parameters:
src:输入图像
dst:输出图像
kernelSize:窗口大小
constrastMin:系数S
bgThreshold:系数T'