【问题标题】:Matrix multiplication by it's transpose returning zeros matrix?矩阵乘以它的转置返回零矩阵?
【发布时间】:2013-05-25 16:46:14
【问题描述】:

我将一个矩阵乘以它的转置,得到一个零矩阵。

我正在乘以其他矩阵并且没有任何问题。我用cvMulcvMulTransposed 都试过了,总是得到一个零矩阵,这与预期的结果不同。

代码:

  CvMat *test = cvCreateMat(3, 3, CV_64F);
  CvMat *test2 = cvCreateMat(3, 3, CV_64F);
  for(NSInteger row = 0; row < 3; row++) {
    for (NSInteger column = 0; column < 3; column++) {
      double value = 0.0f;
      if (row == column) {
        switch(row+column) {
          case 0:
            value = 16.815826;
            break;
          case 2:
            value = 1.492630;
            break;
        }
      }
      cvSetReal2D(test, row, column, value);
      cvSetReal2D(test2, row, column, value);
    }
  }

  [self printCvMat:test];
  [self printCvMat:test2];

  CvMat *testResult = cvCreateMat(test->rows, test2->cols, CV_64F);
  cvMul(test, test2, testResult, 0.0f); 
  [self printCvMat:testResult];

输出:

Printing Matrix:
16.815826 0.000000 0.000000 
0.000000 1.492630 0.000000 
0.000000 0.000000 0.000000 
Printing Matrix:
16.815826 0.000000 0.000000 
0.000000 1.492630 0.000000 
0.000000 0.000000 0.000000
Printing Matrix:
0.000000 0.000000 0.000000 
0.000000 0.000000 0.000000 
0.000000 0.000000 0.000000 

应该是:

282.772   0.000   0.000
  0.000   2.228   0.000
  0.000   0.000   0.000

【问题讨论】:

标签: c++ c opencv matrix matrix-multiplication


【解决方案1】:

来自documentation

函数multiply计算两个数组的每个元素的乘积:

dst(I) = 饱和(刻度 • src1(I) • src2(I))

您正在传递一个0 的比例。

【讨论】:

  • 或者,也可以这样:) +1
猜你喜欢
  • 2018-04-11
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多