Modelo correspondente NCC

Tutorial em vídeo 8 - Correspondência de modelos 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())

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. (Tenha cuidado ao inserir primeiro o cartão SD e depois ligar) E esta correspondência de modelo só pode ser utilizada para o firmware versão 1.6 e superior, caso contrário, será apresentado "não é possível encontrar 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


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