*cbm_modules_simple 程序說明:
*這個示例程序展現瞭如何使用基於組件的匹配來定位複合對象。
*在這種狀況下,應該在一幅圖像中找到幾個模塊,它們之間的關係,即相對運動,是用戶所知道的。
*所以,建立組件模型只須要一個操做符:
* 1) create_component_model
*最後,使用
* 2) find_component_modelcomponent
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 := '這個程序展現瞭如何使用基於組件的匹配來定位複合對象'
disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*定義組件的區域
*gen_rectangle2 —建立任何方向的矩形
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 —鏈接兩個圖標對象元組
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, '份量區域', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*經過顯式指定關係來建立組件模型
*create_component_model —根據明確指定的組件和關係準備要匹配的組件模型
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 —查找圖像中組件模型的最佳匹配
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 —返回找到的組件模型實例的組件
get_found_component_model (FoundComponents, ComponentModelID, ModelStart, ModelEnd, RowComp, ColumnComp, AngleComp, ScoreComp, ModelComp, Match, 'false', RowCompInst, ColumnCompInst, AngleCompInst, ScoreCompInst)
dev_display (FoundComponents)
endfor
disp_message (WindowHandle, '發現組件模型', 'window', 12, 12, 'black', 'true')
*若是程序在每一個圖像後中止,下面的線必須被激活
if (I < 12)
disp_continue_message (WindowHandle, 'black', 'true')
endif
stop ()
endfor
*clear_component_model —釋放組件模型的內存
clear_component_model (ComponentModelID)對象