From 883d691c2b4a86144b986c023ea74f5292a1431b Mon Sep 17 00:00:00 2001 From: "marina.kolpakova" Date: Fri, 7 Dec 2012 13:17:55 +0400 Subject: [PATCH] fix feature computing --- apps/CMakeLists.txt | 2 ++ apps/sft/include/sft/octave.hpp | 16 ++++++++++++++++ apps/sft/octave.cpp | 6 +++++- apps/sft/sft.cpp | 2 +- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 217490b..a5db31f 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -1,2 +1,4 @@ add_subdirectory(haartraining) add_subdirectory(traincascade) +add_subdirectory(sft) + diff --git a/apps/sft/include/sft/octave.hpp b/apps/sft/include/sft/octave.hpp index f99f92b..bddb419 100644 --- a/apps/sft/include/sft/octave.hpp +++ b/apps/sft/include/sft/octave.hpp @@ -73,6 +73,22 @@ struct ICF return bb != b.bb || channel != b.channel; } + + float operator() (const Mat& integrals, const cv::Size& model) const + { + const int* ptr = integrals.ptr(0) + (model.height * channel + bb.y) * model.width + bb.x; + + int a = ptr[0]; + int b = ptr[bb.width]; + + ptr += bb.height * model.width; + + int c = ptr[bb.width]; + int d = ptr[0]; + + return (float)(a - b + c - d); + } + private: cv::Rect bb; int channel; diff --git a/apps/sft/octave.cpp b/apps/sft/octave.cpp index 3eb0d95..7ccd490 100644 --- a/apps/sft/octave.cpp +++ b/apps/sft/octave.cpp @@ -93,6 +93,10 @@ bool sft::Octave::train( const cv::Mat& trainData, const cv::Mat& _responses, co } std::cout << "WARNING: " << sampleIdx << std::endl; + std::cout << "WARNING: " << trainData << std::endl; + std::cout << "WARNING: " << _responses << std::endl; + std::cout << "WARNING: " << varIdx << std::endl; + std::cout << "WARNING: " << varType << std::endl; bool update = false; return cv::Boost::train(trainData, CV_COL_SAMPLE, _responses, varIdx, sampleIdx, varType, missingDataMask, _params, @@ -313,7 +317,7 @@ sft::FeaturePool::~FeaturePool(){} float sft::FeaturePool::apply(int fi, int si, const Mat& integrals) const { - return 0.f; + return pool[fi](integrals.row(si), model); } diff --git a/apps/sft/sft.cpp b/apps/sft/sft.cpp index 2328c11..8a96b31 100644 --- a/apps/sft/sft.cpp +++ b/apps/sft/sft.cpp @@ -113,7 +113,7 @@ int main(int argc, char** argv) int shrinkage = cfg.shrinkage; int octave = *it; - cv::Size model = cfg.modelWinSize; + cv::Size model = cv::Size(cfg.modelWinSize.width / cfg.shrinkage, cfg.modelWinSize.height / cfg.shrinkage ); std::string path = cfg.trainPath; cv::Rect boundingBox(cfg.offset.x / cfg.shrinkage, cfg.offset.y / cfg.shrinkage, -- 2.7.4