基于STM32的焊缝宽度测量系统设计

2022-08-30 09:43李国洪
制造技术与机床 2022年9期
关键词:像素点图像处理宽度

李国洪 乔 泽

(天津理工大学电气工程与自动化学院,天津 300382)

随着工业自动化程度的不断提高,在焊接过程中尽量以机器代替人的工作可以大大地提高焊接生产效率,而且产品精度与合格率也可以得到一定的保障。文献[1]提到在实现整个焊接自动化的过程中,主要分为焊缝识别、焊缝图像提取、焊缝图像处理以及焊缝跟踪几个部分,其中焊缝识别与焊缝图像提取作为焊接自动化要解决的第一个步骤,同时也是实现自动化焊接最关键的技术之一。传统的焊缝测量方式主要有超声波测距、激光测距和雷达测距等等,但这些测量方式往往存在设备成本高、操作程序复杂等缺点,更不适于被移植到低功耗、低成本的嵌入式设备中。而随着近年来图像处理技术与计算机视觉技术的蓬勃发展,视觉测距技术在各行各业取得了优异的成绩和表现,比如常见的单目视觉测距系统在硬件上仅仅需要增加1个图像传感器就能代替完成以往复杂系统才能完成的测量工作。如在文献[2]提出了基于图像处理的车辆焊缝间隙检测系统,可实现对车辆焊缝间隙的精准检测。

本文考虑到在一些环境较为恶劣,不适于人参与的焊接环境中,可以利用嵌入式微控制器进行图像采集与处理,实现焊缝宽度的非接触式测量,从而进一步控制焊接过程中电机的启停或执行下一步的焊接动作。另外,因为STM32微控制器以其低成本,低功耗与高性能等优点[3-5],近年来被用在了人工智能、物联网、自动驾驶和工业自动化等各个行业,同时因为其较快的时钟频率,可实现较为复杂的图像处理算法,所以也多被应用于嵌入式图像处理设备中。故本文利用STM32设计了一种焊缝宽度测量系统,具有低功耗、低成本以及可轻松移植安装到其他焊接设备中等优点。

1 系统总体方案设计

采用意法半导体公司的STM32F407ZGT6芯片作为系统的主MCU。外部连接OV2640摄像头负责采集焊缝图像,扩展SRAM负责存储图像数据,LCD液晶显示负责图像的输出,按键可控制显示屏输出原始RGB彩色图或图像处理后的二值图。串口模块负责图像帧率,焊缝中像素点及计算以后焊缝实际宽度等数据的输出。系统整体框图如图1所示。

图 1 系统整体框图

2 硬件设计

2.1 MCU 核心模块选择

MCU是整个系统运行的核心,MCU一方面要与数字摄像头OV2640、液晶屏和串口等外围模块进行通信,完成对其内部寄存器的读写与配置,使其能够正常工作。另一方面还要运行之后的图像处理子程序对摄像头采集到的原始图片进行处理。所以在选择MCU时,在考虑较低的价格和满足低功耗要求之外,还要确保其运行速度要足够快。本设计采用的STM32F407ZGT6是基于ARMCortex-M4内核的32位高性能处理器[6],该芯片包括USART、SPI、IIC、CAN和DCMI等丰富的通信接口。并且几乎每种通信接口都有独立的硬件资源与之对应,可以通过库函数轻松配置实现MCU与各种从器件之间的通信,十分简单方便。另外作为一种多用途的单片机,STM32F407ZGT6主频可以达到168 MHz,足可以运行图像处理程序与简单的图形界面,很好地实现人机交互。

2.2 OV2640 传感器电路

OV2640 是一款CMOS 类型的数字图像传感器,由豪威科技(OmniVision)公司生产。该传感器具有体积小、工作电压低的特点,最大可输出200万像素的图像。并且还支持输出 RGB565 和JPEG 等格式的图像数据,可以通过伽玛曲线、白平衡、饱和度和色度等方式来修改捕获的图像,进行一些简单的补偿处理,所以该摄像头多被应用于低功耗嵌入式设备中同步时钟信号等,主要通过与STM32的DCMI外设连接,通过VGA时序获取图像数据流。

2.3 LCD 显示电路

为了能实时观察焊接过程中两焊接件的位置情况,进一步提高系统的可靠性,所以选择将摄像头采集到的图像通过LCD液晶显示屏实时展现出来。液晶显示采用1块2.8寸大小且分辨率为320×240的TFT液晶屏,因为STM32F407ZGT6内部没有内置LCD控制器,所以该液晶屏自带了驱动芯片,最终通过STM32的FSMC接口模拟出8 080时序进行驱动。

2.4 外部 SRAM 电路

STM32F407ZGT6内部有192 K字节的SRAM,但是对于系统要存储图像并且运行一系列的图像处理程序是远远不够的,所以使用FSMC接口扩展了1个16位宽512 K容量(即1 M字节)的CMOS静态内存芯片 IS62WV51216。使用 FSMC 的 BANK1区域 3 来控制 IS62WV51216,根据 Cortex-M4 内核的存储空间分布以及FSMC的地址映射关系,可知IS62WV51216的内存首地址被分配在了0x68000000处。在之后的软件设计时,可以利用C语言中指针的方式将图片存储在外部SRAM中。外部扩展SRAM电路如图3所示

图 3 外部 SRAM 电路

3 软件设计

3.1 系统主程序设计

系统采用STM32作为主要的控制芯片,keil5作为程序的编译环境,编程语言采用C语言,使程序具有较高的可移植性与运行效率。系统初始化主要包括OV2640的初始化程序设计,扩展外部SRAM的程序设计,按键与LCD显示屏的驱动设计。另外在之后的图像处理程序中定义了大量的局部变量,所以需要程序设计之前在STM32 官方提供的标准固件库中找到启动文件startup_stm32f40_41xxx.s,并在启动文件中将整个程序的栈空间放大到至少20 K,否则会导致程序运行不正常或程序跑飞。系统软件设计的整体流程如图4。

图 4 系统软件设计流程图

3.2 图像的缓冲与内存的分配

STM32F4系列的单片机为驱动数字摄像头设计的外设接口即 DCMI(digital camera interface),是1个同步并行接口。设计输出图像格式为RGB565,图像分辨率为320×240,而且数据宽度为8位。所以1个像素点数据所占的内存空间大小为2个字节,储存这样1帧完整的图像需要的内存空间大小为320×240×2=153 600(字节),而 STM32F407ZGT6内部只有192 K字节的SRAM,加之程序中还要定义一些全局变量,所以将图像直接存储在内部SRAM是不现实的。但若直接将图片的缓冲数组定义在扩展的外部SRAM中,经测试,由于主控芯片对外部SRAM的访问速度远小于DCMI采用DMA传输方式时的读写速度,所以会导致图像数据的丢失与LCD液晶显示画面的失真。所以最终采用DMA(直接存储区访问)的双缓冲机制,在内部SRAM中定义2个大小适中的接收数组,交替接收DCMI接收到的图像数据,之后再依次存储到外部SRAM中。

3.3 C 语言中图像的表示与灰度化

若将1帧分辨率为XSIZE*YSIZE图片的左上角作为坐标原点,设其图像数据为image_in,那么距离图像原点在水平方向上为i,垂直方向上为j(即(i,j)处)位置的像素值,可以用数组image_in[j][i]或指针*(image_in+j*XSIZE+i)来表示[7]。考虑到数据指针具有动态分配内存的优点,所以使用第二种方式来表示图像,充分利用内存空间。将彩色图进行灰度化处理采用移位算法[8-9],具体公式为

式中:Gray为灰度值;“R”“G”“B”分别为RGB565图像数据中红、绿、蓝颜色的分量。

3.4 图像二值化与滤波去噪

图像二值化的过程即选取合适的阈值,将灰度图的像素值仅划分为0或255,所以过程中最重要的就是阈值的选取[10]。在数字图像处理时针对阈值选取的常见方法有双峰法,Otsu法(大津法),迭代法等,例如文献[11]中提出利用改进的大津算法对地铁隧道裂缝图像进行二值化。文献[12]则在焊缝图像分割中通过重复使用迭代法来获得较为理想的图像分割效果。本文考虑到迭代法原理简单,代码容易实现,且在焊缝图像中可以取得良好的分割效果,所以最终采取迭代法获取图像二值化的最佳阈值,使用迭代法自动选取图像二值化阈值的流程如图5。

图 5 迭代法自动选取阈值流程图

由于大多数情况下,焊接现场的环境都十分恶劣与复杂,充满了大量的噪声污染,给图像的采集与后续的处理造成了很大的困难与干扰。不但影响焊缝的目标提取,而且会干扰焊缝间像素点的统计结果从而使最终的焊缝宽度测量不准确。所以在图像处理过程中加入图像降噪以及滤波算法一方面可以使图像分割更加细节化;另一方面可以提高系统的精度与可靠性,减少或消除噪声形成的系统误差。文献[13]提出了几种常见的滤波方法对图像进行去噪处理,如高斯滤波、均值滤波、中值滤波和形态学滤波器滤波等。文献[14]提出了一种自适应尺寸的中值滤波算法。经测试,与传统中值滤波算法相比较,采用该算法不仅能够很好地去除图像噪声,而且能使焊接件与焊缝边界更加清晰顺滑。

3.5 区域标记与焊缝间像素点的统计

假设实际焊接场景为:焊接过程中钢板1位置固定不动,由钢板2缓慢靠近钢板1。则为了方便实时统计两钢板间的像素点个数,需要对钢板1进行区域标记。利用文献[15]中提到的区域生长算法对钢板1进行区域标记的具体步骤为:

(1)手动选取钢板1中任意1个或多个像素点作为种子点。

(2)设计生长准则为:像素值等于255。

(3)将种子点作为初始生长点,同时标记种子点属于目标区域Q。

(4)搜索所有生长点八邻域内的像素点,去除其中已经属于区域Q的像素点,同时去除其中超过图片边界的像素点。

(5)将剩余的像素点与其对应的生长点进行对比,判断是否满足生长准则,将其中满足生长准则的像素点与种子点合并,归属于区域Q,同时将其标记为新的生长点。

(6)判断新的生长点个数是否为零,若不为零则返回步骤4;若为零则结束算法,同时输出最终合并区域Q,即目标区域。并将目标区域像素值改为27(可取其他数值)。

图像经二值化和区域标记后各区域像素的灰度值如图6和图7。

图 6 二值化后各区域像素的灰度值

图 7 区域标记后各区域像素的灰度值

可见经图像滤波和区域标记后,两钢板、焊缝和背景区域的像素值被很好地分割开来。所以焊缝间的像素点个数可以通过不同区域边界上像素值发生跳变这一特点被方便地统计出来,最后再根据固定焦距下测得的单个像素点的实际尺寸K便可以求得实际的焊缝宽度,参见文献[16]中对混凝土表面裂缝宽度的计算。

本文具体做法为:在程序中定义2个初始值为0的变量U、V。在遍历1帧图像所有像素点的过程中,选定任意的一行,若图像的数据指针*(image_in+j*XSIZE+i)发生图7所示跳变,即记录当时的横坐标分别作为焊缝的左右边缘点并对应赋值给U和V。当V的值不等于0时,焊缝间的像素点个数W=V-U。多次统计不同位置焊缝间像素点个数W1,W2,··,Wn,然后进行排序找到焊缝间的最大宽度Wmax[17]。然后再根据固定焦距下测得的单个像素点的实际尺寸K,从而计算出两块钢板之间的实际最大焊缝宽度L=KWmax。

当V的值等于0时,钢板1与钢板2都被区域标记算法标记为“27”,此时两钢板之间无缝隙,此时可在程序中发出后续的焊接指令。

4 系统测试

将两块钢板放置在摄像头的视野内,固定其中一块的位置不动,缓慢移动另一块使二者靠近。实时观察LCD显示屏中二值化图像的动态效果如图8。统计串口模块发出的焊缝间像素点及其对应的焊缝最大宽度如表1。

表1 系统测试结果

5 结语

本文以STM32F407ZGT6单片机和OV2640图像传感器为核心,对其内存与其图像的采集和存储机制进行了充分的考虑与测试。在此基础上实现了焊缝图像采集与宽度测量系统的设计,具有成本低、功耗低及集成度高等优点。能够减少焊接过程中的人为参与,能够满足较高精度要求的焊接应用场景。

图 8 LCD 显示

猜你喜欢
像素点图像处理宽度
海战场侦察图像处理技术图谱及应用展望
人工智能辅助冠状动脉CTA图像处理和诊断的研究进展
图像二值化处理硬件加速引擎的设计
基于局部相似性的特征匹配筛选算法
基于ARM嵌入式的关于图像处理的交通信号灯识别
基于像素点筛选的舰船湍流尾迹检测算法
机器学习在图像处理中的应用
基于canvas的前端数据加密
孩子成长中,对宽度的追求更重要
你有“马屁股的宽度”吗?