Explicación de rutina-09-template_matching coincidencia de plantillas

Vídeo tutorial 8 - Coincidencia de plantillas NCC: https://singtown.com/learn/49598/

Esta rutina es 09-Feathre_detection-template_matching\ El objetivo de esta rutina es implementar la coincidencia de plantillas utilizando NCC (algoritmo de correlación de productos normalizado).

# 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())

Tenga en cuenta que dado que el tamaño de la imagen de nuestra plantilla excede el flash incorporado de openmv, debemos insertar la tarjeta SD y realizar los siguientes pasos. (Asegúrese de insertar la tarjeta SD primero y luego encender)

Y esta coincidencia de plantilla solo se puede usar para la versión de firmware 1.6 y superior; de lo contrario, aparecerá el mensaje "can not find SEARCH_EX" cuando se ejecute

Primero, necesitamos crear o importar una plantilla. Tenga en cuenta que esta plantilla debe estar en formato pgm y el tamaño es limitado y no puede exceder el tamaño de píxeles de openmv. Podemos interceptar una imagen de plantilla directamente desde openmv. Primero podemos ejecutar la rutina helloworld.py, dejar que frabuffer muestre la imagen y luego interceptarla.

Seleccione guardar la selección de imagen en la PC. Tenga en cuenta que la imagen guardada directamente desde openmv está en formato bmp. Necesitamos convertirla al formato pgm. La conversión en línea se puede realizar en este sitio web https://convertio.co/zh/bmp-pgm/

Luego, guardamos la plantilla pgm convertida en la tarjeta SD (hay 8 plantillas en esta tarjeta SD y la plantilla en la imagen de arriba se guarda como ball0.pgm)

Luego abrimos la rutina de coincidencia de plantillas

Cambie el nombre del archivo de plantilla template.pgm en la línea 28 a ball0.pgm justo ahora

¡Entonces simplemente ejecútalo!

Este es el uso de la función de coincidencia de plantillas find_template:

r = img.find_template(template, 0,7, roi=(10,0,80,60), step=4, search=SEARCH_EX) El umbral de 0,7 pulgadas es el umbral de similitud, roi Es el área de coincidencia (el vértice superior izquierdo es (10, 0), un rectángulo con una longitud de 80 y un ancho de 60. Tenga en cuenta que el tamaño del roi es mayor que la imagen de la plantilla y menor que el frambuffer).

Tenga en cuenta que esta coincidencia de plantillas utiliza el algoritmo ncc, que solo puede hacer coincidir áreas similares en tamaño a la plantilla. Si desea hacer coincidir imágenes de diferentes tamaños, debe guardar varias plantillas de diferentes tamaños.

Si ocurren los siguientes problemas después de ejecutar el programa:

  1. La imagen de la plantilla es demasiado grande. Se recomienda que la imagen de la plantilla sea inferior a 80*60

2.OpenMV2 no tiene suficiente memoria, por lo que necesita cambiar QQVGA a QQCIF

Explicación de la función del documento oficial chino de Singtown Technology OpenMV:


Comparación de coincidencia de plantillas y detección de puntos característicos:
  • Coincidencia de plantilla (find_temolate) utiliza el algoritmo ncc, que solo puede coincidir con patrones que son básicamente del mismo tamaño y ángulo que la imagen de la plantilla. Las limitaciones son relativamente grandes si el patrón de destino en el campo de visión es ligeramente más grande o más pequeño que la imagen de la plantilla, es posible que la coincidencia no se realice correctamente.

  • La coincidencia de plantillas es adecuada para situaciones en las que se determina la distancia entre la cámara y el objeto objetivo y no se requiere movimiento dinámico. Por ejemplo, es adecuado para la detección de objetos específicos en la línea de montaje, pero no es adecuado para que el automóvil siga una pelota de voleibol en movimiento (debido a que la distancia entre la pelota de voleibol en movimiento y la cámara es dinámica, el tamaño de la pelota de voleibol vista por el La cámara cambiará y no será exactamente igual a la imagen de la plantilla).

  • Para la coincidencia de múltiples ángulos y tamaños, puede intentar guardar varias plantillas y utilizar Coincidencia de múltiples plantillas.

  • Detección de punto de característica (find_keypoint): si acaba de comenzar a ejecutar el programa, la rutina extrae la primera imagen como característica del objeto de destino y kpts1 guarda la característica del objeto de destino. De forma predeterminada, coincidirá con múltiples proporciones, tamaños y ángulos de la característica de destino, no solo el tamaño y el ángulo al guardar la característica de destino. Es más flexible que la coincidencia de plantillas y no requiere guardar varias imágenes de plantilla como la coincidencia de plantillas múltiples.

  • Para la detección de puntos característicos, también puede guardar las características objetivo con anticipación. Esto no se recomendaba antes porque la interferencia de la luz ambiental y otras razones pueden causar diferentes características de diferentes luces cada vez que ejecuta el programa, y el grado de coincidencia se reducirá. Sin embargo, en la última versión del firmware, se han agregado ajustes a los valores de exposición, balance de blancos y ganancia automática. Los valores de exposición y balance de blancos se pueden definir artificialmente, lo que debilitará relativamente la interferencia de la luz. . También puede intentar guardar las funciones de destino con antelación.


results matching ""

    No results matching ""