halcon二维测量的基本步骤
1.图片预处理,这里指的是图片的滤波等手段,使要测量的特征凸显化,有效去除噪点干扰等。
2.阈值化,通过阈值化抽取出图像的特征,通常使用灰度阈值化,但halcon中没有特意的将图片转换成灰度图,而是直接调用阈值化处理函数。同时灰度直方图能帮助开发人员快速找到阈值范围。
3.阈值化之后是求解图片的联通区域,一般阈值化之后存在很多连通区域,还要使用select_shape函数根据条件筛选出满足条件的连通区域。也可以自行筛选。
4.之后就是形体的拟合(也称为轮廓处理),这一步更具实际情况和需求,可有可无。
5.获取形体的特征数据,这些数据就是测量数据,包括位置,内拟合矩形、外拟合矩形尺寸,内拟合、外拟合园尺寸等。
在进入正式的二维测量之前,需要有一个ROI,所有的图片处理都在这里完成,ROI的生成有两种基本方案,用户自己选择和使用模板匹配来选择一个区域。这个区域的选择好坏,对处理的难度影响很大。
二维测量的halcon代码:
read_image(Image, 'C:/Users/Public/Documents/MVTec/HALCON-12.0/examples/images/bonds/ball_bond_ccd_03.png')
median_image(Image,ImageMedian, 'circle', 5, 'mirrored')
threshold(ImageMedian,ROI,120,255)
connection(ROI,connRegion)
select_shape(connRegion,selRegion,'area','and',1000,90000)
这段代码简单,目的是利用halcon工具找到预处理滤波器类型和参数,阈值处理参数和形体筛选参数。
以下是对应的c++代码:
void TestProc2d ::proc( HImage & image )
{
m_display->SetColor( "red" );
m_display->SetDraw( "margin" );
HImage medImage = image .MedianImage( "circle" ,3, "mirrored" );
HRegion roiREgion;
roiREgion.GenRectangle1(m_roi.row1,m_roi.col1,m_roi.row2,m_roi.col2);
HImage redMianImage = medImage.ReduceDomain(roiREgion);
HRegion thedRangion = redMianImage.Threshold(120,255);
HRegion connRegion = thedRangion.Connection();
int n = connRegion.CountObj();
for ( int i = 1; i<=n; i++)
{
Hlong r1,r2,c1,c2;
connRegion[i].SmallestRectangle1(&r1,&c1,&r2,&c2);
qDebug () << "conn object : " << r1 << c1 << r2 << c2 << "(" << r2-r1 << "," << c2-c1 << ")" ;
}
HRegion selRegion = connRegion.SelectShape( "area" , "and" ,500,900000);
n = selRegion.CountObj();
qDebug () << "connect count : " << connRegion.CountObj() << " sel count : " << n;
for ( int i = 1; i<=n; i++)
{
Hlong r1,r2,c1,c2;
selRegion[i].SmallestRectangle1(&r1,&c1,&r2,&c2);
m_display->DispRectangle1(r1,c1,r2,c2);
qDebug () << "select obj : " << r1 << c1 << r2 << c2 << "(" << r2-r1 << "," << c2-c1 << ")" ;
}
}
二维图像处理的难点:
1.ROI区域的确立,我们的期望是ROI中仅包含我们要测量的对象,仅一个对象,但这很难做到,所以我们力求这个ROI区域越 精确越好。建立这个ROI区域,调试时一般手动绘制确定,实际项目中一般使用模板匹配确定一个大的区域,再通过这个大的区域的相对区域确定最终的ROI。所以寻找测量目标的特征,确定模板区域也无比重要。
2.图片的拍摄质量,这里的拍摄质量不是指的清晰度,而是区分测量对象和非测量对象的难以程度。我们最希望的是在灰度上,被测量对象和非测量对象有明显的差异,易于形体划分,当然颜色也是一个很好的区分对象。为了达到这个目的,我们首先要使用不同的光源、选择不同的角度照射使其凸显,其次可以选择不同的镜头和光圈予以辅助(当然,镜头的核心目的是选择视场)。
3.形体的筛选,通常情况下我们处理后会得到好多对象,从中筛选出测量对象相当关键,这里可能是测量过程中人工智能技术最易介入的地方。通常可以根据面积,外接矩形长宽等特征筛选,选择用哪种方法完全取决于被测对象的特征,希望使用他的唯一性特征来筛选。