图像预处理:去除标尺区域

图像预处理:去除标尺区域
图像预处理去除标尺区域一、技术背景在扫描电子显微镜SEM图像处理中图像底部通常包含标尺信息如放大倍数、尺寸标尺等这些信息对于后续的图像分析和测量会造成干扰。因此在进行孔隙度、截面分析等处理之前需要将标尺区域从图像中去除。本文介绍 SEM 项目中imageUtils.preprocess()方法的实现原理该方法通过二值化形态学开运算检测标尺区域、轮廓面积过滤、ROI裁剪等技术实现标尺区域的自动检测与去除。二、数学原理2.1 二值化处理二值化是将灰度图像转换为只有黑白两色的图像其数学定义为g(x,y){255,if f(x,y)≥T0,if f(x,y)T g(x,y) \begin{cases} 255, \text{if } f(x,y) \geq T \\ 0, \text{if } f(x,y) T \end{cases}g(x,y){255,0,​iff(x,y)≥Tiff(x,y)T​其中TTT为阈值f(x,y)f(x,y)f(x,y)为输入灰度值g(x,y)g(x,y)g(x,y)为输出值。2.2 形态学开运算开运算定义为先腐蚀后膨胀的组合操作A∘B(A⊖B)⊕B A \circ B (A \ominus B) \oplus BA∘B(A⊖B)⊕B其中⊖\ominus⊖为腐蚀运算⊕\oplus⊕为膨胀运算BBB为结构元素。开运算的作用是消除细小的明亮区域噪声平滑物体边界保持物体整体形状和面积2.3 轮廓检测与面积过滤轮廓检测基于边界追踪算法通过检测二值图像中物体的边界点序列来表示轮廓。面积过滤通过计算轮廓围成区域的面积筛选出符合目标特征的轮廓Area∫∫RdA Area \int \int_{R} dAArea∫∫R​dA三、代码实现以下代码来自e:\SEM\Utils\imageUtils.cs//图片预处理 用于获取非标尺区域图像publicstaticvoidpreprocess(refMatsrc_img){Matgray_imgnewMat();Cv2.CvtColor(src_img,gray_img,ColorConversionCodes.BGR2GRAY);Matbinary_imgnewMat();Cv2.Threshold(gray_img,binary_img,240,255,ThresholdTypes.Binary);MatkernelCv2.GetStructuringElement(MorphShapes.Rect,newOpenCvSharp.Size(5,7));Matkernel2Cv2.GetStructuringElement(MorphShapes.Rect,newOpenCvSharp.Size(20,1));Matkernel1Cv2.GetStructuringElement(MorphShapes.Cross,newOpenCvSharp.Size(3,3));intiterations3;Cv2.MorphologyEx(binary_img,binary_img,MorphTypes.Open,kernel2,newOpenCvSharp.Point(-1,-1),iterations);Cv2.MorphologyEx(binary_img,binary_img,MorphTypes.Open,kernel1,newOpenCvSharp.Point(-1,-1),1);Point[][]contours;HierarchyIndex[]hierarchy;Cv2.FindContours(binary_img,outcontours,outhierarchy,RetrievalModes.External,ContourApproximationModes.ApproxSimple);ListRectboundRectsnewListRect();foreach(varcontourincontours){if(Cv2.ContourArea(contour)10000||Cv2.ContourArea(contour)100000){continue;}boundRects.Add(Cv2.BoundingRect(contour));scale_imgsrc_img.Clone();Cv2.Rectangle(scale_img,boundRects.Last(),Scalar.Black,-1);intcropHeightMath.Max(0,scale_img.Rows-boundRects.Last().Height);// 创建目标区域矩形RectroinewRect(0,0,scale_img.Cols,cropHeight);src_imgnewMat(scale_img,roi).Clone();}return;}处理流程详解灰度转换将BGR图像转为灰度图像二值化使用阈值240将灰度图像二值化标尺区域白色高亮被分离形态学开运算使用20x1的矩形核进行水平方向的形态学开运算迭代3次连接水平标尺线使用3x3的十字核进一步去除小噪声轮廓检测查找二值图像中的外部轮廓面积过滤只保留面积在 10000-100000 像素之间的轮廓标尺区域的典型面积范围ROI裁剪根据检测到的标尺区域边界框裁剪掉标尺区域四、参数调优4.1 关键参数参数默认值说明二值化阈值240标尺通常为白色高亮阈值较高kernel2 尺寸(20, 1)水平方向的结构元连接水平标尺线开运算迭代次数3增强去除小噪声的效果面积下限10000过滤小噪声区域面积上限100000过滤整张图像的大区域4.2 调优建议二值化阈值调整如果标尺区域不够明显可适当降低阈值如235-240结构元尺寸调整根据标尺的实际形态调整kernel2的尺寸面积范围调整根据图像分辨率和标尺实际大小调整面积过滤范围五、常见问题Q1标尺区域未被正确检测怎么办原因二值化阈值过高或标尺亮度不够。解决方案降低二值化阈值检查图像对比度必要时先进行CLAHE对比度增强Q2检测到的区域过大或过小原因面积过滤范围设置不当。解决方案根据实际图像尺寸计算标尺区域的合理面积范围可以通过调试输出检测到的轮廓面积来调整范围Q3图像主体内容被误删原因面积过滤范围与主体区域重叠。解决方案缩小面积上限值考虑使用位置约束只检测图像底部的区域Q4形态学开运算效果不明显原因结构元尺寸不匹配或迭代次数不够。解决方案根据标尺的形态特征调整结构元尺寸适当增加迭代次数