Евклидово расстояние между изображениями

У меня есть два изображения, скажемP а такжеSразмером 8192 × 200, и я хочу вычислить пользовательское «евклидово расстояние» между ними. В настоящее время я использую следующие шаги:

Преобразуйте изображения в пару векторов столбцов и строк:

Ip = Ip(:).';
Is = Is(:);

Рассчитать метрическую матрицу,G, чьи записи задаются по формуле

G(i,j) = 1/(2*pi*r*r) * exp((-d*d)/(2*r*r));

гдеr это глобальный параметр, который варьируется от 0 до 20, скажем, иd это расстояние между пикселямиi и пиксельj, Например, если пиксельi является(k,l) и пиксельj является(k1,l1), затемd = sqrt((k-k1)^2 + (l-l1)^2);, Пиксель 1 будет(1,1)Пиксель 2 будет(1,2), и так далее. Следовательно, размер матрицыG будет1638400×1638400.

Вычислить окончательное (скалярное) евклидово расстояние между двумя изображениями, используя:

ImEuDist = sqrt( (Ip-Is) * G * (Ip-Is).' );  

Я уже написал некоторый код, используя функцию mex, но это займет слишком много времени, прежде чем дать результаты (5-6 часов) - см.этот ТАК вопрос для кода и больше обсуждения по этому вопросу.

Пожалуйста, помогите мне оптимизировать это; В идеале мне бы хотелось, чтобы он работал в считанные секунды. Обратите внимание, что меня не интересуют решения с участием графического процессора.

Ответы на вопрос(1)

Ваш ответ на вопрос