我拿NCC做的模板匹配有点问题,匹配小块的地方需要优化一下,差分的思路应该没有问题,凑活看一下吧
- read_image (Image, 'C:/Users/Administrator/Downloads/3-环.bmp')
- gen_rectangle1 (ROI_0, 84.7675, 759.226, 117.659, 839.221)
- reduce_domain (Image, ROI_0, ImageReduced)
- crop_domain (ImageReduced, Template)
- get_image_size (Template, TemplateWidth, TemplateHeight)
- create_ncc_model (ImageReduced, 1, rad(0), rad(0), 'auto', 'use_polarity', ModelID)
- find_ncc_model (Image, ModelID, rad(0), rad(0), 0.9, 199, 0.8, 'true', 1, Row, Column, Angle, Score)
- get_ncc_model_region (ModelRegion, ModelID)
- gen_empty_region (EmptyRegion)
- create_variation_model (TemplateWidth, TemplateHeight, 'byte', 'standard', VariationModelID)
- for i := 0 to |Score| - 1 by 1
- vector_angle_to_rigid (0, 0, 0, Row[i], Column[i], Angle[i], HomMat2D)
- affine_trans_region (ModelRegion, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
- reduce_domain (Image, RegionAffineTrans, TemplateDo)
- crop_domain (TemplateDo, Template)
- train_variation_model (Template, VariationModelID)
- endfor
- find_ncc_model (Image, ModelID, rad(0), rad(0), 0.65, 199, 0.8, 'true', 1, Row, Column, Angle, Score)
- AbsThreshold := 50
- VarThreshold := 3
- prepare_variation_model (VariationModelID, AbsThreshold, VarThreshold)
- * 9. 遍历所有小块,检测缺陷
- gen_empty_obj (DefectRects)
- DefectIndices := []
- for i := 0 to |Score| - 1 by 1
- vector_angle_to_rigid (0, 0, 0, Row[i], Column[i], Angle[i], HomMat2D)
- affine_trans_region (ModelRegion, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
- reduce_domain (Image, RegionAffineTrans, TemplateDo)
- crop_domain (TemplateDo, Template)
- compare_variation_model (Template, RegionDiff, VariationModelID)
- area_center (RegionDiff, Area, Roware, Columnare)
- if (Area > 20)
- * 记录缺陷索引
- DefectIndices := [DefectIndices, i-1]
- * 获取该小块对应的矩形区域并保存
- vector_angle_to_rigid (0, 0, 0, Row[i]-TemplateHeight / 2, Column[i]-TemplateWidth / 2, Angle[i], HomMat2D2)
- affine_trans_region (RegionDiff, dd, HomMat2D2, 'nearest_neighbor')
- concat_obj (DefectRects, dd, DefectRects)
- endif
- endfor
- * 10. 显示结果
- dev_get_window (WindowHandle)
- dev_display (Image)
- if (|DefectIndices| > 0)
- dev_set_color ('red')
- dev_set_draw ('margin')
- dev_set_line_width (2)
- dev_display (DefectRects)
- endif
- * 11. 释放模型
- clear_variation_model (VariationModelID)
复制代码
|