ncRubert..
14
如果您正在寻找一维或二维的快速,标准化的互相关,我会推荐openCV库(参见 /).由该组维护的互相关代码是您将找到的最快,它将被标准化(结果在-1和1之间).
虽然这是一个C++库,但代码是使用CMake维护的,并且具有python绑定,因此可以方便地访问互相关函数.OpenCV也很适合numpy.如果我想从numpy数组开始计算二维互相关,我可以按如下方式进行.
import numpy
import cv
#Create a random template and place it in a larger image
templateNp = numpy.random.random( (100,100) )
image = numpy.random.random( (400,400) )
image[:100, :100] = templateNp
#create a numpy array for storing result
resultNp = numpy.zeros( (301, 301) )
#convert from numpy format to openCV format
templateCv = cv.fromarray(numpy.float32(template))
imageCv = cv.fromarray(numpy.float32(image))
resultCv = cv.fromarray(numpy.float32(resultNp))
#perform cross correlation
cv.MatchTemplate(templateCv, imageCv, resultCv, cv.CV_TM_CCORR_NORMED)
#convert result back to numpy array
resultNp = np.asarray(resultCv)
对于仅1-D互相关,创建形状等于(N,1)的2-D阵列.虽然转换为openCV格式需要一些额外的代码,但scipy的加速速度令人印象深刻.
仅供参考,如果您不想使用OpenCV,也可以使用scikit-image执行此操作.参见[本例](http://scikit-/docs/0.9.x/auto_examples/plot_template.html). (2认同)