2010-05-05 27 views
1

一个涉及图像处理的项目,也就是计算当被一定折射率的介质偏移时相同图像的角度偏移。我们必须构建一个应用程序,将2张图像(phase/2D correlation?)相关联,然后使用Chaco和Mayavi(Python中的2个库)进行绘图。 是否有任何其他现有模板软件(FOSS)可以基于我们的应用程序,或将其用作参考?是否有可用于Python的图像相位相关库?

回答

0

Scipy在其包含scipy.ndimage包中包含许多图像处理例程。使用

2

SciPy的,这应该是一个班轮(尽管你可能避免ndimage包)

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

假设你已经成功地读取原始图像到numpy的数组a &湾如果是2D图像mayavi可能有点矫枉过正,并且使用matplotlib可能比chaco更容易。如果使用matplotlib,你可以通过http://en.wikipedia.org/wiki/Phase_correlation描述,从https://github.com/michaelting/Phase_Correlation/blob/master/phase_corr.py采取做一大堆与

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

阶段相关。

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 

下面是一个例子:我们采取两个相似的图像,但不同的相位和绘制相位相关(与在适当的相位差的一块白点黑图像)。

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

只是一些实际的建议,记得先对输入图像应用适当的窗口。看到二维海明或高斯窗口http://stackoverflow.com/questions/7687679/how-to-generate-2d-gaussian-with-python。 – 2014-11-03 09:38:22