一种水表表芯中玛瑙装配的在线检测方法与流程

文档序号:11514224阅读:400来源:国知局
一种水表表芯中玛瑙装配的在线检测方法与流程

本发明属于缺陷检测领域,具体涉及一种水表表芯中玛瑙装配的在线检测方法。



背景技术:

水表表芯中玛瑙装配的好坏影响整个水表的质量,传统的人工检测存在许多弊端,比如,检测的精度和工艺性比较差,影响水表的质量;水表的检测需要有丰富经验的老员工进行,消耗大量的人力资源;人工检测的效率比较低,不能满足需求。近年来,机器视觉技术迅速发展,越来越广泛地用于产品缺陷检测,不仅节省了大量的劳动力,而且提高了检测的速度和精度。然而,机器视觉技术在图像采集和处理过程中通常存在:图像质量不稳定、图像数据量较多、部分类型的缺陷与背景的对比度较低等问题。



技术实现要素:

本发明的目的在于提供一种水表表芯中玛瑙装配的在线检测方法,该方法可以采集水表表芯的实时图像,并对图像进行处理、分析,从而获得玛瑙的装配情况,设计的gui界面上显示检测结果,并对玛瑙装配是否合格进行判断,对不合格的产品发出警报。

为实现上述目的,本发明的技术方案是:一种水表表芯中玛瑙装配的在线检测方法,提供一水表表芯中玛瑙装配的在线检测装置,该装置包括ccd相机、led光源、远心镜头、安装有检测算法的计算机;所述方法具体实现如下,

s1、采用前向光照法,将水表表芯置于led光源照射下,并使得待测水表表芯光照均匀;

s2、在ccd相机上安装远心镜头,并使得远心镜头与待测水表表芯所在平面平行;

s3、ccd相机采集待测水表表芯的图像,并将采集图像存储在计算机中;

s4、采用检测算法对采集图像进行图像处理,得到待测目标区域;

s5、将目标区域的特征值与正常特征值取值进行比较,进而判断玛瑙的装配是否合格,而后保存结果并进行编号,该编号与各待测水表表芯相对应。

在本发明一实施例中,所述步骤s3之前,还需检测ccd相机是否正常连接。

在本发明一实施例中,所述步骤s4的具体实现过程如下,

s41、将待测水表表芯的图像转换为灰度图;

s42、将灰度图进行二值化;

s43、按照预定的颜色范围来选择感兴趣的区域;

s44、对所有的白色区域进行标记,移除二值图中的小目标;

s45、对待测水表表芯的图像进行腐蚀操作,去除二值图中的白色外圈;

s46、先连接两个离得比较近的物体并填充小的空隙,再填充待测水表表芯的图像中所有封闭的空洞,对图像中的小目标再进行一次移除,只保留待检测的目标区域;

s47、检测出目标区域的面积、周长、质心的数值。

在本发明一实施例中,所述步骤s5中,目标区域的特征值包括目标区域的面积、周长、质心三个特征值。

在本发明一实施例中,所述步骤s5中,正常特征值取值包括:目标区域的面积取值在s1和s2之间,目标区域的周长在c1和c2之间,目标区域的质心横坐标在x1和x2之间,质心纵坐标在y1和y2之间。

在本发明一实施例中,所述步骤s5中,判断玛瑙的装配是否合格,需同时满足目标区域的三个特征值均在正常特征值取值范围内。

在本发明一实施例中,所述计算机上还设计有gui界面,该gui界面上显示待检测水表表芯的图像、处理后的图像以及三个特征值的检测结果;且若玛瑙装配没有缺陷,则gui界面则显示合格,若玛瑙装配有缺陷,gui界面则显示不合格,并发出警报,所有的检测结果均存储在计算机中。

在本发明一实施例中,所述gui界面上还设置拍照、读图、选图、下一张图片、判断是否合格这五个按钮,只要单击任意一个按钮,系统便会执行对应的程序,完成相应的任务。

在本发明一实施例中,在gui界面上,点击拍照按钮,系统开启ccd相机,自动采集水表表芯的图像,保存成bmp格式并储存在计算机中;点击读图按钮,软件对图片进行处理,处理结果显示在右图中;点击选图按钮,检测算法选择待处理和检测的图片;点击下一张图片按钮,软件进行下一张图片的检测,检测的顺序为相机采集的图片顺序;点击周长、面积、质心按钮,界面上则分别显示对应的特征值;点击判断是否合格按钮,系统会给出判断结果,分为合格和不合格两种情况,若玛瑙装配合格,则显示绿色的字体合格,若不合格,则显示红色的字体不合格,并发出蜂鸣声,蜂鸣声间隔五秒,共五次。

相较于现有技术,本发明具有以下有益效果:

本发明可以对实时采集到的玛瑙图像进行处理、分析、判断,对玛瑙装配不合格的水表表芯发出警报,这样可以容易地分辨出合格品与不合格品,不仅节省了大量的人力资源,还提高了工作效率;

本发明设计的算法还适用于其它产品,比如检测小型零件的装配情况,只需要更改算法中相应的数值就能实现正确、高效的检测;

本发明还设计了简单易操作的gui界面,用户可以根据每个产品的特点,更换检测的特征,调整按钮的分布,设计便于自己操作的界面,实现友好的人机交互。

附图说明

本发明图1水表表芯中玛瑙装配检测系统总体结构图。

图2水表表芯中玛瑙装配检测系统框图。

图3玛瑙装配检测总流程图。

图4玛瑙装配检测图像处理流程图。

图5玛瑙灰度图(合格品)。

图6玛瑙二值图(合格品)。

图7移除小目标后的玛瑙图(合格品)。

图8填充空洞后的玛瑙图(合格品)。

图9玛瑙二值图(不合格品)。

图10填充空洞后的玛瑙图(不合格品)。

图11判断玛瑙装配缺陷流程图。

图12设计的gui界面。

图13gui界面(玛瑙装配合格)。

图14gui界面(玛瑙装配不合格情况一)。

图15gui界面(玛瑙装配不合格情况二)。

具体实施方式

下面结合附图,对本发明的技术方案进行具体说明。

本发明的一种水表表芯中玛瑙装配的在线检测方法,提供一水表表芯中玛瑙装配的在线检测装置,该装置包括ccd相机、led光源、远心镜头、安装有检测算法的计算机;所述方法具体实现如下,

s1、采用前向光照法,将水表表芯置于led光源照射下,并使得待测水表表芯光照均匀;

s2、在ccd相机上安装远心镜头,并使得远心镜头与待测水表表芯所在平面平行;

s3、ccd相机采集待测水表表芯的图像,并将采集图像存储在计算机中;

s4、采用检测算法对采集图像进行图像处理,得到待测目标区域;

s5、将目标区域的特征值与正常特征值取值进行比较,进而判断玛瑙的装配是否合格,而后保存结果并进行编号,该编号与各待测水表表芯相对应。

所述步骤s3之前,还需检测ccd相机是否正常连接。

所述步骤s4的具体实现过程如下,

s41、将待测水表表芯的图像转换为灰度图;

s42、将灰度图进行二值化;

s43、按照预定的颜色范围来选择感兴趣的区域;

s44、对所有的白色区域进行标记,移除二值图中的小目标;

s45、对待测水表表芯的图像进行腐蚀操作,去除二值图中的白色外圈;

s46、先连接两个离得比较近的物体并填充小的空隙,再填充待测水表表芯的图像中所有封闭的空洞,对图像中的小目标再进行一次移除,只保留待检测的目标区域;

s47、检测出目标区域的面积、周长、质心的数值。

所述步骤s5中,目标区域的特征值包括目标区域的面积、周长、质心三个特征值。

所述步骤s5中,正常特征值取值包括:目标区域的面积取值在s1和s2之间,目标区域的周长在c1和c2之间,目标区域的质心横坐标在x1和x2之间,质心纵坐标在y1和y2之间。

其中,s1=23000;s2=24300;c1=700;c2=750;x1=580;x2=600;y1=430;y2=450。

所述步骤s5中,判断玛瑙的装配是否合格,需同时满足目标区域的三个特征值均在正常特征值取值范围内。

所述计算机上还设计有gui界面,该gui界面上显示待检测水表表芯的图像、处理后的图像以及三个特征值的检测结果;且若玛瑙装配没有缺陷,则gui界面则显示合格,若玛瑙装配有缺陷,gui界面则显示不合格,并发出警报,所有的检测结果均存储在计算机中。

所述gui界面上还设置拍照、读图、选图、下一张图片、判断是否合格这五个按钮,只要单击任意一个按钮,系统便会执行对应的程序,完成相应的任务。

在gui界面上,点击拍照按钮,系统开启ccd相机,自动采集水表表芯的图像,保存成bmp格式并储存在计算机中;点击读图按钮,软件对图片进行处理,处理结果显示在右图中;点击选图按钮,检测算法选择待处理和检测的图片;点击下一张图片按钮,软件进行下一张图片的检测,检测的顺序为相机采集的图片顺序;点击周长、面积、质心按钮,界面上则分别显示对应的特征值;点击判断是否合格按钮,系统会给出判断结果,分为合格和不合格两种情况,若玛瑙装配合格,则显示绿色的字体合格,若不合格,则显示红色的字体不合格,并发出蜂鸣声,蜂鸣声间隔五秒,共五次。

以下为本发明的具体实现过程。

参照图1和图2,本发明设计了一套水表表芯中玛瑙装配的检测系统,该系统的硬件包括ccd摄像机、led光源、远心镜头和计算机,软件包括检测算法和gui界面。采用前向光照法,将水表表芯放置在均匀的led光照下,远心镜头安装于ccd相机,相机的镜头与水表表芯所在的平面平行,以保证采集到清晰的图像,将图像信息传送至计算机,为接下来的图像处理做准备。

参照图3,在水表表芯、光源和安装远心镜头的相机按图1调整好位置的情况下,检测系统的主要工作流程:1)、是否打开相机,检测相机的连接是否正常;2)、图像采集,在相机正常连接的情况下,采集水表表芯的图像并将所有采集到的图像存储在计算机中;3)、是否按顺序读图,可以按采集的顺序读图,也可以选择读取任意图像;4)、图像处理,对采集到的玛瑙原图进行图像处理,处理后的图片中只保留一个目标区域;5)、判断玛瑙的装配是否有缺陷,以目标区域的三个特征作为判断依据,gui界面上显示装配是否合格,对于装配不合格的玛瑙发出警报;6)、保存结果,对每个检测结果进行编号,编号均与各自检测的水表表芯对应,所有检测结果储存在计算机中,便于随时查找。

参照图4,图像处理的步骤如下:1)、先将采集到的玛瑙原图转换为灰度图,处理后得到的玛瑙灰度图如图5所示;2)、将灰度图进行二值化,处理后得到的玛瑙二值图如图6所示;3)、按照指定的颜色范围如[59,255]来选择感兴趣的区域;4)、对所有的白色区域进行标记,移除二值图中的小目标;5)、对玛瑙图像进行腐蚀操作,二值图中的白色外圈被去除。移除小目标和白色外圈后的玛瑙图像如图7所示;6)、先连接两个离得比较近的物体并填充小的空隙,接着填充玛瑙图像中所有封闭的空洞,再对图像中的小目标进行一次移除,最后图像中只保留待检测的目标区域,如图8所示。对于装配过程中压碎的玛瑙,填充前如图9所示,填充后如图10所示。在玛瑙装配检测中,检测的重要区域为玛瑙图像的中心位置,因此可以对二值图中没有检测特征的细小白色区域进行移除,将图像主要特征部位进行填充,使得玛瑙图像特征更为突出,增加检测的正确率。

玛瑙装配后主要出现无压入,压碎、压入尺寸不足等缺陷,将目标区域的特征值与正常取值范围进行比较,以目标区域的面积、周长、质心来判断玛瑙装配是否合格。玛瑙装配合格时,目标区域的面积在s1和s2之间,周长在c1和c2之间,同时质心横坐标在x1和x2之间,质心纵坐标在y1和y2之间。

参照图11,缺陷判断流程图步骤如下:1)、判断目标区域的面积,面积为0时,周长也为0,则玛瑙装配有缺陷;2)、目标区域的面积大于0,但不在[s1,s2]内,则玛瑙装配有缺陷;3)、目标区域的面积在[s1,s2]内,但周长不在[c1,c2]内,则玛瑙装配有缺陷;4)、目标区域的面积和周长分别在[s1,s2]和[c1,c2]内,同时,目标区域的质心横、纵坐标分别在[x1,x2]、[y1,y2]内,则玛瑙装配没有缺陷,否则,玛瑙装配有缺陷。

其中,s1=23000;s2=24300;c1=700;c2=750;x1=580;x2=600;y1=430;y2=450。

参照图12,开发gui界面,该界面上显示待检测的原图、处理后的图像以及三个特征值的检测结果。若玛瑙装配没有缺陷,gui界面则显示“合格”,若玛瑙装配有缺陷,gui界面则显示“不合格”,并发出警报,所有的检测结果均存储在计算机中。gui界面上设置“拍照”、“读图”、“选图”、“下一张图片”、“判断是否合格”这五个按钮,只要单击任意一个按钮,系统便会执行对应的程序,完成相应的任务。点击“拍照”按钮,系统开启相机,自动采集水表表芯的图像,图像显示在axes1中,保存成“bmp”格式储存在计算机中;点击“读图”按钮,软件对图片进行处理,图像处理后的结果显示在axes2中;点击“选图”按钮,算法从文件夹中选择待处理图片;点击“下一张图片”按钮,软件即进行下一张图片的检测,检测的顺序为相机采集的图片顺序。

参照图13-15,水表表芯中的玛瑙装配可能出现下列的情况,经过图像处理后得到的目标区域如gui界面上右侧图所示,分别点击“周长”、“面积”、“质心”按钮,界面上则分别显示对应的特征值,点击“判断是否合格”按钮,系统会给出判断结果,分为合格和不合格两种情况,若玛瑙装配合格,则显示绿色的字体“合格”,若不合格,则显示红色的字体“不合格”,并发出蜂鸣声,蜂鸣声间隔五秒,共五次。

上述gui界面的一种具体实现程序实例如下:

functionvarargout=gui(varargin)

gui_singleton=1;

gui_state=struct('gui_name',mfilename,...

'gui_singleton',gui_singleton,...

'gui_openingfcn',@gui_openingfcn,...

'gui_outputfcn',@gui_outputfcn,...

'gui_layoutfcn',[],...

'gui_callback',[]);

ifnargin&&ischar(varargin{1})

gui_state.gui_callback=str2func(varargin{1});

end

ifnargout

[varargout{1:nargout}]=gui_mainfcn(gui_state,varargin{:});

else

gui_mainfcn(gui_state,varargin{:});

end

functiongui_openingfcn(hobject,eventdata,handles,varargin)

handles.output=hobject;

guidata(hobject,handles);

set(handles.hege,'visible','off');

set(handles.buhege,'visible','off');

functionvarargout=gui_outputfcn(hobject,eventdata,handles)

varargout{1}=handles.output;

functionarea_callback(hobject,eventdata,handles)

globalbw;

globalareas;

areas=bwarea(bw);

set(handles.text3,'string',num2str(areas));

functionperimeter_callback(hobject,eventdata,handles)

globalbw;

ifbwarea(bw)==0

set(handles.text2,'string',num2str(0));

else

[l,num]=bwlabel(bw);

s=regionprops(l,'perimeter');

perimeters=cat(1,s.perimeter);

set(handles.text2,'string',num2str(perimeters(1)));

end

functioncentroids_callback(hobject,eventdata,handles)

globalbw;

globalzhixin;

ifbwarea(bw)==0

set(handles.text4,'string',num2str(0));

set(handles.text6,'string',num2str(0));

zhixin=0;

else

[l,num]=bwlabel(bw);

s=regionprops(l,'centroid');

centroids=cat(1,s.centroid);

zhixin=centroids(2);

set(handles.text4,'string',num2str(centroids(1)));

set(handles.text6,'string',num2str(centroids(2)));

end

functionedit1_callback(hobject,eventdata,handles)

functionedit1_createfcn(hobject,eventdata,handles)

ifispc&&isequal(get(hobject,'backgroundcolor'),get(0,'defaultuicontrolbackgroundcolor'))

set(hobject,'backgroundcolor','white');

end

functionnext_picture_callback(hobject,eventdata,handles)

globalk;

globalbw;

picname=sprintf('%d.bmp',k);

a=imread(picname);

bw=roicolor(a,59,255);

bw=bwareaopen(bw,800);

se2=strel('disk',2);

bw=imerode(bw,se2);

ifbwarea(bw)==0

axes(handles.axes1);

imshow(a);

axes(handles.axes2);

imshow(bw);

else

[l,n]=bwlabel(bw);

areas=regionprops(l,'area');

forn=1:n

ifn==1

max1=areas(n).area;

elseifareas(n).area>=max1

max1=areas(n).area;

end

end

max1=max1-1;

bw=bwareaopen(bw,max1);

se=strel('disk',125);

bw0=imclose(bw,se);

bw=imfill(bw0,'holes');

bw=bwareaopen(bw,3000);

axes(handles.axes1);

imshow(a);

axes(handles.axes2);

imshow(bw);

end

ifk==58

k=1;

else

k=k+1;

end

functiontake_picture_callback(hobject,eventdata,handles)

globalobj;

obj=videoinput('winvideo',2,'y800_640x480');

set(obj,'triggerrepeat',inf);

set(obj,'framespertrigger',1);

%建立界面

hf=figure('units','normalized','menubar','none','numbertitle','off','name','演示拍照系统');

ha=axes('parent',hf,'units','normalized','position',[.05.2.85.7]);

axisoff

hb1=uicontrol('parent',hf,'units','normalized',...

'position',[.25.05.2.1],'string','预览',...

'callback',...

['globalobj;objres=get(obj,''videoresolution'');'...'nbands=get(obj,''numberofbands'');'...

'himage=image(zeros(objres(2),objres(1),nbands));'...

'preview(obj,himage);']);

hb2=uicontrol('parent',hf,'units','normalized',...

'position',[.55.05.2.1],'string','拍照',...

'callback','imwrite(getsnapshot(obj),''in.jpg'')');

functionjudgement_callback(hobject,eventdata,handles)

globalzhixin;

globalareas;

if(areas>24300)||(areas==0)

set(handles.buhege,'visible','on');

forn=1:5

pause(0.5);

beep;

end

elseif(areas<24300)&&(zhixin<=400)

set(handles.buhege,'visible','on');

forn=1:5

pause(0.5);

beep;

end

else

set(handles.hege,'visible','on');

end

functiondutu_callback(hobject,eventdata,handles)

globalbw;

globalk;

k=1;

picname=sprintf('%d.bmp',k);

a=imread(picname);

k=k+1;

bw=im2bw(a,0.23);

[l,n]=bwlabel(bw);

areas=regionprops(l,'area');

forn=1:n

ifn==1

max1=areas(n).area;

elseifareas(n).area>=max1

max1=areas(n).area;

end

end

max1=max1-1;

bw=bwareaopen(bw,max1);

bw=imfill(bw,'holes');

axes(handles.axes1);

imshow(a);

axes(handles.axes2);

imshow(bw);

functionxuantu_callback(hobject,eventdata,handles)

globalbw;

axes(handles.axes1);

a=imread(uigetfile('*bmp','选图'));

bw=roicolor(a,59,255);

bw1=bwareaopen(bw,800);

se2=strel('disk',2);

bw=imerode(bw1,se2);

ifbwarea(bw)==0

axes(handles.axes1);

imshow(a);

axes(handles.axes2);

imshow(bw);

else

[l,n]=bwlabel(bw1);

areas=regionprops(l,'area');

forn=1:n

ifn==1

max1=areas(n).area;

elseifareas(n).area>=max1

max1=areas(n).area;

end

end

max1=max1-1;

bw=bwareaopen(bw1,max1);

se=strel('disk',125);

bw0=imclose(bw,se);

bw=imfill(bw0,'holes');

bw=bwareaopen(bw,2500);

axes(handles.axes1);

imshow(a);

axes(handles.axes2);

imshow(bw);

end。

以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1