提高 HALCON 中的 NCC 模板匹配精度

问题描述 投票:0回答:1

我一直在 HALCON 中使用 NCC 模板匹配,并且面临着在搜索图像中准确定位我的模板的挑战。尽管尝试了各种预处理技术并利用感兴趣区域 (ROI),但我始终遇到精度问题,有时无法完全检测模板。我在下面附上了模板和搜索图像的图像。

搜索图片:enter image description here

模板图片:

gen_rectangle1 (ROI, 651.344, 888.522, 730.939, 931.704)
reduce_domain(image, ROI, templimage)

结果图: enter image description here

impath := '/path/to/search_image.bmp'

read_image(image, impath)
rgb1_to_gray(image, image)
gen_rectangle1 (ROI, 545.35, 739.29, 612.312, 776.902)
reduce_domain(image, ROI, templimage)

* create model
create_ncc_model (templimage, 'auto', rad(0), rad(359), 'auto', 'use_polarity', NCCModelID)

* find model
find_ncc_model(image, NCCModelID, rad(0), rad(359), 0.68, 0, 0.8, 'true', 0, Row, Column, Angle, Score)
dev_clear_window()
dev_display(image)
dev_display_ncc_matching_results(NCCModelID, 'red', Row, Column, Angle, 0)

有人可以建议一些策略来提高 NCC 模板匹配的准确性和可靠性吗? HALCON 中是否有特定的预处理方法或设置可以帮助一致地正确识别模板?

感谢您的任何见解或建议!

computer-vision cross-correlation halcon
1个回答
0
投票

我认为基于形状的匹配会给你更好的结果,但如果你必须使用NCC,这是我到目前为止的结果:

enter image description here

dev_update_off ()

read_image (Image, 'C:/Users/Perkovic/Desktop/Jff7mFg2.png')
rgb1_to_gray (Image, Image)

L1 := 41
L2 := 25
gen_rectangle2 (ROI, 691.4061, 911.5726, rad(-88.09105), L1, L2)
reduce_domain(Image, ROI, templimage)
gen_rectangle2 (ROI_0, 718.03, 909.1579, rad(90), 13.33325, 21.16724)
gen_rectangle2 (TMP_Region, 680.0816, 909.1579, rad(90.66528), 29.40351, 13.56099)
union2 (ROI_0, TMP_Region, ROI_0)

** Reduce domain
threshold (Image, Region, 0, 80)
fill_up (Region, RegionFillUp)
connection (RegionFillUp, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 10e3)
dilation_circle (SelectedRegions, RegionDilation, 70.5)
union1 (RegionDilation, RegionUnion)
reduce_domain (Image, RegionUnion, ImageReduced)

* create model
create_ncc_model (templimage, 'auto', -0.39, 6.29, 'auto', 'use_polarity', NCCModelID)

* find model
dev_clear_window()
dev_display(Image)
while (true)
    find_ncc_model(ImageReduced, NCCModelID, -0.39, 6.29, 0.6, 1, 0.6, 'true', 0, Row, Column, Angle, Score)
    
    if (Score == [])
        break
    endif
    dev_display_ncc_matching_results(NCCModelID, 'red', Row, Column, Angle, 0)
    
    dev_disp_text (Score, 'image', Row, Column, 'black', [], [])
    
    ** Remove rectangle from reduced image
    gen_rectangle2 (Rectangle, Row, Column, Angle, L2, L1)
    get_domain (ImageReduced, Domain)
    difference (Domain, Rectangle, RegionDifference)
    reduce_domain (ImageReduced, RegionDifference, ImageReduced)
endwhile
© www.soinside.com 2019 - 2024. All rights reserved.