寻找基本矩阵(矩阵乘法错误)

Posted

技术标签:

【中文标题】寻找基本矩阵(矩阵乘法错误)【英文标题】:Finding Essential matrix (Matrix Multiplication Error) 【发布时间】:2013-07-24 11:50:17 【问题描述】:

我正在尝试使用 opencv 进行 3D 重建,并且我几乎按照书中的所有步骤进行操作: OpenCV 2 计算机视觉应用程序编程食谱,作者 Robert Laganière。

我的问题是在尝试查找基本矩阵时出现的。我是这样做的:

  Mat fundemental= ransacTest(symMatches,keypoints1, keypoints2, outmatches);
 //ransacTest function by Computer Vision Application Programming Cookbook 

 cout<<endl<<fundemental<<endl;

 Mat  K=m_camera_data->get_K();
 //get_K() function defined previously 
 cout<<K<<endl;

 cout<<"K.T"<<K.t()<<endl;

 Mat_<double>  E = K.t() *fundemental* K; // Error   

函数 ransacTest 和 get_K() 之前已定义,它们似乎工作正常。我的基本矩阵如下

-7.65924601845777e-006   0.0052097327886         -0.179203748284864
-0.005202223611495075    -8.913278071309e-006    -0.5024237005766097
0.1843335279902164       0.4908219843516384       1

我的K矩阵如下

 382.5   0    160

 0       0    120

 0       0     1

K 的转置正确完成。 当我尝试获取基本矩阵 E 时出现问题。运行程序时出现此错误 “OpenCV 错误:断言失败(类型 == B && > 在未知函数中,文件 .. ....\src\opencv\modules\core\src\matmul.cpp,第 711 行”

我查了一下,发现这个问题Opencv Matrix multiplication也有类似的问题 但是我尝试按照答案所说的去做(更改矩阵类型),但仍然遇到同样的错误。

我也试过用Gemm做矩阵乘法,但出现同样的错误。

我真的需要一些帮助!在此先感谢。

【问题讨论】:

【参考方案1】:

这听起来好像K 的类型不是双精度(CV_64F);可能是浮点数(CV_32F)。检查K.type() == CV_64F

【讨论】:

我刚刚检查过,它是浮动的!谢谢你!我刚刚解决了这个问题。这确实是我的基础和我的 K 的矩阵类型问题。我现在所做的只是每次都将基础声明为 Mat_ 并且它似乎有效!

以上是关于寻找基本矩阵(矩阵乘法错误)的主要内容,如果未能解决你的问题,请参考以下文章

矩阵的基本性质 之 矩阵加减法,数乘,乘法,转置

矩阵的基本性质 之 矩阵加减法,数乘,乘法,转置

犰狳 - 矩阵乘法错误

矩阵的乘法运算法则

矩阵乘法的特例

缓存友好的优化:面向对象的矩阵乘法和函数内平铺矩阵乘法