0

我对 OpenCV 相当陌生,并且一点一点地理解它。我知道cv::Mat类中的矩阵运算符已被重载以执行 A.mult(B)、A+B、AB、A/B 等。

我有两个向量,它们是图像的行和列的投影。我有两个图像(S 和 T),所以每个图像都有两个投影向量(rowProejctionS、columnProjectionS、rowProjectionT、columnProjectionT)。我也有图像的手段(meanS,meanT)。我需要做一个“SUM OF PRODUCT”相关的计算,在MATLAB中如下

numeratorLambdaRo = sum((rowProjectionT - meanT).*(rowProjectionS - meanS));
denominatorLambdaRo = sqrt(sum((rowProjectionT - meanT).^2)*sum((rowProjectionS - meanS).^2);

LambaRo = numeratorLambdaRo/denominatorLambdaRo;

我不完全确定矩阵运算符在cv::Mat对象上下文中的能力。

4

1 回答 1

1

将 meanT、meanS 声明为 double 或 cv::Scalar,您可以从矩阵中减去它。您也许可以拆分您的操作:

rowProjectionT -= meanT;
rowProjectionS -= meanS;
numeratoLambdaRo = cv::sum(rowProjectionT*rowProjectionS.t()); // transpose 1 of the vector so that multiplication is equivalent to dot product.

cv::Mat rowProjTSquare = rowProjectionT*rowProjectionT.t();
cv::Mat rowProjSSquare = rowProjectionS*rowProjectionS.t();
denominatorLambdaRo = sqrt(cv::sum(rowProjTSquare*rowProjSSquare));
于 2012-10-29T13:05:50.877 回答