Explication de routine-09-template_matching correspondance de modèle

Tutoriel vidéo 8 - Correspondance de modèles NCC : https://singtown.com/learn/49598/

Cette routine est 09-Feathre_detection-template_matching\ Le but de cette routine est d'implémenter la correspondance de modèles à l'aide de NCC (Normalized Product Correlation Algorithm).

# NCC模板匹配示例-Normalized Cross Correlation (NCC)
#
# 这个例子展示了如何使用OpenMV的NCC功能将小部分图像与图像的各个部分
# 进行匹配...期望获得极其可控的环境 NCC并不总是有用的。
#
# 警告:NCC支持需要重做!到目前为止,这个功能需要做大量的工作才能有用。
# 这个脚本将重新表明功能的存在,但在目前的状态是不足的。

import time, sensor, image
from image import SEARCH_EX, SEARCH_DS
#从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX, 
#SEARCH_DS两个需要的部分,而不把image模块全部引入。

# 重置传感器
sensor.reset()

# 设置传感器
sensor.set_contrast(1)
sensor.set_gainceiling(16)
# Max resolution for template matching with SEARCH_EX is QQVGA
# 模板与SEARCH_EX匹配的最大分辨率是QQVGA
sensor.set_framesize(sensor.QQVGA)
# 你可以设置windowing窗口来减少搜索图片。
#sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60))
sensor.set_pixformat(sensor.GRAYSCALE)

# 加载模板。
# 模板应该是一个小的(例如。32x32像素)灰度图像。
template = image.Image("/template.pgm")

clock = time.clock()

#运行模板匹配
while (True):
    clock.tick()
    img = sensor.snapshot()

    # find_template(template, threshold, [roi, step, search])
    # ROI: 感兴趣区域元组 (x, y, w, h).
    # Step:使用的循环步长(y+= Step, x+= Step) 使用更大的步长使其更快。
    # search 为image.SEARCH_EX进行详尽搜索,或者为image.SEARCH_DS进行菱形搜索
    #
    # Note1: ROI必须比图像小,比模板大。
    # Note2:在菱形diamond搜索中,step和ROI都被忽略。
    r = img.find_template(template, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
    # find_template(template, threshold, [roi, step, search]),
    # threshold中的0.7是相似度阈值,roi是进行匹配的区域(左上顶点为(10,0),长80宽60的矩形),
    # 注意roi的大小要比模板图片大,比frambuffer小。
    # 把匹配到的图像标记出来
    if r:
        img.draw_rectangle(r)

    print(clock.fps())

Notez que puisque la taille de notre image modèle dépasse le flash intégré d'openmv, nous devons insérer la carte SD et effectuer les étapes suivantes. (Assurez-vous d'abord d'insérer la carte SD, puis de mettre sous tension)

Et cette correspondance de modèle ne peut être utilisée que pour la version 1.6 et supérieure du micrologiciel, sinon elle affichera le message "impossible de trouver SEARCH_EX" lors de l'exécution

Tout d'abord, nous devons créer ou importer un modèle. Notez que ce modèle doit être au format pgm et que sa taille est limitée et ne peut pas dépasser la taille en pixels d'openmv. Nous pouvons intercepter une image modèle directement depuis openmv. Nous pouvons d'abord exécuter la routine helloworld.py, laisser le frambuffer afficher l'image, puis l'intercepter.

Sélectionnez Enregistrer la sélection d'image sur PC. Notez que l'image enregistrée directement depuis openmv est au format bmp. Nous devons la convertir au format pgm. La conversion en ligne peut être effectuée sur ce site Web https://convertio.co/zh/bmp-pgm/

Ensuite, nous enregistrons le modèle pgm converti sur la carte SD (il y a 8 modèles dans cette carte SD, et le modèle dans l'image ci-dessus est enregistré sous ball0.pgm)

Ensuite, nous ouvrons la routine de correspondance de modèles

Remplacez le nom du fichier modèle template.pgm à la ligne 28 par ball0.pgm tout à l'heure

Alors exécutez-le !

Il s'agit de l'utilisation de la fonction de correspondance de modèle find_template :

r = img.find_template(template, 0,7, roi=(10,0,80,60), step=4, search=SEARCH_EX) Le seuil de 0,7 po est le seuil de similarité, roi C'est la zone de correspondance (le sommet supérieur gauche est (10, 0), un rectangle d'une longueur de 80 et d'une largeur de 60. Notez que la taille du roi est plus grande que l'image du modèle et plus petite que le frambuffer). .

Notez que cette correspondance de modèle utilise l'algorithme ncc, qui ne peut faire correspondre que des zones de taille similaire au modèle. Si vous souhaitez faire correspondre des images de tailles différentes, vous devez enregistrer plusieurs modèles de tailles différentes.

Si les problèmes suivants surviennent après l'exécution du programme :

  1. L'image du modèle est trop grande. Il est recommandé qu'elle soit inférieure à 80*60

2.OpenMV2 n'a pas assez de mémoire, vous devez donc changer QQVGA en QQCIF

Explication officielle de la fonction du document chinois OpenMV de Singtown Technology :


Comparaison de la correspondance de modèles et de la détection des points caractéristiques :
  • Correspondance de modèle (find_temolate) utilise l'algorithme ncc, qui ne peut faire correspondre que des motifs qui ont fondamentalement la même taille et le même angle que l'image du modèle. Les limitations sont relativement importantes. Si le motif cible dans le champ de vision est légèrement plus grand ou plus petit que l'image modèle, la correspondance peut ne pas réussir.

  • La correspondance de modèles convient aux situations dans lesquelles la distance entre la caméra et l'objet cible est déterminée et où aucun mouvement dynamique n'est requis. Par exemple, il convient à la détection d'objets spécifiques sur la chaîne de montage, mais ne convient pas à la voiture pour suivre un volley-ball en mouvement (car la distance entre le volley-ball en mouvement et la caméra est dynamique, la taille du volley-ball vu par le la caméra changera et ne sera pas exactement la même que l'image du modèle).

  • Pour une correspondance multi-angles et multi-tailles, vous pouvez essayer d'enregistrer plusieurs modèles et d'utiliser Correspondance de modèles multiples.

  • Détection de point caractéristique (find_keypoint) : si vous venez de commencer à exécuter le programme, la routine extrait la première image en tant que caractéristique de l'objet cible et kpts1 enregistre la caractéristique de l'objet cible. Par défaut, il correspondra à plusieurs proportions, tailles et angles de l'entité cible, pas seulement à la taille et à l'angle lors de l'enregistrement de l'entité cible. Il est plus flexible que la correspondance de modèles et ne nécessite pas l'enregistrement de plusieurs images de modèle comme la correspondance multi-modèles.

  • Pour la détection des points caractéristiques, vous pouvez également enregistrer les caractéristiques cibles à l'avance. Cela n'était pas recommandé auparavant, car les interférences de la lumière ambiante et d'autres raisons peuvent provoquer des caractéristiques différentes de différentes lumières à chaque fois que vous exécutez le programme, et le degré de correspondance sera réduit. Cependant, dans la dernière version du micrologiciel, des ajustements des valeurs d'exposition, de balance des blancs et de gain automatique ont été ajoutés. Les valeurs d'exposition et les valeurs de balance des blancs peuvent être définies artificiellement, ce qui affaiblira relativement les interférences de la lumière. . Vous pouvez également essayer d'enregistrer les entités cibles à l'avance.


results matching ""

    No results matching ""