Повышение точности сопоставления шаблонов NCC в HALCON

Я работал с сопоставлением шаблонов 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 конкретные методы или настройки предварительной обработки, которые могли бы помочь последовательно и правильно идентифицировать шаблон?

Спасибо за любую информацию или совет!

Почему это должно быть признание ncc?

Vladimir Perković 06.05.2024 11:32

@VladimirPerković Я уже реализовал алгоритм сопоставления NCC HALCON с использованием OpenCV. В настоящее время я использую пробную версию HALCON, но в практических приложениях использую алгоритм сопоставления NCC на основе OpenCV. Поэтому мне необходимо убедиться, что это требование правильно выполняется с помощью операторов HALCON.

Ershat 07.05.2024 09:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
150
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что сопоставление на основе формы даст вам лучшие результаты, но если вам придется использовать 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

Привет Владимир Перкович! Большое спасибо за подробный ответ! Я реализовал предложенные вами изменения, уделив особое внимание измененным регионам. Ваш подход, особенно адаптивное использование итеративного сокращения области изображения, стал ключом к повышению производительности и точности сопоставления. Это не только решило проблемы, с которыми я столкнулся, но и предоставило надежный способ обработки изменений в обнаружении шаблонов. Еще раз спасибо, что поделились своим опытом.

Ershat 09.05.2024 04:09

Могу я задать еще один вопрос? Я применил медианный фильтр как к изображению шаблона, так и к изображению поиска, но Halcon не смог найти совпадений. Почему это происходит?

Ershat 11.05.2024 11:44

Другие вопросы по теме