
二值化技术详解一、技术背景二值化是图像处理中最基础的操作之一它将灰度图像转换为只有黑白两色的图像。二值化后的图像便于进行轮廓检测、形态学操作、形状分析等后续处理。本文详细介绍 Binary、BinaryInv、Otsu 等多种二值化模式的原理与区别以及在 SEM 项目中MorphologicalOperate.Binarize()的应用。二、数学原理2.1 基本二值化Binary基本二值化使用固定阈值将图像分为黑白两类g(x,y){maxval,if f(x,y)thresh0,otherwise g(x,y) \begin{cases} maxval, \text{if } f(x,y) thresh \\ 0, \text{otherwise} \end{cases}g(x,y){maxval,0,iff(x,y)threshotherwise其中threshthreshthresh为阈值maxvalmaxvalmaxval为最大值通常为255。2.2 反向二值化BinaryInv反向二值化与基本二值化相反g(x,y){maxval,if f(x,y)≤thresh0,otherwise g(x,y) \begin{cases} maxval, \text{if } f(x,y) \leq thresh \\ 0, \text{otherwise} \end{cases}g(x,y){maxval,0,iff(x,y)≤threshotherwise2.3 截断二值化Truncate截断二值化不改变低于阈值的像素g(x,y){thresh,if f(x,y)threshf(x,y),otherwise g(x,y) \begin{cases} thresh, \text{if } f(x,y) thresh \\ f(x,y), \text{otherwise} \end{cases}g(x,y){thresh,f(x,y),iff(x,y)threshotherwise2.4 阈值归零ThresholdToZero高于阈值的像素保持不变低于阈值的设为0g(x,y){f(x,y),if f(x,y)thresh0,otherwise g(x,y) \begin{cases} f(x,y), \text{if } f(x,y) thresh \\ 0, \text{otherwise} \end{cases}g(x,y){f(x,y),0,iff(x,y)threshotherwise2.5 反向阈值归零ThresholdToZeroInv低于阈值的像素保持不变高于阈值的设为0g(x,y){0,if f(x,y)threshf(x,y),otherwise g(x,y) \begin{cases} 0, \text{if } f(x,y) thresh \\ f(x,y), \text{otherwise} \end{cases}g(x,y){0,f(x,y),iff(x,y)threshotherwise2.6 Otsu 自适应阈值Otsu方法通过最大化类间方差自动确定阈值σb2(k)ω0ω1(μ0−μ1)2 \sigma_b^2(k) \omega_0\omega_1(\mu_0 - \mu_1)^2σb2(k)ω0ω1(μ0−μ1)2最佳阈值k∗argmaxkσb2(k)k^* \arg\max_{k} \sigma_b^2(k)k∗argmaxkσb2(k)三、代码实现以下代码来自e:\SEM\Methods\MorphologicalOperate.cspublicstaticMatBinarize(Matimg){vargrayToGray(img);MatresultnewMat();Cv2.Threshold(gray,result,0,255,ThresholdTypes.Otsu|ThresholdTypes.BinaryInv);returnresult;}privatestaticMatToGrayAndBinary(Matimg){vargrayToGray(img);Cv2.Threshold(gray,gray,0,255,ThresholdTypes.Binary|ThresholdTypes.Otsu);returngray;}publicstaticMatToGray(Matimg){if(img.Channels()1){MatgraynewMat();Cv2.CvtColor(img,gray,ColorConversionCodes.BGR2GRAY);returngray;}returnimg.Clone();}二值化类型组合在OpenCV中可以通过位或运算组合不同的阈值类型// Otsu BinaryInv自动阈值 反向二值化Cv2.Threshold(gray,result,0,255,ThresholdTypes.Otsu|ThresholdTypes.BinaryInv);// Otsu Binary自动阈值 正常二值化Cv2.Threshold(gray,result,0,255,ThresholdTypes.Otsu|ThresholdTypes.Binary);OpenCV APIdoubleCv2.Threshold(Matsrc,// 输入灰度图像Matdst,// 输出图像doublethresh,// 阈值Otsu时被忽略doublemaxval,// 最大值ThresholdTypes type// 阈值类型);返回值为使用的阈值Otsu时返回计算得到的阈值。四、参数调优4.1 阈值类型选择类型特点适用场景Binary亮区域为白暗区域为黑目标为亮色区域BinaryInv暗区域为白亮区域为黑目标为暗色区域SEM图像常见Truncate压缩高亮区域限制过曝区域ThresholdToZero保留亮区域提取亮特征ThresholdToZeroInv保留暗区域提取暗特征4.2 Otsu 与固定阈值的选择场景建议方法图像光照均匀有明确双峰Otsu图像光照变化大自适应阈值Adaptive Threshold需要稳定控制阈值固定阈值多幅图像批量处理Otsu自动适应每张图4.3 maxval 参数通常设置为2558位图像的最大值但可以根据需要调整设置为127产生灰度二值图设置为1产生0-1二值图五、常见问题Q1使用 Otsu 时阈值参数设为多少解决方案使用 Otsu 时thresh参数会被忽略可以设为任意值通常设为0。实际阈值由算法自动计算。Q2二值化结果全黑或全白原因阈值设置不当或图像对比度极低。解决方案使用 Otsu 自动确定阈值先进行 CLAHE 对比度增强检查图像直方图分布Q3目标区域在二值化后不连续原因阈值选择不当目标区域灰度分布不均匀。解决方案使用形态学闭运算连接断裂区域考虑使用自适应阈值方法先进行高斯模糊平滑图像Q4如何获取 Otsu 计算的具体阈值doublethresholdCv2.Threshold(gray,result,0,255,ThresholdTypes.Otsu|ThresholdTypes.Binary);Console.WriteLine($Otsu阈值:{threshold});Q5Binary 和 BinaryInv 如何选择选择原则目标区域灰度值较高使用 Binary目标区域灰度值较低使用 BinaryInv在 SEM 图像分析中孔隙、裂纹等目标区域通常呈现为暗色低灰度值因此常用 BinaryInv。Q6Otsu 与自适应阈值的区别特性Otsu自适应阈值阈值数量全局1个局部多个适用场景光照均匀光照不均匀计算速度快较慢细节保留一般好