Евклидово расстояние между изображениями
У меня есть два изображения, скажем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 часов) - см.этот ТАК вопрос для кода и больше обсуждения по этому вопросу.
Пожалуйста, помогите мне оптимизировать это; В идеале мне бы хотелось, чтобы он работал в считанные секунды. Обратите внимание, что меня не интересуют решения с участием графического процессора.