基于嵌入式ARMS3C2440智能建筑物裂纹实时测量系统开发研究
扫描二维码
随时随地手机看文章
0 引 言
在建筑业中,评价墙体裂纹,地面裂纹是评价房屋质量的一项重要指标。由于传统的利用手工标尺进行裂纹宽度测量的方法既不准确又不方便,于是将嵌入式应用于自动测量建筑裂纹宽度成为了许多研究者的重要研究内容。
本研究将问题划分为以下两个部分:
(1)裂纹宽度测量算法;
(2)将以上所开发软件移植到ARM开发板,并优化算法提高软件运行速度。
1 裂纹宽度测量算法
计算裂缝宽度关键是要利用图像分割技术得到裂缝的真正边缘。虽然已有文献介绍了多种分割方法,但是未见有针对裂缝测试仪采集到的裂缝图像进行处理的方法。因此,本文针对裂缝图像,提出了结合OTSU图像分割与Sobel边缘检测的混合算法进行裂纹检测与宽度测量。
1.1 图像获取
图像获取过程如图1所示:被检测的裂缝通过光学系统在CMOS图像传感器上成像,然后通过USB接口将裂缝图像输出到ARM上进行处理。
裂缝图像如图2所示。裂缝宽度分布范围较广,自几十至几百像素不等,但远远小于图像的宽度值。裂缝周围有部分噪声,有的图像含有大量污染区域,这成为裂缝位置锁定的难点。
1.2 OTSU图像分割
通过与已有图像分割方法如:直方图法、OTSU法、区域分割法等进行比较发现,OTSU在最后的效果上占有明显的优势。因此采用OTSU方法进行图像的分割。[!--empirenews.page--]
图像分割的结果如图3所示。观察结果,很容易发现图像的边缘很大区域被错分为与裂缝一样。于是直接计算裂缝宽度时会导致将错分的区域计算成裂缝。因此除了计算裂缝宽度外,对候选裂缝集合进行有效剔除是另一个重要任务。对选裂缝集合进行有效剔除将会在下一小节中进行讨论。
分割完图像后,计算所有可能成为裂缝的区域的宽度。采用从图像给定行的起始位置开始计算裂缝宽度,当发现像素灰度由0变为255,记为一个裂缝的左边缘起始位置;当查找到像素灰度由255变为0,记为一个裂缝的右边缘结束位置。通过这种方法可以获取给定行的所有可能的裂缝宽度。但是在具体试验中发现,计算对单行的裂缝进行宽度测量还是存在比较大的误差。于是采用求取给定行上下5行共10行的平均值的方法。这样可以有效地去除毛刺的干扰。通过这种方法,得到一个裂缝的候选集合,并且计算出候选集合中每一个位置的宽度。
1.3 Sobel边缘检测
以上小节得出了裂缝的候选集合,但是事实上这个候选集合含有大量的非裂缝区域。这一节中的主要内容是设计算法剔除这些干扰裂缝,获取更小的裂缝候选集合。在试验中,由于裂缝具有明显的边缘,而干扰图像区域有比较模糊的边缘或者仅有一个边缘等,通过分析,提出采用Sobel边缘检测的方法进行裂缝位置的锁定。Sobel算子由两个卷积核组成,如图4所示,图像中的每个点都用这两个核做卷积,一个核对通常的垂直边缘相应最大,而另一个对水平边缘相应最大。两个卷积的最大值作为该点的输出位。运算结果是一幅边缘幅度图像。
通过对原始图像采用Sobel边缘检测得到如图5所示结果。
但是,这个结果很明显存在很多微小的干扰,这些干扰必须予以剔除,否则将对锁定裂缝边缘没有任何效果。通过对边缘检测结果图像仔细分析发现,虽然存在微小干扰,但是他们的灰度值普遍偏小,针对这一发现,对缘检测结果图像做与上一节中一样的图像分割,这会将微小的干扰有效地剔除。实际的实验结果也验证了这一点,如图6所示。
同过对分割后的边缘图像进行观察,图像仍然存在一些微小的干扰,但这些干扰相对于未处理的缘检测结果图像已经很少,将在后续的处理中对图像裂缝添加附加约束,从而取出这些干扰的影响。
1.4 基于裂缝特征的附加约束
通过对大量的裂缝图像进行分析,发现图像裂缝有如下特点:
(1)裂缝灰度值低于墙体的灰度值。
(2)裂缝的宽度相对于整个图像不超过图像宽度的1/3。
(3)污染的墙体区域一般呈大的块状出现,且很多仅含有一个边界,另一边界延伸至图像外面。
(4)墙体的一些微小的干扰呈小块状出现。
(5)裂缝一般为带状。
使用ARM处理器处理图像,由于其速度慢且有实时性要求,故不能处理整张的图像,换句话说,必须处理局部图像。这就很明显增加了剔除候选裂缝的难度。该系统显然是无法使用特点(4)、特点(5)的。因此仅使用了前三个特点,并提出了约束:剔除宽度高于图像宽度1/3的裂缝候选集,剔除宽度低于1/10的裂缝候选集。[!--empirenews.page--]
通过添加以上约束,实验效果有了明显的提高。
图7是PC机的结果,由于同时使用了5个约束效果比较好。图8是ARM系统运行的截图,由于在ARM上不方便分步计算出每一个步骤,故直接给出了带有测量结果的截图。
2 基于Linux的QT界面设计算法
前文讨论的是主要的算法部分,完整的裂纹测量系统还包括用户接口部分,即图形界面接口。在ARM上采用QT进行界面设计已经比较成熟,它具有以下主要特点:
(1)入门容易、学习成本低。了解基本概念后就可以边查文档边写程序。
(2)跨平台效果好。本来是Linux下的工具库,在Windows下默认观感也很好。
3 软件移植与程序优化
由于最终的程序是运行在ARM系统上,而由于ARM处理图像时的速度慢与裂缝测量仪器的实时性要求,必须对程序进行优化,并将算法移植到ARM系统上,使之可以正确运行。
软件的移植比较容易。由于一开始很注重将PC机上仿真成功的算法及时移植到ARM上,故程序的移植变得比较容易。
但是程序的优化是一个问题,虽然现在的ARM速度已经提高了很多,但是在处理图像时还是很吃力,加上算法中需要对原图像两次独立处理,相当于加倍了ARM的负担。通过对大量裂缝图像的分析,针对前文中提出的裂缝特点以及结合ARM本身的运算速度条件,提出剔除处理全部图像的算法。采用了只处理给定行位置上下10行的区域。通过只处理这20行图像,极大地提高了程序的运行速度。以上方法并行,还采用多线程编程方法,通过将图像采样与图像的处理分为两个进程完成,有效地提高了程序的运行速度。
4 实验结果分析
该程序分别在PC机和ARM开发板上运行,效果如图7,图8所示。
通过大量的实验发现该算法能较好地检测出裂缝的分布和宽度。在算法中采用了结合OTSU图像分割与Sobel边缘检测的混合算法进行裂纹检测与宽度测量。这种算法能分别有效利用边缘检测与图像分割两种方法各自的优点。另外在该算法中加入了一些分析获得的约束条件,这能极大地弥补边缘检测与图像分割混合方法的不足,从而有效地提高了裂纹位置锁定与裂缝宽度测量的精度。
5 结 语
针对墙体裂纹测量,设计出了一套适用于裂缝宽度检测的算法。该算法能较好地检测出裂缝的分布和宽度。采用边缘检测与图像分割混合的方法并通过对大量图像进行分析,对算法添加了一系列符合图像裂缝特征的约束条件,极大地提高了算法的准确性与健壮性。分别将程序运行于PC机系统与ARM系统,并针对ARM系统的特点对算法进行了一系列优化,引入了并行处理技术,在提高ARM运行速度的同时,使得ARM系统检测出的结果达到与PC机系统几乎同等的效果。