diff --git a/modules/saliency/include/opencv2/saliency/saliencyBaseClasses.hpp b/modules/saliency/include/opencv2/saliency/saliencyBaseClasses.hpp index fe0359f48..39ad2d4fc 100644 --- a/modules/saliency/include/opencv2/saliency/saliencyBaseClasses.hpp +++ b/modules/saliency/include/opencv2/saliency/saliencyBaseClasses.hpp @@ -94,11 +94,10 @@ class CV_EXPORTS_W StaticSaliency : public virtual Saliency { Params(); }; + bool computeBinaryMap( const Mat& saliencyMap, Mat& binaryMap ); - bool computeBinaryMap( const Mat& saliencyMap, Mat& outputMat ); - - //protected: - //virtual bool computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) = 0; + protected: + virtual bool computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) = 0; private: Params params; @@ -108,32 +107,32 @@ class CV_EXPORTS_W StaticSaliency : public virtual Saliency class CV_EXPORTS_W MotionSaliency : public virtual Saliency { public: - struct CV_EXPORTS Params - { - Params(); - }; +// struct CV_EXPORTS Params +// { +// Params(); +// }; - //protected: - //virtual bool computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) = 0; + protected: + virtual bool computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) = 0; private: - Params params; + //Params params; }; /************************************ Objectness Base Class ************************************/ class CV_EXPORTS_W Objectness : public virtual Saliency { public: - struct CV_EXPORTS Params - { - Params(); - }; +// struct CV_EXPORTS Params +// { +// Params(); +// }; -// protected: - // virtual bool computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) = 0; + protected: + virtual bool computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) = 0; private: - Params params; + //Params params; }; } /* namespace cv */ diff --git a/modules/saliency/include/opencv2/saliency/saliencySpecializedClasses.hpp b/modules/saliency/include/opencv2/saliency/saliencySpecializedClasses.hpp index 899424e6a..a1d64cd6f 100644 --- a/modules/saliency/include/opencv2/saliency/saliencySpecializedClasses.hpp +++ b/modules/saliency/include/opencv2/saliency/saliencySpecializedClasses.hpp @@ -45,7 +45,7 @@ #include "saliencyBaseClasses.hpp" //TODO delete -#define SALIENCY_DEBUG true +//#define SALIENCY_DEBUG true #ifdef SALIENCY_DEBUG #include #endif @@ -76,9 +76,8 @@ class CV_EXPORTS_W StaticSaliencySpectralResidual : public StaticSaliency void write( FileStorage& fs ) const; protected: - bool computeSaliencyImpl( const Mat& src, Mat& dst ); - AlgorithmInfo* info() const; + AlgorithmInfo* info() const { return 0; } private: Params params; @@ -100,8 +99,8 @@ class CV_EXPORTS_W MotionSaliencyPBAS : public MotionSaliency void read( const FileNode& fn ); void write( FileStorage& fs ) const; }; - //MotionSaliencyPBAS(const MotionSaliencyPBAS::Params ¶meters = MotionSaliencyPBAS::Params()); - MotionSaliencyPBAS(); + MotionSaliencyPBAS( const MotionSaliencyPBAS::Params ¶meters = MotionSaliencyPBAS::Params() ); + //MotionSaliencyPBAS(); ~MotionSaliencyPBAS(); void read( const FileNode& fn ); @@ -109,7 +108,7 @@ class CV_EXPORTS_W MotionSaliencyPBAS : public MotionSaliency protected: bool computeSaliencyImpl( const Mat& src, Mat& dst ); - AlgorithmInfo* info() const; + AlgorithmInfo* info() const { return 0; } private: Params params; @@ -130,8 +129,8 @@ class CV_EXPORTS_W ObjectnessBING : public Objectness void read( const FileNode& fn ); void write( FileStorage& fs ) const; }; - //ObjectnessBING(const ObjectnessBING::Params ¶meters = ObjectnessBING::Params()); - ObjectnessBING(); + ObjectnessBING( const ObjectnessBING::Params ¶meters = ObjectnessBING::Params() ); + //ObjectnessBING(); ~ObjectnessBING(); void read( const FileNode& fn ); @@ -139,7 +138,7 @@ class CV_EXPORTS_W ObjectnessBING : public Objectness protected: bool computeSaliencyImpl( const Mat& src, Mat& dst ); - AlgorithmInfo* info() const; + AlgorithmInfo* info() const { return 0; } private: Params params; diff --git a/modules/saliency/samples/computeSaliency.cpp b/modules/saliency/samples/computeSaliency.cpp new file mode 100644 index 000000000..7c97a6557 --- /dev/null +++ b/modules/saliency/samples/computeSaliency.cpp @@ -0,0 +1,84 @@ +#include +#include +#include +#include + +using namespace std; +using namespace cv; + +static const char* keys = +{ "{@saliency_algorithm | | Saliency algorithm }" + "{@video_name | | video name }" + "{@start_frame |1| Start frame }" }; + +static void help() +{ + cout << "\nThis example shows the functionality of \"Saliency \"" + "Call:\n" + "./example_saliency_computeSaliency \n" + << endl; +} + +int main( int argc, char** argv ) +{ + CommandLineParser parser( argc, argv, keys ); + + String saliency_algorithm = parser.get( 0 ); + String video_name = parser.get( 1 ); + int start_frame = parser.get( 2 ); + + if( saliency_algorithm.empty() || video_name.empty() ) + { + help(); + return -1; + } + + //open the capture + VideoCapture cap; + cap.open( video_name ); + cap.set( CAP_PROP_POS_FRAMES, start_frame ); + + if( !cap.isOpened() ) + { + help(); + cout << "***Could not initialize capturing...***\n"; + cout << "Current parameter's value: \n"; + parser.printMessage(); + return -1; + } + + Mat frame; + + //instantiates the specific Saliency + Ptr saliencyAlgorithm = Saliency::create( saliency_algorithm ); + + if( saliencyAlgorithm == NULL ) + { + cout << "***Error in the instantiation of the saliency algorithm...***\n"; + return -1; + } + + Mat image, saliencyMap, binaryMap; + + cap >> frame; + if( frame.empty() ) + { + return 0; + } + + frame.copyTo( image ); + + if( saliencyAlgorithm->computeSaliency( image, saliencyMap ) ) + { + StaticSaliencySpectralResidual spec; + spec.computeBinaryMap( saliencyMap, binaryMap ); + //saliencyAlgorithm->computeBinaryMap( saliencyMap, binaryMap ); + imshow( "Saliency Map", saliencyMap ); + imshow( "Original Image", image ); + imshow( "Binary Map", binaryMap ); + waitKey( 0 ); + + } + + return 0; +} diff --git a/modules/saliency/src/motionSaliency.cpp b/modules/saliency/src/motionSaliency.cpp new file mode 100644 index 000000000..0cb8a389b --- /dev/null +++ b/modules/saliency/src/motionSaliency.cpp @@ -0,0 +1,61 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// + // + // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. + // + // By downloading, copying, installing or using the software you agree to this license. + // If you do not agree to this license, do not download, install, + // copy or use the software. + // + // + // License Agreement + // For Open Source Computer Vision Library + // + // Copyright (C) 2013, OpenCV Foundation, all rights reserved. + // Third party copyrights are property of their respective owners. + // + // Redistribution and use in source and binary forms, with or without modification, + // are permitted provided that the following conditions are met: + // + // * Redistribution's of source code must retain the above copyright notice, + // this list of conditions and the following disclaimer. + // + // * Redistribution's in binary form must reproduce the above copyright notice, + // this list of conditions and the following disclaimer in the documentation + // and/or other materials provided with the distribution. + // + // * The name of the copyright holders may not be used to endorse or promote products + // derived from this software without specific prior written permission. + // + // This software is provided by the copyright holders and contributors "as is" and + // any express or implied warranties, including, but not limited to, the implied + // warranties of merchantability and fitness for a particular purpose are disclaimed. + // In no event shall the Intel Corporation or contributors be liable for any direct, + // indirect, incidental, special, exemplary, or consequential damages + // (including, but not limited to, procurement of substitute goods or services; + // loss of use, data, or profits; or business interruption) however caused + // and on any theory of liability, whether in contract, strict liability, + // or tort (including negligence or otherwise) arising in any way out of + // the use of this software, even if advised of the possibility of such damage. + // + //M*/ + +#include "precomp.hpp" + +namespace cv +{ + +/** + * Motion Saliency + */ + +/** + * Parameters + */ + +//MotionSaliency::Params::Params() +//{ +// +//} + + +}/* namespace cv */ diff --git a/modules/saliency/src/motionSaliencyPBAS.cpp b/modules/saliency/src/motionSaliencyPBAS.cpp index 8e936e72b..9a0fb8a19 100644 --- a/modules/saliency/src/motionSaliencyPBAS.cpp +++ b/modules/saliency/src/motionSaliencyPBAS.cpp @@ -56,11 +56,23 @@ MotionSaliencyPBAS::Params::Params() } -MotionSaliencyPBAS::MotionSaliencyPBAS() +void MotionSaliencyPBAS::Params::read( const cv::FileNode& fn ) { + //resizedImageSize=Size(fn["resizedImageSize"]); } +void MotionSaliencyPBAS::Params::write( cv::FileStorage& fs ) const +{ + //fs << "resizedImageSize" << resizedImageSize; +} + +MotionSaliencyPBAS::MotionSaliencyPBAS(const MotionSaliencyPBAS::Params ¶meters ) : + params( parameters ) +{ + className = "PBAS"; +} + MotionSaliencyPBAS::~MotionSaliencyPBAS() { diff --git a/modules/saliency/src/objectness.cpp b/modules/saliency/src/objectness.cpp new file mode 100644 index 000000000..163a03292 --- /dev/null +++ b/modules/saliency/src/objectness.cpp @@ -0,0 +1,61 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// + // + // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. + // + // By downloading, copying, installing or using the software you agree to this license. + // If you do not agree to this license, do not download, install, + // copy or use the software. + // + // + // License Agreement + // For Open Source Computer Vision Library + // + // Copyright (C) 2013, OpenCV Foundation, all rights reserved. + // Third party copyrights are property of their respective owners. + // + // Redistribution and use in source and binary forms, with or without modification, + // are permitted provided that the following conditions are met: + // + // * Redistribution's of source code must retain the above copyright notice, + // this list of conditions and the following disclaimer. + // + // * Redistribution's in binary form must reproduce the above copyright notice, + // this list of conditions and the following disclaimer in the documentation + // and/or other materials provided with the distribution. + // + // * The name of the copyright holders may not be used to endorse or promote products + // derived from this software without specific prior written permission. + // + // This software is provided by the copyright holders and contributors "as is" and + // any express or implied warranties, including, but not limited to, the implied + // warranties of merchantability and fitness for a particular purpose are disclaimed. + // In no event shall the Intel Corporation or contributors be liable for any direct, + // indirect, incidental, special, exemplary, or consequential damages + // (including, but not limited to, procurement of substitute goods or services; + // loss of use, data, or profits; or business interruption) however caused + // and on any theory of liability, whether in contract, strict liability, + // or tort (including negligence or otherwise) arising in any way out of + // the use of this software, even if advised of the possibility of such damage. + // + //M*/ + +#include "precomp.hpp" + +namespace cv +{ + +/** + * Objectness + */ + +/** + * Parameters + */ + +//Objectness::Params::Params() +//{ +// +//} + + +}/* namespace cv */ diff --git a/modules/saliency/src/objectnessBING.cpp b/modules/saliency/src/objectnessBING.cpp index beb6eda8b..8d973f362 100644 --- a/modules/saliency/src/objectnessBING.cpp +++ b/modules/saliency/src/objectnessBING.cpp @@ -56,17 +56,22 @@ ObjectnessBING::Params::Params() } -/*ObjectnessBING::ObjectnessBING( const ObjectnessBING ¶meters ) : - params( parameters ) -{ - className = "PBAS"; -} */ - -ObjectnessBING::ObjectnessBING() +void ObjectnessBING::Params::read( const cv::FileNode& fn ) { + //resizedImageSize=Size(fn["resizedImageSize"]); } +void ObjectnessBING::Params::write( cv::FileStorage& fs ) const +{ + //fs << "resizedImageSize" << resizedImageSize; +} + +ObjectnessBING::ObjectnessBING( const ObjectnessBING::Params ¶meters ) : + params( parameters ) +{ + className = "BING"; +} ObjectnessBING::~ObjectnessBING() { diff --git a/modules/saliency/src/staticSaliency.cpp b/modules/saliency/src/staticSaliency.cpp index 4aa2342c3..d1aa257c3 100644 --- a/modules/saliency/src/staticSaliency.cpp +++ b/modules/saliency/src/staticSaliency.cpp @@ -92,6 +92,11 @@ bool StaticSaliency::computeBinaryMap( const Mat& saliencyMap, Mat& BinaryMap ) } + //Convert + outputMat = outputMat * 255; + outputMat.convertTo( outputMat, CV_8U ); + //saliencyMap = outputMat; + // adaptative thresholding using Otsu's method, to make saliency map binary threshold( outputMat, BinaryMap, 0, 255, THRESH_BINARY | THRESH_OTSU ); diff --git a/modules/saliency/src/staticSaliencySpectralResidual.cpp b/modules/saliency/src/staticSaliencySpectralResidual.cpp index d9b19568f..7d59f79f4 100644 --- a/modules/saliency/src/staticSaliencySpectralResidual.cpp +++ b/modules/saliency/src/staticSaliencySpectralResidual.cpp @@ -57,6 +57,17 @@ StaticSaliencySpectralResidual::Params::Params() resizedImageSize=Size(64,64); } +void StaticSaliencySpectralResidual::Params::read( const cv::FileNode& fn ) +{ + //resizedImageSize=Size(fn["resizedImageSize"]); + +} + +void StaticSaliencySpectralResidual::Params::write( cv::FileStorage& fs ) const +{ + //fs << "resizedImageSize" << resizedImageSize; +} + StaticSaliencySpectralResidual::StaticSaliencySpectralResidual( const StaticSaliencySpectralResidual::Params ¶meters ) : params( parameters ) { @@ -78,7 +89,6 @@ void StaticSaliencySpectralResidual::write( cv::FileStorage& fs ) const params.write( fs ); } - bool StaticSaliencySpectralResidual::computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) { @@ -142,10 +152,6 @@ bool StaticSaliencySpectralResidual::computeSaliencyImpl( const Mat& image, Mat& imshow( "Saliency Map", saliencyMap ); #endif -//TODO try the results and then delete - /*outputMat = outputMat * 255; - outputMat.convertTo( outputMat, CV_8U ); - saliencyMap = outputMat; */ return true;