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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage