cv::Mat GaborFeatures::detectImageFeatures(const std::string& filename) {
	cv::Mat img;
	cv::Mat tmp;
	cv::Mat histogram(1, orientationCount, CV_32FC1, 0.0f);

	img = loadImage(filename);

	cv::Mat maxVals(img.rows, img.cols, CV_32FC2, cv::Scalar(0, 0));

	int i = 0;
	for (float orientation = 0; orientation < M_PI; orientation += M_PI / orientationCount, i++) {
		energyGabor(img, tmp, orientation);
		//		histogram.at<cv::Scalar>(0, column) = cv::sum(tmp);
		for (int y = 0; y < img.rows; y++) {
			for (int x = 0; x < img.cols; x++) {
				if (tmp.at<float>(y, x) > maxVals.at<cv::Vec2f>(y, x)[0]) {
					maxVals.at<cv::Vec2f>(y, x)[0] = tmp.at<float>(y, x);
					maxVals.at<cv::Vec2f>(y, x)[1] = i;
				}
			}
		}
	}

	for (int y = 0; y < img.rows; y++) {
		for (int x = 0; x < img.cols; x++) {
			histogram.at<float>(0, (int) maxVals.at<cv::Vec2f>(y, x)[1]) += 1;
		}
	}

	return histogram;
}
Пример #2
0
void dataSummary(const char dataName[], int *nSamples, int *nAttributes)
  {
  int targetIndex;
  Array<int> attNValues(1), hasMissingValues(1), isDiscrete(1);
  Array<double>	maxVals(1), minVals(1);

  readDataInfo(dataName, nSamples, nAttributes, attNValues, hasMissingValues,
		isDiscrete, maxVals, minVals, &targetIndex);

  *nAttributes -= 1;		// exclude target attribute

  return;
  }
cv::Mat GaborFeatures::detectImageFeatures(unsigned int imgNumber, unsigned int imgLabel) {
	cv::Mat img;
	cv::Mat tmp;
	cv::Mat histogram(1, orientationCount, CV_32FC1, 0.0f);

	std::stringstream filename;

	if(imgLabel >= imageFilePaths.size()) {
		std::cerr << "Label out of range!" << std::endl;
		exit(EXIT_FAILURE);
	}

	filename << imageFilePaths[imgLabel] << "image_" << std::setw(4) << std::setfill('0') << imgNumber << ".jpg";

	img = loadImage(filename.str());

	cv::Mat maxVals(img.rows, img.cols, CV_32FC2, cv::Scalar(0, 0));

	int i = 0;
	for (float orientation = 0; orientation < M_PI; orientation += M_PI / orientationCount, i++) {
		energyGabor(img, tmp, orientation);
		//		histogram.at<cv::Scalar>(0, column) = cv::sum(tmp);
		for (int y = 0; y < img.rows; y++) {
			for (int x = 0; x < img.cols; x++) {
				if (tmp.at<float>(y, x) > maxVals.at<cv::Vec2f>(y, x)[0]) {
					maxVals.at<cv::Vec2f>(y, x)[0] = tmp.at<float>(y, x);
					maxVals.at<cv::Vec2f>(y, x)[1] = i;
				}
			}
		}
	}

	for (int y = 0; y < img.rows; y++) {
		for (int x = 0; x < img.cols; x++) {
			histogram.at<float>(0, (int) maxVals.at<cv::Vec2f>(y, x)[1]) += 1;
		}
	}

	return histogram;
}
Пример #4
0
// discardMissing means any data with 1 or more missing attributes will be
// discarded.  Note that this may make the dataset returned inconsistent
// with what dataSummary() returns.
Data* new_readData(const char dataName[], int discardMissing)
  {
  Data *data;
  int nSamples, nAttributes, targetIndex;
  Array<int> attNValues(1), hasMissingValues(1), isDiscrete(1);
  Array<double>	maxVals(1), minVals(1);

  readDataInfo(dataName, &nSamples, &nAttributes, attNValues, hasMissingValues,
		isDiscrete, maxVals, minVals, &targetIndex);

  // nAttributes counts target as an attribute as well.
  // for class Data, we'll need to subtract 1 back off for data->nAttributes;

  // allocate space for and set up internals of data
  data = new Data(nSamples, nAttributes-1);
			// nAttributes-1 because class Data does not count
			// target as an attribute, whereas our file format does.
  assert(data != NULL);

  int dex=0;
  for (int att=0; att < nAttributes; att++)
    {
    if (att == targetIndex)
	{
	data->targetIsContinuous = !isDiscrete[att];
	assert(!hasMissingValues[att]);		// missing values not allowed in target
	// printf("[%d]", hasMissingValues[att]);
	data->targetNValues = attNValues[att];
	}
    else
	{
	data->attIsContinuous[dex] = !isDiscrete[att];
	data->hasMissingValues[dex] = hasMissingValues[att];
	// printf("(%d)", hasMissingValues[att]);
	data->attNValues[dex] = attNValues[att];
	dex++;
	}
    }
  assert(dex == nAttributes-1);

  // start reading the data
  char datFilename[4096];
  strcpy(datFilename, DATADIR); strcat(datFilename, dataName); 	
  strcat(datFilename, "/"); strcat(datFilename, dataName); 	
  strcat(datFilename, ".dat"); 		// ".../data/foo/foo.dat"

  FILE *fp = safe_fopen(datFilename, "rt");

  int sampleDex=0, nHasMissingAtt=0;
  for (int ctr=0; ctr < nSamples; ctr++)
    {
    int hasMissingAtt = readSample(fp, data, nAttributes, targetIndex, hasMissingValues, sampleDex);
    if (discardMissing && hasMissingAtt)
      nHasMissingAtt++;
    else
      sampleDex++;
    }
  fclose(fp);

  // If some samples were discarded, then shrink the datastructures to reflect 
  // that we didn't actually get nSamples examples read in.
  if (!discardMissing)
    assert(nHasMissingAtt==0 && sampleDex==nSamples);
  if (discardMissing)
    {
    data->nSamples = nSamples - nHasMissingAtt;
    if (data->nSamples == 0)
      error("new_readData: After discarding missing, have no data left!");
    for (int dex=0; dex < data->nAttributes; dex++)
      data->hasMissingValues[dex] = 0;

    Matrix temp(data->nSamples, data->nAttributes);
    for (int i=0; i < data->nSamples; i++) for (int j=0; j < data->nAttributes; j++)
      temp[i][j] = data->dataSample[i][j];

    data->dataSample.resize(data->nSamples, data->nAttributes);
    data->dataSample = temp;
    }

  data->shuffleSample();

  assert(data->nAttributes == nAttributes-1);

  return data;
  }