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

OpenCVSharp之BinarizerSample示例

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'