www.pudn.com > firev0.01.rar > featureextraction.cpp


/*
This file is part of the FIRE -- Flexible Image Retrieval System

FIRE is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

FIRE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with FIRE; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
#include 
#include 
#include 

#include "featureextraction.hpp"
#include "invariantfeature.hpp"
#include "diag.hpp"
#include "rgbimage.hpp"
#include "interpolrgbimg.hpp"
#include "mdhistogram.hpp"

#include "featurefunction.hpp"
#include "x01x20.hpp"
#include "x01x100.hpp"
#include "x01minusx100.hpp"
#include "xxyxxy.hpp"
#include "xxyxxyxxy.hpp"
#include "xxyminusxxy.hpp"
#include "hsvxxyxxy.hpp"

using namespace img;
using namespace diag;
using namespace std;

const MDHistogram < ColorPixel >  featureextractionRGB(const RGBImage image,  
                                                               const string &featureFunctionName, 
                                                               const int steps,
                                                               const int samples,
                                                               bool spread) {
  DBG(DBG_VERBOSE) << "Starting feature extraction for given image function " << featureFunctionName <<"."<< endl;
  FeatureFunction *featureFunction=NULL;

  if(featureFunctionName == "X01X20") {
    featureFunction=new X01X20();
  } else if(featureFunctionName=="X01X100") {
    featureFunction=new X01X100();
  } else if(featureFunctionName=="X01-X100") {
    featureFunction=new X01minusX100();
  } else if(0==featureFunctionName.find("hsvparse*:")) {
    featureFunction=new HSVXxyXxy(featureFunctionName);
  } else if(0==featureFunctionName.find("parse*:")) {
    featureFunction=new XxyXxy(featureFunctionName);
  } else if(0==featureFunctionName.find("parse3x:")) {
    featureFunction=new XxyXxyXxy(featureFunctionName);
  } else if(0==featureFunctionName.find("parse-:")) {
    featureFunction=new XxyminusXxy(featureFunctionName);
  } else {
    ERR << "Unkown feature function: " << featureFunctionName << endl;
  }

  InterpolRGBImage interpolated(image);
  
  //get feature
  MDHistogram< ColorPixel > mdhisto=caluclateFeatureMDHistogram(interpolated,36,featureFunction,steps,samples,spread);
  
  //save feature
  DBG(DBG_VERBOSE) << "Ready with feature extraction for given image."<< endl;
  return mdhisto;
  //evtl. return feature
}



void featureextractionRGB(const string& filename,
                          const string &suffix, 
                          const string &featureFunctionName, 
                          const int steps,
                          const int samples,
                          const double scalingStart,
                          const double scalingMulti,
                          const double scalingStop,
                          const int,
                          const string &cmdline
                          ) {
  DBG(DBG_VERBOSE) << "Starting feature extraction for '"<< filename <<"' with function " << featureFunctionName <<"."<< endl;
  FeatureFunction *featureFunction=NULL;

  if(featureFunctionName == "X01X20") {
    featureFunction=new X01X20();
  } else if(featureFunctionName=="X01X100") {
    featureFunction=new X01X100();
  } else if(featureFunctionName=="X01-X100") {
    featureFunction=new X01minusX100();
  } else if(0==featureFunctionName.find("hsvparse*:")) {
    featureFunction=new HSVXxyXxy(featureFunctionName);
  } else if(0==featureFunctionName.find("parse*:")) {
    featureFunction=new XxyXxy(featureFunctionName);
  } else if(0==featureFunctionName.find("parse-:")) {
    featureFunction=new XxyminusXxy(featureFunctionName);
  } else if(0==featureFunctionName.find("parse3x:")) {
    featureFunction=new XxyXxyXxy(featureFunctionName);
  } else {
    ERR << "Unkown feature function: " << featureFunctionName << endl;
  }

  RGBImage image;
  
  image.load(filename);
  
  InterpolRGBImage interpolated(image);
  
  //get feature
  MDHistogram< ColorPixel > mdhisto=caluclateFeatureMDHistogram(interpolated,36,featureFunction,steps,samples,false,scalingStart,scalingMulti,scalingStop);
  
  //save feature
  mdhisto.save(filename+suffix,cmdline);
  
  DBG(DBG_VERBOSE) << "Ready with feature extraction for '"<< filename <<"'."<< endl;
  //evtl. return feature
}

void featureextractionGREY(const string &  filename,
                           const string &suffix,
                           const string &featureFunctionName, 
                           const int steps,
                           const int samples,
                           const double scalingStart,
                           const double scalingMulti,
                           const double scalingStop,
                           const int,
                           const string &cmdline
                           ) {
  DBG(DBG_VERBOSE) << "Starting feature extraction for '"<< filename <<"'."<< endl;
  
  FeatureFunction *featureFunction=NULL;
  if(featureFunctionName == "X01X20") {
    featureFunction=new X01X20();
  } else if(featureFunctionName=="X01X100") {
    featureFunction=new X01X100();
  } else if(0==featureFunctionName.find("hsvparse*:")) {
    featureFunction=new HSVXxyXxy(featureFunctionName);
  } else if(featureFunctionName=="X01-X100") {
    featureFunction=new X01minusX100();
  } else if(0==featureFunctionName.find("parse*:")) {
    featureFunction=new XxyXxy(featureFunctionName);
  } else if(0==featureFunctionName.find("parse3x:")) {
    featureFunction=new XxyXxyXxy(featureFunctionName);
  } else {
    ERR << "Unkown feature function: " << featureFunctionName << endl;
  }
  
  BaseImage image;
  
  image.load(filename);
  
  //make interpol image
  InterpolBaseImage interpolated(image);
  
  //get feature
  Histogram histo=caluclateFeatureHistogram(interpolated,36,featureFunction,steps,samples,scalingStart,scalingMulti,scalingStop);
  
  //save feature
  
  histo.save(filename+suffix,cmdline);
  
  DBG(DBG_VERBOSE) << "Ready with feature extraction for '"<< filename <<"'."<< endl;
  //evtl. return feature
}