Quiero calcular la distancia Euclidiana entre dos imágenes en Matlab. Me encuentro con algunos ejemplos y he intentado, pero ellos no son correctos.

El resultado de esta distancia Euclidiana debe estar entre 0 y 1 pero con dos formas diferentes, he llegado a soluciones diferentes.

El primer algoritmo que me da un número de 4 dígitos como 2000 y otros dígitos como este y por el otro camino, he llegado a números como 0.007

Lo que está mal con él?

Este es uno de los algoritmos que he mencionado:

Im1 = imread('1.jpeg');
Im2 = imread('2.jpeg');

Im1 = rgb2gray(Im1);
Im2 = rgb2gray(Im2);

hn1 = imhist(Im1)./numel(Im1);
hn2 = imhist(Im2)./numel(Im2);

% Calculate the Euclidean distance
f = sum((hn1 - hn2).^2)
InformationsquelleAutor deansam | 2013-07-09

2 Comentarios

  1. 4

    la última línea de código necesidades de un comando sqrt:

    f = sum(sqrt(hn1-hn2).^2);

    comprobar este enlace

    También puede utilizar el norma comando

    f = norm(hn1-hn2);

    Estos entrada1 y post2 puede ser útil.

    • no tengo suficiente reputación para votar,y lo siento:(. gracias un millón por tu gran ayuda
    • En algún caso específico, el resultado de la distancia euclidiana entre 2 matrices puede ser una matriz ? o debe ser siempre escalar ?
  2. 1

    Oh, no estoy seguro de por dónde empezar, pero aquí hay algunas cosas que usted debe pensar acerca de:

    1: estás en la normalización de su histogramas de forma incorrecta. Usted quiere que ellos tengan unidad L1-norma:

    hn1 = imhist(Im1);
    hn2 = imhist(Im2);
    hn1 = hn1/numel(hn1);
    hn2 = hn2/numel(hn2);

    2: Tomar L2-distancia entre los histogramas en realidad no tiene sentido (¿qué es una distancia euclidiana entre dos distribuciones de verdad?). Deberías echar un vistazo a algo así como una L1 o Chi-2 a distancia, o el uso de una intersección kernel. L1 sería

    f=norm(hn1-hn2,1);

    3: Si usted realmente quiere que sea L2 la distancia euclidiana, la última línea debe ser

    f=norm(hn1-hn2); 

    pero en tal caso, en lugar de L2-normalizar el histograma:

    hn1 = imhist(Im1);
    hn2 = imhist(Im2);
    hn1 = hn1/norm(hn1);
    hn2 = hn2/norm(hn2);

    4: por Favor, trate de ser más clara en la formulación de sus preguntas – fue un poco difícil de decodificar :). Si la hubiera mencionado a la aplicación – que podría haber dado algunos consejos adicionales. 🙂

    • gracias mucho por su ayuda:)
    • gracias. quiero escribir la vsumm algoritmo. debo calcular los pares de distancia de cuadros consecutivos en la extracción de la muestra, de acuerdo a la distancia Euclídea. mientras que hay un umbral de 0.5 ,cuando cada vez la distancia Euclidiana de ir por encima de 0.5 , k debe ser mayor.
    • Lo que yo veo. En ese caso yo votaría para que se pegue con la distancia Euclidiana, (como es justificado por la k-means clustering paso), incluso si no es la más adecuada en la medida de distancia para la comparación de los histogramas.
    • gracias. ¿tiene usted alguna idea de este algoritmo? estoy escribiendo esto y es un poco difícil. ¿tienes alguna orientación?
    • queridos kamjagin <br / > puede usted por favor responder a mi otra pregunta que se me pide en este enlace:stackoverflow.com/questions/17563980/…

Dejar respuesta

Please enter your comment!
Please enter your name here