viernes, 26 de julio de 2013

« L'absence est à l'amour, ce qu'est au feu le vent ; il éteint le petit, il allume le grand. »

- Roger Bussy-Rabutin

viernes, 19 de julio de 2013

Detector de similitud de imagenes

Es muy útil poder cuantificar la similitud entre dos imagines para todo sistema de visión por computadora. Uno de los algoritmos más utilizados por su sencillez y efectividad es el Coeficiente de Correlación de Pearson. Si consideremos a una imagen digital como una muestra de datos de un evento "aleatorio", podemos reescribir el coeficiente de la siguiente forma:

donde el numerador representa a la covariancia de los datos (valores de los pixeles) de la imagen A y B y el denominador es el producto de la desviación estándar de los datos de la imagen A por la desviación estándar de los de la imagen B. Podemos implementar un detector de similitud en Matlab. Antes, hay que mencionar algunas características de la función cov(). Supongamos que tenemos dos conjuntos de datos:

x = [ 1 3 4 6 7 4];
y = [ 6 7 1 4 9 8];

Si queremos obtener la covariancia entre ambos conjuntos utilzando cov(x,y), lo primero que hará la función es concatenar ambos vectores de la siguiente manera:

 [x     y ]

1     6
3     7
4     1
6     4
7     9
4     8

La función cov() dará como resultado una matriz donde la posición (1,1) es la covarianza de la primer columna consigo misma, (1,2) es la covarianza de la primera con la segunda, (2,1) la segunda con la primera y (2,2) la segunda consigo misma:

>> cov(x,y)

ans =

    4.5667    0.8333
    0.8333    8.5667

En este caso las únicas posiciones que nos interesan son la (1,2) o la (2,1). Conociendo este detalle podemos implementar sin problemas un algoritmo de detección de similitud de la siguiente forma:


% Carga de imagenes
I = imread('dali.jpg');
I2 = imread('dali6.jpg');

subplot(1,2,1),imshow(I),title('Imagen A')
subplot(1,2,2), imshow(I2),title('Imagen B')

% Conversion a escala de grises y escalamiento

Is = rgb2gray(I);
[n m] = size(Is);
I2 = imresize(I2,[n m]);
I = rgb2gray(I);
I = double(I);
I2 = rgb2gray(I2);

% Cambio de forma matricial a vector y cambio de formato
Ir = reshape(I, [1 numel(I)]);
Ir = double(Ir);
Ir2 = reshape(I2, [1 numel(I2)]);
Ir2 = double(Ir2);

% Cálculo del CCP

Sx = std(Ir);
Sy = std(Ir2);
Cxym = cov(Ir,Ir2);
Cxy = Cxym(2,1);
p = Cxy/(Sx*Sy)

if p > 0.7
   
    disp('La imagen es la misma')
   
else
   
    disp('Las imagenes son diferentes')
   
end

miércoles, 17 de julio de 2013

S.

Pareciera ser el caso de que últimamente sólo escribo de mi vida cuando algo anda mal o estoy enojado. ¿Por qué no estoy escribiendo cuando siento que cada cosa en la tierra me sonríe? Nunca había tenido tan cerca de mi vida a una mujer tan perfecta. Puede interpretarse la palabra “perfecta” como la ausencia de defectos. Quizá por mis inevitables analogías de ingeniería prefiero usar el adjetivo “ideal” para tal fin. Al decir perfecta, en mi contexto, no me refiero a una mujer libre de defectos, sino a una mujer que dispara y desborda mis emociones de formas inexplicables como si tuviera marcado dentro de mi mente un margen entre lo común y lo extraordinario.