【引用格式】
李胜民,谢垚,李军义,等.基于金相图片与OpenCV 技术的二次枝晶间距测量系统[J].特种铸造及有色合金,2023,43(12):1 628-1 632.
LI S M,XIE Y, LI J Y. et al. System for secondary dendrite spacing measurement based on metalographic images and OpenCV technique[J].Special Casting & Nonferrous Alloys,2023,43(12):1 628-1 632.
二次枝晶间距的大小直接影响着铸件的力学性能,并影响合金成分的微观偏析、第二相和显微缩松的分布。杨化冰等细化A35*合6**金的枝晶间距,使得其拉伸性能大幅提升;SASCHA G等发现二次枝晶间距对汽车铸铝合金的疲劳性能有一定影响;MOSTAFAEI M等利用二次枝晶间距来预测铸件的拉伸性能;凌云等在研究重力铸造缩孔预测时也将二次枝晶间距作为一个重要的参数引入计算模型。因此准确地测定二次枝晶间距对于研究合金的性能及合金凝固过程中的缺陷分布极其重要。传统的二次枝晶测定方法受操作员的经验影响较大且耗时较长。利用机器视觉代替人工可以提高工作效率还能减少对操作员经验的依赖,被广泛地应用在缺陷识别和距离测量上。赵红颖等在2000年就利用机器视觉实现了发动机缺陷的检测;WANG D等利用机器视觉对U肋与顶板焊缝疲劳裂纹进行监;LIN Z等利用机器视觉进行选择性激光熔化缺陷检测。武博等将机器视觉应用到了铸件缺陷的识别上;郑如新等利用机器视觉对工件的尺寸进行了测量。利用机器视觉能够很好的识别金相中枝晶的轮廓、位置信息从而获得其间距,但目前很少有文献将机器视觉运用到枝晶间距测量上。OpenCV作为一个较为成熟的图像识别的库,提供了许多可用于识别金相的函数。
华中科技大学周建新教授团队在2023年第43卷第12期《特种铸造及有色合金》发表了题为“基于金相图片与OpenCV 技术的二次枝晶间距测量系统”的文章,为了解决传统测量方法中过分依赖经验、操作时间较长、缺乏专业软件的问题,提出了一种利用OpenCV自动分析金相图并测量二次枝晶间距的方法,并开发了相应自动计算系统。通过50组金相的测量试验验证了系统的高效性和准确性,结果表明,测量系统与传统方法的测量误差不超过15%,耗时相比于传统方法缩短了75%以上。
【系统设计】
获得二次枝晶间距需要获取金相中枝晶之间的像素距离、标尺的像素长度、标尺的长度含义。首先需要导入图片,因此必须添加选择图片控件,而后识别图片中的标尺像素长度和标尺长度含义。为应对有些金相图片较为模糊标尺识别不到的情况,必须添加手动选择标尺位置键入标尺长度含义的控件。然后需要选择枝晶在金相图中的大致位置,减小识别时间,提高识别的准确性,因此必须设计框选放大控件。最后需要识别框选图像中的枝晶间距,添加一键识别枝晶间距按钮,同时为应对图像模糊、枝晶轮廓断裂不连续、枝晶轮廓模糊等现象影响识别,添加手动选择枝晶间距控件以校准识别结果。识别算法流程图见图1。

图1 二次枝晶间距测量方法流程图
【金相图标尺识别】
传统的标尺使用方法主要通过测量金相图上枝晶间距或其他距离量的长度除以标尺的长度再乘上标尺代表的实际长度含义得到最终距离。这种方法受到人为操作的影响较大,标尺长度的测定需要依靠肉眼的判断,极易产生误差。利用计算机视觉来自动测定金相图中标尺的长度对于准确地确定长度标准、提高最终的距离值测定精度而言大有裨益。
图像二值化是将图像上的像素点的灰度值设置为0或255,即将整个图像呈现出明显的黑白效果的过程。图像二值化是图像处理中一个非常活跃的分支, 其应用领域非常广泛, 特别是在图像信息压缩、边缘提取和形状分析等方面起着重要作用。对于金相图上的标尺而言,采用半透明白色矩形为底,黑色标识的方式以提高辨识度,见图2a。但对于某些整体颜色较深的金相图有时也会有用白色标识的情况,见图2b。

(a)白底黑色标识

(b)深色底白色标识
图2 合金的二次枝晶金相图
对于标尺为“白底黑字”的金相只需利用OpenCV提供的二值化函数double threshold( InputArray src, OutputArray dst, double threshold, double maxval, int type );将第3个参数即二值化的阈值设定为25,将最后的参数设定为THRESH_BINARY_INV,即将像素灰度值小于25全设定为255,大于25全设定为0即可。而对于白色标尺的金相就需要将第3个参数设定为240,最后一个参数设定为THRESH_BINARY,即将像素灰度值大于240全设定为255,小于240全设定为0即可。二值化后的图像见图3。可以看出,两种方式都可以清楚的分辨出标尺,便于后期的处理。

(a)白底黑色标识

(b)深色底白色标识
图3合金的二次枝晶二值化金相图
需要确定标尺为白色或黑色,再确定参数设定的模式。本研究通过“试错法”来确认标尺颜色,即无论标尺颜色直接用第一种参数设定模式二值化,然后对二值化后的图像进行后续的标尺识别处理,若识别不到(见图4),则说明参数设定方法错误,再改用第二种参数设定进行二值化操作,这样算法较为简单,且整个时间复杂度较低。

图4 深色底白色标识金相图二值化处理后的图像
不同的标尺绘制方式可能筛选到的轮廓主要有3种:“凵”字型,“H”字型,“一”字型,见图5。为了统一筛选标准,对所有轮廓进行预处理,将宽度方向上左右各十分之一截去,所有种类的标尺轮廓统一都会变成“一”字型,此时只需要再根据二值化图像中所有轮廓的长宽比、轮廓点纵向变化次数等信息筛选出“一”字型轮廓,再根据位置信息就能最终确认标尺位置。根据其轮廓包络矩形的宽度可以获得其像素距离,定位到标尺之后,利用与标尺轮廓的相对位置和轮廓尺寸,可以筛选出标尺上方的标尺长度信息(即数字和单位)的轮廓。

图5 3种标尺轮廓
根据已知目标模板图在另一幅图像中寻找目标位置并定位的过程叫做模板匹配,类似于卷积原理。图像像素的对比顺序为左右上下。模板在原图像上从原点开始滑动,计算模板与图像被模板覆盖区域的差异,找到图像中的与模板图像中最相似的那个像素点,再根据模板的宽度和高度,标记出对应的区域范围。本研究已经把标尺信息的轮廓筛选出来了,因此不需要模板在图像上移动,计算筛选出的轮廓的包络矩形利用包络矩形截取到标尺信息并逐一与不同模板进行对比,匹配度最高的模板即该轮廓代表的含义。图6为利用包络矩形截取的标尺信息,图7为事先准备的模板图像。利用模板分别与筛选出的轮廓进行匹配就能识别出标尺含义为200 μm。

图6 截取到的标尺信息

图7 模板图像
【枝晶间距测量】
利用框选局部区域放大功能,首先初步筛选出要测量的枝晶所在的区域以缩小识别范围,提高识别准确率,图8为框选区域。

图8 框选区域放大
将框选后的图像进行二值化处理,采用TRIANGLE自适应阈值,该算法从灰度输入源的直方图寻找其最大峰值,以该峰值向X轴作45°线,该线到直方图上的最短距离即为自适应阈值,见图9。

图9 二值化后图像
二值化后对面积相似的相邻轮廓进行形状相似性比对,当相似度超过阈值时视为相邻两个枝晶轮廓,利用OpenCV中的double cv::matchShapes (InputArray fcontour, InputArray contour2, int method, double parameter)函数进行轮廓相似度比对,该函数通过计算两轮廓的Hu不变距来计算相似度。
在筛选出相邻的枝晶轮廓后,分别获得两轮廓的最小包络矩形的中心点,并计算两个中心点的间距,获得该间距的像素距离,将获得的像素距离除以标尺的像素距离乘上标尺含义就能最终得到枝晶间距。
【系统界面设计】
为了使得系统操作过程更加可视化,增强系统的可操作性,为系统设计了一套可视化界面,见图10。通过选择图片按钮可以选择要识别的金相图并在界面左边部分的窗口中显示,之后系统会利用搭载的算法自动识别金相图中的标尺并将标尺含义和标尺像素长度显示在相应的控件上。而后利用框选放大功能筛选出枝晶密集且清晰的区域,点击自动识别图像测量,系统会利用算法计算出枝晶间距。对于枝晶边界较为模糊或枝晶边界断裂的情况,也可以通过“测量”按钮手动补足。

图10 二次枝晶间距测量系统界面
【试验验证】
为验证测量系统的准确性和高效性,选取了50组金相照片(见图11),分别用测量系统以及传统方法测量二次枝晶间距,统计测量耗时和测量的长度,统计结果见表1,传统的枝晶测量方法每张金相图测量一次金相耗时约2 min。结果表明,测量系统与传统方法的测量误差不超过15%,系统测量与传统方式测量的距离误差图见图12。除刚运行程序时的第一张图像外,自动识别图像的时间相对于传统方法平均降低了75%以上。

图11 验证用的金相图片



图12 系统测量与传统方式测量的距离误差图
【结论】
(1)利用“试错法”确定二值化方法识别标尺位置、标尺像素长度、标尺信息,可以得到准确的标尺尺寸及信息。
(2)利用框选局部放大、二值化、轮廓提取筛选,定位到枝晶,并通过枝晶轮廓最小包络矩形中心点像素距离与标尺像素长度的比值,最终得到枝晶间距值。
(3)设计的方法系统人工干预少,能够准确地识别枝晶间距,耗时较短,对操作人员的依赖性较小。
(4)50组金相识别试验中,有23组由于图像模糊、枝晶边界模糊或枝晶边界不连续等原因无法自动识别,靠人工选点后自动计算得到枝晶间距,整个系统还不够稳定,下一步将提高系统对于模糊图像或枝晶边界模糊、枝晶边界不连续的金相的识别率,提高系统稳定性。