基于OpenCV的图像信息处理系统的开发与应用

2023-04-29 20:10:36李珍刘晓星安百钢
信息系统工程 2023年4期
关键词:信息处理图像识别

李珍?刘晓星?安百钢

摘要:本论文工作针对移动床内颗粒物料卸料特性的CCD摄像图片,开发了基于OpenCV的图像识别处理程序和颗粒追踪测速程序,以刻画移动床卸料过程中的流型演化和颗粒运动信息。为检验程序的准确性,以离散单元法数值模拟得到的颗粒图像为对象,对比了所开发图像后处理程序分析结果与离散单元法数值模拟数据,发现两者能定量吻合。

关键词:OpenCV;图像识别;信息处理;颗粒流

一、前言

本研究工作的研究目的之一是基于CCD高速摄像技术来研究移动床卸料过程中床层内颗粒物料的流动特征,进而得到流动区轮廓以及颗粒速度随时间的变化。针对这一研究目的,开发了图片后处理程序来对图片进行处理,以得到相关颗粒运动信息。程序开发引用了OpenCV视觉库里的API,基于粒子图像测速法(PIV)的思想,监测流场内所有颗粒的瞬时运动状态,使用最近邻法算法来匹配批量图像上的同一个颗粒,实现对移动床内颗粒物料的宏观流动区的演化以及微观单个颗粒的运动状态的监测。为此编写了两套程序,一为流动区识别程序,二为颗粒识别追踪测速程序。

二、实验装置

本论文工作所开展实验的主要目的是探究移动床厚度对床层内颗粒卸料行为包括流动区轮廓、颗粒速度分布等参数的影响。参考文献中所报道的移动床实验装置,结合工业项目需求,搭建了移动床,安装了CCD高速摄像仪、LED灯、电脑等图像拍摄和记录装备,用于研究颗粒物料卸料过程。实验中通过CCD高速摄像仪拍摄一系列不同卸料时刻床层物料照片,然后用自主开发的流动区识别程序以及颗粒追踪测速程序来处理这些照片,监测提取卸料过程中床层物料内流动区轮廓的变化以及单个颗粒的运动状态等信息,以探究床层厚度对颗粒物料卸料特性的影响。

设计搭建的移动床卸料实验平台如图1所示。移动床装置被固定在铝合金支架上,移动床壁面的材质是亚克力板,铝合金支架下方预留自由空间以接取卸料后的颗粒。高速摄像仪镜头用的是尼康AF Nikkor 50mm f/1.4D,最高帧频可达每秒120000帧,灯源为Godox的LED308,电脑是联想品牌电脑,操作系统使用的是Windows10操作系统。

三、程序开发

(一)流动区识别程序

所编写的流动区识别程序实现逻辑如下:用CCD高速摄像仪拍摄的移动床卸料的原始图片为灰度图像,颜色值为单通道,在0到255之间。imread读取相邻的两张图片,灰度值做差之后result_img得到新的灰度图像[1]。如果前后两张图片上同一位置的灰度值相同,代表两张图片中该位置处颗粒未发生运动或者改变。由于两张图片同一位置处灰度值无差别,在生成的新图片上,这个位置的灰度值相减变为0,用黑色表示,代表静止区。如果前后两张图片上同一位置的灰度值不同,则代表该位置处颗粒发生改变或者产生运动。新生成图片的灰度值为两张图片的灰度值之差,用非黑色,即不同颜色的灰色(1到255)表示,代表流动区。

因为预处理图片较为模糊,且有噪声,所以采用threshold调节阈值,使图片变为黑白图像。实际操作中选定一个阈值,灰度值大于这一阈值时,颜色值设置为1,是白色,反之为0,即黑色。经过测试,阈值为33时,流动区整体轮廓最为清晰。选取前后两张颜色值做差的图片的时间间隔也很重要。如果时间间隔取得比较密,例如0.01s,最终流动区与后文分析的速度场相匹配,可以看到最明显的速度波现象;如果时间间隔取得稍微大一些,例如0.05s,则看不到速度波现象,而是整体轮廓最为清晰的流动区。获得流动区之后,为进一步监测统计流动区的具体演化,需要对流动区的轮廓进行提取。

图2是提取颗粒流动区整体轮廓的示意图。获得流动区轮廓坐标的程序实现方法如下:首先调用OpenCV的库函数morphologyEx,对图2中左图的流动区做开运算处理,使得流动区内部的空隙以及孔洞完全被填充,成为一个整体,进而得到如图2中间图片所示的白色区域。形态学运算中有腐蚀,膨胀,开运算和闭运算几种常见的方法,其中腐蚀方法可以抹除轮廓边界像素点,消除毛边,毛刺,以及一些无意义的扰动点。对轮廓边界使用腐蚀,会使得轮廓边界减小,向内收缩。膨胀方法是将轮廓所临近相接的所有像素点吸收到该轮廓里,使得轮廓边界向外延展。它可以使得轮廓边界内部的孔洞斑点得以填充。将这两种方法结合,可以先使用腐蚀后使用膨胀,称为开运算,它的功能是去掉离散的小斑点、分开接近的两个斑点、消除大轮廓边界的毛糙点并且尽可能保证轮廓面积不变。先使用膨胀后使用腐蚀,称为闭运算,它的功能是去掉大轮廓内部的小斑点、连接靠近的几个斑点、消除大轮廓边界的毛糙点并且尽可能保证轮廓面积不变[2]。本论文工作采用开运算策略。得到图2中的中间图片后,调用OpenCV的库函数findContours,对该图片中的白色区域进行轮廓识别,可以得到大致的轮廓坐标信息,如图2中右图的红色闭合曲线。

得到流动区轮廓坐标后,可以进一步对流动区的一些几何信息进行提取,来具体描述流动区的演化。图3是提取流动区宽度、高度等信息的示意图。获得自由表面高度h、流动区高度H、流动区宽度W、特征区宽度W(1/2h)的程序实现思路如下:遍历轮廓纵坐标,当轮廓纵坐标Y1最小时,得到此时的横坐标X,即为卸料口的横坐标,接着寻找横坐标为X时,纵坐标的最大值Y2,Y2减去Y1得到H。因为流动区从卸料口处发展至颗粒初始堆积高度(自由表面处)时流动区高度会有一个先增高的变化,之后随着自由表面高度的降低而降低,所以自由表面高度h的变化是流动区高度H发展到颗粒初始堆积高度后开始降低的部分。得到流动区高度后,从卸料口位置往上检索纵坐标相同的轮廓坐标,它们的横坐标相减即可得到流动区的宽度W,当轮廓纵坐标的值为h的一半时,可得到特征区宽度W(1/2h)。

流动区轮廓信息提取的关键代码如下:

for (int j = 0; j < contours[row].size(); j++)

{

if (contours[row][j].y > maxY)

{

maxY = contours[row][j].y;

X = contours[row][j].x;

}

}

cout << "x = " << X  << endl;

for (int j = 0; j < contours[row].size(); j++)

{

if (X == contours[row][j].x && contours[row][j].y < minY)

minY = contours[row][j].y;

}

h = maxY - minY;

W = 0.5*h + minY;

获得流动区宽度、高度等的信息后,有一个拐点值得注意,就是静止区与移动床边壁交界的最高点,即有效转捩点(ETP)。ETP点的高度会随着卸料的进行发生改变。根据流动区轮廓坐标提取获得ETP点信息的逻辑:确定流动区轮廓的最大宽度widthMAX,遍历不同纵坐标下的流动区宽度W,当W等于widthMAX时,并且此时的纵坐标最小,纵坐标的高度即为ETP点的位置,ETP点是静止区与床层交界处的最高点的位置。

从而得到ETP点的位置随自由表面高度h的变化曲线,曲线的变化趋势分为三个阶段:(1)当自由表面的高度随着卸料的进行从最高处开始降低,有效转捩点纵坐标位置y处于相对平稳期,在某一值附近波动,对坐标y进行累计平均得到ETP点;(2)一段时间后卸料流型由半整体流型转捩为漏斗流,有效转捩点纵坐标y开始急剧增大,此处即为流型转捩点,此时静止区的最高点会到达自由表面;(3)ETP点到达自由表面之后,此时它的高度与流动区整体高度一致,它的纵坐标y随着自由表面高度h的降低而降低,直至卸料完成。至此,流动区识别程序可以得到宏观流动区演化过程中的大部分运动信息。

(二)颗粒识别程序和颗粒追踪测速程序

通过流动区识别程序监测得到宏观流动区的演化信息后,为更清晰地了解卸料过程中颗粒的运动特性,进一步对微观单个颗粒进行识别、追踪匹配、测速等。要追踪单个颗粒的轨迹,首先要对单个颗粒轮廓进行识别。

颗粒质心识别程序的实现操作如下[3]:首先基于for循环,imread读入批量的数字图片,再将每张图片进行cvtColor灰度化处理以减少运算量,然后通过GaussianBlur高斯模糊减少噪声,再进行morphologyEx形态学处理[4],通过腐蚀膨胀减少毛刺,填充球形内部的黑洞,使球体进一步接近球形;之后进行threshold自适应阈值化操作,选取合适的阈值进一步突出颗粒的外边界轮廓;最后对颗粒的轮廓和边界进行识别,使用findContours,得到颗粒的坐标信息[5]。

颗粒质心信息提取的关键代码如下:

for (int t = 0; t < contours.size(); t++)

{

mu[t] = moments(contours[t], false);

if (mu[t].m00 == 0)

{

mc[t] = Point2f(0, 0);

}

else {

mc[t] = Point2f(mu[t].m10 / mu[t].m00, mu[t].m01 / mu[t].m00);

}

cout << "x: " << mc[t].x << "  " << "y: " << mc[t].y << endl;

drawContours(src, contours, t, Scalar(0, 0, 255), 2, 8);

}

颗粒质心识别程序识别颗粒整体轮廓的效果如图4所示,除了极个别的颗粒无法识别,99.9%以上的颗粒都可以被识别,表明程序整体识别性能优良,可为后续具体的移动床卸料实验的图像处理提供优秀的技术支持。

同时,当CCD高速摄像仪的摄像头需要拍摄的颗粒数目较多,分辨率不够,拍摄得到的颗粒轮廓较为模糊时,可以通过识别单个颗粒表面反射的光斑来确定颗粒的坐标[6]。识别颗粒光斑确定颗粒坐标,统计得到程序准确率高达99.9%,这两种识别方法可根据实验不同需求进行选择。

识别单个颗粒,得到颗粒的坐标信息之后,对批量图片上处于不同位置处的同一个颗粒进行匹配、测速,得到颗粒的运动轨迹和速度信息[7]。颗粒追踪测速程序的算法逻辑如下:输入之前程序处理得到的颗粒质心坐标,选取第tn时刻的第i个颗粒的坐标与第tn+1时刻该位置附近的颗粒坐标进行比较,如果两者之间的距离小于颗粒的半径,则说明是同一个颗粒。这是因为选取的两个时刻的间隔非常短,颗粒的位移不超过颗粒的半径,这也是最近邻法的思路。CCD高速摄像仪可以辅助高速拍摄,满足实验的需求。完成第tn时刻的所有颗粒的匹配,输出结果,将已匹配颗粒之间的移动距离除以两张图片的时间间隔可获得该颗粒的移动速度。自此,实验中比较重要的颗粒运动信息都可以通过程序对图片进行后处理提取得到[8]。

四、程序处理结果精度验证

为验证编写的颗粒识别程序和颗粒追踪测速程序的准确性,使用编写的程序对离散单元法数值模拟得到的颗粒可视化批量图像进行信息处理。之所以采用该策略是因为离散单元法数值模拟中不同时刻每个颗粒的信息都是已知的,因此,用自主编写的程序识别批量模拟图片得到的颗粒信息,与数值模拟监测得到的颗粒信息进行对比,如若二者的误差较小,即可证明编写的图像后处理程序精确度较高,可用于颗粒流的卸料实验研究。

首先对比分析模拟得到的颗粒坐标和程序处理相同实验条件下模拟照片得到的颗粒坐标信息,发现二者的坐标位置重合度较高,颗粒坐标的识别准确度高达100%,但是二者的颗粒坐标位置有细微差别,出现的误差在可接受范围之内[9],证明颗粒识别程序准确度比较高,可为后续的颗粒追踪测速程序进行高质量服务。

识别颗粒坐标之后,需要对单个颗粒进行匹配测速,得到不同高度位置处的颗粒速度分布曲线,从而监测颗粒的运动轨迹和运动信息的连续变化[10]。图5为颗粒追踪测速程序处理批量模拟图片得到的速度分布和离散单元法数值模拟得到的速度分布,两条速度分布曲线基本重合,统计得到,颗粒追踪测速程序的准确度大于99.9%,表明颗粒追踪测速程序准确性良好,可以为后续更加深入的实验研究提供较好的数值统计分析服务。

五、结语

本文详述了对CCD摄像得到的大批量图像进行数值处理的算法思想和程序实现策略,基于OpenCV开发了图像识别程序和颗粒追踪测速程序,并对所开发后处理程序颗粒识别功能的准确性和识别精度进行了检验。验证结果表明所开发的图像后处理程序能够精确地对移动床卸料过程中运动状态随时间变化的颗粒进行识别和追踪,从而为接下来具体移动床卸料实验的数值分析奠定了扎实的基础。本文的工作对颗粒流的数值处理技术具有一定的指导意义,并在颗粒物料相关的工业应用中具有广阔前景。

参考文献

[1]曹建海,路长厚.基于灰度图像和矢量的圆心定位[J].光电子·激光,2004(06):714-718.

[2]李冬冬,胡浩然,肖明,王小毛.基于PFC-FLAC离散-连续耦合的隧洞开挖与锚杆支护颗粒流模型[J/OL].武汉大学学报(工学版):1-9[2023-03-27].http://kns.cnki.net/kcms/detail/42.1675.T.20230215.1743.009.html

[3]钟华勇,叶建生,何高清.基于OpenCV的圆心坐标定位的优化设计[J].制造技术与机床,2021(05):110-115.

[4]肖剑雄峰,赵汉理,吴承文.局部对比度增强的彩色图像灰度化参数化算法[J].计算机时代,2016(03):45-49.

[5]赵飞翔,迟世春.基于离散元的碎片尺寸随机的颗粒破碎模拟方法[J].东北大学学报(自然科学版),2023,44(03):408-414.

[6]Na Zhao,Fang Zhao,Wen-Zhen Zhong. EDEM Simulation Study of Lignite Pressing Molding with Different Particle Size[P]. Proceedings of the 2015 4th International Conference on Computer, Mechatronics, Control and Electronic Engineering,2015.

[7]Feng Wenyu,Han Yanlong,Chen Peiyu,Li Anqi,Wang Yinglong,Zhang Jincheng,Fei Jiaming,Hao Xianzhi,Shen Shaohang,Jia Fuguo. Effect of eccentricity on the particle flow characteristics in a double-orifice silo[J]. Powder Technology,2023,421.

[8]Wei Wei,Ding Lieyun,Luo Hanbin,Li Chen,Li Guowei. Automated bughole detection and quality performance assessment of concrete using image processing and deep convolutional neural networks[J]. Construction and Building Materials,2021,281.

[9]Sakamaki Shouta,Krengel Dominik,Mueller Jan,Chen Jian,Matuttis Hans Georg. Implementation of numerically exact Coulomb friction for discrete element simulations in three dimensions[J]. EPJ Web of Conferences,2021,249.

[10]Laurent Babout,Krzysztof Grudzien,Eric Maire,Philip J. Withers. Influence of wall roughness and packing density on stagnant zone formation during funnel flow discharge from a silo: An X-ray imaging study[J]. Chemical Engineering Science,2013,97.

作者单位:李珍,辽宁科技大学化学工程学院、中国科学院过程工程研究所多相复杂系统国家重点实验室;刘晓星,中国科学院过程工程研究所多相复杂系统国家重点实验室、中国科学院大学化学工程学院;安百钢,辽宁科技大学化学工程学院

猜你喜欢
信息处理图像识别
东营市智能信息处理实验室
基于Revit和Dynamo的施工BIM信息处理
基于Resnet-50的猫狗图像识别
电子制作(2019年16期)2019-09-27 09:34:50
高速公路图像识别技术应用探讨
地震烈度信息处理平台研究
图像识别在物联网上的应用
电子制作(2018年19期)2018-11-14 02:37:04
图像识别在水质检测中的应用
电子制作(2018年14期)2018-08-21 01:38:16
CTCS-3级列控系统RBC与ATP结合部异常信息处理