Beispiel #1
0
struct expr *prefix(char *expect)
{
  struct expr *res = NULL;
  int toktype = tok->type;
  switch (toktype)
  {
    case IDENTIFIER:
      return identexpr(strdup(tok->val));
    case LPAREN:
      res = expression(0);
      eat(RPAREN);
      return res;
    case PLUS: case MINUS: case NOT:
      return unopexpr(toktype, expression(lbp(toktype) - 1));
    case REAL:
      return expr_from_val(realval(atof(tok->val)));
    case INT:
      return expr_from_val(intval(atoi(tok->val)));
    case CHAR:
      return expr_from_val(charval(tok->val[1]));
    case STRING:
      return expr_from_val(strval(strdup(tok->val)));
    case TRUE:
      return expr_from_val(boolval(1));
    case FALSE:
      return expr_from_val(boolval(0));
    case NULLKW:
      return nullexpr();
    default:
      syntaxerror("expected %s, not %s", expect, tok->val);
      return NULL;
  }
}
Beispiel #2
0
 cv::Mat getLBPHist()
 {
   // Calc LBP
   cv::Mat lbp_image = lbp(face);
   // Spatial histogram
   return spatialHistogram(lbp_image, 
     static_cast<int>(std::pow(2.0, static_cast<double>(LBP_NEIGHBORS))),
     LBP_GRID_X, LBP_GRID_Y);
 }
Beispiel #3
0
struct expr *infix(struct expr *left, char *expect)
{
  exprlist_t args;
  int toktype = tok->type;
  char *ident;
  switch (toktype)
  {
    case PLUS: case MINUS: case STAR: case SLASH: case OR: case XOR:
    case LT: case LE: case GT: case GE: case NEQ: case EQ: case AND:
      return binopexpr(left, toktype, expression(lbp(toktype)));
    case LPAREN:
      if (left->exprtype != identtype)
        syntaxerror("calling non-callable expression");
      args = empty_exprlist();
      if (lookahead[0]->type != COMMA && lookahead[0]->type != RPAREN)
        list_push_back(args, expression(0));
      while (lookahead[0]->type == COMMA)
      {
        eat(COMMA);
        list_push_back(args, expression(0));
      }
      eat(RPAREN);
      ident = strdup(left->val.ident);
      left->type = NULL; // To prevent segfaults when freeing the expr
      free_expression(left);
      return funcallexpr(ident, args);
    case LSQBRACKET:
      args = empty_exprlist();
      list_push_back(args, expression(0));
      while (lookahead[0]->type == COMMA)
      {
        eat(COMMA);
        list_push_back(args, expression(0));
      }
      eat(RSQBRACKET);
      return arrayexpr(left, args);
    case DOT:
      eat(IDENTIFIER);
      char *ident = strdup(tok->val);
      return record_access(left, ident);
    case DEREF:
      return make_deref(left);
    default:
      syntaxerror("expected %s, not %s", expect, tok->val);
      next();
      switch (tok->type)
      {
        case ENDOFFILE: return expr_from_val(0);
        default: return infix(left, "expression");
      }
  }
}
Beispiel #4
0
struct expr *expression(int rbp)
{
  next();
  struct expr *left = prefix("expression");
  struct pos pos;
  left->pos = *tok->pos;
  while (rbp < lbp(lookahead[0]->type))
  {
    next();
    pos = left->pos;
    left = infix(left, "expression");
    left->pos.line = pos.line;
    left->pos.charstart = pos.charstart;
    left->pos.len = tok->pos->charstart + tok->pos->len - pos.charstart;
  }
  return left;
}
Beispiel #5
0
cv::Mat LBP(cv::Mat input){
	cv::Mat lbp((input.rows - 2), (input.cols - 2), CV_8U);
	int center;
	int BIT[8];
	for (int m = 0; m<(input.rows - 2); m++){
		for (int n = 0; n<(input.cols - 2); n++){
			center = (input.at<uchar>(m + 1, n + 1));
			if (input.at<uchar>(m, n)>center)
				BIT[0] = 1;
			else
				BIT[0] = 0;
			if (input.at<uchar>(m, n + 1) >= center)
				BIT[1] = 1;
			else
				BIT[1] = 0;
			if (input.at<uchar>(m, n + 2) >= center)
				BIT[2] = 1;
			else
				BIT[2] = 0;
			if (input.at<uchar>(m + 1, n + 2) >= center)
				BIT[3] = 1;
			else
				BIT[3] = 0;
			if (input.at<uchar>(m + 2, n + 2) >= center)
				BIT[4] = 1;
			else
				BIT[4] = 0;
			if (input.at<uchar>(m + 2, n + 1) >= center)
				BIT[5] = 1;
			else
				BIT[5] = 0;
			if (input.at<uchar>(m + 2, n) >= center)
				BIT[6] = 1;
			else
				BIT[6] = 0;
			if (input.at<uchar>(m + 1, n) >= center)
				BIT[7] = 1;
			else
				BIT[7] = 0;
			lbp.at<uchar>(m, n) = (int)(BIT[7] + 2 * BIT[6] + 4 * BIT[5] + 8 * BIT[4] + 16 * BIT[3] + 32 * BIT[2] + 64 * BIT[1] + 128 * BIT[0]);
		}
	}
	return lbp;
}
Beispiel #6
0
 cv::Mat getLBP()
 {
   return lbp(face);
 }