我在我的软件中使用Eigen(Tuxfamily)时有一个奇怪的问题(在c ++中)。
我正在通过计算每个像素的Hessian矩阵来分析3D体积图像。 将体积(大约800x800x600)划分为子体积,并且对于每个子体积,我将所有获得的矩阵相加,然后将它们除以得到的平均值(然后我对所有平均值进行相同的求和并除以数量子卷以获得完整卷的平均值。)
矩阵的类型为Matrix3d。 问题是,对于大多数总和(显然也是平均值),我得到的结果如下:
分析的元素:28215
元素总和:28215
子卷总和:
5143.76 | nan | -2778.05
5402.07 | 16011.9 | -INF
-2778.05 | -8716.86 | 7059.32
我这样总结:
for(int i = 0;i<(int)OuterVector.size();i++){
AverageProduct+=OuterVector[i];
}
由于矩阵的性质,我知道它们应该在对角线上对称,因此计算出其中一些矩阵的正确值。关于为什么其他人可能会失败的任何想法? (并且考虑到它总是与矩阵相同的两个位置给我nan和-inf)
答案 0 :(得分:3)
好的,使用你们在评论中给我的建议的混合,我尝试了几个随机修复,我解决了问题。
当我创建Eigen :: Matrix3d对象时,我没有初始化值,所以一旦我添加第一个OuterVector [i],那两个值就会变得狂野((0,1)正在进行到nan和(1,2)去了inf)。奇怪的是,它只发生在这两个特定的值上,并且每次都以相同的方式发生。
这样做(在初始化时)
Matrix3d AverageProduct << 0,0,0,0,0,0,0,0,0;
足以解决它。