我知道有三种方法可以在opencv中乘以矩阵,其中一种是:
cvGEMM(M1, M1T, 1, NULL, 0, Mult, 0);
另一个:
cvMulTransposed(M1, Mult, 0);
和第三:
cvMul(M1, M1T, Mult);
我基本上将矩阵乘以它的转置。乘法后矩阵应该是对称的..但上面的每个方法都给我一个不对称且完全错误的输出..这里是原始(M1)矩阵:
rows: 5
cols: 50
dt: f
data: [ 60., 89., 86., 102., 58., 51., 143., 187., 140., 64., 80.,
169., 184., 172., 67., 90., 174., 191., 175., 41., 97., 86., 171.,
104., 87., 145., 164., 176., 157., 119., 176., 177., 180., 179.,
150., 44., 182., 148., 182., 38., 48., 197., 171., 171., 39., 48.,
169., 163., 141., 39., 93., 149., 169., 184., 56., 120., 166.,
182., 168., 144., 132., 172., 187., 173., 157., 164., 157., 152.,
166., 172., 175., 157., 133., 170., 140., 180., 164., 173., 175.,
152., 178., 176., 166., 143., 158., 177., 186., 172., 138., 141.,
182., 191., 169., 159., 34., 185., 154., 155., 171., 32., 81.,
154., 163., 112., 52., 126., 163., 183., 165., 53., 136., 176.,
184., 174., 51., 148., 173., 178., 139., 160., 158., 147., 163.,
154., 135., 146., 157., 181., 161., 79., 39., 172., 187., 174.,
45., 44., 187., 153., 173., 39., 46., 187., 145., 160., 36., 38.,
177., 155., 150., 37., 81., 154., 163., 112., 52., 126., 163.,
183., 165., 53., 136., 176., 184., 174., 51., 148., 173., 178.,
139., 160., 158., 147., 163., 154., 135., 146., 157., 181., 161.,
79., 39., 172., 187., 174., 45., 44., 187., 153., 173., 39., 46.,
187., 145., 160., 36., 38., 177., 155., 150., 37., 76., 165.,
195., 110., 100., 131., 180., 188., 184., 73., 146., 179., 193.,
183., 96., 117., 148., 146., 185., 97., 104., 147., 157., 174.,
172., 129., 171., 177., 181., 173., 123., 126., 186., 194., 171.,
91., 74., 109., 194., 145., 33., 117., 166., 180., 176., 35., 77.,
155., 152., 177. ]
但是将它乘以它的转置会得到:
rows: 5
cols: 5
dt: f
data: [ 927321., 1014163., 923303., 923303., 947641., 1014163.,
1260101., 1062130., 1062130., 1102823., 923303., 1062130.,
1004488., 1004488., 990651., 923303., 1062130., 1004488.,
1004488., 990651., 947641., 1102823., 990651., 990651., 1116004. ]
这些价值是不对称的,它们如何变得如此之大是我不理解的?
cvMultransposed和cvGEMM给出与上面复制的相同的结果.cvMul给出一些运行时错误并返回垃圾值。有什么建议吗?
答案 0 :(得分:2)
除了预期的大输出值(日本已经告诉过你),你得到的矩阵是对称的。
我已将其对齐以提高可读性:
reshape(a,5,5)
ans =
927321 1014163 923303 923303 947641
1014163 1260101 1062130 1062130 1102823
923303 1062130 1004488 1004488 990651
923303 1062130 1004488 1004488 990651
947641 1102823 990651 990651 1116004
所以,这里没有任何错误,你应该仔细检查X是否确实如此,如果你去问为什么X将来会发生......
答案 1 :(得分:1)
我无法解释缺乏对称性,但数字的大小是我所期望的。当你乘以矩阵时,你从第一行得到一行的内积,用第二列得到一列。由于您的行是50个元素,并且您的元素在50-200范围内,因此对于输出矩阵中的元素,这将大约为50 * 100 * 100 = 500000。