halcon知识:ncc_model模板匹配
?說明
????????除了常見的模板匹配之外,還有其它模板匹配,雖然不夠主流,但嘗試使用,也能解決許多問題。這里先說明ncc_model模板。
一、基于互相關匹配
????????一種基于灰度值的方法是基于相關的匹配。這種方法使用歸一化互相關,用于評估模型和搜索圖像之間的對應關系。它明顯快于經典的基于灰度值的匹配,并且可以補償加法作為以及照明的乘法變化。與基于形狀的匹配相反,對象也具有略微變化的形狀、大量紋理或模糊圖像中的對象(輪廓在模糊中消失圖像,例如,因為散焦)可以找到。應用場合:搜索對象有輕微的變形,大量的紋理,圖像模糊等場合,速度快,精度低。基本操作:
1.創建互相關模板:create_ncc_model()
2.尋找互相關:find_ncc_model()
3.釋放模板:clear_ncc_model()
????????在本節中,我們將快速概述基于相關匹配的匹配過程。到積極跟隨例子,啟動HDevelop程序hdevelop\Matching\Correlation-Based\ find_ncc_model_defocused.hdev,展示了基于相關匹配的魯棒性抵抗紋理和散焦。
dev_update_off () read_image (Image, 'smd/smd_on_chip_05') get_image_size (Image, Width, Height) dev_close_window () dev_open_window (0, 0, Width, Height, 'black', WindowHandle) set_display_font (WindowHandle, 16, 'mono', 'true', 'false') dev_set_color ('green') dev_set_draw ('margin') gen_rectangle1 (Rectangle, 175, 156, 440, 460) area_center (Rectangle, Area, RowRef, ColumnRef) reduce_domain (Image, Rectangle, ImageReduced) create_ncc_model (ImageReduced, 'auto', 0, 0, 'auto', 'use_polarity', ModelID) dev_display (Image) dev_display (Rectangle) disp_continue_message (WindowHandle, 'black', 'true') stop () for J := 1 to 11 by 1read_image (Image, 'smd/smd_on_chip_' + J$'02')find_ncc_model (Image, ModelID, 0, 0, 0.5, 1, 0.5, 'true', 0, Row, Column, Angle, Score)vector_angle_to_rigid (RowRef, ColumnRef, 0, Row, Column, 0, HomMat2D)affine_trans_region (Rectangle, RegionAffineTrans, HomMat2D, 'nearest_neighbor')dev_display (Image)dev_display (RegionAffineTrans)if (J < 11)disp_continue_message (WindowHandle, 'black', 'true')endifstop () endfor clear_ncc_model (ModelID)二、程序簡短說明
步驟1:選擇參考圖像中的對象
????????首先,在訓練圖像中,使用 gen_rectangle1 創建一個包含對象的區域。這使用 area_center 查詢該區域的中心。在后面的步驟中將需要覆蓋結果與原始區域的匹配。然后,將圖像縮小到感興趣的區域。
read_image (Image, 'smd/smd_on_chip_05')
gen_rectangle1 (Rectangle, 175, 156, 440, 460)
area_center (Rectangle, Area, RowRef, ColumnRef)
reduce_domain (Image, Rectangle, ImageReduced)
步驟2:創建模型
縮小的圖像用于通過 create_ncc_model 創建 NCC 模型。結果,算子返回新創建的模型(ModelID)的句柄,然后可用于指定模型,例如,在調用操作符 find_ncc_model 時。
?create_ncc_model (ImageReduced, 'auto', 0, 0, 'auto', 'use_polarity',?ModelID)
步驟3:再次查找對象
????????現在,循環讀取圖像,并基于以上模板搜索,對于每個搜索圖像,搜索 NCC 模型并使用仿射變換覆蓋模型區域。請注意,訓練應用于聚焦圖像,搜索應用于具有以下特征的圖像變化的散焦。盡管如此,對象實例都已找到。圖 3.1 顯示了參考圖像以及散焦但找到的模型實例之一。
for J := 1 to 11 by 1
read_image (Image, 'smd/smd_on_chip_' + J$'02')
find_ncc_model (Image, ModelID, 0, 0, 0.5, 1, 0.5, 'true', 0, Row, \
Column, Angle, Score)
vector_angle_to_rigid (RowRef, ColumnRef, 0, Row, Column, 0, HomMat2D)
affine_trans_region (Rectangle, RegionAffineTrans, HomMat2D, \
'nearest_neighbor')
dev_display (Image)
dev_display (RegionAffineTrans)
endfor
?
步驟4:銷毀模型
當不再需要 NCC 模型時,使用 clear_ncc_model 將其銷毀。clear_ncc_model (ModelID)
總結
以上是生活随笔為你收集整理的halcon知识:ncc_model模板匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Halcon知识:segment_con
- 下一篇: 语音识别系列1:语音识别Speech r