我想要乘以2個四元數,它們存儲在一個cv :: Mat結構中。我希望函數儘可能高效。我到目前爲止有以下代碼:使用cv進行高效的C++四元數乘法:: Mat
/** Quaternion multiplication
*
*/
void multiplyQuaternion(const Mat& q1,const Mat& q2, Mat& q)
{
// First quaternion q1 (x1 y1 z1 r1)
const float x1=q1.at<float>(0);
const float y1=q1.at<float>(1);
const float z1=q1.at<float>(2);
const float r1=q1.at<float>(3);
// Second quaternion q2 (x2 y2 z2 r2)
const float x2=q2.at<float>(0);
const float y2=q2.at<float>(1);
const float z2=q2.at<float>(2);
const float r2=q2.at<float>(3);
q.at<float>(0)=x1*r2 + r1*x2 + y1*z2 - z1*y2; // x component
q.at<float>(1)=r1*y2 - x1*z2 + y1*r2 + z1*x2; // y component
q.at<float>(2)=r1*z2 + x1*y2 - y1*x2 + z1*r2; // z component
q.at<float>(3)=r1*r2 - x1*x2 - y1*y2 - z1*z2; // r component
}
這是OpenCV最快的方式嗎?使用定點算法會最快嗎?
16次乘法和12次加法 - 對我來說似乎沒有太大的改進空間。使函數聯機!我希望這些「at」調用不是函數調用(即它們應該是內聯的)。 – JohnB
它是Mat類的openCV成員。我認爲這是訪問Mat elment最快的方法,但我不確定。 http://opencv.willowgarage.com/documentation/cpp/basic_structures.html#mat –
儘可能高效?不要使用動態內存分配和引用計數的矩陣類,因爲它首先像四分量數組那樣微不足道。對於新的'Matx'類,這完全是一個完美的用例,參考你的其他問題之一。 –