Euklidischer Abstand zwischen Bildern
Ich habe zwei Bilder, sagen SieP
undS
, der Größe 8192 × 200, und ich möchte einen benutzerdefinierten "euklidischen Abstand" zwischen ihnen berechnen. Derzeit benutze ich die folgenden Schritte:
Formen Sie die Bilder in ein Paar Spalten- und Zeilenvektoren um:
Ip = Ip(:).';
Is = Is(:);
Berechnen Sie eine Metrikmatrix,G
, deren Einträge durch die Formel @ gegeben si
G(i,j) = 1/(2*pi*r*r) * exp((-d*d)/(2*r*r));
wor
ist ein globaler Parameter, der beispielsweise zwischen 0 und 20 liegt, undd
ist der Abstand zwischen Pixeli
und pixelj
. ZB wenn Pixeli
ist(k,l)
und pixelj
ist(k1,l1)
, dannd = sqrt((k-k1)^2 + (l-l1)^2);
. Pixel 1 wird(1,1)
, Pixel 2 wird(1,2)
, und so weiter. Daher ist die Größe der MatrixG
wird sein1638400×1638400
.
Berechnen Sie den endgültigen (skalaren) euklidischen Abstand zwischen zwei Bildern mit:
ImEuDist = sqrt( (Ip-Is) * G * (Ip-Is).' );
Ich habe bereits Code mit einer mex-Funktion geschrieben, aber es dauert zu lange, bis die Ergebnisse angezeigt werden (5-6 Stunden) - siehediese SO Frage für Code und mehr Diskussion darüber.
Bitte helfen Sie mir, dies zu optimieren; Ich möchte, dass es in Sekundenschnelle läuft. Beachten Sie, dass ich nicht an Lösungen für die GPU interessiert bin.