是否有可用于Python的图像相位相关库?

是否有可用于Python的图像相位相关库?,python,image-processing,project,correlation,Python,Image Processing,Project,Correlation,一种涉及图像处理的项目,即计算同一图像在被具有一定折射率的介质移动时的角位移。我们必须构建一个应用程序来关联这两幅图像(相位/2D关联?),然后使用Chaco和Mayavi(Python中的两个库)进行绘图。 是否有其他现有的模板软件(FOSS)可以作为我们应用程序的基础或参考?Scipy在其软件包中包含许多图像处理例程。使用Scipy这应该是一个单行程序(尽管您可能可以避免ndimage软件包) 假设您已将原始图像读入numpy阵列a和b。如果是2D图像,那么mayavi可能有点过分了,使用m

一种涉及图像处理的项目,即计算同一图像在被具有一定折射率的介质移动时的角位移。我们必须构建一个应用程序来关联这两幅图像(相位/2D关联?),然后使用Chaco和Mayavi(Python中的两个库)进行绘图。
是否有其他现有的模板软件(FOSS)可以作为我们应用程序的基础或参考?

Scipy在其软件包中包含许多图像处理例程。

使用Scipy这应该是一个单行程序(尽管您可能可以避免ndimage软件包)

假设您已将原始图像读入numpy阵列a和b。如果是2D图像,那么mayavi可能有点过分了,使用matplotlib可能比chaco更容易。如果使用matplotlib,您可以使用

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

相位相关性如所述,取自

下面是一个例子:我们取两张相似但相位不同的图像,绘制相位相关性图(一张黑色图像,在适当的相位差处有一个白点)


只是一些实用的建议,请记住首先对输入图像应用适当的窗口。请参见二维汉明或高斯窗口。
from pylab import *
corr = (ifftn(fftn(a)*ifftn(b))).real
imshow(corr)
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 snippet at different locations
im1 = np.mean(misc.face(), axis=-1) #naive colour flattening  

im2 = np.zeros_like(im1)    
im2[:200,:200] = im1[200:400, 500:700]

corrimg = phase_correlation(im1, im2)
r,c = np.unravel_index(corrimg.argmax(), corrimg.shape)

pyplot.imshow(im1)
pyplot.plot([c],[r],'ro')
pyplot.show()

pyplot.imshow(im2)
pyplot.show()

pyplot.figure(figsize=[8,8])
pyplot.imshow(corrimg, cmap='gray')

pyplot.show()