检查医药行业药瓶里液位高低,用到了shape-based matching和1D measuring测量

By admin at 2019-03-13 • 0人收藏 • 297人看过

在本例中检查水平液体高度(制药行业)。

任务是检查每一个瓶子的水平高度。为此,我们首先确定每个瓶子头通过应用shape-based匹配,然后我们通过测量使用1 d测量灰度变化来测量.

image.png

image.png

import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio + Halcon 识别瓶中液体高度示例, 来自 Htmlayout.cn";right=886;bottom=573)
mainForm.add(
button={cls="button";text="识别缺陷";left=13;top=20;right=200;bottom=88;z=2};
picturebox={cls="picturebox";left=226;top=0;right=887;bottom=574;z=1}
)
/*}}*/

//import console
//console.open()

//import HOperatorSetX;
import com;
HOperatorSetX = com.CreateObject("{6ebd90e2-d219-11d2-ade5-0000c00f4ef9}")

Image = HOperatorSetX.ReadImage( "img/ampoules_01.png" );
var Width , Height = HOperatorSetX.GetImageSize( Image );
var WindowHandle = HOperatorSetX.OpenWindow( 0 , 0 , mainForm.picturebox.width , mainForm.picturebox.height , mainForm.picturebox.hwnd , "transparent", "" );
HOperatorSetX.DispObj( Image , WindowHandle );

HOperatorSetX.SetDraw( WindowHandle , "margin" );
HOperatorSetX.SetLineWidth( WindowHandle , 2 );
//HOperatorSetX.SetColor( WindowHandle , "red" );

var Rectangle = HOperatorSetX.GenRectangle1( 230 , 280 , 317 , 330 );
var ImageReduced = HOperatorSetX.ReduceDomain( Image , Rectangle );
var ModelID = HOperatorSetX.CreateShapeModel( ImageReduced , 'auto', 0, 0, 'auto', 'auto', 'use_polarity', 'auto', 'auto' );
var MeasureHandle = HOperatorSetX.GenMeasureRectangle2( 0 , 0 , HOperatorSetX.tupleRad(90) , 75 , 20 , Width , Height , 'bilinear' );

var Tolerance = 15

var index = 1;
mainForm.button.oncommand = function(id,event){
 
 	Image = HOperatorSetX.ReadImage( "img/ampoules_0"++index++".png" );
 	
 	var ColumnEdges,FillLevelHeight = {},{};
 	
 	var Row , Column , Angle , Score = HOperatorSetX.FindShapeModel( Image , ModelID , 0, 0, 0.7, 0, 0.1, 'least_squares', 0, 0.9 );
 	
 	var he = 0;
 	for(i=1;#Row;1){	
 		he = he+Row[i]
 	}
 	var MeanRow = he/(#Row);
	
 	var RefLevel = MeanRow - 160;
 	he = 0;
 	var cmax,cmin;
 	for(i=1;#Column;1){
 		he = he+Column[i]
 		if(i==1){
 			cmax = Column[i]
 			cmin = Column[i]
 		}else {
 			if(cmax < Column[i]){
 				cmax = Column[i];
 			}
 			if(cmin > Column[i]){
 				cmin = Column[i];
 			}
 		}	
 	}
 	var MeanColumn = he/(#Column);
 	
 	
 	
 	HOperatorSetX.DispObj( Image , WindowHandle );
 	HOperatorSetX.SetLineWidth( WindowHandle , 1 );
 	HOperatorSetX.SetColor( WindowHandle , "white" );
 	var Rectangle = HOperatorSetX.GenRectangle2( RefLevel , MeanColumn , 0 , 30+( cmax  - cmin )/2 , Tolerance );
 	HOperatorSetX.DispObj( Rectangle , WindowHandle );
 	HOperatorSetX.SetLineWidth( WindowHandle , 2 );
 	var Errors = 0;
 
 
 	for(Idx=1;#Score;1){
 		HOperatorSetX.TranslateMeasure( MeasureHandle , MeanRow-135 , Column[Idx] );
 		var RowEdge , ColumnEdge , Amplitude , Distance = HOperatorSetX.MeasurePos( Image , MeasureHandle , 2 , 7 , "all" , "first" );
 		table.push(FillLevelHeight,RowEdge);
 		table.push(ColumnEdges,ColumnEdge);
 		var Cross = HOperatorSetX.GenCrossContourXld( RowEdge , ColumnEdge , 15 , 0 );
 		var FillLevel = HOperatorSetX.GenRectangle2( RowEdge, ColumnEdge, 0, 28, 20 );
 		if(math.abs( FillLevelHeight[Idx] - RefLevel ) >= Tolerance ){
 			var ChamberSingle = HOperatorSetX.GenRectangle2( MeanRow - 133, Column[Idx], 0, 35, 90 );
 			var Cross = HOperatorSetX.GenCrossContourXld( FillLevelHeight[Idx], ColumnEdges[Idx], 15, 0 );
 			var FillLevel = HOperatorSetX.GenRectangle2( FillLevelHeight[Idx], ColumnEdges[Idx], 0, 28, 20 );
 			Errors = Errors+1;
 			HOperatorSetX.SetColor( WindowHandle , "red" );
 			HOperatorSetX.DispObj( ChamberSingle , WindowHandle );
 			
 		}else {
 			HOperatorSetX.SetColor( WindowHandle , "green" );	
 		}
 		
 		HOperatorSetX.DispObj( FillLevel , WindowHandle );
 		HOperatorSetX.DispObj( Cross , WindowHandle );
 		
 		win.delay(200)
 		
 	}
 	
 
    
	index++;
	if(index>8){
		index = 1;
	}
	
	
}

mainForm.show();
return win.loopMessage();

请更新aardio到最新版使用.

halcon源代码位于:

C:\Program Files\MVTec\HALCON-13.0\examples\hdevelop\Applications\Measuring-2D\measure_fill_level.hdev


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
Htmlayout皮肤Htmlayout皮肤引擎介绍
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...