Routine-Erklärung-09-template_matching Vorlagenabgleich
Video-Tutorial 8 – NCC-Vorlagenabgleich: https://singtown.com/learn/49598/
Diese Routine ist 09-Feathre_detection-template_matching\ Das Ziel dieser Routine besteht darin, den Vorlagenabgleich mithilfe von NCC (Normalized Product Correlation Algorithm) zu implementieren.
# 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())
Beachten Sie, dass wir die SD-Karte einlegen und die folgenden Schritte ausführen müssen, da die Größe unseres Vorlagenbildes den integrierten Flash von openmv überschreitet. (Stellen Sie sicher, dass Sie zuerst die SD-Karte einlegen und dann das Gerät einschalten.)
Und dieser Vorlagenabgleich kann nur für Firmware-Version 1.6 und höher verwendet werden, andernfalls wird beim Ausführen die Meldung „SEARCH_EX kann nicht gefunden werden“ angezeigt
Zuerst müssen wir eine Vorlage erstellen oder importieren. Beachten Sie, dass diese Vorlage im PGM-Format vorliegen muss und die Größe begrenzt ist und die Pixelgröße von openmv nicht überschreiten darf. Wir können ein Vorlagenbild direkt von openmv abfangen. Wir können zuerst die Routine helloworld.py ausführen, den Frambuffer das Bild anzeigen lassen und es dann abfangen.
Wählen Sie „Bildauswahl auf PC speichern“. Beachten Sie, dass das direkt von openmv gespeicherte Bild im BMP-Format vorliegt. Wir müssen es in das PGM-Format konvertieren. Die Online-Konvertierung kann auf dieser Website durchgeführt werden https://convertio.co/zh/bmp-pgm/
Anschließend speichern wir die konvertierte PGM-Vorlage auf der SD-Karte (auf dieser SD-Karte befinden sich 8 Vorlagen, und die Vorlage im Bild oben wird als ball0.pgm gespeichert).
Dann öffnen wir die Template-Matching-Routine
Ändern Sie jetzt den Namen der Vorlagendatei template.pgm in Zeile 28 in ball0.pgm
Dann lass es einfach laufen!
Dies ist die Verwendung der Vorlagenvergleichsfunktion find_template:
r = img.find_template(template, 0,7, roi=(10,0,80,60), step=4, search=SEARCH_EX) Der Schwellenwert von 0,7 ist der Ähnlichkeitsschwellenwert, roi Dies ist der Bereich für den Abgleich (der obere linke Scheitelpunkt ist (10, 0), ein Rechteck mit einer Länge von 80 und einer Breite von 60). Beachten Sie, dass die Größe des Roi größer als das Vorlagenbild und kleiner als der Frambuffer ist .
Beachten Sie, dass dieser Vorlagenabgleich den NCC-Algorithmus verwendet, der nur Bereiche mit ähnlicher Größe wie die Vorlage abgleichen kann. Wenn Sie Bilder unterschiedlicher Größe abgleichen möchten, müssen Sie mehrere Vorlagen unterschiedlicher Größe speichern.
Wenn nach dem Ausführen des Programms folgende Probleme auftreten:
- Das Vorlagenbild ist zu groß. Es wird empfohlen, dass das Vorlagenbild kleiner als 80*60 ist
- OpenMV2 verfügt nicht über genügend Speicher, daher müssen Sie QQVGA in QQCIF ändern.
Erklärung der Funktion des offiziellen chinesischen Dokuments von Singtown Technology OpenMV:
Vergleich von Vorlagenabgleich und Merkmalspunkterkennung:
Vorlagenabgleich (find_temolate) verwendet den NCC-Algorithmus, der nur Muster abgleichen kann, die grundsätzlich die gleiche Größe und den gleichen Winkel wie das Vorlagenbild haben. Die Einschränkungen sind relativ groß. Wenn das Zielmuster im Sichtfeld etwas größer oder kleiner als das Vorlagenbild ist, ist der Abgleich möglicherweise nicht erfolgreich.
Der Vorlagenabgleich eignet sich für Situationen, in denen der Abstand zwischen der Kamera und dem Zielobjekt bestimmt wird und keine dynamische Bewegung erforderlich ist. Es eignet sich beispielsweise für die Erkennung bestimmter Objekte am Fließband, ist jedoch nicht für die Verfolgung eines sich bewegenden Volleyballs durch das Auto geeignet (da der Abstand zwischen dem sich bewegenden Volleyball und der Kamera dynamisch ist und die Größe des von der Kamera gesehenen Volleyballs dynamisch ist). Die Kamera ändert sich und stimmt nicht genau mit dem Vorlagenbild überein.
Für den Abgleich mehrerer Winkel und Größen können Sie versuchen, mehrere Vorlagen zu speichern und Mehrere Vorlagenabgleich zu verwenden.
Feature-Point-Erkennung (find_keypoint): Wenn Sie gerade mit der Ausführung des Programms begonnen haben, extrahiert die Routine das erste Bild als Zielobjekt-Feature und kpts1 speichert das Zielobjekt-Feature. Standardmäßig werden mehrere Proportionen, Größen und Winkel des Zielmerkmals abgeglichen, nicht nur die Größe und der Winkel beim Speichern des Zielmerkmals. Es ist flexibler als der Vorlagenabgleich und erfordert nicht das Speichern mehrerer Vorlagenbilder wie der Mehrfachvorlagenabgleich.
Für die Erkennung von Merkmalspunkten können Sie Zielmerkmale auch im Voraus speichern. Dies wurde bisher nicht empfohlen, da Störungen durch Umgebungslicht und andere Gründe bei jeder Ausführung des Programms zu unterschiedlichen Merkmalen bei unterschiedlichen Lichtern führen können und der Übereinstimmungsgrad verringert wird. Die neueste Version der Firmware fügt jedoch Anpassungen der Belichtungs-, Weißabgleich- und automatischen Verstärkungswerte hinzu. Der Belichtungswert und der Weißabgleichswert können künstlich definiert werden, wodurch die Lichtinterferenz relativ abgeschwächt wird. Sie können auch versuchen, die Zielfunktionen vorab zu speichern.