Esempio n. 1
0
void resetImageData(SPImageData image){
	if (image != NULL){
		if (image->featuresArray != NULL){
			freeFeatures(image->featuresArray, image->numOfFeatures);
			free(image->featuresArray);
			image->featuresArray = NULL;
		}
		image->numOfFeatures = 0;
	}
	else{
		spLoggerSafePrintWarning(WARNING_IMAGES_DATA_NULL_ON_RESET,
				__FILE__,__FUNCTION__, __LINE__);
	}
}
Esempio n. 2
0
void freeImageData(SPImageData imageData, bool suppressFeaturesArrayWarning, bool freeInternalFeatures){
	if (imageData != NULL){
		if (imageData->featuresArray != NULL){
			if (freeInternalFeatures)
				freeFeatures(imageData->featuresArray, imageData->numOfFeatures);
			free(imageData->featuresArray);
			imageData->featuresArray = NULL;
		}
		else if (!suppressFeaturesArrayWarning){
				spLoggerSafePrintWarning(WARNING_IMAGE_DATA_POINTS_ARRAY_NULL,
						__FILE__,__FUNCTION__, __LINE__);
		}
		free(imageData);
		imageData = NULL;
	}
	else{
		spLoggerSafePrintWarning(WARNING_IMAGE_DATA_NULL,
				__FILE__,__FUNCTION__, __LINE__);
	}
}
Esempio n. 3
0
Features word_features(enum part_of_speech pos, Track tr1, Track tr2, Track tr3, int lookahead, int raw,
		       void *medoids, char **objects, int ol, int discard_bad_features,
		       Flow **flows_movie, int fl_tt, Real scale, FeatureMedoid **fms, int mn){
  /* For shorter code */
#define ONE_TRACK_FEATURES(type, tr) \
  one_track_features(type, tr, lookahead, one_track_raw, medoids, objects, ol, \
		     discard_bad_features, flows_movie, fl_tt, scale, fms, mn)

  Features f = NULL, one_track_f1 = NULL, one_track_f2 = NULL;
  int i, t, tt;
  int one_track_raw = raw;
  Track tr, tr_;
  enum one_track_feature_type velocity_types[] = {FLOW_MAGNITUDE_IN_BOX,
						  FLOW_ORIENTATION_IN_BOX};
  /* At least one track is valid */
  assert(tr1);

  tt = tr1->tt;
  if (tr2) assert(tt == tr2->tt);
  if (tr3) assert(tt == tr3->tt);

  assert(medoids == NULL);

  if (raw == 0) assert(fms);

  /* If discard_bad_features, we expect the feature length returned to be tt-(lookahead-1) */
  tt = (discard_bad_features == 1)? tt-(lookahead-1): tt;
  switch(pos){
  case NOUN:
    /* Feature for a noun is the model name
       Only the first track should be valid */
    assert(tr2 == NULL && tr3 == NULL);
    one_track_raw = raw;
    f = ONE_TRACK_FEATURES(MODEL_NAME, tr1);
    break;
  case VERB:
    /* At least two tracks*/
    assert(tr2);
    if (tr3 == NULL){
      /* Features for a verb with two participants are:
       1. agent velocity magnitude
       2. agent velocity orientation
       3. patient velocity magnitude
       4. patient velocity orientation
       5. agent-patient-x-distance
       6. agent-patient-relative-box-area
      */
      f = allocFeatures(tt, 6);
      // 1 - 4
      for (i = 0; i < 4; i ++){
	if (i < 2) tr = tr1;
	else tr = tr2;
	one_track_raw = raw;
	one_track_f1 = ONE_TRACK_FEATURES(velocity_types[i % 2], tr);
	for (t = 0; t < tt; t ++)
	  f->v[t][i] = one_track_f1->v[t][0];
	freeFeatures(one_track_f1);
      }
      // 5
      one_track_raw = 1;
      one_track_f1 = ONE_TRACK_FEATURES(POSITION_X, tr1);
      one_track_f2 = ONE_TRACK_FEATURES(POSITION_X, tr2);
      for (t = 0; t < tt; t ++){
	f->v[t][4] = DISTANCE_2D(one_track_f1->v[t][0], 0, one_track_f2->v[t][0], 0);
	if (raw == 0)
	  f->v[t][4] = quantize(f->v[t][4], "x_distance", fms, mn);
      }
      freeFeatures(one_track_f1);
      freeFeatures(one_track_f2);
      // 6
      one_track_raw = 1;
      one_track_f1 = ONE_TRACK_FEATURES(AREA, tr1);
      one_track_f2 = ONE_TRACK_FEATURES(AREA, tr2);
      for (t = 0; t < tt; t ++){
	f->v[t][5] = one_track_f1->v[t][0] / one_track_f2->v[t][0];
	if (raw == 0)
	  f->v[t][5] = 1 - quantize(f->v[t][5], "box_ratio", fms, mn);
      }
      freeFeatures(one_track_f1);
      freeFeatures(one_track_f2);
    }
    else{
      /* Features for a verb with three participants are:
       1. agent velocity magnitude
       2. agent velocity orientation
       3. patient velocity magnitude
       4. patient velocity orientation
       5. goal velocity magnitude
       6. goal velocity orientation
       7. agent-patient-x-distance
       8. agent-patient-y-distance
       9. agent-patient-relative-box-area
       10. agent-patient-overlap
       11. agent-goal-x-distance
       12. agent-goal-y-distance
       13. agent-goal-relative-box-area
       14. agent-goal-overlap
       15. patient-goal-x-distance
       16. patient-goal-y-distance
       17. patient-goal-relative-box-area
       18. patient-goal-overlap
      */
      f = allocFeatures(tt, 18);
      // 1 - 6
      for (i = 0; i < 6; i ++){
	if (i < 2) tr = tr1;
	else if (i < 4) tr = tr2;
	else tr = tr3;
	one_track_raw = raw;
	one_track_f1 = ONE_TRACK_FEATURES(velocity_types[i % 2], tr);
	for (t = 0; t < tt; t ++)
	  f->v[t][i] = one_track_f1->v[t][0];
	freeFeatures(one_track_f1);
      }
      // 7 - 18
      for (i = 6; i < 18; i += 4){
	if (i < 10){
	  tr = tr1;
	  tr_ = tr2;
	}
	else if (i < 14){
	  tr = tr1;
	  tr_ = tr3;
	}
	else{
	  tr = tr2;
	  tr_ = tr3;
	}
	/* x-distance */
	one_track_raw = 1;
	one_track_f1 = ONE_TRACK_FEATURES(POSITION_X, tr);
	one_track_f2 = ONE_TRACK_FEATURES(POSITION_X, tr_);
	for (t = 0; t < tt; t ++){
	  f->v[t][i] = DISTANCE_2D(one_track_f1->v[t][0], 0, one_track_f2->v[t][0], 0);
	  if (raw == 0)
	    f->v[t][i] = quantize(f->v[t][i], "x_distance", fms, mn);
	}
	freeFeatures(one_track_f1);
	freeFeatures(one_track_f2);
	/* y-distance */
	one_track_raw = 1;
	one_track_f1 = ONE_TRACK_FEATURES(POSITION_Y, tr);
	one_track_f2 = ONE_TRACK_FEATURES(POSITION_Y, tr_);
	for (t = 0; t < tt; t ++){
	  f->v[t][i+1] = DISTANCE_2D(0, one_track_f1->v[t][0], 0, one_track_f2->v[t][0]);
	  if (raw == 0)
	    f->v[t][i+1] = quantize(f->v[t][i+1], "y_distance", fms, mn);
	}
	freeFeatures(one_track_f1);
	freeFeatures(one_track_f2);
	/* relative-box-area */
	one_track_raw = 1;
	one_track_f1 = ONE_TRACK_FEATURES(AREA, tr);
	one_track_f2 = ONE_TRACK_FEATURES(AREA, tr_);
	for (t = 0; t < tt; t ++){
	  f->v[t][i+2] = one_track_f1->v[t][0] / one_track_f2->v[t][0];
	  if (raw == 0)
	    f->v[t][i+2] = 1 - quantize(f->v[t][i+2], "box_ratio", fms, mn);
	}
	freeFeatures(one_track_f1);
	freeFeatures(one_track_f2);
	/* overlap */
	for (t = 0; t < tt; t ++){
	  f->v[t][i+3] = box_overlap_percentage(tr->ds[t], tr_->ds[t]);
	  if (raw == 0)
	    f->v[t][i+3] = quantize(f->v[t][i+3], "overlap", fms, mn);
	}
      }
    }
    break;
  case ADVERB:
    /* Features for an adverb is:
       agent velocity magnitude
     */
    assert(tr2 == NULL && tr3 == NULL);
    one_track_raw = raw;
    f = ONE_TRACK_FEATURES(FLOW_MAGNITUDE_IN_BOX, tr1);
    break;
  case ADJECTIVE:
    /* Feature for an adjective is the color
       Only the first track should be valid */
    assert(tr2 == NULL && tr3 == NULL);
    one_track_raw = raw;
    f = ONE_TRACK_FEATURES(MODEL_COLOR, tr1);
    break;
  case PREPOSITION:
    /* Feature for a preposition is the relative position of two objects:*/
    assert(tr2 && tr3 == NULL);
    f = allocFeatures(tt, 1);
    one_track_raw = 1;
    one_track_f1 = ONE_TRACK_FEATURES(POSITION_X, tr1);
    one_track_f2 = ONE_TRACK_FEATURES(POSITION_X, tr2);
    for (t = 0; t < tt; t ++){
      if (one_track_f1->v[t][0] < (one_track_f2->v[t][0] - 50))
	f->v[t][0] = 0;
      else if (one_track_f1->v[t][0] > (one_track_f2->v[t][0] + 50))
	f->v[t][0] = 1;
      else
	f->v[t][0] = 2;
    }
    freeFeatures(one_track_f1);
    freeFeatures(one_track_f2);
    break;
  case MOTION_PREPOSITION:
    /* Features for a motion_preposition are:
       1. agent velocity
       2. agent and location distance
    */
    assert(tr2 && tr3 == NULL);
    f = allocFeatures(tt, 2);
    one_track_raw = raw;
    one_track_f1 = ONE_TRACK_FEATURES(FLOW_MAGNITUDE_IN_BOX, tr1);
    for (t = 0; t < tt; t ++)
      f->v[t][0] = one_track_f1->v[t][0];
    freeFeatures(one_track_f1);
    one_track_raw = 1;
    one_track_f1 = ONE_TRACK_FEATURES(POSITION_X, tr1);
    one_track_f2 = ONE_TRACK_FEATURES(POSITION_X, tr2);
    for (t = 0; t < tt; t ++){
      f->v[t][1] = DISTANCE_2D(one_track_f1->v[t][0], 0, one_track_f2->v[t][0], 0);
      if (raw == 0)
	f->v[t][1] = quantize(f->v[t][1], "x_distance", fms, mn);
    }
    freeFeatures(one_track_f1);
    freeFeatures(one_track_f2);
    break;
  default: panic("word_features: part of speech %d unrecognized", pos);
  }
  return f;
}