---first_example_shape_matching.hdev
模板匹配主要分三种,基于形状,基于相关性,基于灰度,主要掌握基于形状的模板匹配。基于形状的模板匹配主要分为创建边缘模板(create_shape_model)、创建边缘轮廓模板(create_shape_model_xld)该模板的输入参数为轮廓,两种都和算子find_shape_model一起使用。创建具有缩放比的模板(create_scaled_shape_model)和算子find_scaled_shape_model一起使用
1、get_image_pointer1(Image : : : Pointer, Type, Width, Height)
返回指向图像的第一个通道的指针,根据输出类型并返回图像的宽和高
2、三种创建形状模板的算子
1)create_shape_model创建边缘模板
2)create_shape_model_xld创建边缘轮廓模板
Template ://参数为轮廓
: NumLevels,
3)create_scaled_shape_model创建具有缩放比的模板
Template : :
ScaleMin, //图像的最小比例
ScaleMax, //图像最大比列
ScaleStep, //一般设置为自动
ModelID) 创建可缩放的形状模板与create_shape_model相比只多了ScaleMin, ScaleMax, ScaleStep三个参数
常见的创建形状模板的算子
3、查看模板和创建模板中的Contrast对比度为了提取边缘
对称性和角度范围选择
如果模板匹配用于定位,则尽量不要选取对称的对象为模板
4、模板匹配过程
图像金字塔
如果金子塔为4层,则将图像按比例缩小,分为4个等级,先用金子塔层数为4的模板去匹配按比例缩小的等级为 4的原图像,找到相应目标后,在这个基础上再用金字塔为3的模板去匹配缩小的等级为3的原图像,如此。。。。。。最后直到用金字塔最底层的模板去匹配原图像,找到对应目标。这种手法有利于提升匹配效率
5、如果彷射变换affine_trans_contour_xld 算子以get_shape_model_contours 输出参数ShapeModel 为输入对象,刚性仿射变换 vector_angle_to_rigid的Row,column,angel坐标参数为0,0,0
get_shape_model_contours (ShapeModel, ModelID, 1)
vector_angle_to_rigid (0, 0, 0, RowCheck, ColumnCheck, AngleCheck, MovementOfObject)
affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MovementOfObject)
自己做模板时,可以先创建一个模板,然后保持模板图像不动,利用find_shape_model算子在模板图像中找到相应模板并输出该图像的中心坐标位置,该位置即为模板的中心位置,仿射变换时可以以该位置为模板的中心位置
模板匹配时大多数情况下用CAD做模板
6、inspect_shape_model(Image : ModelImages, ModelRegions : NumLevels, Contrast : )
查看模板的形状,需注意该算子输出的模板是一个骨架,骨架也是区域。常和算子gen_contours_skeleton_xld将骨架转轮廓一起使用,注意如果和gen_contours_region_xld将会输出不一样的效果
输出的模板(骨架) 中间白色的线条为骨架转轮廓
区域转轮廓