Я работал с сопоставлением шаблонов NCC в HALCON и столкнулся с трудностями при точном расположении моего шаблона в поисковом изображении. Несмотря на то, что я пробовал различные методы предварительной обработки и использовал области интереса (ROI), я постоянно сталкивался с проблемами точности и иногда не мог полностью обнаружить шаблон. Ниже я прикрепил изображения шаблона и изображения поиска.
Поиск изображения:
Изображение шаблона:
gen_rectangle1 (ROI, 651.344, 888.522, 730.939, 931.704)
reduce_domain(image, ROI, templimage)
Результат изображения:
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 конкретные методы или настройки предварительной обработки, которые могли бы помочь последовательно и правильно идентифицировать шаблон?
Спасибо за любую информацию или совет!
@VladimirPerković Я уже реализовал алгоритм сопоставления NCC HALCON с использованием OpenCV. В настоящее время я использую пробную версию HALCON, но в практических приложениях использую алгоритм сопоставления NCC на основе OpenCV. Поэтому мне необходимо убедиться, что это требование правильно выполняется с помощью операторов HALCON.
Я думаю, что сопоставление на основе формы даст вам лучшие результаты, но если вам придется использовать NCC, это результат, который у меня есть на данный момент:
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
Привет Владимир Перкович! Большое спасибо за подробный ответ! Я реализовал предложенные вами изменения, уделив особое внимание измененным регионам. Ваш подход, особенно адаптивное использование итеративного сокращения области изображения, стал ключом к повышению производительности и точности сопоставления. Это не только решило проблемы, с которыми я столкнулся, но и предоставило надежный способ обработки изменений в обнаружении шаблонов. Еще раз спасибо, что поделились своим опытом.
Могу я задать еще один вопрос? Я применил медианный фильтр как к изображению шаблона, так и к изображению поиска, но Halcon не смог найти совпадений. Почему это происходит?
Почему это должно быть признание ncc?