/* Two images overlap in an area ... make a mask the size of the area, which * has 255 for every pixel where both images are non-zero. */ static int make_overlap_mask( IMAGE *ref, IMAGE *sec, IMAGE *mask, Rect *rarea, Rect *sarea ) { IMAGE *t[6]; if( im_open_local_array( mask, t, 6, "mytemps", "p" ) || extract_rect( ref, t[0], rarea ) || extract_rect( sec, t[1], sarea ) || im_extract_band( t[0], t[2], 0 ) || im_extract_band( t[1], t[3], 0 ) || im_notequalconst( t[2], t[4], 0.0 ) || im_notequalconst( t[3], t[5], 0.0 ) || im_andimage( t[4], t[5], mask ) ) return( -1 ); return( 0 ); }
void jsk_pcl_ros::PointcloudScreenpoint::callback_point (const sensor_msgs::PointCloud2ConstPtr& points_ptr, const geometry_msgs::PointStampedConstPtr& pt_ptr) { point_cb (pt_ptr); if (publish_points_) { int st_x = pt_ptr->point.x - crop_size_; int st_y = pt_ptr->point.y - crop_size_; int ed_x = pt_ptr->point.x + crop_size_; int ed_y = pt_ptr->point.y + crop_size_; extract_rect (points_ptr, st_x, st_y, ed_x, ed_y); } }
void jsk_pcl_ros::PointcloudScreenpoint::callback_rect(const sensor_msgs::PointCloud2ConstPtr& points_ptr, const geometry_msgs::PolygonStampedConstPtr& array_ptr) { if (array_ptr->polygon.points.size() > 1) { int st_x = array_ptr->polygon.points[0].x; int st_y = array_ptr->polygon.points[0].y; int ed_x = array_ptr->polygon.points[1].x; int ed_y = array_ptr->polygon.points[1].y; rect_cb (array_ptr); if (publish_points_) { extract_rect (points_ptr, st_x, st_y, ed_x, ed_y); } } }
/* Find stats on an area of an IMAGE ... consider only pixels for which the * mask is true. */ static DOUBLEMASK * find_image_stats( IMAGE *in, IMAGE *mask, Rect *area ) { DOUBLEMASK *stats; IMAGE *t[4]; gint64 count; /* Extract area, build black image, mask out pixels we want. */ if( im_open_local_array( in, t, 4, "find_image_stats", "p" ) || extract_rect( in, t[0], area ) || im_black( t[1], t[0]->Xsize, t[0]->Ysize, t[0]->Bands ) || im_clip2fmt( t[1], t[2], t[0]->BandFmt ) || im_ifthenelse( mask, t[0], t[2], t[3] ) ) return( NULL ); /* Get stats from masked image. */ if( !(stats = local_mask( in, im_stats( t[3] ) )) ) return( NULL ); /* Number of non-zero pixels in mask. */ if( count_nonzero( mask, &count ) ) return( NULL ); /* And scale masked average to match. */ stats->coeff[4] *= (double) count / ((double) mask->Xsize * mask->Ysize); /* Yuk! Zap the deviation column with the pixel count. Used later to * determine if this is likely to be a significant overlap. */ stats->coeff[5] = count; #ifdef DEBUG if( count == 0 ) im_warn( "global_balance", _( "empty overlap!" ) ); #endif /*DEBUG*/ return( stats ); }