Ich habe kürzlich versucht, einen schnellen und effizienten Weg zu finden, Kreuzkorrelationsüberprüfungen zwischen zwei Arrays unter Verwendung der Python-Sprache durchzuführen. Nach einigem Lesen habe ich diese zwei Optionen gefunden:
NumPy.correlate()
, die bei großen Arrays zu langsam ist. cv.MatchTemplate()
, die viel schneller zu sein scheint. Aus offensichtlichen Gründen habe ich die zweite Option gewählt. Ich habe versucht, den folgenden Code auszuführen:
%Vor%Obwohl dieser Code sehr einfach zu sein scheint, löst er den nächsten Fehler aus:
%Vor%Nach ein paar Stunden frustrierender Versuche bin ich immer noch festgefahren! Hat jemand einen Vorschlag?
Übrigens, das ist meine Python-Ausgabe:
%Vor%Danke euch allen!
Sie werden wahrscheinlich nicht viel schneller als mit einer fft-basierten Korrelationsmethode kommen.
%Vor%Jetzt für einen Zeitvergleich:
%Vor% Wenn Sie mit einer zirkulären Korrelation umgehen können, können Sie die Kopie entfernen. Die Zeitdifferenz erhöht sich, wenn data_length
zunimmt.
Ich glaube, dass Ihr Code fehlschlägt, weil OpenCV Bilder als uint8 und nicht als float32-Format erwartet. Sie können die cv2 Python-Schnittstelle intuitiver verwenden (automatische Konvertierung zwischen NDarray- und CV-Bildformaten).
Wie für die Geschwindigkeit der Korrelation, können Sie versuchen, eine schnelle fft-Implementierung (FFTW hat einen Python-Wrapper: pypftw ).
Tags und Links python opencv numpy scipy correlation