我对OpenCV相当新,并且有点理解它。我知道cv::Mat
类中的矩阵运算符已被重载以执行A.mult(B),A + B,A-B,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
个对象的上下文中矩阵运算符的能力。
答案 0 :(得分: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));