原图
模板
待检测图
代码
*这个示例程序演示了如何使用基于组件的匹配来定位复合对象。
*在这种情况下,应该在图像中找到几个模块,其中的关系,即,相对运动,由用户知道。
*因此,创建组件模型只需要一个操作符
* 1.) create_component_model
*最后,查找组件模型
* 2.) find_component_model
*
dev_update_off ()
dev_close_window ()
read_image (ModelImage, 'modules/modules_model')
dev_open_window_fit_image (ModelImage, 0, 0, -1, -1, WindowHandle)
dev_display (ModelImage)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
Message := 'This program shows how to use the'
Message[1] := 'component-based matching'
Message[2] := 'to locate a compound object'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
* 定义组件区域
gen_rectangle2 (ComponentRegions, 318, 109, -1.62, 34, 19)
gen_rectangle2 (Rectangle2, 342, 238, -1.63, 32, 17)
gen_rectangle2 (Rectangle3, 355, 505, 1.41, 25, 17)
gen_rectangle2 (Rectangle4, 247, 448, 0, 14, 8)
gen_rectangle2 (Rectangle5, 237, 537, -1.57, 13, 10)
concat_obj (ComponentRegions, Rectangle2, ComponentRegions)
concat_obj (ComponentRegions, Rectangle3, ComponentRegions)
concat_obj (ComponentRegions, Rectangle4, ComponentRegions)
concat_obj (ComponentRegions, Rectangle5, ComponentRegions)
dev_set_colored (12)
dev_set_draw ('margin')
dev_set_line_width (2)
dev_display (ModelImage)
dev_display (ComponentRegions)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
disp_message (WindowHandle, 'Regions of the components', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*
* 创建组件模型
create_component_model (ModelImage, ComponentRegions, 20, 20, rad(25), 0, rad(360), 15, 40, 15, 10, 0.8, [4,3,3,3,3], 0, 'none', 'use_polarity', 'true', ComponentModelID, RootRanking)
*
* 查找组件
ImageName := 'modules/modules_'
for I := 1 to 12 by 1
read_image (SearchImage, ImageName + I$'.2d')
find_component_model (SearchImage, ComponentModelID, RootRanking, 0, rad(360), 0.5, 0, 0.5, 'stop_search', 'search_from_best', 'none', 0.8, 'interpolation', 0, 0.8, ModelStart, ModelEnd, Score, RowComp, ColumnComp, AngleComp, ScoreComp, ModelComp)
dev_display (SearchImage)
* 最小外接矩形框选并显示轮廓
for Match := 0 to |ModelStart| - 1 by 1
dev_set_line_width (1)
get_found_component_model (FoundComponents, ComponentModelID, ModelStart, ModelEnd, RowComp, ColumnComp, AngleComp, ScoreComp, ModelComp, Match, 'false', RowCompInst, ColumnCompInst, AngleCompInst, ScoreCompInst)
smallest_rectangle2 (FoundComponents, Row, Column, Phi, Length1, Length2)
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
dev_display (FoundComponents)
dev_display (Rectangle)
endfor
disp_message (WindowHandle, 'Found component models', 'window', 12, 12, 'black', 'true')
if (I < 12)
disp_continue_message (WindowHandle, 'black', 'true')
endif
dump_window (WindowHandle, 'png', 'results/匹配定位结果'+I)
stop ()
endfor
结果