From 4b1d0c212bd1b34dc7ed011dd7b90825d77e34db Mon Sep 17 00:00:00 2001 From: jaco Date: Thu, 17 Jul 2014 19:29:39 +0200 Subject: [PATCH] core implementation start --- .../saliency/saliencySpecializedClasses.hpp | 22 ++-- .../src/motionSaliencyBinWangApr2014.cpp | 114 ++++++++++++++++++ modules/saliency/src/saliency_init.cpp | 9 +- 3 files changed, 135 insertions(+), 10 deletions(-) create mode 100644 modules/saliency/src/motionSaliencyBinWangApr2014.cpp diff --git a/modules/saliency/include/opencv2/saliency/saliencySpecializedClasses.hpp b/modules/saliency/include/opencv2/saliency/saliencySpecializedClasses.hpp index b46da85fb..b7900d274 100644 --- a/modules/saliency/include/opencv2/saliency/saliencySpecializedClasses.hpp +++ b/modules/saliency/include/opencv2/saliency/saliencySpecializedClasses.hpp @@ -99,6 +99,12 @@ class CV_EXPORTS_W MotionSaliencyBinWangApr2014 : public MotionSaliency MotionSaliencyBinWangApr2014(); ~MotionSaliencyBinWangApr2014(); + typedef Ptr (Algorithm::*SizeGetter)(); + typedef void (Algorithm::*SizeSetter)( const Ptr & ); + + Ptr getWsize(); + void setWsize( const Ptr &newSize ); + protected: bool computeSaliencyImpl( const InputArray image, OutputArray saliencyMap ); AlgorithmInfo* info() const; @@ -112,13 +118,11 @@ class CV_EXPORTS_W MotionSaliencyBinWangApr2014 : public MotionSaliency // Background model maintenance functions bool templateOrdering(); - bool templateReplacement(Mat finalBFMask); + bool templateReplacement( Mat finalBFMask ); // Decision threshold adaptation and Activity control function - bool activityControl(vector noisePixelMask); - bool decisionThresholdAdaptation(); - - + //bool activityControl(vector noisePixelMask); + //bool decisionThresholdAdaptation(); // changing structure vector backgroundModel; // The vector represents the background template T0---TK of reference paper. @@ -129,14 +133,16 @@ class CV_EXPORTS_W MotionSaliencyBinWangApr2014 : public MotionSaliency Mat epslonPixelsValue; // epslon threshold //Mat activityPixelsValue; // Activity level of each pixel //vector noisePixelMask; // We define a ‘noise-pixel’ as a pixel that has been classified as a foreground pixel during the full resolution - // detection process,however, after the low resolution detection, it has become a - // background pixel. In a noise-pixel mask, the identified noise-pixels are set to 1 while other pixels are 0; + // detection process,however, after the low resolution detection, it has become a + // background pixel. In a noise-pixel mask, the identified noise-pixels are set to 1 while other pixels are 0; //fixed parameter + Ptr imgSize; // Size of input image int K; // Number of background model template - float alpha; // Learning rate + float alpha; // Learning rate int L0, L1; // Upper-bound values for C0 and C1 (efficacy of the first two template (matrices) of backgroundModel int thetaL; // T0, T1 swap threshold + int thetaA; // Potential background value threshold int gamma; // Parameter that controls the time that the newly updated long-term background value will remain in the // long-term template, regardless of any subsequent background changes. A relatively large (eg gamma=3) will //restrain the generation of ghosts. diff --git a/modules/saliency/src/motionSaliencyBinWangApr2014.cpp b/modules/saliency/src/motionSaliencyBinWangApr2014.cpp new file mode 100644 index 000000000..ed23ad32f --- /dev/null +++ b/modules/saliency/src/motionSaliencyBinWangApr2014.cpp @@ -0,0 +1,114 @@ +/*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 +{ + +cv::Ptr MotionSaliencyBinWangApr2014::getWsize() +{ + return imgSize; +} +void MotionSaliencyBinWangApr2014::setWsize( const cv::Ptr& newSize ) +{ + imgSize = newSize; +} + +MotionSaliencyBinWangApr2014::MotionSaliencyBinWangApr2014() +{ + + epslonPixelsValue = Mat::zeros( imgSize->height, imgSize->width, CV_8U ); + potentialBackground = Mat::zeros( imgSize->height, imgSize->width, CV_32FC2 ); + backgroundModel=std::vector( 4, Mat::zeros( imgSize->height, imgSize->width, CV_32FC2 ) ); + + K = 3; // Number of background model template + alpha = 0.01; // Learning rate + L0 = 6000; // Upper-bound values for C0 (efficacy of the first template (matrices) of backgroundModel + L1 = 4000; // Upper-bound values for C1 (efficacy of the second template (matrices) of backgroundModel + thetaL = 2500; // T0, T1 swap threshold + thetaA = 200; + gamma = 3; + + className = "BinWangApr2014"; +} + +MotionSaliencyBinWangApr2014::~MotionSaliencyBinWangApr2014() +{ + +} + +// classification (and adaptation) functions +bool MotionSaliencyBinWangApr2014::fullResolutionDetection( Mat image, Mat highResBFMask ) +{ + + return true; +} +bool MotionSaliencyBinWangApr2014::lowResolutionDetection( Mat image, Mat lowResBFMask ) +{ + + return true; +} +bool MotionSaliencyBinWangApr2014::templateUpdate( Mat highResBFMask ) +{ + + return true; +} + +// Background model maintenance functions +bool MotionSaliencyBinWangApr2014::templateOrdering() +{ + + return true; +} +bool MotionSaliencyBinWangApr2014::templateReplacement( Mat finalBFMask ) +{ + + return true; +} + +bool MotionSaliencyBinWangApr2014::computeSaliencyImpl( const InputArray image, OutputArray saliencyMap ) +{ + + return true; +} + +} // namespace cv diff --git a/modules/saliency/src/saliency_init.cpp b/modules/saliency/src/saliency_init.cpp index 6396467ac..0a1e59b96 100644 --- a/modules/saliency/src/saliency_init.cpp +++ b/modules/saliency/src/saliency_init.cpp @@ -52,7 +52,12 @@ CV_INIT_ALGORITHM( reinterpret_cast( &StaticSaliencySpectralResidual::getWsize ), reinterpret_cast( &StaticSaliencySpectralResidual::setWsize ) ) ); -//CV_INIT_ALGORITHM( MotionSaliencySuBSENSE, "SALIENCY.SuBSENSE", ); +CV_INIT_ALGORITHM( + MotionSaliencyBinWangApr2014, + "SALIENCY.BinWangApr2014", + obj.info()->addParam( obj, "imgSize", obj.imgSize, false, + reinterpret_cast( &MotionSaliencyBinWangApr2014::getWsize ), + reinterpret_cast( &MotionSaliencyBinWangApr2014::setWsize ) ) ); CV_INIT_ALGORITHM( ObjectnessBING, "SALIENCY.BING", @@ -62,7 +67,7 @@ bool initModule_saliency( void ) { bool all = true; all &= !StaticSaliencySpectralResidual_info_auto.name().empty(); - //all &= !MotionSaliencySuBSENSE_info_auto.name().empty(); + all &= !MotionSaliencyBinWangApr2014_info_auto.name().empty(); all &= !ObjectnessBING_info_auto.name().empty(); return all;