halcon查找方形管材接头边缘

By admin at 2019-10-03 • 0人收藏 • 1930人看过
winform.button.oncommand = function(id,event){
    if(i>5){
    	i=1
    }
    var Image = HOperatorSetX.ReadImage("C:\Users\Public\Documents\MVTec\HALCON-13.0\examples\images\square_tube/square_tube_0"++i);

    //中值滤波器,消除噪声
    var  ImageMedian = HOperatorSetX.MedianImage( Image, 'circle', 2, 'mirrored' );
	//对一副图像采取磁滞门限操作,低于Low的灰度值舍去 高于High 的灰度值保留,中间的看情况
	var  RegionHysteresis = HOperatorSetX.HysteresisThreshold( ImageMedian, 25, 25, 60 );
	//闭运算(先膨胀—后腐蚀)去除毛刺
	var  RegionClosing = HOperatorSetX.ClosingCircle( RegionHysteresis, 8 );
	//选区转换 convex:凸包性
	var  RegionTrans = HOperatorSetX.ShapeTrans( RegionClosing, 'convex' );
	//膨胀
	var  RegionDilation = HOperatorSetX.DilationCircle( RegionTrans, 10 );
	//腐蚀
	var  RegionErosion = HOperatorSetX.ErosionCircle( RegionTrans, 10 );
	//求两个选区的不同区域
	var  RegionOfInterest = HOperatorSetX.Difference( RegionDilation, RegionErosion );
	//设置操作区间(俗称截图)
	var  ImageReduced = HOperatorSetX.ReduceDomain( ImageMedian, RegionOfInterest );
	//亚像素边缘提取
	var  Edges = HOperatorSetX.EdgesSubPix( ImageReduced, 'canny', 1.5, 10, 35 );
	//选择边缘(长度在50-9999的)
	var  SelectedXLD = HOperatorSetX.SelectShapeXld( Edges, 'contlength', 'and', 50, 999999 );
	//合并终点连接在一起的轮廓
	var  UnionContours = HOperatorSetX.UnionAdjacentContoursXld( SelectedXLD, 10, 1, 'attr_keep' );
	//闭合轮廓
	var  ClosedContours = HOperatorSetX.CloseContoursXld( UnionContours );

	HOperatorSetX.SetLineWidth( WindowHandle , 3 );
	HOperatorSetX.SetDraw( WindowHandle , 'margin' );
	HOperatorSetX.SetColor( WindowHandle , 'blue' );
	
	HOperatorSetX.DispObj( Image , WindowHandle );
	HOperatorSetX.DispObj( ClosedContours , WindowHandle );
	i++;
}

image.png

image.png

通过对具有一定形态学特征的he域进行缩小,提取出方管的轮廓,然后对边缘进行提取和统一。


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...