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 }