Correspondência de vários modelos NCC

Tutorial em vídeo 8 - Correspondência de modelos NCC: https://singtown.com/learn/49598/

O método de correspondência de vários modelos é basicamente igual ao da correspondência de modelos. Só precisa de guardar e aceder a vários modelos com antecedência. Pode utilizar o seguinte código.

# Template Matching Example - Normalized Cross Correlation (NCC)
#
# Este exemplo mostra como usar a funcionalidade NCC da câmara OpenMV para
# corresponder pequenos trechos de imagem a várias partes de uma imagem...
# exceto em ambientes extremamente controlados, o NCC não é muito útil.
#
# AVISO: o suporte a NCC precisa de ser reformulado! Atualmente, esta
# funcionalidade ainda precisa de muito trabalho para se tornar útil. Este
# script permanece para mostrar que a funcionalidade existe, mas, no seu
# estado atual, é inadequada.

import csi
import time, csi, image
csi0 = csi.CSI()

from image import SEARCH_EX, SEARCH_DS
#Importa SEARCH_EX e SEARCH_DS do módulo image. Usando from import, importamos
#apenas as partes necessárias, SEARCH_EX e SEARCH_DS, sem importar o módulo image inteiro.

# Reinicia o sensor
csi0.reset()

# Define as definições do sensor
csi0.contrast(1)
csi0.gainceiling(16)
# A resolução máxima para correspondência de modelos com SEARCH_EX é QQVGA
csi0.framesize(csi.QQVGA)
# Pode definir uma janela para reduzir a imagem de pesquisa.
#csi0.window(((640-80)//2, (480-60)//2, 80, 60))
csi0.pixformat(csi.GRAYSCALE)

# Carrega o modelo.
# O modelo deve ser uma imagem pequena (ex. 32x32 pixels) em escala de cinza.
templates = ["0.pgm", "1.pgm", "2.pgm", "6.pgm"] #guarda vários modelos
#carrega as imagens dos modelos

clock = time.clock()

# Executa a correspondência de modelos
while (True):
    clock.tick()
    img = csi0.snapshot()

    # find_template(template, threshold, [roi, step, search])
    # ROI: o tuplo da região de interesse (x, y, w, h).
    # Step: o passo do ciclo usado (y+=step, x+=step); use um passo maior para acelerar.
    # Search é image.SEARCH_EX para pesquisa exaustiva ou image.SEARCH_DS para pesquisa em diamante
    #
    # Nota 1: o ROI tem de ser menor que a imagem e maior que o modelo.
    # Nota 2: na pesquisa em diamante, step e ROI são ambos ignorados.
    for t in templates:
        template = image.Image(t)
        #percorre cada modelo para efetuar a correspondência
        r = img.find_template(template, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
    #find_template(template, threshold, [roi, step, search]); no threshold,
    #o 0.7 é o limiar de semelhança, roi é a área de correspondência (vértice superior esquerdo em (10, 0), retângulo com 80 de comprimento e 60 de largura),
    #note que o tamanho do roi deve ser maior que a imagem do modelo e menor que o framebuffer.
    #marca a imagem correspondida
        if r:
            img.draw_rectangle(r)
            print(t) #imprime o nome do modelo

    #print(clock.fps())

O efeito de execução é o seguinte, como mostrado na figura:

Saída no terminal:

results matching ""

    No results matching ""