Explicação de correspondência de modelo de rotina-09-template_matching

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

Esta rotina é 09-Feathre_detection-template_matching\ O objetivo desta rotina é implementar a correspondência de modelos utilizando o NCC (Standard 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())

Note que, como o tamanho da imagem do nosso modelo excede o flash integrado do openmv, precisamos de inserir o cartão SD e executar os passos seguintes. (Certifique-se de que insere primeiro o cartão SD e depois liga)

E esta correspondência de modelo só pode ser utilizada para o firmware versão 1.6 e superior, caso contrário, será apresentado "can not find SEARCH_EX" durante a execução

Primeiro, precisamos de criar ou importar um modelo. Note que este modelo deve estar no formato pgm e o tamanho é limitado e não pode exceder o tamanho do pixel do openmv. Podemos interceptar uma imagem de modelo directamente do openmv. Podemos primeiro executar a rotina helloworld.py, deixar o frambuffer apresentar a imagem e depois interceptá-la.

Selecione guardar seleção de imagem no pc. Note que a imagem guardada diretamente do openmv está no formato bmp. A conversão online pode ser realizada neste site https://convertio.co/zh/bmp-pgm/

De seguida, guardamos o modelo pgm convertido no cartão SD (existem 8 modelos neste cartão SD, e o modelo da imagem acima é guardado como ball0.pgm)

Assim abrimos a rotina de correspondência de modelos

Altere o nome do ficheiro de modelo template.pgm na linha 28 para ball0.pgm agora mesmo

Depois é só executá-lo!

Trata-se da utilização da função de correspondência de modelo find_template:

r = img.find_template(template, 0,7, roi=(10,0,80,60), step=4, search=SEARCH_EX) O limite de 0.7 é o limite de semelhança, roi É a área de correspondência (o vértice superior esquerdo é (10, 0), um rectângulo com um comprimento de 80 e uma largura de 60. Note-se que o tamanho do roi é maior que a imagem do modelo e menor que o frambuffer) .

Note que esta correspondência de modelo utiliza o algoritmo ncc, que só pode combinar áreas semelhantes em tamanho ao modelo.

Se ocorrerem os seguintes problemas após a execução do programa:

  1. A imagem do modelo é demasiado grande,recomenda-se que a imagem do modelo seja inferior a 80*60

2.o OpenMV2 não tem memória suficiente, pelo que é necessário alterar QQVGA para QQCIF

Explicação da função do documento oficial chinês OpenMV da Singtown Technology:


Comparação da correspondência de modelos e deteção de pontos característicos:
  • Model matching (find_temolate) utiliza o algoritmo ncc, que só pode corresponder a padrões que tenham basicamente o mesmo tamanho e ângulo da imagem do modelo. As limitações são relativamente grandes. Se o padrão alvo no campo de visão for ligeiramente maior ou menor do que a imagem do modelo, a correspondência poderá não ser bem-sucedida.

  • A correspondência de modelos é adequada para situações em que a distância entre a câmara e o objeto alvo é determinada e o movimento dinâmico não é necessário. Por exemplo, é adequado para a deteção de objetos específicos na linha de montagem, mas não é adequado para o automóvel seguir uma bola de voleibol em movimento (porque a distância entre a bola de voleibol em movimento e a câmara é dinâmica, o tamanho da bola de voleibol vista pelo a câmara irá mudar e não será exatamente igual à imagem do modelo).

  • Para a correspondência de vários ângulos e tamanhos, pode tentar guardar vários modelos e utilizar Correspondência de vários modelos.

  • Detecção do ponto de recurso (find_keypoint): Se tiver acabado de iniciar a execução do programa, a rotina extrai a primeira imagem como o recurso do objecto de destino e o kpts1 guarda o recurso do objecto de destino. Por predefinição, corresponderá a múltiplas proporções, tamanhos e ângulos do recurso de destino, e não apenas ao tamanho e ângulo ao guardar o recurso de destino. como a correspondência de vários modelos.

  • Para a deteção de pontos característicos, também pode guardar os recursos alvo antecipadamente. Isto não era recomendado antes porque a interferência da luz ambiente e outros motivos podem causar diferentes recursos de luzes diferentes cada vez que executa o programa, e o grau de correspondência será reduzido . No entanto, na versão mais recente do firmware, foram adicionados ajustes de exposição, equilíbrio de brancos e valores de ganho automático. Os valores de exposição e os valores de equilíbrio de brancos podem ser definidos artificialmente, o que enfraquecerá relativamente a interferência da luz. Também pode tentar guardar os recursos de destino antecipadamente.


results matching ""

    No results matching ""