void MaxProdBP::setData(CostVal* data) { int i; int j; m_D = data; m_ExpData = new FloatType[m_nPixels * m_nLabels]; // MEMORY LEAK? where does this ever get deleted?? if(!m_ExpData) { exit(0); } m_exp_scale = 1;//FLOATTYPE(cmax)*4.0; FloatType *cData = m_ExpData; for ( i= 0; i < m_nPixels; i++) { nodeArray[i].localEv = cData; for( j = 0; j < m_nLabels; j++) { *cData = (float)m_D(i,j); cData++; } } }
ZSparseMatrix Assembler2D::getStrainStressMatrix() { typedef Eigen::Triplet<double> T; std::vector<T> triplets; for (size_t i=0; i<m_mesh->getNbrElements(); i++) { for (size_t j=0; j<3; j++) { for (size_t k=0; k<3; k++) { if (m_D(j,k) != 0) { triplets.push_back(T(i*3+j, i*3+k, m_D(j,k))); } } } } Eigen::SparseMatrix<double> D = Eigen::SparseMatrix<double>(3*m_mesh->getNbrElements(), 3*m_mesh->getNbrElements()); D.setFromTriplets(triplets.begin(), triplets.end()); return ZSparseMatrix(D); }
MRF::EnergyVal MaxProdBP::dataEnergy() { EnergyVal eng = (EnergyVal) 0; if ( m_dataType == ARRAY) { for ( int i = 0; i < m_nPixels; i++ ) eng = eng + m_D(i,m_answer[i]); } else { for ( int i = 0; i < m_nPixels; i++ ) eng = eng + m_dataFn(i,m_answer[i]); } return(eng); }