NCC coincidente con la plantilla

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

Algoritmo NCC:

# Template Matching Example - Normalized Cross Correlation (NCC)
#
# This example shows off how to use the NCC feature of your OpenMV Cam to match
# image patches to parts of an image... expect for extremely controlled enviorments
# NCC is not all to useful.
#
# WARNING: NCC supports needs to be reworked! As of right now this feature needs
# a lot of work to be made into somethin useful. This script will reamin to show
# that the functionality exists, but, in its current state is inadequate.

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

# Reset sensor
sensor.reset()

# Set sensor settings
sensor.set_contrast(1)
sensor.set_gainceiling(16)
# Max resolution for template matching with SEARCH_EX is QQVGA
sensor.set_framesize(sensor.QQVGA)
# You can set windowing to reduce the search image.
#sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60))
sensor.set_pixformat(sensor.GRAYSCALE)

# Load template.
# Template should be a small (eg. 32x32 pixels) grayscale image.
template = image.Image("/template.pgm")
#加载模板图片

clock = time.clock()

# Run template matching
while (True):
    clock.tick()
    img = sensor.snapshot()

    # find_template(template, threshold, [roi, step, search])
    # ROI: The region of interest tuple (x, y, w, h).
    # Step: The loop step used (y+=step, x+=step) use a bigger step to make it faster.
    # Search is either image.SEARCH_EX for exhaustive search or image.SEARCH_DS for diamond search
    #
    # Note1: ROI has to be smaller than the image and bigger than the template.
    # Note2: In diamond search, step and ROI are both ignored.
    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. (Tenga cuidado 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 "no se puede encontrar 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


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 ""