Spiegazione di routine-09-template_corrispondenza del modello corrispondente
Tutorial video 8 - Corrispondenza dei modelli NCC: https://singtown.com/learn/49598/
Questa routine è 09-Feathre_detection-template_matching\ L'obiettivo di questa routine è implementare la corrispondenza dei modelli utilizzando NCC (algoritmo di correlazione del prodotto normalizzato).
# 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())
Tieni presente che poiché la dimensione della nostra immagine modello supera il flash integrato di openmv, dobbiamo inserire la scheda SD ed eseguire i seguenti passaggi.(Assicuratevi di inserire prima la scheda SD e poi di accendere)
E questa corrispondenza del modello può essere utilizzata solo per la versione firmware 1.6 e successive, altrimenti verrà visualizzato il messaggio "impossibile trovare SEARCH_EX" durante l'esecuzione
Innanzitutto, dobbiamo creare o importare un modello. Tieni presente che questo modello deve essere in formato pgm e la dimensione è limitata e non può superare la dimensione in pixel di openmv. Possiamo intercettare un'immagine modello direttamente da openmv. Possiamo prima eseguire la routine helloworld.py, lasciare che il frambuffer visualizzi l'immagine e quindi intercettarla.
Seleziona salva la selezione dell'immagine sul PC. Tieni presente che l'immagine salvata direttamente da openmv è in formato bmp. Dobbiamo convertirla in formato pgm. La conversione online può essere eseguita su questo sito web https://convertio.co/zh/bmp-pgm/
Quindi, salviamo il modello pgm convertito sulla scheda SD (ci sono 8 modelli in questa scheda SD e il modello nell'immagine sopra viene salvato come ball0.pgm)
Quindi apriamo la routine di corrispondenza del modello
Cambia il nome del file template template.pgm alla riga 28 in ball0.pgm proprio ora
Quindi eseguilo e basta!
Questo è l'utilizzo della funzione di corrispondenza del modello find_template:
r = img.find_template(template, 0,7, roi=(10,0,80,60), step=4, search=SEARCH_EX) La soglia di 0,7 in è la soglia di somiglianza, roi È l'area per la corrispondenza (il vertice in alto a sinistra è (10, 0), un rettangolo con una lunghezza di 80 e una larghezza di 60. Notare che la dimensione del roi è maggiore dell'immagine del modello e minore del frambuffer .
Tieni presente che questa corrispondenza del modello utilizza l'algoritmo ncc, che può far corrispondere solo aree di dimensioni simili al modello. Se desideri abbinare immagini di dimensioni diverse, devi salvare più modelli di dimensioni diverse.
Se si verificano i seguenti problemi dopo l'esecuzione del programma:
- L'immagine del modello è troppo grande. Si consiglia che l'immagine del modello sia inferiore a 80*60
- OpenMV2 non ha memoria sufficiente, quindi è necessario modificare QQVGA in QQCIF.
Spiegazione ufficiale della funzione del documento cinese di Singtown Technology OpenMV:
Confronto tra la corrispondenza del modello e il rilevamento dei punti caratteristici:
Corrispondenza modello (trova_temolate) utilizza l'algoritmo ncc, che può far corrispondere solo modelli che hanno sostanzialmente la stessa dimensione e angolo dell'immagine modello. Le limitazioni sono relativamente grandi. Se il modello di destinazione nel campo visivo è leggermente più grande o più piccolo dell'immagine modello, la corrispondenza potrebbe non avere esito positivo.
La corrispondenza del modello è adatta per situazioni in cui viene determinata la distanza tra la telecamera e l'oggetto target e non è richiesto un movimento dinamico. Ad esempio, è adatto per il rilevamento di oggetti specifici sulla catena di montaggio, ma non adatto per l'auto per seguire un pallone in movimento (perché la distanza tra il pallone in movimento e la telecamera è dinamica, la dimensione del pallone visto dal la fotocamera cambierà e non sarà esattamente la stessa dell'immagine del modello).
Per la corrispondenza di più angolazioni e più dimensioni, puoi provare a salvare più modelli e utilizzare Corrispondenza di più modelli.
Rilevamento punto caratteristica (find_keypoint): Se hai appena iniziato a eseguire il programma, la routine estrae la prima immagine come caratteristica dell'oggetto di destinazione e kpts1 salva la caratteristica dell'oggetto di destinazione. Per impostazione predefinita, corrisponderà a più proporzioni, dimensioni e angoli della funzione di destinazione, non solo alle dimensioni e all'angolo durante il salvataggio della funzione di destinazione. È più flessibile della corrispondenza dei modelli e non richiede il salvataggio di più immagini del modello come la corrispondenza di più modelli.
Per il rilevamento dei punti caratteristici, è anche possibile salvare in anticipo le caratteristiche del target. Ciò non era consigliato in precedenza poiché l'interferenza della luce ambientale e altri motivi potrebbero causare caratteristiche diverse di luci diverse ogni volta che si esegue il programma e il grado di corrispondenza verrà ridotto. Tuttavia, nell'ultima versione del firmware, sono state aggiunte regolazioni all'esposizione, al bilanciamento del bianco e ai valori di guadagno automatico. I valori di esposizione e di bilanciamento del bianco possono essere definiti artificialmente, il che indebolirà relativamente l'interferenza della luce . Puoi anche provare a salvare in anticipo le funzionalità di destinazione.