基于图像处理的透明液体厚度均匀性测量
2022-07-12赵晓丽
赵晓丽
(山东工艺美术学院,山东 济南 250300)
在生产生活中,人们用到的很多产品都需要测量液体厚度的均匀性,本研究主要是为了采集图像数据,并选取恰当的软件进行数据处理分析。如在医用手套的生产过程中,必须对手套浇筑后未冷却的液体进行实时厚度的检测,以保证浇筑后的产品质量[1]。以往对这种医用手套的质量检测大多采用浇筑后人工抽检的方式进行,效率低、漏检率高、不合格率高。本研究提出一种检测方法,应用线性电荷耦合元件(Charge-Coupled Device,CCD)对透明液体厚度的均匀性进行检测。该方法可以间接检测医用手套的质量,借助传感器采集数据,再进行科学的数据分析,将分析结果传入显示屏,方便工作人员发现不合格品,达到高效率、高准确性的测量目的。
具体方法是在透明液体厚度测量实验中,通过线性CCD采集透明液体折射后的光栅图像,用Arduino编程采集数据并将数据包发送至上位机显示,通过Matlab编程显示图像中需要的信息,可以通过显示屏直接将不合格的数据传送给工作人员,以便工作人员采取实时补救措施。
1 系统组成及工作原理
该透明液体厚度均匀性测量系统主要由光栅、线性光电传感器模块TLS1401CCD、Arduino UNO和计算机等部分组成,如图1所示。通过光源补光灯对光栅打光,经线性CCD采集后,通过二值化处理,形成黑白条纹。由于光栅的直线都是平行直线,经过线性CCD采集的黑色条纹之间的距离也应该是相同的。光栅经透明液体折射后会形成另一组直线束。由于透明液体的厚度会直接影响折射后直线的位置,可以通过检测折射后的直线束是否平行判断液体的厚度是否均匀。实验是否可行可以先通过验证光栅直线束是否平行判定,经实验验证,该思路可行。
图1 实验系统
光栅有两种:透射光栅和反射光栅,区别主要是光栅透射光的原理不同。光栅是由大量等宽等间距狭缝构成的光学器件,常用的光栅是在玻璃板片上雕刻出大量平行刻痕制成的,两平行刻痕之间可以透光[2],但是刻痕为不透光结构。在精制的光栅上排列的刻痕很多,几千条甚至上万条都能在1 cm宽度内刻出来。光栅这种技术在传统印刷的基础上加入了数码科技的优点,在为光栅特别制备的胶片上,通过一些关键操作,就可以在胶片上显示各式各样的特殊效果。
CCD传感器的作用是将光与电互相转换,是一种新型装置;光产生信号电荷之后,可以通过CCD传感器存储,功能非常强大;将特定时序的脉冲信号施加到CCD传感器上,CCD传感器存储的信号电荷便可在内部定向传输,进而实现CCD传感器自我扫描,主要由光敏单元、输入结构和输出结构等组成[3],具有光电转换、信息存储和延时等功能。CCD传感器的高集成度、低功耗特点非常明显,在摄像领域能发挥价值。另外,信号处理和存储的功能、图像传感器的应用也得到了越来越多人的关注[4]。CCD包括线阵和面阵,区别在于将CCD像素排成平面还是直线的元件。如果排成1个平面的元件,则称为面阵;如果排成1个直线的元件,则称为线阵。
Arduino是包含硬件和软件的平台,可供研发人员选用其提供的程序,也可供研发人员自行修改代码或自行封装命令,是开源电子原型平台。其开发环境是在Processing/Wiring的基础上开发,参照了Java、C语言。Arduino电路板的各种型号成为其硬件,硬件部分的作用是与电路相连。计算机中的程序开发环境(即Arduino IDE)就是该平台的软件。研发人员首先要在软件Arduino IDE中,按照标准编写程序代码,Arduino电路板接收到编写好的程序,即可作出下一步反应。外部环境信息能通过传感器上传给Arduino,然后Arduino通过控制马达、灯光等其他装置,反馈、影响外部的环境。Arduino的特点主要有:(1)Arduino IDE可以适应各种计算机系统,具有跨平台的特点。(2)Arduino语言的灵活度高。(3)Arduino是开源电子原型平台,在协议范围内能随意改写代码。(4)作为一个优秀的硬件开发平台,发展迅速。
Matlab在本质上是一款数学软件,也被称为矩阵工厂(矩阵实验室)。在复杂繁多的数值分析计算面前,Matlab的优势逐渐显露。集多功能于一体的Matlab软件能将人们的科学实验进行多次在线数据仿真,进而分析数据的可信度及预测数据的走势,同时达到节约实验成本的目的。Matlab主要为数值分析、矩阵计算提供更快、更精准的计算平台,使科学数据可视化、更直观地展现在人们面前;非线性动态系统的建模和仿真、交互式程序设计功能给科研人员提供了易操作的计算环境。Matlab为科学研究、工程设计等需要进行大量数值计算的科学领域提供了完美的解决方案。Matlab与传统非交互式程序设计语言的编辑模式不同,优点主要表现在:(1)数值计算效率高、准确度高,减轻了研发人员的工作负担。(2)图形处理功能强大,可实现计算机编程过程及结果的可视化,降低了用户学习难度,输出更加形象。(3)自然化语言接近数学表达式,用户界面简单易学,对新手而言容易接受。(4)应用工具箱功能强大,工具可满足用户进行各种仿真的需求。
该方法对透明液体厚度均匀性的测量主要通过CCD传感器进行数据的采集,再通过编程的方式将采集的图片数据利用Matlab软件进行数据分析,从分析结果中即可了解透明液体厚度的均匀性。
1.1 算法实现图像采集
图像数据采集工作首先应用Arduino板编程,将程序调试好后,搭建实验台,通过手动对CCD调焦,在上位机获得清晰的黑边条纹后,即可得到相应的数据图片,开始实验。
通过选用合适的LED补光灯对CCD补光,能够有效减少频闪的现象。将搭建好的试验台调试之后,将下位机Arduino的程序录入即可开始对数据进行采集[5]。利用上位机显示的图像选择合适的二值化阈值,如图2所示,对光栅进行验证。实验证明,平行直线经CCD处理后,二值化的黑色条纹之间的距离也相等,即直线束相互平行。
图2 CCD在无透明液体时的图像显示
在光栅上涂需要测试的透明液体,本实验选择胶水演示透明液体。一方面,胶水有一定的表面张力,不会像水一样到处流动,影响实验的准确性;另一方面,胶水有较强的透光能力,能够实现所需要的功能,而且没有腐蚀性,不会对光栅有影响,进而影响实验的结论。对不同部位的透明液体厚度进行CCD测量,通过观察二值化图(图3),初步了解透明液体厚度不均匀的位置[6]。如图3所示,选取3个不同的位置,分别为光标在0.206、0.260、5.000处,设置好二值化的阈值,即可得到3个位置的波形图、灰度图和二值化图。从波形图、灰度图和二值化图中可知这3个位置上的液体均匀度情况。
图3 不同部位透明液体CCD图像
1.2 算法实现图像处理
按以上步骤得到图像数据之后,将数据包保存,导入Matlab软件,进行分析处理,分析黑色条纹之间的距离;编写程序识别条纹间的距离,用Matlab软件计算出经透明液体折射后的直线束间的距离,根据Matlab软件的可视化结果输出判断异常部位,计算出液体的均匀性[7]。
将数据导入Matlab软件中,将数据包转换成图像显示在图表中,如图4所示。根据处理后的图像可知,数据的两边存在异常。
图4 数据包经Matlab处理后的图像
将数据包进一步处理,用柱状图显示有液体时和无液体时直线间的距离,从中能够直观地看出异常点的位置和距离,如图5所示。从图片处理结果可知,第1、第2、第4、第11、第12光栅是存在异常点的位置,其中,第4光栅有液体和无液体时差距较大。
图5 有液体和无液体时的距离对比
经分析可知,CCD采集的是13根直线组成的直线束,由于光栅受温度和其他因素的影响,发生了一定量的翘边,两边的数据会有一定的异常,将边缘的数据舍弃,继续用Matlab进行定量分析。
用Matlab进一步定位异常距离的像素点坐标,计算出透明液体的均匀度。部分编程显示如图6所示。经过Matlab软件分析可知,第32和36像素之间不均匀,第36和40像素之间不均匀,第80和84像素之间不均匀,第84和88像素之间不均匀。通过数据分析,最后的结果是被测液体的厚度均匀性为69.230 8%。
图6 编程计算透明液体厚度均匀性
2 结语
利用线性CCD对透明液体进行厚度均匀性的测量,通过编程分析数据,从而提取出图像中所需要的透明液体厚度信息,检测医用手套上的液体厚度是否符合标准。该方法完全满足实验的要求,能实现高效率、高准确的检测目的。实验证明,该系统可以有效检测透明液体厚度的均匀性,具有很好的环境适应性和广阔的应用前景。