指针式仪表表盘的缺陷检测
仪器信息网 · 2009-08-02 21:40 · 39950 次点击
摘要:本文将表盘字符检测与表盘刻度检测相结合的方法用于对刻度式电仪表表盘进行缺陷检测。该方法充分利用目标图像的几何特征,将表盘进行特征提取。讨论了基于字符的像素密度特征与字符映射进行检测的算法,并运用八邻域算法对以刻度线扫描。实验表明该方法对指针式表盘检测结果非常理想。
关键词:像素密度;骨架;字符;八邻域
1引言
刻度式仪器仪表可反映各种工业系统的大量动态运行参数,在现今的工业现场中被广泛使用,而且仍将长期存在。利用计算机技术代替人工检测,可以避免视觉疲劳,达到准确、快速检测的目的。刻度式仪表,在统一的计算机硬件平台下,可以构造成一个高效准确的工业刻度式仪表的检测系统。传统的表盘检测只是通过待检图像与原图像进行对比,误差性较大。本课题检测仪表的相关指标包括:表盘刻度的均匀度,刻度线是否笔直,指针与刻度线的重合度等。本课题采用先进的图像处理算法,完成对仪表缺陷的检测,相比传统方法更加准确并且有较好的开创性。系统通过运用VC++这一编程工具,采用阈值处理,边缘检测,数学形态学和小波分析理论等实现图像预处理,并把模糊理论引入到特征提取中有效的检测到目标参数从而达到预期效果。
2仪表盘检测流程
图像目标区域的定位与分割是图像识别检测工作的基础,其一般过程是先定位好目标区域,再对目标区域进行分割。但本文首先检测图像中的字符,然后再检测表盘中的刻度线。在字符检测中采用了一种新的思路,在定位操作的同时调用了某些分割的功能函数,所以本仪表盘参数符号的特征,只要区别识别出字符与刻度既可。而不需要把字符完全的识别出来,在识别出非刻度线后映射在方格中,即可以得出字符是否有缺陷。检测流程如图1所示。
3表盘字符的检测
直读指针式仪表表盘由指针、读数区刻度线、英文字母、数字和各种参数符号等元素组成。其中仪表的准确度等级(用小数表示)和各种参数符号是仪表读数和仪表校验的关键指标。因此对它们的准确识别是仪表自动读数识别和自动校验的重要因素。本文就是从已经去除了指针和读数区刻度线的表盘图像出发,在各类表盘字符中定位并分割出仪表的准确度等级参数和各种主要参数符号。
3.1字符图像特征的选取
字符的基本特征包括字宽、字高、字间隙等,用这些特征进行字符的分割。本文根据仪表盘参数字符的特点,选取了字符的像素密度特征、连通域特征进行分析。下面对这两个特征做一个简单描述。
字符的像素密度特征A:在图像白色背景下,认为被识别的字符为黑色的像素颗粒,一个字符的黑像素个数CNum与该字符外切矩形面积S之比为:A=CNum/S。
字符的连通域特征:这里指一行分割单元的中黑色像素的数量、位置等特性。
3.2字符的分割
3.2.1设置控制变量m1和m2,其类型都为整型。从左到右扫描,查看每一列是否有黑像素。如果有则m1++;m2=0,如果没有则m1=0;m2++。若m1=1,说明是第一次扫描到黑色。
3.2.2边或经过白色边后再扫描到黑色边,同理,若m2=1,说明是第一次扫描到白色边或经过黑色边后再扫描到白色边,这两种情况都可以用BNum[]数组保存下来。为了记录最右的那条边(有黑色点),故加i==wide-1这种情形。
if(m1==1||i==wide-1)
{BNum=i;k++;
}
if(m2==1)
{BNum=i;K++;
}
///i是边的位置
对于m1≥1的情况,可用CNum[]数组记录所有连续的黑像素的个数,以所记录下来最边界的黑像素的坐标为框算出其面积S,然后A=CNum/S算出字符密度。根据实验,当密度A>9/16时,可认定为字符。因为在指针式表盘中,只有刻度线与字符,而密度大于9/16的只可能是字符。
3.3字符分割后通过骨架提取算法
提取出数字骨架,把他映射在8*8的0/1矩阵,矩阵中值为1的点表示数字骨架经过的矩阵中的点,0表示数字的背景。对于表盘中数字来检测来说,取8*8的矩阵足够了。如图2所示。
扫描以上的图片中,可以得出数字4有断笔,提示出字符缺陷:
for(i=0;i{
for(j=height;j>=0;j--)
{
unsignedchartemp;
temp=*(p_data+j*wide+i);
//temp=p_data;
if(temp==0)
{
j--;
if(temp==255)AfxMessageBox(“字符有缺陷”);
}
}
4刻度线和指针的检测
表盘中的刻度和指针缺陷一般有:指针顶点的偏离、刻度线的不均匀、刻度线线弯曲等。在检测刻度线的过程中为了避免漏检运用到八邻域算法,此算法以一个像素为基点进而选取周围八个点进行检测。
4.1八邻域法的介绍
在二值图像f中,相互联结的黑像素的集合成为一个(黑)区域。本程序通过对图像f内每个区域进行标记操作(标号),求得区域的数目。由于处理前的f是二值的,像素要么为0(黑),要么为255(白),所以处理后每个像素的值即为其所处理区域的区域标号(1,2,3,…)。连接性c(=4或=8)由用户决定。本程序根据前面介绍的方法,进行物体标识。采用8连通判别算法,如图3(物体标识图)所示,图中A、B、C三个不连通的物体。对这三个不连通的物体。对这三个物体的标识过程如下:
(1)从左到右,从上到下逐个像素扫描。
(2)若访点的左上、正上、右上及左前点共4个点的像素值都不为物体,则把数标加1,且这些数组值为1。
(3)采用(行坐标、列坐标)方式标记物体。
若遇到(1,1)像素物体A,依次判断该像素点的右上点(0,2),正上(0,1),左上(0,0)及左前(1,0)是否为该物体,优先级依次降低的顺序为右上点(0,2),正上点(0,1),左上点(0,0)及左前点(1,0)。(0,2)的优先级最高,而左前(1,0)的优先级最低。
(4)若右上点为物体,则当前点跟右上点,并标记和右上点相同的值。如:当前点(2,2),则其右上点(1,3)为物体,所以当前点为(2,2)标记点与右上点(1,3)相同的值。
(5)若右上点不为物体,则判断正上点。如:当前点(5,4),则其右上点(4,5)不是物体,则判断正上点(4,4)为物体,所以当前点(5,4)标记与正上点(4,4)相同的值。
(6)同理,若当前点的右上点、正上点都不为物体,则同样的方法依次判断左上点,若左上点也不为物体,则再判断左前点。
(7)若如:当前点(1,8)的右上点(0,9),正上点(0,8),左上点(0,7)及左前点(1,7)都不为物体,则当前点的值在原来的标记上加工厂,以此标记来作为另一物体的区别。
(8)其中有一特别调整:从图中可见(10,2)是一个新加标记的点,当前点(10,3)的右上点(9,4)及左前点(10,2)为不同标记,正上点和左上点不为物体,则当前点(10,3)标记同右上点(9,4)置相同的值。此时,从头到尾扫描图像,把所有同(10,2)标记相同的像素值都标记成与右上点(9,4)同样的值。有多少个像素点转换,则统计右上点像素值(标记值)的数组就加多少。而把统计左前点的像素值(标记值)的数组置0。
在二值图像f中,相互连接的黑像素的集合成为一个(黑)区域。通过对图像f内每个像素进行标记操作,将物体的像素值改为标号,求各种标号的总各,既求得不同区域的面积数目。
程序biaoji函数步骤为:
(1)循环取得各点像素值,像素值就是标号;
(2)根据不同的标号,加到对应的数组;
(3)弹出对话框,输出各连通区域的面积(像素个数)。
4.2小区域消除
通过对图像f内每个标记操作(标号)的区域进行计算,求得总区域的数目。并求得每个区域的像素个数。当二值图像f的某区域面积(像素数)在阈值以下时,则消去该区域,全部置为255(白),由此得到新图像。这里主要是的是去掉刻度线最两边的数字。
4.3刻度线与指针的检测。
算法步骤:
(1)图像二值化处理:把图像中只留下黑与白,这样可以准确的扫描出刻度线,和下面区域标记中标记出数值。
(2)标记:因为要扫描出刻度线,而上面的数值会影响到扫描,因此要首先去除这些数值,我们用到标记函数。
(3)小区域消除:小区域消除中的思想,其实是设定一个区连通区域,把大于此区域的在图像中删除(此处主要是去掉最边上的0和100还有uA就可以了)。
(4)扫描:对上面图像进行扫描定下表盘最两边的刻度线上的四个点,确定两线方程,设两方程相等得出交点(表盘的圆点,既指针的下顶点)。
(5)检测结果:上面测出了顶点(m,n),圆的半径L1,圆心角a。这里的圆是以指针的顶点(既上面测出两条刻度线的交点)为圆心,以圆心到刻度线中点为半径。扫描是按(m,n)为圆心,L1为半径进行扫描的。
按圆心角的增加进行扫描,检测中:
(1)确定指针顶点是否在表盘中心,把顶点的范围控制在一个像素内为合格(在最后的检测结果中也会显示出来)。
(2)为了避免刻度线检测时漏检现象,对每个刻度线的扫描采取八邻域算法,以防止刻度线不均匀准确而照成漏检现象,每次扫描到黑点后,检测周围八个点,可以有效避免漏检问题。
4.4刻度线检测结果
实验的表盘取于实验室的指针式刻度表,这里的阈值取了100,阈值对不同的图片可以进行相应的调整。程序流程如下:
(1)拍摄原始表盘图片,如图3(a)。
(2)二值化处理:如图3(b)所示,如图把待处理的图片进行二值化使得图像中只有黑和白两种(通过固定,设定适合的灰度值进行处理)。
(3)标记:如图3(c)所示,设定区域,用来判断两个邻接的区域能是否可以合并,一致则将两区域合并,直到不到合并为止。(为下面的小区域消除做准备)。
(4)小区域消除:如图3(d)所示,小区域消除中的思想,其实是设定一个区连通区域,把大于此区域的在图像中删除(此处主要是去掉最边上的0和100还有uA就可以了)。
(5)扫描:如图3(e)所示,对上面图像进行扫描定下表盘最两边的刻度线上的四个点,确定两线方程,设两方程相等得出交点(表盘的圆点,既指针的下顶点)。
(6)检测:对表盘进行检测的结果显示出刻度线之间是否均匀,刻度数是否合格和指针是否偏离中心。
5结论
该算法充分利用了表盘的几何特征,首先以表盘字符特征进行定位分割,检测其字符缺陷。然后进行其刻度线检测。这样就不用考虑边框是不是完整,另外采取八邻域算法,可以有效避免刻度线的漏检,因此具有抗干扰能力强的特点。从实验结果看,本算法简单、快速,抗干扰能力强。达到了预期的效果。
参考文献:
冈萨雷斯.数字图像处理.北京:电子工业出版社,2008.
孙凤杰,郭凤顺,范杰清等.基于图像处理技术的表盘指针角度识别研究.中国电机工程学报,2005,25(16):8.
张艳玲,汪仁煌,黄宇华.基于综合特征的仪表盘参数符号识别技术研究.计算机工程与应用,2008,44(16):221-224.
季厌浮,张绍兵.无指针式仪表表盘数字识别方法的研究.自动化仪表,2008,29(12):25-32.
杨淑莹,边奠英.VC++图像处理程序设计.北京:清华大学出版社,2007.
王成福.电厂指针式仪表的自动识别.东北电力技术,2008,10(1):26-31.