我正在尝试在C++中进行互相关。问题是我在matlab中没有得到相同的结果。

C++代码

float telo[5] = {-1, 0, 1, 2, 3};
Mat prueba(1, 5, CV_32F, telo);
float telo2[3] = { 0, 1, 2 };
Mat prueba2(1, 3, CV_32F, telo2);
Mat result;
matchTemplate(prueba, prueba2, result, CV_TM_CCORR);
Result: 2048.0004882812500 2.660783784765e-314#DEN -6.2774385622041925e+066

Matlab代码:
a = [-1,0,1,2,3]
b = [0,1,2]
xcorr2(a,b)
Result: -2 -1 2 5 8 3 0

我究竟做错了什么?

最佳答案

当我用OpenCV 3尝试您的C++代码示例时,按预期方式得到以下结果:

2, 5, 8

与Matlab解决方案相同,但是没有尾巴。

编辑:

为了获得与Matlab相同的结果,可以在输入数据中添加零填充。在您的数据中手动执行此操作:
float telo[9] = {0, 0, -1, 0, 1, 2, 3, 0, 0};
Mat prueba(1, 9, CV_32F, telo);

或者,更通用的解决方案(也应适用于2D数据)将是
copyMakeBorder(prueba, prueba, prueba2.rows - 1, prueba2.rows - 1, prueba2.cols - 1, prueba2.cols - 1, cv::BORDER_CONSTANT);

matchTemplate之前。

关于c++ - 互相关C++和Matlab,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32064494/

10-09 13:15