Commit b9e4b3e9 authored by jaco's avatar jaco

saliency sample added

parent a1aa3696
...@@ -94,11 +94,10 @@ class CV_EXPORTS_W StaticSaliency : public virtual Saliency ...@@ -94,11 +94,10 @@ class CV_EXPORTS_W StaticSaliency : public virtual Saliency
{ {
Params(); 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: private:
Params params; Params params;
...@@ -108,32 +107,32 @@ class CV_EXPORTS_W StaticSaliency : public virtual Saliency ...@@ -108,32 +107,32 @@ class CV_EXPORTS_W StaticSaliency : public virtual Saliency
class CV_EXPORTS_W MotionSaliency : public virtual Saliency class CV_EXPORTS_W MotionSaliency : public virtual Saliency
{ {
public: public:
struct CV_EXPORTS Params // struct CV_EXPORTS Params
{ // {
Params(); // Params();
}; // };
//protected: protected:
//virtual bool computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) = 0; virtual bool computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) = 0;
private: private:
Params params; //Params params;
}; };
/************************************ Objectness Base Class ************************************/ /************************************ Objectness Base Class ************************************/
class CV_EXPORTS_W Objectness : public virtual Saliency class CV_EXPORTS_W Objectness : public virtual Saliency
{ {
public: public:
struct CV_EXPORTS Params // struct CV_EXPORTS Params
{ // {
Params(); // Params();
}; // };
// protected: protected:
// virtual bool computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) = 0; virtual bool computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) = 0;
private: private:
Params params; //Params params;
}; };
} /* namespace cv */ } /* namespace cv */
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
#include "saliencyBaseClasses.hpp" #include "saliencyBaseClasses.hpp"
//TODO delete //TODO delete
#define SALIENCY_DEBUG true //#define SALIENCY_DEBUG true
#ifdef SALIENCY_DEBUG #ifdef SALIENCY_DEBUG
#include <opencv2/highgui.hpp> #include <opencv2/highgui.hpp>
#endif #endif
...@@ -76,9 +76,8 @@ class CV_EXPORTS_W StaticSaliencySpectralResidual : public StaticSaliency ...@@ -76,9 +76,8 @@ class CV_EXPORTS_W StaticSaliencySpectralResidual : public StaticSaliency
void write( FileStorage& fs ) const; void write( FileStorage& fs ) const;
protected: protected:
bool computeSaliencyImpl( const Mat& src, Mat& dst ); bool computeSaliencyImpl( const Mat& src, Mat& dst );
AlgorithmInfo* info() const; AlgorithmInfo* info() const { return 0; }
private: private:
Params params; Params params;
...@@ -100,8 +99,8 @@ class CV_EXPORTS_W MotionSaliencyPBAS : public MotionSaliency ...@@ -100,8 +99,8 @@ class CV_EXPORTS_W MotionSaliencyPBAS : public MotionSaliency
void read( const FileNode& fn ); void read( const FileNode& fn );
void write( FileStorage& fs ) const; void write( FileStorage& fs ) const;
}; };
//MotionSaliencyPBAS(const MotionSaliencyPBAS::Params &parameters = MotionSaliencyPBAS::Params()); MotionSaliencyPBAS( const MotionSaliencyPBAS::Params &parameters = MotionSaliencyPBAS::Params() );
MotionSaliencyPBAS(); //MotionSaliencyPBAS();
~MotionSaliencyPBAS(); ~MotionSaliencyPBAS();
void read( const FileNode& fn ); void read( const FileNode& fn );
...@@ -109,7 +108,7 @@ class CV_EXPORTS_W MotionSaliencyPBAS : public MotionSaliency ...@@ -109,7 +108,7 @@ class CV_EXPORTS_W MotionSaliencyPBAS : public MotionSaliency
protected: protected:
bool computeSaliencyImpl( const Mat& src, Mat& dst ); bool computeSaliencyImpl( const Mat& src, Mat& dst );
AlgorithmInfo* info() const; AlgorithmInfo* info() const { return 0; }
private: private:
Params params; Params params;
...@@ -130,8 +129,8 @@ class CV_EXPORTS_W ObjectnessBING : public Objectness ...@@ -130,8 +129,8 @@ class CV_EXPORTS_W ObjectnessBING : public Objectness
void read( const FileNode& fn ); void read( const FileNode& fn );
void write( FileStorage& fs ) const; void write( FileStorage& fs ) const;
}; };
//ObjectnessBING(const ObjectnessBING::Params &parameters = ObjectnessBING::Params()); ObjectnessBING( const ObjectnessBING::Params &parameters = ObjectnessBING::Params() );
ObjectnessBING(); //ObjectnessBING();
~ObjectnessBING(); ~ObjectnessBING();
void read( const FileNode& fn ); void read( const FileNode& fn );
...@@ -139,7 +138,7 @@ class CV_EXPORTS_W ObjectnessBING : public Objectness ...@@ -139,7 +138,7 @@ class CV_EXPORTS_W ObjectnessBING : public Objectness
protected: protected:
bool computeSaliencyImpl( const Mat& src, Mat& dst ); bool computeSaliencyImpl( const Mat& src, Mat& dst );
AlgorithmInfo* info() const; AlgorithmInfo* info() const { return 0; }
private: private:
Params params; Params params;
......
#include <opencv2/core/utility.hpp>
#include <opencv2/saliency.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;
static const char* keys =
{ "{@saliency_algorithm | | Saliency algorithm <saliencyAlgorithmType.[saliencyAlgorithmTypeSubType]> }"
"{@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 <saliencyAlgorithmType.[saliencyAlgorithmTypeSubType]> <video_name> <start_frame> \n"
<< endl;
}
int main( int argc, char** argv )
{
CommandLineParser parser( argc, argv, keys );
String saliency_algorithm = parser.get<String>( 0 );
String video_name = parser.get<String>( 1 );
int start_frame = parser.get<int>( 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<Saliency> 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;
}
/*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 */
...@@ -56,11 +56,23 @@ MotionSaliencyPBAS::Params::Params() ...@@ -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 &parameters ) :
params( parameters )
{
className = "PBAS";
}
MotionSaliencyPBAS::~MotionSaliencyPBAS() MotionSaliencyPBAS::~MotionSaliencyPBAS()
{ {
......
/*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 */
...@@ -56,17 +56,22 @@ ObjectnessBING::Params::Params() ...@@ -56,17 +56,22 @@ ObjectnessBING::Params::Params()
} }
/*ObjectnessBING::ObjectnessBING( const ObjectnessBING &parameters ) : void ObjectnessBING::Params::read( const cv::FileNode& fn )
params( parameters )
{ {
className = "PBAS"; //resizedImageSize=Size(fn["resizedImageSize"]);
} */
ObjectnessBING::ObjectnessBING() }
{
void ObjectnessBING::Params::write( cv::FileStorage& fs ) const
{
//fs << "resizedImageSize" << resizedImageSize;
} }
ObjectnessBING::ObjectnessBING( const ObjectnessBING::Params &parameters ) :
params( parameters )
{
className = "BING";
}
ObjectnessBING::~ObjectnessBING() ObjectnessBING::~ObjectnessBING()
{ {
......
...@@ -92,6 +92,11 @@ bool StaticSaliency::computeBinaryMap( const Mat& saliencyMap, Mat& BinaryMap ) ...@@ -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 // adaptative thresholding using Otsu's method, to make saliency map binary
threshold( outputMat, BinaryMap, 0, 255, THRESH_BINARY | THRESH_OTSU ); threshold( outputMat, BinaryMap, 0, 255, THRESH_BINARY | THRESH_OTSU );
......
...@@ -57,6 +57,17 @@ StaticSaliencySpectralResidual::Params::Params() ...@@ -57,6 +57,17 @@ StaticSaliencySpectralResidual::Params::Params()
resizedImageSize=Size(64,64); 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 &parameters ) : StaticSaliencySpectralResidual::StaticSaliencySpectralResidual( const StaticSaliencySpectralResidual::Params &parameters ) :
params( parameters ) params( parameters )
{ {
...@@ -78,7 +89,6 @@ void StaticSaliencySpectralResidual::write( cv::FileStorage& fs ) const ...@@ -78,7 +89,6 @@ void StaticSaliencySpectralResidual::write( cv::FileStorage& fs ) const
params.write( fs ); params.write( fs );
} }
bool StaticSaliencySpectralResidual::computeSaliencyImpl( const Mat& image, Mat& saliencyMap ) bool StaticSaliencySpectralResidual::computeSaliencyImpl( const Mat& image, Mat& saliencyMap )
{ {
...@@ -142,10 +152,6 @@ bool StaticSaliencySpectralResidual::computeSaliencyImpl( const Mat& image, Mat& ...@@ -142,10 +152,6 @@ bool StaticSaliencySpectralResidual::computeSaliencyImpl( const Mat& image, Mat&
imshow( "Saliency Map", saliencyMap ); imshow( "Saliency Map", saliencyMap );
#endif #endif
//TODO try the results and then delete
/*outputMat = outputMat * 255;
outputMat.convertTo( outputMat, CV_8U );
saliencyMap = outputMat; */
return true; return true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment