基本流程:
(1)确定出ROI的矩形区域,这里只需要确定矩形的左上角和右下角的坐标即可,gen_rectangle1()这个函数会帮忙生成一个矩形,利用area_center找到矩形的中心;
(2)需要从图像中获取这个矩形区域的图像,reduce_domain会得到这个ROI;接下来可以对这个矩形建立模板,在建立模板之前,可以先对这个区域进行一些预处理;
(3)创建模板,使用create_shape_model():
a. 金字塔的级数由Numlevels指定,值越大找到物体的时间越少;
b.AngleStart和AngleExtent决定可能的旋转范围,如果物体几乎是对称的,则需要控制旋转范围,
AngleStep指定角度范围搜索的步长(此为弧度非角度,模板越大,角度步长越小;要求越精确,步长越小;步长越小,占用内存越多,定位速度越慢,如果没有特殊要求,可选“auto”让系统做最佳选择);
c. Optimization: 对于特别大的模板,可以使用Optimization减少模板点的数量,以边缘较多为减少的原则
none:不减少像素
point_reduction_low: 大约一半点
point_reduction_medium:大约1/3
point_reduction_high: 大约1/4
d. MinContrast: 模板的对比度;
e. Metric(度量):决定模板识别的条件, 如果图像的光线有变化,则需要调整这个参数,
设为‘use_polarity’,则图像中的物体和模板必须具有相同的对比度,生成的模板只有一个目标;
设为“ignore_global_palarity”:生成的模板由两个目标,一个是原图,另一个是灰度值取反,黑的变白,白的变黑
设为“ignore_local_polarity”生成的模板有三个目标,一个原图,一个灰度值取反,一个灰度值渐变,由于这种模式下find_shape_model函数的运行时间显著增加,最好的方法是使用create_shape_model 创建几个反映目标的可能的对比度变化的模型,同时使用find_shape_models去匹配他们。
f. 判断物体是否与物体的其他实例重叠,如果在任何状态下都能识别物体,则应该增加MaxOverlap值;
使用inspect_shape_model 来监视模板,检查参数的适用性,还能帮助找到合适的参数;
使用get_shape_model_contours会帮我们找到模板的轮廓;
(4)进行模板匹配,使用find_shape_model,在图像中找到最佳匹配的模板,返回一个模板实例的长、宽和旋转角度,
a.subPixel:设置为“interpolation”则精确到亚像素级,若需要更精确,则设为“least_square”,''least_square_high',这样会增加额外的时间。
b. MinScore: 分析模板的旋转对称和它们的相似度,值越大,则越相似
贪婪度:很大程序上影响搜索速度,设为0---》启发式搜索,比较耗时;设为1---》不安全搜索,但最快。所以在能够匹配的情况下,尽可能增大其值,建议取值0.7-0.9。
(5)找到模板之后,还需要对其进行转化,使之能够显示,使用以下两个函数
a.vector_angle_to_rigid() 从点和角度计算一个刚体仿射变换
b.affine_trans_contour_xld()