0

私はOpenCVにかなり慣れていないので、少しずつ理解しています。クラスの行列演算子は、cv::MatA.mult(B)、A+B、AB、A/B などを実行するためにオーバーロードされていることを知っています。

画像の行と列の射影である 2 つのベクトルがあります。2 つの画像 (S と T) があるので、それぞれに 2 つの射影ベクトル (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 に答える