/////////////////// ///// Debug ///// /////////////////// VectorXf DenseCRF::unaryEnergy(const VectorXs & l) { assert( l.cols() == N_ ); VectorXf r( N_ ); r.fill(0.f); if( unary_ ) { MatrixXf unary = unary_->get(); for( int i=0; i<N_; i++ ) if ( 0 <= l[i] && l[i] < M_ ) r[i] = unary( l[i], i ); } return r; }
VectorXf DenseCRF::pairwiseEnergy(const VectorXs & l, int term) { assert( l.cols() == N_ ); VectorXf r( N_ ); r.fill(0.f); if( term == -1 ) { for( unsigned int i=0; i<pairwise_.size(); i++ ) r += pairwiseEnergy( l, i ); return r; } MatrixXf Q( M_, N_ ); // Build the current belief [binary assignment] for( int i=0; i<N_; i++ ) for( int j=0; j<M_; j++ ) Q(j,i) = (l[i] == j); pairwise_[ term ]->apply( Q, Q ); for( int i=0; i<N_; i++ ) if ( 0 <= l[i] && l[i] < M_ ) r[i] =-0.5*Q(l[i],i ); else r[i] = 0; return r; }