【发布时间】:2011-02-15 19:03:35
【问题描述】:
一个涉及图像处理的项目,即计算同一图像在通过一定折射率的介质移动时的角度偏移。我们必须构建一个关联 2 个图像(相位/2D 相关性?)的应用程序,然后使用 Chaco 和 Mayavi(Python 中的 2 个库)进行绘图。 是否有任何其他现有的模板软件 (FOSS) 可以作为我们的应用程序的基础或将其用作参考?
【问题讨论】:
标签: python image-processing project correlation
一个涉及图像处理的项目,即计算同一图像在通过一定折射率的介质移动时的角度偏移。我们必须构建一个关联 2 个图像(相位/2D 相关性?)的应用程序,然后使用 Chaco 和 Mayavi(Python 中的 2 个库)进行绘图。 是否有任何其他现有的模板软件 (FOSS) 可以作为我们的应用程序的基础或将其用作参考?
【问题讨论】:
标签: python image-processing project correlation
http://en.wikipedia.org/wiki/Phase_correlation 描述的相位相关性,取自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
这是一个示例:我们拍摄了两张相似的图像,但相位不同,并绘制了相位相关性(在适当的相位差处带有单个白点的黑色图像)。
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()
【讨论】:
使用 scipy 这应该是单行的(尽管您可能可以避免使用 ndimage 包)
from scipy.fftpack import fftn, ifftn
corr = (ifftn(fftn(a)*ifftn(b))).real
假设您已设法将原始图像读入 numpy 数组 a 和 b。如果是 2D 图像,mayavi 可能有点矫枉过正,使用 matplotlib 可能比使用 chaco 更容易。如果使用 matplotlib,你可以做很多事情
from pylab import *
corr = (ifftn(fftn(a)*ifftn(b))).real
imshow(corr)
【讨论】:
Scipy 在其scipy.ndimage 包中包含许多图像处理例程。
【讨论】: