2010-05-05 3 views
1

Un projet qui implique un traitement d'image, c'est-à-dire qui calcule le décalage angulaire de la même image lorsqu'elle est décalée par un milieu ayant un certain indice de réfraction. Nous devons construire une application qui corrèle les 2 images (corrélation phase/2D?) Et ensuite tracer en utilisant Chaco et Mayavi (2 bibliothèques en Python). Existe-t-il un autre logiciel de modèle (FOSS) sur lequel nous pouvons baser notre application ou l'utiliser comme référence?Y a-t-il une bibliothèque de corrélation de phase d'image disponible pour Python?

Répondre

0

Scipy contient de nombreuses routines de traitement d'image dans son package scipy.ndimage.

2

utilisant scipy cela devrait être une ligne unique (même si vous pouvez probablement éviter le paquet ndimage)

from scipy.fftpack import fftn, ifftn 
corr = (ifftn(fftn(a)*ifftn(b))).real 

en supposant que vous avez réussi à lire vos images originales dans des tableaux numpy a & b. Si ce sont des images 2D mayavi pourrait être un peu exagéré, et il serait probablement plus facile d'utiliser matplotlib que chaco. Si vous utilisez matplotlib, vous pouvez faire le tout avec

from pylab import * 
corr = (ifftn(fftn(a)*ifftn(b))).real 
imshow(corr) 
0

corrélation de phase tel que décrit par http://en.wikipedia.org/wiki/Phase_correlation, pris de https://github.com/michaelting/Phase_Correlation/blob/master/phase_corr.py.

def phase_correlation(a, b): 
    G_a = np.fft.fft2(a) 
    G_b = np.fft.fft2(b) 
    conj_b = np.ma.conjugate(G_b) 
    R = G_a*conj_b 
    R /= np.absolute(R) 
    r = np.fft.ifft2(R).real 
    return r 

Voici un exemple: Nous prenons deux images similaires, mais de différentes phases et tracer la corrélation de phase (une image en noir avec un seul point blanc à la différence de phase appropriée).

from scipy import misc 
from matplotlib import pyplot 
import numpy as np 
#Get two images with different phases 
im1 = misc.lena() 
im2 = np.zeros_like(im1) 
im2[:200,:200] = im1[-200:, -200:] 
pyplot.imshow(phase_correlation(im1, im2), cmap='gray') 
pyplot.show() 
+0

Juste quelques conseils pratiques, n'oubliez pas d'appliquer d'abord un fenêtrage approprié sur les images d'entrée. Voir Hamming 2D ou fenêtres gaussiennes http://stackoverflow.com/questions/7687679/how-to-generate-2d-gaussian-with-python. –

Questions connexes