示例#1
0
//void matchBp( bool * pr, const bool * pa, const bool * pb, int W, int H, double max_r ) {
//	using namespace EvalPrivate;
//	matchAny( pr, pa, pb, W, H, max_r );
//	float r2 = max_r*max_r*(W*W+H*H);
//    const int rd = (int) ceil(sqrt(r2));
//	// Compute the bipartite graph size
//	std::vector<int> ia(W*H,-1), ib(W*H,-1);
//	int ca=0,cb=0;
//	for( int j=0; j<H; j++ )
//		for( int i=0; i<W; i++ ) {
//			if( pr[j*W+i+0] )
//				ia[j*W+i] = ca++;
//			if( pr[j*W+i+W*H] )
//				ib[j*W+i] = cb++;
//		}
//
//	std::vector< BipartiteMatch::Edge > edges;
//	for( int j=0; j<H; j++ )
//		for( int i=0; i<W; i++ )
//			if( ia[j*W+i]>=0 )
//				for( int jj=std::max(j-rd,0); jj<=std::min(j+rd,H-1); jj++ )
//					for( int ii=std::max(i-rd,0); ii<=std::min(i+rd,W-1); ii++ )
//						if( (i-ii)*(i-ii)+(j-jj)*(j-jj) <= r2 )
//							if( ib[jj*W+ii]>=0 )
//								edges.push_back( BipartiteMatch::Edge(ia[j*W+i],ib[jj*W+ii]) );
//
//	BipartiteMatch match( ca, cb, edges );
//	for( int j=0; j<H; j++ )
//		for( int i=0; i<W; i++ ) {
//			if( ia[j*W+i]>=0 )
//				pr[j*W+i+0]   = (match.match_a[ ia[j*W+i] ]>=0);
//			if( ib[j*W+i]>=0 )
//				pr[j*W+i+W*H] = (match.match_b[ ib[j*W+i] ]>=0);
//		}
//}
//np::ndarray matchBp(const np::ndarray & a, const np::ndarray & b, double max_r ) {
//	checkArray( a, bool, 2, 2, true );
//	checkArray( b, bool, 2, 2, true );
//	int H = a.shape(0), W = a.shape(1);
//	if( H != b.shape(0) || W != b.shape(1) )
//		throw std::invalid_argument( "a and b need to have the same shape!\n" );
//	np::ndarray r = np::zeros( make_tuple(2,H,W), a.get_dtype() );
//	matchBp( (bool*)r.get_data(), (const bool*)a.get_data(), (const bool*)b.get_data(), W, H, max_r );
//	return r;
//}
Vector4i evalBoundaryBinary( const RMatrixXb & d, const std::vector<RMatrixXb> & bnd, double max_r, const RMatrixXb & mask ) {
	const int W = d.cols(), H = d.rows(), D = bnd.size();
	eassert( mask.cols() == W && mask.rows() == H );

	int sum_r=0, cnt_r=0;
	RMatrixXb ma, mb, acc = RMatrixXb::Zero(H,W);
	for( int k=0; k<D; k++ ) {
		eassert( W == bnd[k].cols() && H == bnd[k].rows() );

		std::tie(ma,mb) = matchBp( d, bnd[k], max_r );

		acc = acc.array() || (ma.array() && mask.array());
		sum_r += (bnd[k].array() && mask.array()).cast<int>().sum();
		cnt_r += (mb.array() && mask.array()).cast<int>().sum();
	}
	int sum_p = (d.array() && mask.array()).cast<int>().sum();
	int cnt_p = (acc.array() && mask.array()).cast<int>().sum();
	return Vector4i(cnt_r,sum_r,cnt_p,sum_p);
}
TEST(Vision, load_default_color_config) {
    RMatrixXb config = load_single_color_config(default_yellow_config, Vision::COLOR_MASK_TYPE::YELLOW);
    ASSERT_TRUE((config.array() > 0).any());
    config *=4;
    write_png_file("/tmp/conf.png",config.cast<uint8_t>());
}