文章目录
场景
需求是在一个视野里同时搜索匹配两个不同类型的对象。
效果
实现步骤
1.读取图像
read_image (ModelImage, 'rings_and_nuts')
2.分别生成两个ROI
gen_circle (ModelROIRing, 121, 299, 55)
gen_circle (ModelROINut, 324, 279, 52)
reduce_domain (ModelImage, ModelROIRing, ImageROIRing)
reduce_domain (ModelImage, ModelROINut, ImageROINut)
3.分别创建各向同性比例缩放形状模板
create_scaled_shape_model (ImageROIRing, 'auto', -rad(22.5), rad(45), 'auto', 0.8, 1.2, 'auto', 'none', 'use_polarity', 60, 10, ModelIDRing)
create_scaled_shape_model (ImageROINut, 'auto', -rad(30), rad(60), 'auto', 0.6, 1.4, 'auto', 'none', 'use_polarity', 60, 10, ModelIDNut)
4.分别获取形状模型的轮廓表示
inspect_shape_model (ImageROIRing, PyramidImage, ModelRegionRing, 1, 30)
get_shape_model_contours (ShapeModelRing, ModelIDRing, 1)`
inspect_shape_model (ImageROINut, PyramidImage, ModelRegionNut, 1, 30)
get_shape_model_contours (ShapeModelNut, ModelIDNut, 1)
5.连接两个模板轮廓XLD
concat_obj (ShapeModelRing, ShapeModelNut, ShapeModels)
6.保存模板相关信息
保存两个模板轮廓的个数到数组
count_obj (ShapeModelRing, NumContoursRing)
count_obj (ShapeModelNut, NumContoursNut)
NumContoursInTuple := [NumContoursRing,NumContoursNut]
保存两个模板的句柄到数组
ModelIDs := [ModelIDRing,ModelIDNut]
保存两个模板轮廓的起始索引到数组
StartContoursInTuple := [1,NumContoursRing + 1]
以上工作完成,便可以开始在新的图像上搜索匹配
7.读取新的图像
read_image (ModelImage, 'rings_and_nuts')
8.搜索匹配
find_scaled_shape_models (SearchImage, ModelIDs, [-rad(22.5),-rad(30)], [rad(45),rad(60)], [0.8,0.6], [1.2,1.4], 0.7, 0, 0, 'least_squares', 0, 0.8, RowCheck, ColumnCheck, AngleCheck, ScaleCheck, Score, ModelIndex)
8.对搜索到的XLD轮廓应用任仿射二维变换
for i := 0 to |Score| - 1 by 1
*获取搜索到的模型索引
Model := ModelIndex[i]
*生成仿射变换矩阵
vector_angle_to_rigid (0, 0, 0, RowCheck[i], ColumnCheck[i], AngleCheck[i], MovementOfObject)
hom_mat2d_scale (MovementOfObject, ScaleCheck[i], ScaleCheck[i], RowCheck[i], ColumnCheck[i], MoveAndScalingOfObject)
*根据搜索到的模型索引获取模板金字塔中的XLD轮廓
copy_obj (ShapeModels, ShapeModel, StartContoursInTuple[Model], NumContoursInTuple[Model])
*XLD轮廓应用仿射变换
affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MoveAndScalingOfObject)
endfor
9.清除句柄
clear_shape_model (ModelIDRing)
clear_shape_model (ModelIDNut)