diff options
Diffstat (limited to 'src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/l7/L7ShapeFeatureExtractor.cpp')
-rw-r--r-- | src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/l7/L7ShapeFeatureExtractor.cpp | 587 |
1 files changed, 0 insertions, 587 deletions
diff --git a/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/l7/L7ShapeFeatureExtractor.cpp b/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/l7/L7ShapeFeatureExtractor.cpp deleted file mode 100644 index 19e6a9c1..00000000 --- a/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/l7/L7ShapeFeatureExtractor.cpp +++ /dev/null @@ -1,587 +0,0 @@ -/***************************************************************************************** -* Copyright (c) 2006 Hewlett-Packard Development Company, L.P. -* Permission is hereby granted, free of charge, to any person obtaining a copy of -* this software and associated documentation files (the "Software"), to deal in -* the Software without restriction, including without limitation the rights to use, -* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -* Software, and to permit persons to whom the Software is furnished to do so, -* subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF -* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*****************************************************************************************/ - -/************************************************************************ - * SVN MACROS - * - * $LastChangedDate: 2008-02-20 10:03:51 +0530 (Wed, 20 Feb 2008) $ - * $Revision: 423 $ - * $Author: sharmnid $ - * - ************************************************************************/ -/************************************************************************ - * FILE DESCR: Implementation of RunShaperec tool - * - * CONTENTS: - * extractFeatures - * getShapeFeatureInstance - * clearFeatureVector - * computeDerivativeDenominator - * computeDerivative - * - * AUTHOR: Naveen Sundar G. - * - * DATE: August 30, 2005 - * CHANGE HISTORY: - * Author Date Description of change - ************************************************************************/ - - -#include "L7ShapeFeatureExtractor.h" -#include "L7ShapeFeature.h" -#include "LTKTraceGroup.h" -#include "LTKTrace.h" -#include "LTKChannel.h" -#include "LTKTraceFormat.h" -#include "LTKConfigFileReader.h" -#include "LTKMacros.h" -#include "LTKException.h" -#include "LTKErrors.h" -#include "LTKLoggerUtil.h" - -/****************************************************************************** -* AUTHOR : Dinesh M -* DATE : 1-Oct-2007 -* NAME : L7ShapeFeatureExtractor -* DESCRIPTION : parameterized constructor -* ARGUMENTS : -* RETURNS : -* NOTES : -* CHANGE HISTROY -* Author Date -*******************************************************************************/ -L7ShapeFeatureExtractor::L7ShapeFeatureExtractor(const LTKControlInfo& controlInfo): -m_radius(FEATEXTR_L7_DEF_RADIUS) -{ - string cfgFilePath = ""; - - // Config file - if ( ! ((controlInfo.lipiRoot).empty()) && - ! ((controlInfo.projectName).empty()) && - ! ((controlInfo.profileName).empty()) && - ! ((controlInfo.cfgFileName).empty())) - { - // construct the cfg path using project and profile name - cfgFilePath = (controlInfo.lipiRoot) + PROJECTS_PATH_STRING + - (controlInfo.projectName) + PROFILE_PATH_STRING + - (controlInfo.profileName) + SEPARATOR + - (controlInfo.cfgFileName) + CONFIGFILEEXT; - } - else if ( ! ((controlInfo.cfgFilePath).empty() )) - { - cfgFilePath = controlInfo.cfgFilePath; - } - else - { - throw LTKException(EINVALID_PROJECT_NAME); - } - - int returnVal = readConfig(cfgFilePath); - - if (returnVal != SUCCESS) - { - LOG(LTKLogger::LTK_LOGLEVEL_ERR) << - "Error: L7ShapeFeatureExtractor::L7ShapeFeatureExtractor()" <<endl; - - throw LTKException(returnVal); - } - - LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) << "Exiting " << - "L7ShapeFeatureExtractor::L7ShapeFeatureExtractor()" << endl; - -} - -/********************************************************************************** -* AUTHOR : Dinesh M -* DATE : 1-Oct-2007 -* NAME : readConfig -* DESCRIPTION : read the config values from cfg file and set member variables -* ARGUMENTS : -* RETURNS : -* NOTES : -* CHANGE HISTROY -* Author Date -*************************************************************************************/ - -int L7ShapeFeatureExtractor::readConfig(const string& cfgFilePath) -{ - LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) << "Entering " << - "L7ShapeFeatureExtractor::readConfig()" << endl; - - LTKConfigFileReader* configurableProperties = NULL; - string tempStringVar = ""; - - try - { - configurableProperties = new LTKConfigFileReader(cfgFilePath); - - int errorCode = configurableProperties->getConfigValue(L7RADIUS, tempStringVar); - - if( errorCode == SUCCESS) - { - if (setRadius(atoi((tempStringVar).c_str())) != SUCCESS) - { - LOG( LTKLogger::LTK_LOGLEVEL_ERR) << "Error: " << - ECONFIG_FILE_RANGE << " : " << - getErrorMessage(ECONFIG_FILE_RANGE) << - " L7ShapeFeatureExtractor::readConfig" <<endl; - - throw LTKException(ECONFIG_FILE_RANGE); - } - } - } - - catch(LTKException e) - { - delete configurableProperties; - - int eCode = e.getErrorCode(); - - LOG( LTKLogger::LTK_LOGLEVEL_ERR) << "Error: " << eCode << - " : " << getErrorMessage(eCode) << - " L7ShapeFeatureExtractor::readConfig" <<endl; - - LTKReturnError(eCode); - } - delete configurableProperties; - - LOG( LTKLogger::LTK_LOGLEVEL_DEBUG) << "Exiting " << - "L7ShapeFeatureExtractor::readConfig()" << endl; - - return SUCCESS; - -} - -/********************************************************************************** -* AUTHOR : Dinesh M -* DATE : 1-Oct-2007 -* NAME : setRadius -* DESCRIPTION : set the radius(the size of window) to compute L7 features -* ARGUMENTS : -* RETURNS : -* NOTES : -* CHANGE HISTROY -* Author Date -*************************************************************************************/ -int L7ShapeFeatureExtractor::setRadius(int radius) -{ - int returnVal = FAILURE; - - if ( radius > 0 ) - { - m_radius = radius; - returnVal = SUCCESS; - } - - return returnVal; -} - -/********************************************************************************** -* AUTHOR : Nidhi Sharma -* DATE : 15-Feb-2008 -* NAME : getRadius -* DESCRIPTION : -* ARGUMENTS : -* RETURNS : -* NOTES : -* CHANGE HISTROY -* Author Date -*************************************************************************************/ -int L7ShapeFeatureExtractor::getRadius() -{ - return m_radius; -} - - -/********************************************************************************** -* AUTHOR : Naveen Sundar G. -* DATE : 10-AUGUST-2007 -* NAME : extractFeatures -* DESCRIPTION : Extracts L7 features from a trace group -* ARGUMENTS : The trace group from which features have to be extracted -* RETURNS : vector of L7ShapeFeature objects -* NOTES : -* CHANGE HISTROY -* Author Date Description of change -*************************************************************************************/ -int L7ShapeFeatureExtractor::extractFeatures(const LTKTraceGroup& inTraceGroup, - vector<LTKShapeFeaturePtr>& outFeatureVec) -{ - - LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) << "Entering " << - "L7ShapeFeatureExtractor::extractFeatures()" << endl; - - L7ShapeFeature* featurePtr = NULL; - float delta; - int currentStrokeSize; - int numPoints; - - int numberOfTraces = inTraceGroup.getNumTraces(); - - if (numberOfTraces == 0 ) - { - LOG(LTKLogger::LTK_LOGLEVEL_ERR) << "Error :" << - EEMPTY_TRACE_GROUP << " : " << getErrorMessage(EEMPTY_TRACE_GROUP) << - "L7ShapeFeatureExtractor::extractFeatures()" << endl; - - LTKReturnError(EEMPTY_TRACE_GROUP); - } - - - LTKTraceVector allTraces = inTraceGroup.getAllTraces(); - LTKTraceVector::iterator traceIter = allTraces.begin(); - LTKTraceVector::iterator traceEnd = allTraces.end(); - - //the feature vector - vector<float> xVec; - vector<float> yVec; - vector<bool> penUp; - - //concatentating the strokes - for (; traceIter != traceEnd ; ++traceIter) - { - floatVector tempxVec, tempyVec; - - (*traceIter).getChannelValues("X", tempxVec); - - (*traceIter).getChannelValues("Y", tempyVec); - - currentStrokeSize = tempxVec.size(); - - if (currentStrokeSize == 0) - { - LOG(LTKLogger::LTK_LOGLEVEL_ERR) << "Error :" << - EEMPTY_TRACE<< " : " << getErrorMessage(EEMPTY_TRACE) << - "L7ShapeFeatureExtractor::extractFeatures()" << endl; - - LTKReturnError(EEMPTY_TRACE); - } - - for(int point=0;point<currentStrokeSize;point++) - { - xVec.push_back(tempxVec[point]); - yVec.push_back(tempyVec[point]); - - if(point == currentStrokeSize - 1 ) - { - penUp.push_back(true); - } - else - { - penUp.push_back(false); - } - } - } - //concatentating the strokes - - numPoints=xVec.size(); - - vector<float> normfirstderv_x(numPoints); // Array to store the first normalized derivative w.r.t x - vector<float> normfirstderv_y(numPoints); // Array to store the first normalized derivative w.r.t y - vector<float> normsecondderv_x(numPoints); // Array to store the second normalized derivative w.r.t x - vector<float> normsecondderv_y(numPoints); // Array to store the second normalized derivative w.r.t y - vector<float> curvature(numPoints); // Array to store the curvature - - computeDerivative(xVec,yVec,normfirstderv_x,normfirstderv_y,m_radius); - - computeDerivative(normfirstderv_x,normfirstderv_y,normsecondderv_x,normsecondderv_y,m_radius); - - for(int i=0; i<numPoints; ++i) - { - //computing the curvature - delta= sqrt(pow(pow(normfirstderv_x[i],2)+pow(normfirstderv_y[i],2),3)); - curvature[i]= ((normfirstderv_x[i]*normsecondderv_y[i]) - (normsecondderv_x[i]*normfirstderv_y[i]))/(delta+EPS); - - featurePtr = new L7ShapeFeature(xVec[i], yVec[i], - normfirstderv_x[i], normfirstderv_y[i], - normsecondderv_x[i], normsecondderv_y[i], - curvature[i], penUp[i]); - //populating the feature vector - outFeatureVec.push_back(LTKShapeFeaturePtr(featurePtr)); - featurePtr = NULL; - } - - LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) << "Exiting " << - "L7ShapeFeatureExtractor::extractFeatures()" << endl; - - return SUCCESS; -} - -/********************************************************************************** -* AUTHOR : Naveen Sundar G. -* DATE : 10-AUGUST-2007 -* NAME : getShapeFeatureInstance -* DESCRIPTION : Returns an L7ShapeFeature instance -* ARGUMENTS : -* RETURNS : An L7ShapeFeature instance -* NOTES : -* CHANGE HISTROY -* Author Date Description of change -*************************************************************************************/ -LTKShapeFeaturePtr L7ShapeFeatureExtractor::getShapeFeatureInstance() -{ - LTKShapeFeaturePtr tempPtr(new L7ShapeFeature); - return tempPtr; -} - - -/****************************************************************************** -* AUTHOR : Naveen Sundar G. -* DATE : Sept-10-2007 -* NAME : convertFeatVecToTraceGroup -* DESCRIPTION : -* ARGUMENTS : -* RETURNS : -* NOTES : -* CHANGE HISTROY -* Author Date Description -******************************************************************************/ -int L7ShapeFeatureExtractor::convertFeatVecToTraceGroup( - const vector<LTKShapeFeaturePtr>& shapeFeature, - LTKTraceGroup& outTraceGroup) -{ - LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) << "Entering " << - "L7ShapeFeatureExtractor::convertFeatVecToTraceGroup()" << endl; - - vector<LTKChannel> channels; // channels of a trace - - LTKChannel xChannel("X", DT_INT, true); // x-coordinate channel of the trace - LTKChannel yChannel("Y", DT_INT, true); // y-coordinate channel of the trace - - //initializing the channels of the trace - channels.push_back(xChannel); - channels.push_back(yChannel); - - // composing the trace format object - LTKTraceFormat traceFormat(channels); - - vector<float> point; // a point of a trace - - LTKTrace trace(traceFormat); - - for(int count=0;count<(int)shapeFeature.size();count++) - { - float Xpoint, Ypoint; - bool penUp; - - L7ShapeFeature* ptr = (L7ShapeFeature*)(shapeFeature[count].operator ->()); - Xpoint = ptr->getX(); - Ypoint = ptr->getY(); - penUp = ptr->isPenUp(); - - - - point.push_back(Xpoint); - point.push_back(Ypoint); - - trace.addPoint(point); - point.clear(); - - - if(penUp == true) // end of a trace, clearing the trace now - { - outTraceGroup.addTrace(trace); - trace.emptyTrace(); - LTKTrace tempTrace(traceFormat); - trace = tempTrace; - } - } - - LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) << "Exiting " << - "L7ShapeFeatureExtractor::convertFeatVecToTraceGroup()" << endl; - return SUCCESS; - -} - -/********************************************************************************** -* AUTHOR : Naveen Sundar G. -* DATE : 10-AUGUST-2007 -* NAME : computeDerivativeDenominator -* DESCRIPTION : Computes the denominator to be used in the derivative computation -* ARGUMENTS : The index used in derivative computation -* RETURNS : The denominator -* NOTES : -* CHANGE HISTROY -* Author Date Description of change -*************************************************************************************/ -int L7ShapeFeatureExtractor::computeDerivativeDenominator(int index) -{ - int denominator=0; - - for (int i=1;i<=index;i++) - { - - denominator=denominator+i*i; - } - return 2*denominator; -} - -/********************************************************************************** -* AUTHOR : Naveen Sundar G. -* DATE : 10-AUGUST-2007 -* NAME : computeDerivative -* DESCRIPTION : Computes the derivative -* ARGUMENTS : The input and output vectors. The output vectors are the derivatives of the input vectors -* RETURNS : -* NOTES : -* CHANGE HISTROY -* Author Date Description of change -*************************************************************************************/ -void L7ShapeFeatureExtractor::computeDerivative(const vector<float>& xVec, - const vector<float>& yVec, - vector<float>& dx, - vector<float>& dy, - int index) -{ - int size = xVec.size(); - int denominator = computeDerivativeDenominator(index); - float x,y,diffx,diffy,delta; - float firstderv_x,firstderv_y; - int i,j; - - if(index<size-index) - { - for(i=index; i<size-index; ++i) - { - x= xVec[i]; - y= yVec[i]; - diffx=0; - diffy=0; - - for( j=1;j<=index;j++) - { - diffx = diffx + j*(xVec[i+j]-xVec[i-j]) ; - diffy = diffy + j*(yVec[i+j]-yVec[i-j]) ; - } - - firstderv_x = diffx/denominator; - firstderv_y = diffy/denominator; - delta = sqrt(pow(firstderv_x,2)+pow(firstderv_y,2)); - if(delta!=0) - { - dx[i] = firstderv_x/(delta); - dy[i] = firstderv_y/(delta); - } - else - { - dx[i] = 0; - dy[i] = 0; - } - - - } - - for(i=0;i<index;i++) - { - x= xVec[i]; - y= yVec[i]; - diffx=0; - diffy=0; - - for( j=1;j<=index;j++) - { - diffx = diffx + j*(xVec[i+j]-x) ; - diffy = diffy + j*(yVec[i+j]-y) ; - } - firstderv_x = diffx/denominator; - firstderv_y = diffy/denominator; - delta = sqrt(pow(firstderv_x,2)+pow(firstderv_y,2)); - if(delta!=0) - { - dx[i] = firstderv_x/(delta); - dy[i] = firstderv_y/(delta); - } - else - { - dx[i] = 0; - dy[i] = 0; - } - - } - - for(i=size-index;i<=size-1;i++) - { - x= xVec[i]; - y= yVec[i]; - diffx=0; - diffy=0; - - for( j=1;j<=index;j++) - { - diffx = diffx + j*(x-xVec[i-j]) ; - diffy = diffy + j*(y-yVec[i-j]) ; - } - firstderv_x = diffx/denominator; - firstderv_y = diffy/denominator; - delta = sqrt(pow(firstderv_x,2)+pow(firstderv_y,2)); - if(delta!=0) - { - dx[i] = firstderv_x/(delta); - dy[i] = firstderv_y/(delta); - } - else - { - dx[i] = 0; - dy[i] = 0; - } - } - } - if(index>size-index) - { - for(i=0; i<size; ++i) - { - x= xVec[i]; - y= yVec[i]; - diffx=0; - diffy=0; - if((0<i+j)&(i+j<size)) - { - for( j=1;j<=index;j++) - { - diffx = diffx + j*(xVec[i+j]-x) ; - diffy = diffy + j*(yVec[i+j]-y) ; - } - } - else - { - for(j=1;j<=index;j++) - { - diffx = diffx + j*(x-xVec[i-j]) ; - diffy = diffy + j*(y-yVec[i-j]) ; - } - } - - firstderv_x = diffx/denominator; - firstderv_y = diffy/denominator; - delta = sqrt(pow(firstderv_x,2)+pow(firstderv_y,2)); - if(delta!=0) - { - dx[i] = firstderv_x/(delta); - dy[i] = firstderv_y/(delta); - } - else - { - dx[i] = 0; - dy[i] = 0; - } - - } - } -} - |