From 9a6dabf3b53990ed8c5226d7ba5c3a5f242c55ab Mon Sep 17 00:00:00 2001
From: Andrews Sobral <andrewssobral@gmail.com>
Date: Sun, 16 Feb 2014 22:47:36 +0100
Subject: [PATCH] bgslibrary v1.9.0

35 algorithms available
---
 CMakeLists.txt                                |   52 +
 COPYING.txt                                   |  674 ++++++
 Config.h                                      |   22 +
 Demo.cpp                                      |  182 ++
 FrameProcessor.cpp                            |  557 +++++
 FrameProcessor.h                              |  235 ++
 IFrameProcessor.h                             |   26 +
 LICENSE.txt                                   |   12 +
 Main.cpp                                      |   82 +
 PreProcessor.cpp                              |  146 ++
 PreProcessor.h                                |   49 +
 README.txt                                    |   16 +
 VideoAnalysis.cpp                             |  130 +
 VideoAnalysis.h                               |   45 +
 VideoCapture.cpp                              |  275 +++
 VideoCapture.h                                |   63 +
 bgslibrary_vs2010_opencv.txt                  |   39 +
 config/FrameProcessor.xml                     |   38 +
 config/PreProcessor.xml                       |    6 +
 config/VideoCapture.xml                       |   13 +
 dataset/video.avi                             |  Bin 0 -> 1049784 bytes
 demos/DemoFrameDifferenceBGS.cpp              |   49 +
 demos/DemoMultiLayerBGS.cpp                   |   49 +
 package_analysis/ForegroundMaskAnalysis.cpp   |  101 +
 package_analysis/ForegroundMaskAnalysis.h     |   42 +
 package_bgs/AdaptiveBackgroundLearning.cpp    |  111 +
 package_bgs/AdaptiveBackgroundLearning.h      |   50 +
 .../AdaptiveSelectiveBackgroundLearning.cpp   |  131 +
 .../AdaptiveSelectiveBackgroundLearning.h     |   49 +
 package_bgs/FrameDifferenceBGS.cpp            |   83 +
 package_bgs/FrameDifferenceBGS.h              |   44 +
 package_bgs/GMG.cpp                           |   99 +
 package_bgs/GMG.h                             |   45 +
 package_bgs/IBGS.h                            |   33 +
 package_bgs/MixtureOfGaussianV1BGS.cpp        |   95 +
 package_bgs/MixtureOfGaussianV1BGS.h          |   47 +
 package_bgs/MixtureOfGaussianV2BGS.cpp        |   98 +
 package_bgs/MixtureOfGaussianV2BGS.h          |   47 +
 package_bgs/StaticFrameDifferenceBGS.cpp      |   79 +
 package_bgs/StaticFrameDifferenceBGS.h        |   45 +
 package_bgs/WeightedMovingMeanBGS.cpp         |  122 +
 package_bgs/WeightedMovingMeanBGS.h           |   47 +
 package_bgs/WeightedMovingVarianceBGS.cpp     |  161 ++
 package_bgs/WeightedMovingVarianceBGS.h       |   48 +
 package_bgs/ae/KDE.cpp                        |  128 +
 package_bgs/ae/KDE.h                          |   58 +
 package_bgs/ae/KernelTable.cpp                |  116 +
 package_bgs/ae/KernelTable.h                  |   71 +
 package_bgs/ae/NPBGSubtractor.cpp             | 1160 +++++++++
 package_bgs/ae/NPBGSubtractor.h               |  154 ++
 package_bgs/ae/NPBGmodel.cpp                  |  127 +
 package_bgs/ae/NPBGmodel.h                    |  111 +
 package_bgs/av/TBackground.cpp                |  166 ++
 package_bgs/av/TBackground.h                  |   51 +
 package_bgs/av/TBackgroundVuMeter.cpp         |  380 +++
 package_bgs/av/TBackgroundVuMeter.h           |   67 +
 package_bgs/av/VuMeter.cpp                    |  116 +
 package_bgs/av/VuMeter.h                      |   53 +
 package_bgs/ck/LbpMrf.cpp                     |   87 +
 package_bgs/ck/LbpMrf.h                       |   44 +
 package_bgs/ck/MEDefs.cpp                     |   40 +
 package_bgs/ck/MEDefs.hpp                     |   83 +
 package_bgs/ck/MEHistogram.cpp                |  508 ++++
 package_bgs/ck/MEHistogram.hpp                |  348 +++
 package_bgs/ck/MEImage.cpp                    | 1472 ++++++++++++
 package_bgs/ck/MEImage.hpp                    |  999 ++++++++
 package_bgs/ck/MotionDetection.cpp            | 1425 +++++++++++
 package_bgs/ck/MotionDetection.hpp            |  401 ++++
 package_bgs/ck/README.TXT                     |  135 ++
 package_bgs/ck/block.h                        |  286 +++
 package_bgs/ck/graph.cpp                      |   80 +
 package_bgs/ck/graph.h                        |  180 ++
 package_bgs/ck/maxflow.cpp                    |  514 ++++
 package_bgs/db/IndependentMultimodalBGS.cpp   |   54 +
 package_bgs/db/IndependentMultimodalBGS.h     |   29 +
 package_bgs/db/imbs.cpp                       |  748 ++++++
 package_bgs/db/imbs.hpp                       |  178 ++
 package_bgs/dp/AdaptiveMedianBGS.cpp          |  140 ++
 package_bgs/dp/AdaptiveMedianBGS.h            |   89 +
 package_bgs/dp/Bgs.h                          |   67 +
 package_bgs/dp/BgsParams.h                    |   59 +
 package_bgs/dp/DPAdaptiveMedianBGS.cpp        |  104 +
 package_bgs/dp/DPAdaptiveMedianBGS.h          |   56 +
 package_bgs/dp/DPEigenbackgroundBGS.cpp       |  106 +
 package_bgs/dp/DPEigenbackgroundBGS.h         |   56 +
 package_bgs/dp/DPGrimsonGMMBGS.cpp            |  105 +
 package_bgs/dp/DPGrimsonGMMBGS.h              |   56 +
 package_bgs/dp/DPMeanBGS.cpp                  |  105 +
 package_bgs/dp/DPMeanBGS.h                    |   56 +
 package_bgs/dp/DPPratiMediodBGS.cpp           |  107 +
 package_bgs/dp/DPPratiMediodBGS.h             |   57 +
 package_bgs/dp/DPTextureBGS.cpp               |  156 ++
 package_bgs/dp/DPTextureBGS.h                 |   60 +
 package_bgs/dp/DPWrenGABGS.cpp                |  105 +
 package_bgs/dp/DPWrenGABGS.h                  |   56 +
 package_bgs/dp/DPZivkovicAGMMBGS.cpp          |  104 +
 package_bgs/dp/DPZivkovicAGMMBGS.h            |   56 +
 package_bgs/dp/Eigenbackground.cpp            |  190 ++
 package_bgs/dp/Eigenbackground.h              |  101 +
 package_bgs/dp/Error.cpp                      |   57 +
 package_bgs/dp/Error.h                        |   36 +
 package_bgs/dp/GrimsonGMM.cpp                 |  332 +++
 package_bgs/dp/GrimsonGMM.h                   |  150 ++
 package_bgs/dp/Image.cpp                      |   76 +
 package_bgs/dp/Image.h                        |  364 +++
 package_bgs/dp/MeanBGS.cpp                    |  131 +
 package_bgs/dp/MeanBGS.h                      |   98 +
 package_bgs/dp/PratiMediodBGS.cpp             |  276 +++
 package_bgs/dp/PratiMediodBGS.h               |  142 ++
 package_bgs/dp/TextureBGS.cpp                 |  153 ++
 package_bgs/dp/TextureBGS.h                   |   55 +
 package_bgs/dp/WrenGA.cpp                     |  174 ++
 package_bgs/dp/WrenGA.h                       |  120 +
 package_bgs/dp/ZivkovicAGMM.cpp               |  411 ++++
 package_bgs/dp/ZivkovicAGMM.h                 |  160 ++
 package_bgs/jmo/BGS.h                         |  216 ++
 package_bgs/jmo/BackgroundSubtractionAPI.h    |  158 ++
 package_bgs/jmo/BlobExtraction.cpp            | 1490 ++++++++++++
 package_bgs/jmo/BlobExtraction.h              |   76 +
 package_bgs/jmo/BlobLibraryConfiguration.h    |   62 +
 package_bgs/jmo/BlobResult.cpp                |  920 +++++++
 package_bgs/jmo/BlobResult.h                  |  213 ++
 package_bgs/jmo/CMultiLayerBGS.cpp            | 2128 +++++++++++++++++
 package_bgs/jmo/CMultiLayerBGS.h              |  313 +++
 package_bgs/jmo/LocalBinaryPattern.cpp        |  314 +++
 package_bgs/jmo/LocalBinaryPattern.h          |  103 +
 package_bgs/jmo/MultiLayerBGS.cpp             |  332 +++
 package_bgs/jmo/MultiLayerBGS.h               |  101 +
 package_bgs/jmo/OpenCvDataConversion.h        |  224 ++
 package_bgs/jmo/blob.cpp                      | 1149 +++++++++
 package_bgs/jmo/blob.h                        |  853 +++++++
 package_bgs/lb/BGModel.cpp                    |   87 +
 package_bgs/lb/BGModel.h                      |   78 +
 package_bgs/lb/BGModelFuzzyGauss.cpp          |  210 ++
 package_bgs/lb/BGModelFuzzyGauss.h            |   75 +
 package_bgs/lb/BGModelFuzzySom.cpp            |  298 +++
 package_bgs/lb/BGModelFuzzySom.h              |   95 +
 package_bgs/lb/BGModelGauss.cpp               |  200 ++
 package_bgs/lb/BGModelGauss.h                 |   73 +
 package_bgs/lb/BGModelMog.cpp                 |  309 +++
 package_bgs/lb/BGModelMog.h                   |   83 +
 package_bgs/lb/BGModelSom.cpp                 |  291 +++
 package_bgs/lb/BGModelSom.h                   |   92 +
 package_bgs/lb/LBAdaptiveSOM.cpp              |  109 +
 package_bgs/lb/LBAdaptiveSOM.h                |   56 +
 package_bgs/lb/LBFuzzyAdaptiveSOM.cpp         |  109 +
 package_bgs/lb/LBFuzzyAdaptiveSOM.h           |   56 +
 package_bgs/lb/LBFuzzyGaussian.cpp            |  105 +
 package_bgs/lb/LBFuzzyGaussian.h              |   55 +
 package_bgs/lb/LBMixtureOfGaussians.cpp       |  105 +
 package_bgs/lb/LBMixtureOfGaussians.h         |   55 +
 package_bgs/lb/LBSimpleGaussian.cpp           |  100 +
 package_bgs/lb/LBSimpleGaussian.h             |   54 +
 package_bgs/lb/Types.h                        |   99 +
 package_bgs/my/MyBGS.cpp                      |   26 +
 package_bgs/my/MyBGS.h                        |   22 +
 package_bgs/pt/PBAS.cpp                       |  586 +++++
 package_bgs/pt/PBAS.h                         |  207 ++
 .../pt/PixelBasedAdaptiveSegmenter.cpp        |  124 +
 package_bgs/pt/PixelBasedAdaptiveSegmenter.h  |   58 +
 package_bgs/sjn/SJN_MultiCueBGS.cpp           | 2062 ++++++++++++++++
 package_bgs/sjn/SJN_MultiCueBGS.h             |  243 ++
 package_bgs/tb/FuzzyChoquetIntegral.cpp       |  204 ++
 package_bgs/tb/FuzzyChoquetIntegral.h         |   55 +
 package_bgs/tb/FuzzySugenoIntegral.cpp        |  204 ++
 package_bgs/tb/FuzzySugenoIntegral.h          |   55 +
 package_bgs/tb/FuzzyUtils.cpp                 |  511 ++++
 package_bgs/tb/FuzzyUtils.h                   |   54 +
 package_bgs/tb/MRF.cpp                        |  339 +++
 package_bgs/tb/MRF.h                          |  107 +
 package_bgs/tb/PerformanceUtils.cpp           |  521 ++++
 package_bgs/tb/PerformanceUtils.h             |   54 +
 package_bgs/tb/PixelUtils.cpp                 |  351 +++
 package_bgs/tb/PixelUtils.h                   |   61 +
 package_bgs/tb/T2FGMM.cpp                     |  337 +++
 package_bgs/tb/T2FGMM.h                       |  135 ++
 package_bgs/tb/T2FGMM_UM.cpp                  |  111 +
 package_bgs/tb/T2FGMM_UM.h                    |   58 +
 package_bgs/tb/T2FGMM_UV.cpp                  |  111 +
 package_bgs/tb/T2FGMM_UV.h                    |   58 +
 package_bgs/tb/T2FMRF.cpp                     |  432 ++++
 package_bgs/tb/T2FMRF.h                       |  164 ++
 package_bgs/tb/T2FMRF_UM.cpp                  |  140 ++
 package_bgs/tb/T2FMRF_UM.h                    |   64 +
 package_bgs/tb/T2FMRF_UV.cpp                  |  140 ++
 package_bgs/tb/T2FMRF_UV.h                    |   64 +
 run_camera.sh                                 |    3 +
 run_demo.sh                                   |    3 +
 run_video.sh                                  |    3 +
 vs2010/bgslibrary.sln                         |   20 +
 vs2010/bgslibrary.suo                         |  Bin 0 -> 11776 bytes
 vs2010/bgslibrary.vcxproj                     |  220 ++
 vs2010/bgslibrary.vcxproj.filters             |  444 ++++
 vs2010/bgslibrary.vcxproj.user                |    8 +
 194 files changed, 39237 insertions(+)
 create mode 100644 CMakeLists.txt
 create mode 100644 COPYING.txt
 create mode 100644 Config.h
 create mode 100644 Demo.cpp
 create mode 100644 FrameProcessor.cpp
 create mode 100644 FrameProcessor.h
 create mode 100644 IFrameProcessor.h
 create mode 100644 LICENSE.txt
 create mode 100644 Main.cpp
 create mode 100644 PreProcessor.cpp
 create mode 100644 PreProcessor.h
 create mode 100644 README.txt
 create mode 100644 VideoAnalysis.cpp
 create mode 100644 VideoAnalysis.h
 create mode 100644 VideoCapture.cpp
 create mode 100644 VideoCapture.h
 create mode 100644 bgslibrary_vs2010_opencv.txt
 create mode 100644 config/FrameProcessor.xml
 create mode 100644 config/PreProcessor.xml
 create mode 100644 config/VideoCapture.xml
 create mode 100644 dataset/video.avi
 create mode 100644 demos/DemoFrameDifferenceBGS.cpp
 create mode 100644 demos/DemoMultiLayerBGS.cpp
 create mode 100644 package_analysis/ForegroundMaskAnalysis.cpp
 create mode 100644 package_analysis/ForegroundMaskAnalysis.h
 create mode 100644 package_bgs/AdaptiveBackgroundLearning.cpp
 create mode 100644 package_bgs/AdaptiveBackgroundLearning.h
 create mode 100644 package_bgs/AdaptiveSelectiveBackgroundLearning.cpp
 create mode 100644 package_bgs/AdaptiveSelectiveBackgroundLearning.h
 create mode 100644 package_bgs/FrameDifferenceBGS.cpp
 create mode 100644 package_bgs/FrameDifferenceBGS.h
 create mode 100644 package_bgs/GMG.cpp
 create mode 100644 package_bgs/GMG.h
 create mode 100644 package_bgs/IBGS.h
 create mode 100644 package_bgs/MixtureOfGaussianV1BGS.cpp
 create mode 100644 package_bgs/MixtureOfGaussianV1BGS.h
 create mode 100644 package_bgs/MixtureOfGaussianV2BGS.cpp
 create mode 100644 package_bgs/MixtureOfGaussianV2BGS.h
 create mode 100644 package_bgs/StaticFrameDifferenceBGS.cpp
 create mode 100644 package_bgs/StaticFrameDifferenceBGS.h
 create mode 100644 package_bgs/WeightedMovingMeanBGS.cpp
 create mode 100644 package_bgs/WeightedMovingMeanBGS.h
 create mode 100644 package_bgs/WeightedMovingVarianceBGS.cpp
 create mode 100644 package_bgs/WeightedMovingVarianceBGS.h
 create mode 100644 package_bgs/ae/KDE.cpp
 create mode 100644 package_bgs/ae/KDE.h
 create mode 100644 package_bgs/ae/KernelTable.cpp
 create mode 100644 package_bgs/ae/KernelTable.h
 create mode 100644 package_bgs/ae/NPBGSubtractor.cpp
 create mode 100644 package_bgs/ae/NPBGSubtractor.h
 create mode 100644 package_bgs/ae/NPBGmodel.cpp
 create mode 100644 package_bgs/ae/NPBGmodel.h
 create mode 100644 package_bgs/av/TBackground.cpp
 create mode 100644 package_bgs/av/TBackground.h
 create mode 100644 package_bgs/av/TBackgroundVuMeter.cpp
 create mode 100644 package_bgs/av/TBackgroundVuMeter.h
 create mode 100644 package_bgs/av/VuMeter.cpp
 create mode 100644 package_bgs/av/VuMeter.h
 create mode 100644 package_bgs/ck/LbpMrf.cpp
 create mode 100644 package_bgs/ck/LbpMrf.h
 create mode 100644 package_bgs/ck/MEDefs.cpp
 create mode 100644 package_bgs/ck/MEDefs.hpp
 create mode 100644 package_bgs/ck/MEHistogram.cpp
 create mode 100644 package_bgs/ck/MEHistogram.hpp
 create mode 100644 package_bgs/ck/MEImage.cpp
 create mode 100644 package_bgs/ck/MEImage.hpp
 create mode 100644 package_bgs/ck/MotionDetection.cpp
 create mode 100644 package_bgs/ck/MotionDetection.hpp
 create mode 100644 package_bgs/ck/README.TXT
 create mode 100644 package_bgs/ck/block.h
 create mode 100644 package_bgs/ck/graph.cpp
 create mode 100644 package_bgs/ck/graph.h
 create mode 100644 package_bgs/ck/maxflow.cpp
 create mode 100644 package_bgs/db/IndependentMultimodalBGS.cpp
 create mode 100644 package_bgs/db/IndependentMultimodalBGS.h
 create mode 100644 package_bgs/db/imbs.cpp
 create mode 100644 package_bgs/db/imbs.hpp
 create mode 100644 package_bgs/dp/AdaptiveMedianBGS.cpp
 create mode 100644 package_bgs/dp/AdaptiveMedianBGS.h
 create mode 100644 package_bgs/dp/Bgs.h
 create mode 100644 package_bgs/dp/BgsParams.h
 create mode 100644 package_bgs/dp/DPAdaptiveMedianBGS.cpp
 create mode 100644 package_bgs/dp/DPAdaptiveMedianBGS.h
 create mode 100644 package_bgs/dp/DPEigenbackgroundBGS.cpp
 create mode 100644 package_bgs/dp/DPEigenbackgroundBGS.h
 create mode 100644 package_bgs/dp/DPGrimsonGMMBGS.cpp
 create mode 100644 package_bgs/dp/DPGrimsonGMMBGS.h
 create mode 100644 package_bgs/dp/DPMeanBGS.cpp
 create mode 100644 package_bgs/dp/DPMeanBGS.h
 create mode 100644 package_bgs/dp/DPPratiMediodBGS.cpp
 create mode 100644 package_bgs/dp/DPPratiMediodBGS.h
 create mode 100644 package_bgs/dp/DPTextureBGS.cpp
 create mode 100644 package_bgs/dp/DPTextureBGS.h
 create mode 100644 package_bgs/dp/DPWrenGABGS.cpp
 create mode 100644 package_bgs/dp/DPWrenGABGS.h
 create mode 100644 package_bgs/dp/DPZivkovicAGMMBGS.cpp
 create mode 100644 package_bgs/dp/DPZivkovicAGMMBGS.h
 create mode 100644 package_bgs/dp/Eigenbackground.cpp
 create mode 100644 package_bgs/dp/Eigenbackground.h
 create mode 100644 package_bgs/dp/Error.cpp
 create mode 100644 package_bgs/dp/Error.h
 create mode 100644 package_bgs/dp/GrimsonGMM.cpp
 create mode 100644 package_bgs/dp/GrimsonGMM.h
 create mode 100644 package_bgs/dp/Image.cpp
 create mode 100644 package_bgs/dp/Image.h
 create mode 100644 package_bgs/dp/MeanBGS.cpp
 create mode 100644 package_bgs/dp/MeanBGS.h
 create mode 100644 package_bgs/dp/PratiMediodBGS.cpp
 create mode 100644 package_bgs/dp/PratiMediodBGS.h
 create mode 100644 package_bgs/dp/TextureBGS.cpp
 create mode 100644 package_bgs/dp/TextureBGS.h
 create mode 100644 package_bgs/dp/WrenGA.cpp
 create mode 100644 package_bgs/dp/WrenGA.h
 create mode 100644 package_bgs/dp/ZivkovicAGMM.cpp
 create mode 100644 package_bgs/dp/ZivkovicAGMM.h
 create mode 100644 package_bgs/jmo/BGS.h
 create mode 100644 package_bgs/jmo/BackgroundSubtractionAPI.h
 create mode 100644 package_bgs/jmo/BlobExtraction.cpp
 create mode 100644 package_bgs/jmo/BlobExtraction.h
 create mode 100644 package_bgs/jmo/BlobLibraryConfiguration.h
 create mode 100644 package_bgs/jmo/BlobResult.cpp
 create mode 100644 package_bgs/jmo/BlobResult.h
 create mode 100644 package_bgs/jmo/CMultiLayerBGS.cpp
 create mode 100644 package_bgs/jmo/CMultiLayerBGS.h
 create mode 100644 package_bgs/jmo/LocalBinaryPattern.cpp
 create mode 100644 package_bgs/jmo/LocalBinaryPattern.h
 create mode 100644 package_bgs/jmo/MultiLayerBGS.cpp
 create mode 100644 package_bgs/jmo/MultiLayerBGS.h
 create mode 100644 package_bgs/jmo/OpenCvDataConversion.h
 create mode 100644 package_bgs/jmo/blob.cpp
 create mode 100644 package_bgs/jmo/blob.h
 create mode 100644 package_bgs/lb/BGModel.cpp
 create mode 100644 package_bgs/lb/BGModel.h
 create mode 100644 package_bgs/lb/BGModelFuzzyGauss.cpp
 create mode 100644 package_bgs/lb/BGModelFuzzyGauss.h
 create mode 100644 package_bgs/lb/BGModelFuzzySom.cpp
 create mode 100644 package_bgs/lb/BGModelFuzzySom.h
 create mode 100644 package_bgs/lb/BGModelGauss.cpp
 create mode 100644 package_bgs/lb/BGModelGauss.h
 create mode 100644 package_bgs/lb/BGModelMog.cpp
 create mode 100644 package_bgs/lb/BGModelMog.h
 create mode 100644 package_bgs/lb/BGModelSom.cpp
 create mode 100644 package_bgs/lb/BGModelSom.h
 create mode 100644 package_bgs/lb/LBAdaptiveSOM.cpp
 create mode 100644 package_bgs/lb/LBAdaptiveSOM.h
 create mode 100644 package_bgs/lb/LBFuzzyAdaptiveSOM.cpp
 create mode 100644 package_bgs/lb/LBFuzzyAdaptiveSOM.h
 create mode 100644 package_bgs/lb/LBFuzzyGaussian.cpp
 create mode 100644 package_bgs/lb/LBFuzzyGaussian.h
 create mode 100644 package_bgs/lb/LBMixtureOfGaussians.cpp
 create mode 100644 package_bgs/lb/LBMixtureOfGaussians.h
 create mode 100644 package_bgs/lb/LBSimpleGaussian.cpp
 create mode 100644 package_bgs/lb/LBSimpleGaussian.h
 create mode 100644 package_bgs/lb/Types.h
 create mode 100644 package_bgs/my/MyBGS.cpp
 create mode 100644 package_bgs/my/MyBGS.h
 create mode 100644 package_bgs/pt/PBAS.cpp
 create mode 100644 package_bgs/pt/PBAS.h
 create mode 100644 package_bgs/pt/PixelBasedAdaptiveSegmenter.cpp
 create mode 100644 package_bgs/pt/PixelBasedAdaptiveSegmenter.h
 create mode 100644 package_bgs/sjn/SJN_MultiCueBGS.cpp
 create mode 100644 package_bgs/sjn/SJN_MultiCueBGS.h
 create mode 100644 package_bgs/tb/FuzzyChoquetIntegral.cpp
 create mode 100644 package_bgs/tb/FuzzyChoquetIntegral.h
 create mode 100644 package_bgs/tb/FuzzySugenoIntegral.cpp
 create mode 100644 package_bgs/tb/FuzzySugenoIntegral.h
 create mode 100644 package_bgs/tb/FuzzyUtils.cpp
 create mode 100644 package_bgs/tb/FuzzyUtils.h
 create mode 100644 package_bgs/tb/MRF.cpp
 create mode 100644 package_bgs/tb/MRF.h
 create mode 100644 package_bgs/tb/PerformanceUtils.cpp
 create mode 100644 package_bgs/tb/PerformanceUtils.h
 create mode 100644 package_bgs/tb/PixelUtils.cpp
 create mode 100644 package_bgs/tb/PixelUtils.h
 create mode 100644 package_bgs/tb/T2FGMM.cpp
 create mode 100644 package_bgs/tb/T2FGMM.h
 create mode 100644 package_bgs/tb/T2FGMM_UM.cpp
 create mode 100644 package_bgs/tb/T2FGMM_UM.h
 create mode 100644 package_bgs/tb/T2FGMM_UV.cpp
 create mode 100644 package_bgs/tb/T2FGMM_UV.h
 create mode 100644 package_bgs/tb/T2FMRF.cpp
 create mode 100644 package_bgs/tb/T2FMRF.h
 create mode 100644 package_bgs/tb/T2FMRF_UM.cpp
 create mode 100644 package_bgs/tb/T2FMRF_UM.h
 create mode 100644 package_bgs/tb/T2FMRF_UV.cpp
 create mode 100644 package_bgs/tb/T2FMRF_UV.h
 create mode 100644 run_camera.sh
 create mode 100644 run_demo.sh
 create mode 100644 run_video.sh
 create mode 100644 vs2010/bgslibrary.sln
 create mode 100644 vs2010/bgslibrary.suo
 create mode 100644 vs2010/bgslibrary.vcxproj
 create mode 100644 vs2010/bgslibrary.vcxproj.filters
 create mode 100644 vs2010/bgslibrary.vcxproj.user

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..9e26507
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,52 @@
+
+cmake_minimum_required(VERSION 2.8)
+
+project(bgs)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CSS_FLAGS} -std=gnu++0x")
+
+find_package(OpenCV REQUIRED)
+
+if(${OpenCV_VERSION} VERSION_LESS 2.3.1)
+  message (FATAL_ERROR "OpenCV version is not compatible: ${OpenCV_VERSION}")
+endif()
+
+file(GLOB sources FrameProcessor.cpp PreProcessor.cpp VideoAnalysis.cpp  VideoCapture.cpp)
+file(GLOB main Main.cpp)
+file(GLOB demo Demo.cpp)
+
+list(REMOVE_ITEM sources ${demo})
+
+file(GLOB_RECURSE analysis package_analysis/*.cpp)
+file(GLOB_RECURSE bgs package_bgs/*.cpp)
+file(GLOB_RECURSE bgs_include package_bgs/*.h)
+
+# GMG is not available in older OpenCV versions
+if(${OpenCV_VERSION} VERSION_LESS 2.4.3)
+  file(GLOB gmg package_bgs/GMG.cpp)
+  list(REMOVE_ITEM bgs ${gmg})
+endif()
+
+include_directories(${CMAKE_SOURCE_DIR})
+
+add_library(bgs SHARED ${sources} ${bgs} ${analysis})
+target_link_libraries(bgs ${OpenCV_LIBS})
+set_property(TARGET bgs PROPERTY PUBLIC_HEADER ${bgs_include})
+
+add_executable(bgs_bin ${main})
+target_link_libraries(bgs_bin ${OpenCV_LIBS} bgs)
+set_target_properties(bgs_bin
+  PROPERTIES OUTPUT_NAME bgs)
+
+add_executable(bgs_demo ${demo})
+target_link_libraries(bgs_demo ${OpenCV_LIBS} bgs)
+
+INSTALL(TARGETS bgs
+	bgs_demo
+	bgs_bin
+  RUNTIME DESTINATION bin COMPONENT app
+  LIBRARY DESTINATION lib COMPONENT runtime
+  ARCHIVE DESTINATION lib COMPONENT runtime
+  PUBLIC_HEADER DESTINATION include/package_bgs COMPONENT dev
+  FRAMEWORK DESTINATION "/Library/Frameworks"
+)
diff --git a/COPYING.txt b/COPYING.txt
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYING.txt
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/Config.h b/Config.h
new file mode 100644
index 0000000..01cf721
--- /dev/null
+++ b/Config.h
@@ -0,0 +1,22 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+const int KEY_REPEAT = 'r';
+const int KEY_SPACE  = 32;
+const int KEY_ESC    = 27;
+const int KEY_ESC2   = 'q';
diff --git a/Demo.cpp b/Demo.cpp
new file mode 100644
index 0000000..3936976
--- /dev/null
+++ b/Demo.cpp
@@ -0,0 +1,182 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "package_bgs/FrameDifferenceBGS.h"
+#include "package_bgs/StaticFrameDifferenceBGS.h"
+#include "package_bgs/WeightedMovingMeanBGS.h"
+#include "package_bgs/WeightedMovingVarianceBGS.h"
+#include "package_bgs/MixtureOfGaussianV1BGS.h"
+#include "package_bgs/MixtureOfGaussianV2BGS.h"
+#include "package_bgs/AdaptiveBackgroundLearning.h"
+#include "package_bgs/AdaptiveSelectiveBackgroundLearning.h"
+
+#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >= 4 && CV_SUBMINOR_VERSION >= 3
+#include "package_bgs/GMG.h"
+#endif
+
+#include "package_bgs/dp/DPAdaptiveMedianBGS.h"
+#include "package_bgs/dp/DPGrimsonGMMBGS.h"
+#include "package_bgs/dp/DPZivkovicAGMMBGS.h"
+#include "package_bgs/dp/DPMeanBGS.h"
+#include "package_bgs/dp/DPWrenGABGS.h"
+#include "package_bgs/dp/DPPratiMediodBGS.h"
+#include "package_bgs/dp/DPEigenbackgroundBGS.h"
+#include "package_bgs/dp/DPTextureBGS.h"
+
+#include "package_bgs/tb/T2FGMM_UM.h"
+#include "package_bgs/tb/T2FGMM_UV.h"
+#include "package_bgs/tb/T2FMRF_UM.h"
+#include "package_bgs/tb/T2FMRF_UV.h"
+#include "package_bgs/tb/FuzzySugenoIntegral.h"
+#include "package_bgs/tb/FuzzyChoquetIntegral.h"
+
+#include "package_bgs/lb/LBSimpleGaussian.h"
+#include "package_bgs/lb/LBFuzzyGaussian.h"
+#include "package_bgs/lb/LBMixtureOfGaussians.h"
+#include "package_bgs/lb/LBAdaptiveSOM.h"
+#include "package_bgs/lb/LBFuzzyAdaptiveSOM.h"
+
+#if !defined(_WIN32)
+// Currently this method works only on Linux platform.
+#include "package_bgs/ck/LbpMrf.h"
+#endif
+
+#include "package_bgs/jmo/MultiLayerBGS.h"
+#include "package_bgs/pt/PixelBasedAdaptiveSegmenter.h"
+#include "package_bgs/av/VuMeter.h"
+#include "package_bgs/ae/KDE.h"
+#include "package_bgs/db/IndependentMultimodalBGS.h"
+#include "package_bgs/sjn/SJN_MultiCueBGS.h"
+
+void main(int argc, char **argv)
+{
+  std::cout << "Using OpenCV " << CV_MAJOR_VERSION << "." << CV_MINOR_VERSION << "." << CV_SUBMINOR_VERSION << std::endl;
+
+  CvCapture *capture = 0;
+  int resize_factor = 100;
+
+  if(argc > 1)
+  {
+    std::cout << "Openning: " << argv[1] << std::endl;
+    capture = cvCaptureFromAVI(argv[1]);
+  }
+  else
+  {
+    capture = cvCaptureFromCAM(0);
+    resize_factor = 50; // set size = 50% of original image
+  }
+
+  if(!capture)
+  {
+    std::cerr << "Cannot initialize video!" << std::endl;
+    return;
+  }
+  
+  IplImage *frame_aux = cvQueryFrame(capture);
+  IplImage *frame = cvCreateImage(cvSize((int)((frame_aux->width*resize_factor)/100) , (int)((frame_aux->height*resize_factor)/100)), frame_aux->depth, frame_aux->nChannels);
+  cvResize(frame_aux, frame);
+
+  /* Background Subtraction Methods */
+  IBGS *bgs;
+
+  /*** Default Package ***/
+  bgs = new FrameDifferenceBGS;
+  //bgs = new StaticFrameDifferenceBGS;
+  //bgs = new WeightedMovingMeanBGS;
+  //bgs = new WeightedMovingVarianceBGS;
+  //bgs = new MixtureOfGaussianV1BGS;
+  //bgs = new MixtureOfGaussianV2BGS;
+  //bgs = new AdaptiveBackgroundLearning;
+  //bgs = new AdaptiveSelectiveBackgroundLearning;
+  //bgs = new GMG;
+  
+  /*** DP Package (thanks to Donovan Parks) ***/
+  //bgs = new DPAdaptiveMedianBGS;
+  //bgs = new DPGrimsonGMMBGS;
+  //bgs = new DPZivkovicAGMMBGS;
+  //bgs = new DPMeanBGS;
+  //bgs = new DPWrenGABGS;
+  //bgs = new DPPratiMediodBGS;
+  //bgs = new DPEigenbackgroundBGS;
+  //bgs = new DPTextureBGS;
+
+  /*** TB Package (thanks to Thierry Bouwmans, Fida EL BAF and Zhenjie Zhao) ***/
+  //bgs = new T2FGMM_UM;
+  //bgs = new T2FGMM_UV;
+  //bgs = new T2FMRF_UM;
+  //bgs = new T2FMRF_UV;
+  //bgs = new FuzzySugenoIntegral;
+  //bgs = new FuzzyChoquetIntegral;
+
+  /*** JMO Package (thanks to Jean-Marc Odobez) ***/
+  //bgs = new MultiLayerBGS;
+
+  /*** PT Package (thanks to Martin Hofmann, Philipp Tiefenbacher and Gerhard Rigoll) ***/
+  //bgs = new PixelBasedAdaptiveSegmenter;
+
+  /*** LB Package (thanks to Laurence Bender) ***/
+  //bgs = new LBSimpleGaussian;
+  //bgs = new LBFuzzyGaussian;
+  //bgs = new LBMixtureOfGaussians;
+  //bgs = new LBAdaptiveSOM;
+  //bgs = new LBFuzzyAdaptiveSOM;
+
+  /*** LBP-MRF Package (thanks to Csaba Kertész) ***/
+  //bgs = new LbpMrf;
+
+  /*** AV Package (thanks to Lionel Robinault and Antoine Vacavant) ***/
+  //bgs = new VuMeter;
+
+  /*** EG Package (thanks to Ahmed Elgammal) ***/
+  //bgs = new KDE;
+  
+  /*** DB Package (thanks to Domenico Daniele Bloisi) ***/
+  //bgs = new IndependentMultimodalBGS;
+
+  /*** SJN Package (thanks to SeungJong Noh) ***/
+  //bgs = new SJN_MultiCueBGS;
+
+  int key = 0;
+  while(key != 'q')
+  {
+    frame_aux = cvQueryFrame(capture);
+    if(!frame_aux) break;
+
+    cvResize(frame_aux, frame);
+    
+    cv::Mat img_input(frame);
+    cv::imshow("input", img_input);
+
+    cv::Mat img_mask;
+    cv::Mat img_bkgmodel;
+    bgs->process(img_input, img_mask, img_bkgmodel); // by default, it shows automatically the foreground mask image
+    
+    //if(!img_mask.empty())
+    //  cv::imshow("Foreground", img_mask);
+    //  do something
+    
+    key = cvWaitKey(33);
+  }
+
+  delete bgs;
+
+  cvDestroyAllWindows();
+  cvReleaseCapture(&capture);
+}
diff --git a/FrameProcessor.cpp b/FrameProcessor.cpp
new file mode 100644
index 0000000..585cb9b
--- /dev/null
+++ b/FrameProcessor.cpp
@@ -0,0 +1,557 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "FrameProcessor.h"
+
+FrameProcessor::FrameProcessor() : firstTime(true), frameNumber(0), duration(0), tictoc(""), frameToStop(0)
+{
+  std::cout << "FrameProcessor()" << std::endl;
+
+  loadConfig();
+  saveConfig();
+}
+
+FrameProcessor::~FrameProcessor()
+{
+  std::cout << "~FrameProcessor()" << std::endl;
+}
+
+void FrameProcessor::init()
+{
+  if(enablePreProcessor)
+    preProcessor = new PreProcessor;
+
+  if(enableFrameDifferenceBGS)
+    frameDifference = new FrameDifferenceBGS;
+
+  if(enableStaticFrameDifferenceBGS)
+    staticFrameDifference = new StaticFrameDifferenceBGS;
+
+  if(enableWeightedMovingMeanBGS)
+    weightedMovingMean = new WeightedMovingMeanBGS;
+
+  if(enableWeightedMovingVarianceBGS)
+    weightedMovingVariance = new WeightedMovingVarianceBGS;
+
+  if(enableMixtureOfGaussianV1BGS)
+    mixtureOfGaussianV1BGS = new MixtureOfGaussianV1BGS;
+
+  if(enableMixtureOfGaussianV2BGS)
+    mixtureOfGaussianV2BGS = new MixtureOfGaussianV2BGS;
+
+  if(enableAdaptiveBackgroundLearning)
+    adaptiveBackgroundLearning = new AdaptiveBackgroundLearning;
+
+#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >= 4 && CV_SUBMINOR_VERSION >= 3
+  if(enableGMG)
+    gmg = new GMG;
+#endif
+
+  if(enableDPAdaptiveMedianBGS)
+    adaptiveMedian = new DPAdaptiveMedianBGS;
+
+  if(enableDPGrimsonGMMBGS)
+    grimsonGMM = new DPGrimsonGMMBGS;
+
+  if(enableDPZivkovicAGMMBGS)
+    zivkovicAGMM = new DPZivkovicAGMMBGS;
+
+  if(enableDPMeanBGS)
+    temporalMean = new DPMeanBGS;
+
+  if(enableDPWrenGABGS)
+    wrenGA = new DPWrenGABGS;
+
+  if(enableDPPratiMediodBGS)
+    pratiMediod = new DPPratiMediodBGS;
+
+  if(enableDPEigenbackgroundBGS)
+    eigenBackground = new DPEigenbackgroundBGS;
+
+  if(enableDPTextureBGS)
+    textureBGS = new DPTextureBGS;
+
+  if(enableT2FGMM_UM)
+    type2FuzzyGMM_UM = new T2FGMM_UM;
+
+  if(enableT2FGMM_UV)
+    type2FuzzyGMM_UV = new T2FGMM_UV;
+
+  if(enableT2FMRF_UM)
+    type2FuzzyMRF_UM = new T2FMRF_UM;
+
+  if(enableT2FMRF_UV)
+    type2FuzzyMRF_UV = new T2FMRF_UV;
+
+  if(enableFuzzySugenoIntegral)
+    fuzzySugenoIntegral = new FuzzySugenoIntegral;
+
+  if(enableFuzzyChoquetIntegral)
+    fuzzyChoquetIntegral = new FuzzyChoquetIntegral;
+  
+  if(enableLBSimpleGaussian)
+    lbSimpleGaussian = new LBSimpleGaussian;
+
+  if(enableLBFuzzyGaussian)
+    lbFuzzyGaussian = new LBFuzzyGaussian;
+
+  if(enableLBMixtureOfGaussians)
+    lbMixtureOfGaussians = new LBMixtureOfGaussians;
+
+  if(enableLBAdaptiveSOM)
+    lbAdaptiveSOM = new LBAdaptiveSOM;
+
+  if(enableLBFuzzyAdaptiveSOM)
+    lbFuzzyAdaptiveSOM = new LBFuzzyAdaptiveSOM;
+
+  #if !defined(_WIN32)
+  if(enableLbpMrf)
+    lbpMrf = new LbpMrf;
+  #endif
+
+  if(enableMultiLayerBGS)
+    multiLayerBGS = new MultiLayerBGS;
+
+  if(enablePBAS)
+    pixelBasedAdaptiveSegmenter = new PixelBasedAdaptiveSegmenter;
+
+  if(enableVuMeter)
+    vuMeter = new VuMeter;
+
+  if(enableKDE)
+    kde = new KDE;
+
+  if(enableForegroundMaskAnalysis)
+    foregroundMaskAnalysis = new ForegroundMaskAnalysis;
+}
+
+void FrameProcessor::process(std::string name, IBGS *bgs, const cv::Mat &img_input, cv::Mat &img_bgs)
+{
+  if(tictoc == name)
+    tic(name);
+
+  cv::Mat img_bkgmodel;
+  bgs->process(img_input, img_bgs, img_bkgmodel);
+
+  if(tictoc == name)
+    toc();
+}
+
+void FrameProcessor::process(const cv::Mat &img_input)
+{
+  frameNumber++;
+
+  if(enablePreProcessor)
+    preProcessor->process(img_input, img_prep);
+  
+  if(enableFrameDifferenceBGS)
+    process("FrameDifferenceBGS", frameDifference, img_prep, img_framediff);
+  
+  if(enableStaticFrameDifferenceBGS)
+    process("StaticFrameDifferenceBGS", staticFrameDifference, img_prep, img_staticfdiff);
+  
+  if(enableWeightedMovingMeanBGS)
+    process("WeightedMovingMeanBGS", weightedMovingMean, img_prep, img_wmovmean);
+  
+  if(enableWeightedMovingVarianceBGS)
+    process("WeightedMovingVarianceBGS", weightedMovingVariance, img_prep, img_movvar);
+  
+  if(enableMixtureOfGaussianV1BGS)
+    process("MixtureOfGaussianV1BGS", mixtureOfGaussianV1BGS, img_prep, img_mog1);
+  
+  if(enableMixtureOfGaussianV2BGS)
+    process("MixtureOfGaussianV2BGS", mixtureOfGaussianV2BGS, img_prep, img_mog2);
+  
+  if(enableAdaptiveBackgroundLearning)
+    process("AdaptiveBackgroundLearning", adaptiveBackgroundLearning, img_prep, img_bkgl_fgmask);
+
+#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >= 4 && CV_SUBMINOR_VERSION >= 3
+  if(enableGMG)
+    process("GMG", gmg, img_prep, img_gmg);
+#endif
+
+  if(enableDPAdaptiveMedianBGS)
+    process("DPAdaptiveMedianBGS", adaptiveMedian, img_prep, img_adpmed);
+  
+  if(enableDPGrimsonGMMBGS)
+    process("DPGrimsonGMMBGS", grimsonGMM, img_prep, img_grigmm);
+  
+  if(enableDPZivkovicAGMMBGS)
+    process("DPZivkovicAGMMBGS", zivkovicAGMM, img_prep, img_zivgmm);
+  
+  if(enableDPMeanBGS)
+    process("DPMeanBGS", temporalMean, img_prep, img_tmpmean);
+  
+  if(enableDPWrenGABGS)
+    process("DPWrenGABGS", wrenGA, img_prep, img_wrenga);
+  
+  if(enableDPPratiMediodBGS)
+    process("DPPratiMediodBGS", pratiMediod, img_prep, img_pramed);
+  
+  if(enableDPEigenbackgroundBGS)
+    process("DPEigenbackgroundBGS", eigenBackground, img_prep, img_eigbkg);
+  
+  if(enableDPTextureBGS)
+    process("DPTextureBGS", textureBGS, img_prep, img_texbgs);
+
+  if(enableT2FGMM_UM)
+    process("T2FGMM_UM", type2FuzzyGMM_UM, img_prep, img_t2fgmm_um);
+
+  if(enableT2FGMM_UV)
+    process("T2FGMM_UV", type2FuzzyGMM_UV, img_prep, img_t2fgmm_uv);
+
+  if(enableT2FMRF_UM)
+    process("T2FMRF_UM", type2FuzzyMRF_UM, img_prep, img_t2fmrf_um);
+
+  if(enableT2FMRF_UV)
+    process("T2FMRF_UV", type2FuzzyMRF_UV, img_prep, img_t2fmrf_uv);
+
+  if(enableFuzzySugenoIntegral)
+    process("FuzzySugenoIntegral", fuzzySugenoIntegral, img_prep, img_fsi);
+
+  if(enableFuzzyChoquetIntegral)
+    process("FuzzyChoquetIntegral", fuzzyChoquetIntegral, img_prep, img_fci);
+
+  if(enableLBSimpleGaussian)
+    process("LBSimpleGaussian", lbSimpleGaussian, img_prep, img_lb_sg);
+  
+  if(enableLBFuzzyGaussian)
+    process("LBFuzzyGaussian", lbFuzzyGaussian, img_prep, img_lb_fg);
+
+  if(enableLBMixtureOfGaussians)
+    process("LBMixtureOfGaussians", lbMixtureOfGaussians, img_prep, img_lb_mog);
+
+  if(enableLBAdaptiveSOM)
+    process("LBAdaptiveSOM", lbAdaptiveSOM, img_prep, img_lb_som);
+
+  if(enableLBFuzzyAdaptiveSOM)
+    process("LBFuzzyAdaptiveSOM", lbFuzzyAdaptiveSOM, img_prep, img_lb_fsom);
+
+  #if !defined(_WIN32)
+  if(enableLbpMrf)
+    process("LbpMrf", lbpMrf, img_prep, img_lbp_mrf);
+  #endif
+
+  if(enableMultiLayerBGS)
+  {
+    multiLayerBGS->setStatus(MultiLayerBGS::Status::MLBGS_LEARN);
+    //multiLayerBGS->setStatus(MultiLayerBGS::Status::MLBGS_DETECT);
+    process("MultiLayerBGS", multiLayerBGS, img_prep, img_mlbgs);
+  }
+  
+  if(enablePBAS)
+    process("PBAS", pixelBasedAdaptiveSegmenter, img_prep, img_pt_pbas);
+  
+  if(enableVuMeter)
+    process("VuMeter", vuMeter, img_prep, img_vumeter);
+  
+  if(enableKDE)
+    process("KDE", kde, img_prep, img_kde);
+
+  if(enableForegroundMaskAnalysis)
+  {
+    foregroundMaskAnalysis->stopAt = frameToStop;
+    foregroundMaskAnalysis->img_ref_path = imgref;
+
+    foregroundMaskAnalysis->process(frameNumber, "FrameDifferenceBGS", img_framediff);
+    foregroundMaskAnalysis->process(frameNumber, "StaticFrameDifferenceBGS", img_staticfdiff);
+    foregroundMaskAnalysis->process(frameNumber, "WeightedMovingMeanBGS", img_wmovmean);
+    foregroundMaskAnalysis->process(frameNumber, "WeightedMovingVarianceBGS", img_movvar);
+    foregroundMaskAnalysis->process(frameNumber, "MixtureOfGaussianV1BGS", img_mog1);
+    foregroundMaskAnalysis->process(frameNumber, "MixtureOfGaussianV2BGS", img_mog2);
+    foregroundMaskAnalysis->process(frameNumber, "AdaptiveBackgroundLearning", img_bkgl_fgmask);
+#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >= 4 && CV_SUBMINOR_VERSION >= 3
+    foregroundMaskAnalysis->process(frameNumber, "GMG", img_gmg);
+#endif
+    foregroundMaskAnalysis->process(frameNumber, "DPAdaptiveMedianBGS", img_adpmed);
+    foregroundMaskAnalysis->process(frameNumber, "DPGrimsonGMMBGS", img_grigmm);
+    foregroundMaskAnalysis->process(frameNumber, "DPZivkovicAGMMBGS", img_zivgmm);
+    foregroundMaskAnalysis->process(frameNumber, "DPMeanBGS", img_tmpmean);
+    foregroundMaskAnalysis->process(frameNumber, "DPWrenGABGS", img_wrenga);
+    foregroundMaskAnalysis->process(frameNumber, "DPPratiMediodBGS", img_pramed);
+    foregroundMaskAnalysis->process(frameNumber, "DPEigenbackgroundBGS", img_eigbkg);
+    foregroundMaskAnalysis->process(frameNumber, "DPTextureBGS", img_texbgs);
+    foregroundMaskAnalysis->process(frameNumber, "T2FGMM_UM", img_t2fgmm_um);
+    foregroundMaskAnalysis->process(frameNumber, "T2FGMM_UV", img_t2fgmm_uv);
+    foregroundMaskAnalysis->process(frameNumber, "T2FMRF_UM", img_t2fmrf_um);
+    foregroundMaskAnalysis->process(frameNumber, "T2FMRF_UV", img_t2fmrf_uv);
+    foregroundMaskAnalysis->process(frameNumber, "FuzzySugenoIntegral", img_fsi);
+    foregroundMaskAnalysis->process(frameNumber, "FuzzyChoquetIntegral", img_fci);
+    foregroundMaskAnalysis->process(frameNumber, "LBSimpleGaussian", img_lb_sg);
+    foregroundMaskAnalysis->process(frameNumber, "LBFuzzyGaussian", img_lb_fg);
+    foregroundMaskAnalysis->process(frameNumber, "LBMixtureOfGaussians", img_lb_mog);
+    foregroundMaskAnalysis->process(frameNumber, "LBAdaptiveSOM", img_lb_som);
+    foregroundMaskAnalysis->process(frameNumber, "LBFuzzyAdaptiveSOM", img_lb_fsom);
+	#if !defined(_WIN32)
+    foregroundMaskAnalysis->process(frameNumber, "LbpMrf", img_lbp_mrf);
+	#endif
+    foregroundMaskAnalysis->process(frameNumber, "MultiLayerBGS", img_mlbgs);
+    foregroundMaskAnalysis->process(frameNumber, "PBAS", img_pt_pbas);
+    foregroundMaskAnalysis->process(frameNumber, "VuMeter", img_vumeter);
+    foregroundMaskAnalysis->process(frameNumber, "KDE", img_kde);
+  }
+
+  firstTime = false;
+}
+
+void FrameProcessor::finish(void)
+{
+  /*if(enableMultiLayerBGS)
+    multiLayerBGS->finish();
+
+  if(enableLBSimpleGaussian)
+    lbSimpleGaussian->finish();
+  
+  if(enableLBFuzzyGaussian)
+    lbFuzzyGaussian->finish();
+
+  if(enableLBMixtureOfGaussians)
+    lbMixtureOfGaussians->finish();
+
+  if(enableLBAdaptiveSOM)
+    lbAdaptiveSOM->finish();
+
+  if(enableLBFuzzyAdaptiveSOM)
+    lbFuzzyAdaptiveSOM->finish();*/
+  
+  if(enableForegroundMaskAnalysis)
+    delete foregroundMaskAnalysis;
+  
+  if(enableKDE)
+    delete kde;
+  
+  if(enableVuMeter)
+    delete vuMeter;
+  
+  if(enablePBAS)
+    delete pixelBasedAdaptiveSegmenter;
+
+  if(enableMultiLayerBGS)
+    delete multiLayerBGS;
+  
+  if(enableLBFuzzyAdaptiveSOM)
+    delete lbFuzzyAdaptiveSOM;
+
+  if(enableLBAdaptiveSOM)
+    delete lbAdaptiveSOM;
+
+  if(enableLBMixtureOfGaussians)
+    delete lbMixtureOfGaussians;
+
+  if(enableLBFuzzyGaussian)
+    delete lbFuzzyGaussian;
+
+  if(enableLBSimpleGaussian)
+    delete lbSimpleGaussian;
+
+  #if !defined(_WIN32)
+  if(enableLbpMrf)
+    delete lbpMrf;
+  #endif
+
+  if(enableFuzzyChoquetIntegral)
+    delete fuzzyChoquetIntegral;
+
+  if(enableFuzzySugenoIntegral)
+    delete fuzzySugenoIntegral;
+
+  if(enableT2FMRF_UV)
+    delete type2FuzzyMRF_UV;
+
+  if(enableT2FMRF_UM)
+    delete type2FuzzyMRF_UM;
+
+  if(enableT2FGMM_UV)
+    delete type2FuzzyGMM_UV;
+
+  if(enableT2FGMM_UM)
+    delete type2FuzzyGMM_UM;
+
+  if(enableDPTextureBGS)
+    delete textureBGS;
+
+  if(enableDPEigenbackgroundBGS)
+    delete eigenBackground;
+
+  if(enableDPPratiMediodBGS)
+    delete pratiMediod;
+
+  if(enableDPWrenGABGS)
+    delete wrenGA;
+
+  if(enableDPMeanBGS)
+    delete temporalMean;
+
+  if(enableDPZivkovicAGMMBGS)
+    delete zivkovicAGMM;
+
+  if(enableDPGrimsonGMMBGS)
+    delete grimsonGMM;
+
+  if(enableDPAdaptiveMedianBGS)
+    delete adaptiveMedian;
+
+#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >= 4 && CV_SUBMINOR_VERSION >= 3
+  if(enableGMG)
+    delete gmg;
+#endif
+
+  if(enableAdaptiveBackgroundLearning)
+    delete adaptiveBackgroundLearning;
+
+  if(enableMixtureOfGaussianV2BGS)
+    delete mixtureOfGaussianV2BGS;
+
+  if(enableMixtureOfGaussianV1BGS)
+    delete mixtureOfGaussianV1BGS;
+
+  if(enableWeightedMovingVarianceBGS)
+    delete weightedMovingVariance;
+
+  if(enableWeightedMovingMeanBGS)
+    delete weightedMovingMean;
+
+  if(enableStaticFrameDifferenceBGS)
+    delete staticFrameDifference;
+
+  if(enableFrameDifferenceBGS)
+    delete frameDifference;
+
+  if(enablePreProcessor)
+    delete preProcessor;
+}
+
+void FrameProcessor::tic(std::string value)
+{
+  processname = value;
+  duration = static_cast<double>(cv::getTickCount());
+}
+
+void FrameProcessor::toc()
+{
+  duration = (static_cast<double>(cv::getTickCount()) - duration)/cv::getTickFrequency();
+  std::cout << processname << "\ttime(sec):" << std::fixed << std::setprecision(6) << duration << std::endl;
+}
+
+void FrameProcessor::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/FrameProcessor.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteString(fs, "tictoc", tictoc.c_str());
+
+  cvWriteInt(fs, "enablePreProcessor", enablePreProcessor);
+  
+  cvWriteInt(fs, "enableForegroundMaskAnalysis", enableForegroundMaskAnalysis);
+
+  cvWriteInt(fs, "enableFrameDifferenceBGS", enableFrameDifferenceBGS);
+  cvWriteInt(fs, "enableStaticFrameDifferenceBGS", enableStaticFrameDifferenceBGS);
+  cvWriteInt(fs, "enableWeightedMovingMeanBGS", enableWeightedMovingMeanBGS);
+  cvWriteInt(fs, "enableWeightedMovingVarianceBGS", enableWeightedMovingVarianceBGS);
+  cvWriteInt(fs, "enableMixtureOfGaussianV1BGS", enableMixtureOfGaussianV1BGS);
+  cvWriteInt(fs, "enableMixtureOfGaussianV2BGS", enableMixtureOfGaussianV2BGS);
+  cvWriteInt(fs, "enableAdaptiveBackgroundLearning", enableAdaptiveBackgroundLearning);
+#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >= 4 && CV_SUBMINOR_VERSION >= 3
+  cvWriteInt(fs, "enableGMG", enableGMG);
+#endif
+  
+  cvWriteInt(fs, "enableDPAdaptiveMedianBGS", enableDPAdaptiveMedianBGS);
+  cvWriteInt(fs, "enableDPGrimsonGMMBGS", enableDPGrimsonGMMBGS);
+  cvWriteInt(fs, "enableDPZivkovicAGMMBGS", enableDPZivkovicAGMMBGS);
+  cvWriteInt(fs, "enableDPMeanBGS", enableDPMeanBGS);
+  cvWriteInt(fs, "enableDPWrenGABGS", enableDPWrenGABGS);
+  cvWriteInt(fs, "enableDPPratiMediodBGS", enableDPPratiMediodBGS);
+  cvWriteInt(fs, "enableDPEigenbackgroundBGS", enableDPEigenbackgroundBGS);
+  cvWriteInt(fs, "enableDPTextureBGS", enableDPTextureBGS);
+
+  cvWriteInt(fs, "enableT2FGMM_UM", enableT2FGMM_UM);
+  cvWriteInt(fs, "enableT2FGMM_UV", enableT2FGMM_UV);
+  cvWriteInt(fs, "enableT2FMRF_UM", enableT2FMRF_UM);
+  cvWriteInt(fs, "enableT2FMRF_UV", enableT2FMRF_UV);
+  cvWriteInt(fs, "enableFuzzySugenoIntegral", enableFuzzySugenoIntegral);
+  cvWriteInt(fs, "enableFuzzyChoquetIntegral", enableFuzzyChoquetIntegral);
+
+  cvWriteInt(fs, "enableLBSimpleGaussian", enableLBSimpleGaussian);
+  cvWriteInt(fs, "enableLBFuzzyGaussian", enableLBFuzzyGaussian);
+  cvWriteInt(fs, "enableLBMixtureOfGaussians", enableLBMixtureOfGaussians);
+  cvWriteInt(fs, "enableLBAdaptiveSOM", enableLBAdaptiveSOM);
+  cvWriteInt(fs, "enableLBFuzzyAdaptiveSOM", enableLBFuzzyAdaptiveSOM);
+
+  #if !defined(_WIN32)
+  cvWriteInt(fs, "enableLbpMrf", enableLbpMrf);
+  #endif
+
+  cvWriteInt(fs, "enableMultiLayerBGS", enableMultiLayerBGS);
+  cvWriteInt(fs, "enablePBAS", enablePBAS);
+  cvWriteInt(fs, "enableVuMeter", enableVuMeter);
+  cvWriteInt(fs, "enableKDE", enableKDE);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void FrameProcessor::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/FrameProcessor.xml", 0, CV_STORAGE_READ);
+  
+  tictoc = cvReadStringByName(fs, 0, "tictoc", "");
+
+  enablePreProcessor = cvReadIntByName(fs, 0, "enablePreProcessor", true);
+
+  enableForegroundMaskAnalysis = cvReadIntByName(fs, 0, "enableForegroundMaskAnalysis", false);
+  
+  enableFrameDifferenceBGS = cvReadIntByName(fs, 0, "enableFrameDifferenceBGS", false);
+  enableStaticFrameDifferenceBGS = cvReadIntByName(fs, 0, "enableStaticFrameDifferenceBGS", false);
+  enableWeightedMovingMeanBGS = cvReadIntByName(fs, 0, "enableWeightedMovingMeanBGS", false);
+  enableWeightedMovingVarianceBGS = cvReadIntByName(fs, 0, "enableWeightedMovingVarianceBGS", false);
+  enableMixtureOfGaussianV1BGS = cvReadIntByName(fs, 0, "enableMixtureOfGaussianV1BGS", false);
+  enableMixtureOfGaussianV2BGS = cvReadIntByName(fs, 0, "enableMixtureOfGaussianV2BGS", false);
+  enableAdaptiveBackgroundLearning = cvReadIntByName(fs, 0, "enableAdaptiveBackgroundLearning", false);
+#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >= 4 && CV_SUBMINOR_VERSION >= 3
+  enableGMG = cvReadIntByName(fs, 0, "enableGMG", false);
+#endif
+
+  enableDPAdaptiveMedianBGS = cvReadIntByName(fs, 0, "enableDPAdaptiveMedianBGS", false);
+  enableDPGrimsonGMMBGS = cvReadIntByName(fs, 0, "enableDPGrimsonGMMBGS", false);
+  enableDPZivkovicAGMMBGS = cvReadIntByName(fs, 0, "enableDPZivkovicAGMMBGS", false);
+  enableDPMeanBGS = cvReadIntByName(fs, 0, "enableDPMeanBGS", false);
+  enableDPWrenGABGS = cvReadIntByName(fs, 0, "enableDPWrenGABGS", false);
+  enableDPPratiMediodBGS = cvReadIntByName(fs, 0, "enableDPPratiMediodBGS", false);
+  enableDPEigenbackgroundBGS = cvReadIntByName(fs, 0, "enableDPEigenbackgroundBGS", false);
+  enableDPTextureBGS = cvReadIntByName(fs, 0, "enableDPTextureBGS", false);
+
+  enableT2FGMM_UM = cvReadIntByName(fs, 0, "enableT2FGMM_UM", false);
+  enableT2FGMM_UV = cvReadIntByName(fs, 0, "enableT2FGMM_UV", false);
+  enableT2FMRF_UM = cvReadIntByName(fs, 0, "enableT2FMRF_UM", false);
+  enableT2FMRF_UV = cvReadIntByName(fs, 0, "enableT2FMRF_UV", false);
+  enableFuzzySugenoIntegral = cvReadIntByName(fs, 0, "enableFuzzySugenoIntegral", false);
+  enableFuzzyChoquetIntegral = cvReadIntByName(fs, 0, "enableFuzzyChoquetIntegral", false);
+
+  enableLBSimpleGaussian = cvReadIntByName(fs, 0, "enableLBSimpleGaussian", false);
+  enableLBFuzzyGaussian = cvReadIntByName(fs, 0, "enableLBFuzzyGaussian", false);
+  enableLBMixtureOfGaussians = cvReadIntByName(fs, 0, "enableLBMixtureOfGaussians", false);
+  enableLBAdaptiveSOM = cvReadIntByName(fs, 0, "enableLBAdaptiveSOM", false);
+  enableLBFuzzyAdaptiveSOM = cvReadIntByName(fs, 0, "enableLBFuzzyAdaptiveSOM", false);
+
+  #if !defined(_WIN32)
+  enableLbpMrf = cvReadIntByName(fs, 0, "enableLbpMrf", false);
+  #endif
+
+  enableMultiLayerBGS = cvReadIntByName(fs, 0, "enableMultiLayerBGS", false);
+  enablePBAS = cvReadIntByName(fs, 0, "enablePBAS", false);
+  enableVuMeter = cvReadIntByName(fs, 0, "enableVuMeter", false);
+  enableKDE = cvReadIntByName(fs, 0, "enableKDE", false);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/FrameProcessor.h b/FrameProcessor.h
new file mode 100644
index 0000000..44ad2aa
--- /dev/null
+++ b/FrameProcessor.h
@@ -0,0 +1,235 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+#pragma warning(disable : 4482)
+
+#include "IFrameProcessor.h"
+#include "PreProcessor.h"
+
+#include "package_bgs/IBGS.h"
+
+#include "package_bgs/FrameDifferenceBGS.h"
+#include "package_bgs/StaticFrameDifferenceBGS.h"
+#include "package_bgs/WeightedMovingMeanBGS.h"
+#include "package_bgs/WeightedMovingVarianceBGS.h"
+#include "package_bgs/MixtureOfGaussianV1BGS.h"
+#include "package_bgs/MixtureOfGaussianV2BGS.h"
+#include "package_bgs/AdaptiveBackgroundLearning.h"
+#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >= 4 && CV_SUBMINOR_VERSION >= 3
+#include "package_bgs/GMG.h"
+#endif
+
+#include "package_bgs/dp/DPAdaptiveMedianBGS.h"
+#include "package_bgs/dp/DPGrimsonGMMBGS.h"
+#include "package_bgs/dp/DPZivkovicAGMMBGS.h"
+#include "package_bgs/dp/DPMeanBGS.h"
+#include "package_bgs/dp/DPWrenGABGS.h"
+#include "package_bgs/dp/DPPratiMediodBGS.h"
+#include "package_bgs/dp/DPEigenbackgroundBGS.h"
+#include "package_bgs/dp/DPTextureBGS.h"
+
+#include "package_bgs/tb/T2FGMM_UM.h"
+#include "package_bgs/tb/T2FGMM_UV.h"
+#include "package_bgs/tb/T2FMRF_UM.h"
+#include "package_bgs/tb/T2FMRF_UV.h"
+#include "package_bgs/tb/FuzzySugenoIntegral.h"
+#include "package_bgs/tb/FuzzyChoquetIntegral.h"
+
+#include "package_bgs/lb/LBSimpleGaussian.h"
+#include "package_bgs/lb/LBFuzzyGaussian.h"
+#include "package_bgs/lb/LBMixtureOfGaussians.h"
+#include "package_bgs/lb/LBAdaptiveSOM.h"
+#include "package_bgs/lb/LBFuzzyAdaptiveSOM.h"
+
+#if !defined(_WIN32)
+#include "package_bgs/ck/LbpMrf.h"
+#endif
+
+#include "package_bgs/jmo/MultiLayerBGS.h"
+#include "package_bgs/pt/PixelBasedAdaptiveSegmenter.h"
+#include "package_bgs/av/VuMeter.h"
+#include "package_bgs/ae/KDE.h"
+
+#include "package_analysis/ForegroundMaskAnalysis.h"
+
+class FrameProcessor : public IFrameProcessor
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  std::string processname;
+  double duration;
+  std::string tictoc;
+
+  cv::Mat img_prep;
+  PreProcessor* preProcessor;
+  bool enablePreProcessor;
+  
+  cv::Mat img_framediff;
+  FrameDifferenceBGS* frameDifference;
+  bool enableFrameDifferenceBGS;
+  
+  cv::Mat img_staticfdiff;
+  StaticFrameDifferenceBGS* staticFrameDifference;
+  bool enableStaticFrameDifferenceBGS;
+
+  cv::Mat img_wmovmean;
+  WeightedMovingMeanBGS* weightedMovingMean;
+  bool enableWeightedMovingMeanBGS;
+
+  cv::Mat img_movvar;
+  WeightedMovingVarianceBGS* weightedMovingVariance;
+  bool enableWeightedMovingVarianceBGS;
+
+  cv::Mat img_mog1;
+  MixtureOfGaussianV1BGS* mixtureOfGaussianV1BGS;
+  bool enableMixtureOfGaussianV1BGS;
+
+  cv::Mat img_mog2;
+  MixtureOfGaussianV2BGS* mixtureOfGaussianV2BGS;
+  bool enableMixtureOfGaussianV2BGS;
+
+  cv::Mat img_bkgl_fgmask;
+  AdaptiveBackgroundLearning* adaptiveBackgroundLearning;
+  bool enableAdaptiveBackgroundLearning;
+
+#if CV_MAJOR_VERSION >= 2 && CV_MINOR_VERSION >= 4 && CV_SUBMINOR_VERSION >= 3
+  cv::Mat img_gmg;
+  GMG* gmg;
+  bool enableGMG;
+#endif
+
+  cv::Mat img_adpmed;
+  DPAdaptiveMedianBGS* adaptiveMedian;
+  bool enableDPAdaptiveMedianBGS;
+
+  cv::Mat img_grigmm;
+  DPGrimsonGMMBGS* grimsonGMM;
+  bool enableDPGrimsonGMMBGS;
+
+  cv::Mat img_zivgmm;
+  DPZivkovicAGMMBGS* zivkovicAGMM;
+  bool enableDPZivkovicAGMMBGS;
+
+  cv::Mat img_tmpmean;
+  DPMeanBGS* temporalMean;
+  bool enableDPMeanBGS;
+
+  cv::Mat img_wrenga;
+  DPWrenGABGS* wrenGA;
+  bool enableDPWrenGABGS;
+
+  cv::Mat img_pramed;
+  DPPratiMediodBGS* pratiMediod;
+  bool enableDPPratiMediodBGS;
+
+  cv::Mat img_eigbkg;
+  DPEigenbackgroundBGS* eigenBackground;
+  bool enableDPEigenbackgroundBGS;
+
+  cv::Mat img_texbgs;
+  DPTextureBGS* textureBGS;
+  bool enableDPTextureBGS;
+
+  cv::Mat img_t2fgmm_um;
+  T2FGMM_UM* type2FuzzyGMM_UM;
+  bool enableT2FGMM_UM;
+
+  cv::Mat img_t2fgmm_uv;
+  T2FGMM_UV* type2FuzzyGMM_UV;
+  bool enableT2FGMM_UV;
+
+  cv::Mat img_t2fmrf_um;
+  T2FMRF_UM* type2FuzzyMRF_UM;
+  bool enableT2FMRF_UM;
+
+  cv::Mat img_t2fmrf_uv;
+  T2FMRF_UV* type2FuzzyMRF_UV;
+  bool enableT2FMRF_UV;
+
+  cv::Mat img_fsi;
+  FuzzySugenoIntegral* fuzzySugenoIntegral;
+  bool enableFuzzySugenoIntegral;
+
+  cv::Mat img_fci;
+  FuzzyChoquetIntegral* fuzzyChoquetIntegral;
+  bool enableFuzzyChoquetIntegral;
+  
+  cv::Mat img_lb_sg;
+  LBSimpleGaussian* lbSimpleGaussian;
+  bool enableLBSimpleGaussian;
+
+  cv::Mat img_lb_fg;
+  LBFuzzyGaussian* lbFuzzyGaussian;
+  bool enableLBFuzzyGaussian;
+
+  cv::Mat img_lb_mog;
+  LBMixtureOfGaussians* lbMixtureOfGaussians;
+  bool enableLBMixtureOfGaussians;
+
+  cv::Mat img_lb_som;
+  LBAdaptiveSOM* lbAdaptiveSOM;
+  bool enableLBAdaptiveSOM;
+
+  cv::Mat img_lb_fsom;
+  LBFuzzyAdaptiveSOM* lbFuzzyAdaptiveSOM;
+  bool enableLBFuzzyAdaptiveSOM;
+
+  #if !defined(_WIN32)
+  cv::Mat img_lbp_mrf;
+  LbpMrf* lbpMrf;
+  bool enableLbpMrf;
+  #endif
+  
+  cv::Mat img_mlbgs;
+  MultiLayerBGS* multiLayerBGS;
+  bool enableMultiLayerBGS;
+
+  cv::Mat img_pt_pbas;
+  PixelBasedAdaptiveSegmenter* pixelBasedAdaptiveSegmenter;
+  bool enablePBAS;
+
+  cv::Mat img_vumeter;
+  VuMeter* vuMeter;
+  bool enableVuMeter;
+
+  cv::Mat img_kde;
+  KDE* kde;
+  bool enableKDE;
+
+  ForegroundMaskAnalysis* foregroundMaskAnalysis;
+  bool enableForegroundMaskAnalysis;
+
+public:
+  FrameProcessor();
+  ~FrameProcessor();
+
+  long frameToStop;
+  std::string imgref;
+
+  void init();
+  void process(const cv::Mat &img_input);
+  void finish(void);
+
+private:
+  void process(std::string name, IBGS *bgs, const cv::Mat &img_input, cv::Mat &img_bgs);
+  void tic(std::string value);
+  void toc();
+
+  void saveConfig();
+  void loadConfig();
+};
diff --git a/IFrameProcessor.h b/IFrameProcessor.h
new file mode 100644
index 0000000..ef50b1f
--- /dev/null
+++ b/IFrameProcessor.h
@@ -0,0 +1,26 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <cv.h>
+
+class IFrameProcessor
+{
+  public:
+  virtual void process(const cv:: Mat &input) = 0;
+  virtual ~IFrameProcessor(){}
+};
\ No newline at end of file
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..e2ce0d8
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,12 @@
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
\ No newline at end of file
diff --git a/Main.cpp b/Main.cpp
new file mode 100644
index 0000000..4e59ee5
--- /dev/null
+++ b/Main.cpp
@@ -0,0 +1,82 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "Config.h"
+#include "VideoAnalysis.h"
+#include <iostream>
+
+class Main
+{
+private:
+  Main();
+
+public:
+  static void start(int argc, const char **argv)
+  {
+    std::cout << "-----------------------------------------" << std::endl;
+    std::cout << "Background Subtraction Library v1.7.0     " << std::endl;
+    std::cout << "http://code.google.com/p/bgslibrary       " << std::endl;
+    std::cout << "by:                                       " << std::endl;
+    std::cout << "Andrews Sobral (andrewssobral@gmail.com)  " << std::endl;
+    std::cout << "-----------------------------------------" << std::endl;
+    std::cout << "Using OpenCV version " << CV_VERSION << std::endl;
+    
+    try
+    {
+      int key = KEY_ESC;
+
+      do
+      {
+        VideoAnalysis* videoAnalysis = new VideoAnalysis;
+
+        if(videoAnalysis->setup(argc, argv))
+        {
+          videoAnalysis->start();
+
+          std::cout << "Processing finished, enter:" << std::endl;
+          std::cout << "R - Repeat" << std::endl;
+          std::cout << "Q - Quit" << std::endl;
+
+          key = cv::waitKey();
+        }
+
+        cv::destroyAllWindows();
+        delete videoAnalysis;
+
+      }while(key == KEY_REPEAT);
+    }
+    catch(const std::exception& ex)
+    {
+      std::cout << "std::exception:" << ex.what() << std::endl;
+      return;
+    }
+    catch(...)
+    {
+      std::cout << "Unknow error" << std::endl;
+      return;
+    }
+
+#ifdef WIN32
+    //system("pause");
+#endif
+  }
+};
+
+int main(int argc, const char **argv)
+{
+  Main::start(argc, argv);
+  return 0;
+}
diff --git a/PreProcessor.cpp b/PreProcessor.cpp
new file mode 100644
index 0000000..834996b
--- /dev/null
+++ b/PreProcessor.cpp
@@ -0,0 +1,146 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "PreProcessor.h"
+
+PreProcessor::PreProcessor() : firstTime(true), equalizeHist(false), gaussianBlur(false)
+{
+  std::cout << "PreProcessor()" << std::endl;
+}
+
+PreProcessor::~PreProcessor()
+{
+  std::cout << "~PreProcessor()" << std::endl;
+}
+
+void PreProcessor::setEqualizeHist(bool value)
+{
+  equalizeHist = value;
+}
+
+void PreProcessor::setGaussianBlur(bool value)
+{
+  gaussianBlur = value;
+}
+
+cv::Mat PreProcessor::getGrayScale()
+{
+  return img_gray.clone();
+}
+
+void PreProcessor::process(const cv::Mat &img_input, cv::Mat &img_output)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+  
+  img_input.copyTo(img_output);
+  
+  // Converts image from one color space to another
+  // http://opencv.willowgarage.com/documentation/cpp/miscellaneous_image_transformations.html#cv-cvtcolor
+  cv::cvtColor(img_input, img_gray, CV_BGR2GRAY);
+  //img_gray.copyTo(img_output);
+
+  // Equalizes the histogram of a grayscale image
+  // http://opencv.willowgarage.com/documentation/cpp/histograms.html#cv-equalizehist
+  if(equalizeHist)
+    cv::equalizeHist(img_output, img_output);
+
+  // Smoothes image using a Gaussian filter
+  // http://opencv.willowgarage.com/documentation/cpp/imgproc_image_filtering.html#GaussianBlur
+  if(gaussianBlur)
+    cv::GaussianBlur(img_output, img_output, cv::Size(7,7), 1.5);
+
+  if(enableShow)
+    cv::imshow("Pre Processor", img_output);
+
+  firstTime = false;
+}
+
+void PreProcessor::rotate(const cv::Mat &img_input, cv::Mat &img_output, float angle)
+{
+  IplImage* image = new IplImage(img_input); 
+
+  //IplImage *rotatedImage = cvCreateImage(cvSize(480,320), IPL_DEPTH_8U, image->nChannels);
+  //IplImage *rotatedImage = cvCreateImage(cvSize(image->width,image->height), IPL_DEPTH_8U, image->nChannels);
+  IplImage* rotatedImage = cvCreateImage(cvSize(image->height,image->width), IPL_DEPTH_8U, image->nChannels);
+
+  CvPoint2D32f center;
+  //center.x = 160;
+  //center.y = 160;
+  center.x = (image->height / 2);
+  center.y = (image->width / 2);
+  
+  CvMat* mapMatrix = cvCreateMat(2, 3, CV_32FC1);
+
+  cv2DRotationMatrix(center, angle, 1.0, mapMatrix);
+  cvWarpAffine(image, rotatedImage, mapMatrix, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS, cvScalarAll(0));
+
+  cv::Mat img_rot(rotatedImage);
+  img_rot.copyTo(img_output);
+
+  cvReleaseImage(&image);
+  cvReleaseImage(&rotatedImage);
+  cvReleaseMat(&mapMatrix);
+}
+
+void PreProcessor::applyCanny(const cv::Mat &img_input, cv::Mat &img_output)
+{
+  if(img_input.empty())
+    return;
+
+  //------------------------------------------------------------------
+  // Canny
+  // Finds edges in an image using Canny algorithm.
+  // http://opencv.willowgarage.com/documentation/cpp/imgproc_feature_detection.html#cv-canny
+  //------------------------------------------------------------------
+
+  cv::Mat img_canny;
+  cv::Canny(
+    img_input, // image � Single-channel 8-bit input image
+    img_canny,  // edges � The output edge map. It will have the same size and the same type as image
+    100,       // threshold1 � The first threshold for the hysteresis procedure
+    200);      // threshold2 � The second threshold for the hysteresis procedure
+  cv::threshold(img_canny, img_canny, 128, 255, cv::THRESH_BINARY_INV);
+
+  img_canny.copyTo(img_output);
+}
+
+void PreProcessor::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/PreProcessor.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "equalizeHist", equalizeHist);
+  cvWriteInt(fs, "gaussianBlur", gaussianBlur);
+  cvWriteInt(fs, "enableShow", enableShow);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void PreProcessor::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/PreProcessor.xml", 0, CV_STORAGE_READ);
+
+  equalizeHist = cvReadIntByName(fs, 0, "equalizeHist", false);
+  gaussianBlur = cvReadIntByName(fs, 0, "gaussianBlur", false);
+  enableShow = cvReadIntByName(fs, 0, "enableShow", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/PreProcessor.h b/PreProcessor.h
new file mode 100644
index 0000000..9a04623
--- /dev/null
+++ b/PreProcessor.h
@@ -0,0 +1,49 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+class PreProcessor
+{
+private:
+  bool firstTime;
+  bool equalizeHist;
+  bool gaussianBlur;
+  cv::Mat img_gray;
+  bool enableShow;
+
+public:
+  PreProcessor();
+  ~PreProcessor();
+
+  void setEqualizeHist(bool value);
+  void setGaussianBlur(bool value);
+  cv::Mat getGrayScale(); 
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output);
+
+  void rotate(const cv::Mat &img_input, cv::Mat &img_output, float angle);
+  void applyCanny(const cv::Mat &img_input, cv::Mat &img_output);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..b7fe6c5
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,16 @@
+#
+# HOW TO COMPILE ON LINUX
+#
+# Requirements:
+# cmake >= 2.8
+# opencv >= 2.3.1
+
+cd build
+cmake ..
+make
+cd ..
+
+chmod +x run_video.sh run_camera.sh run_demo.sh
+./run_video.sh
+./run_camera.sh
+./run_demo.sh
diff --git a/VideoAnalysis.cpp b/VideoAnalysis.cpp
new file mode 100644
index 0000000..0123933
--- /dev/null
+++ b/VideoAnalysis.cpp
@@ -0,0 +1,130 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "VideoAnalysis.h"
+
+VideoAnalysis::VideoAnalysis() : use_file(false), use_camera(false), cameraIndex(0), use_comp(false), frameToStop(0)
+{
+  std::cout << "VideoAnalysis()" << std::endl;
+}
+
+VideoAnalysis::~VideoAnalysis()
+{
+  std::cout << "~VideoAnalysis()" << std::endl;
+}
+
+bool VideoAnalysis::setup(int argc, const char **argv)
+{
+  bool flag = false;
+  
+  const char* keys =
+  "{hp|help|false|Print help message}"
+  "{uf|use_file|false|Use video file}"
+  "{fn|filename||Specify video file}"
+  "{uc|use_cam|false|Use camera}"
+  "{ca|camera|0|Specify camera index}"
+  "{co|use_comp|false|Use mask comparator}"
+  "{st|stopAt|0|Frame number to stop}"
+  "{im|imgref||Specify image file}"
+  ;
+  cv::CommandLineParser cmd(argc, argv, keys);
+  
+  if(argc <= 1 || cmd.get<bool>("help") == true)
+  {
+    std::cout << "Usage: " << argv[0] << " [options]" << std::endl;
+    std::cout << "Avaible options:" << std::endl;
+    cmd.printParams();
+    return false;
+  }
+
+  use_file = cmd.get<bool>("use_file");
+  if(use_file)
+  {
+    filename = cmd.get<std::string>("filename");
+
+    if(filename.empty())
+    {
+      std::cout << "Specify filename"<< std::endl;
+      return false;
+    }
+    
+    flag = true;
+  }
+
+  use_camera = cmd.get<bool>("use_cam");
+  if(use_camera)
+  {
+    cameraIndex = cmd.get<int>("camera");
+    flag = true;
+  }
+
+  if(flag == true)
+  {
+    use_comp = cmd.get<bool>("use_comp");
+    if(use_comp)
+    {
+      frameToStop = cmd.get<int>("stopAt");
+      imgref = cmd.get<std::string>("imgref");
+
+      if(imgref.empty())
+      {
+        std::cout << "Specify image reference"<< std::endl;
+        return false;
+      }
+    }
+  }
+
+  return flag;
+}
+
+void VideoAnalysis::start()
+{
+  do
+  {
+    videoCapture = new VideoCapture;
+    frameProcessor = new FrameProcessor;
+
+    frameProcessor->init();
+    frameProcessor->frameToStop = frameToStop;
+    frameProcessor->imgref = imgref;
+
+    videoCapture->setFrameProcessor(frameProcessor);
+
+    if(use_file)
+      videoCapture->setVideo(filename);
+    
+    if(use_camera)
+      videoCapture->setCamera(cameraIndex);
+    
+    videoCapture->start();
+
+    if(use_file || use_camera)
+      break;
+
+    frameProcessor->finish();
+
+    int key = cvWaitKey(500);
+    if(key == KEY_ESC)
+      break;
+
+    delete frameProcessor;
+    delete videoCapture;
+
+  }while(1);
+  
+  delete frameProcessor;
+  delete videoCapture;
+}
\ No newline at end of file
diff --git a/VideoAnalysis.h b/VideoAnalysis.h
new file mode 100644
index 0000000..74eacf7
--- /dev/null
+++ b/VideoAnalysis.h
@@ -0,0 +1,45 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <sstream>
+
+#include "VideoCapture.h"
+#include "FrameProcessor.h"
+
+class VideoAnalysis
+{
+private:
+  VideoCapture* videoCapture;
+  FrameProcessor* frameProcessor;
+  bool use_file;
+  std::string filename;
+  bool use_camera;
+  int cameraIndex;
+  bool use_comp;
+  long frameToStop;
+  std::string imgref;
+
+public:
+  VideoAnalysis();
+  ~VideoAnalysis();
+
+  bool setup(int argc, const char **argv);
+  void start();
+};
+
diff --git a/VideoCapture.cpp b/VideoCapture.cpp
new file mode 100644
index 0000000..8952053
--- /dev/null
+++ b/VideoCapture.cpp
@@ -0,0 +1,275 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "VideoCapture.h"
+
+namespace VC_ROI
+{
+  IplImage* img_input1 = 0;
+  IplImage* img_input2 = 0;
+  int roi_x0 = 0;
+  int roi_y0 = 0;
+  int roi_x1 = 0;
+  int roi_y1 = 0;
+  int numOfRec = 0;
+  int startDraw = 0;
+  bool roi_defined = false;
+  bool use_roi = true;
+  bool disable_event = false;
+
+  void reset(void)
+  {
+    disable_event = false;
+    startDraw = false;
+  }
+
+  void VideoCapture_on_mouse(int evt, int x, int y, int flag, void* param)
+  {
+    if(use_roi == false || disable_event == true)
+      return;
+    
+    if(evt == CV_EVENT_LBUTTONDOWN)
+    {
+      if(!startDraw)
+      {
+        roi_x0 = x;
+        roi_y0 = y;
+        startDraw = 1;
+      }
+      else
+      {
+        roi_x1 = x;
+        roi_y1 = y;
+        startDraw = 0;
+        roi_defined = true;
+        disable_event = true;
+      }
+    }
+
+    if(evt == CV_EVENT_MOUSEMOVE && startDraw)
+    {
+      //redraw ROI selection
+      img_input2 = cvCloneImage(img_input1);
+      cvRectangle(img_input2, cvPoint(roi_x0,roi_y0), cvPoint(x,y), CV_RGB(255,0,0), 1);
+      cvShowImage("Input", img_input2);
+      cvReleaseImage(&img_input2);
+      //startDraw = false;
+      //disable_event = true;
+    }
+  }
+}
+
+VideoCapture::VideoCapture() : key(0), start_time(0), delta_time(0), freq(0), fps(0), frameNumber(0), stopAt(0),
+  useCamera(false), useVideo(false), input_resize_percent(100), showOutput(true), enableFlip(false)
+{
+  std::cout << "VideoCapture()" << std::endl;
+}
+
+VideoCapture::~VideoCapture()
+{
+  std::cout << "~VideoCapture()" << std::endl;
+}
+
+void VideoCapture::setFrameProcessor(IFrameProcessor* frameProcessorPtr)
+{
+  frameProcessor = frameProcessorPtr;
+}
+
+void VideoCapture::setCamera(int index)
+{
+  useCamera = true;
+  cameraIndex = index;
+
+  useVideo = false;
+}
+
+void VideoCapture::setUpCamera()
+{
+  std::cout << "Camera index:" << cameraIndex << std::endl;
+  capture = cvCaptureFromCAM(cameraIndex);
+
+  if(!capture)
+    std::cerr << "Cannot open initialize webcam!\n" << std::endl;
+}
+
+void VideoCapture::setVideo(std::string filename)
+{
+  useVideo = true;
+  videoFileName = filename;
+
+  useCamera = false;
+}
+
+void VideoCapture::setUpVideo()
+{
+  capture = cvCaptureFromFile(videoFileName.c_str());
+
+  if(!capture)
+    std::cerr << "Cannot open video file "<< videoFileName << std::endl;
+}
+
+void VideoCapture::start()
+{
+  loadConfig();
+
+  if(useCamera) setUpCamera();
+  if(useVideo)  setUpVideo();
+  if(!capture)  std::cerr << "Capture error..." << std::endl;
+  
+  int input_fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
+  std::cout << "input->fps:" << input_fps << std::endl;
+
+  IplImage* frame1 = cvQueryFrame(capture);
+  frame = cvCreateImage(cvSize((int)((frame1->width*input_resize_percent)/100) , (int)((frame1->height*input_resize_percent)/100)), frame1->depth, frame1->nChannels);
+  //cvCreateImage(cvSize(frame1->width/input_resize_factor, frame1->height/input_resize_factor), frame1->depth, frame1->nChannels);
+  std::cout << "input->resize_percent:" << input_resize_percent << std::endl;
+  std::cout << "input->width:" << frame->width << std::endl;
+  std::cout << "input->height:" << frame->height << std::endl;
+
+  double loopDelay = 33.333;
+  if(input_fps > 0)
+    loopDelay = (1./input_fps)*1000.;
+  std::cout << "loopDelay:" << loopDelay << std::endl;
+
+  bool firstTime = true;
+  do
+  {
+    frameNumber++;
+
+    frame1 = cvQueryFrame(capture);
+    if(!frame1) break;
+
+    cvResize(frame1, frame);
+
+    if(enableFlip)
+      cvFlip(frame, frame, 0);
+    
+    if(VC_ROI::use_roi == true && VC_ROI::roi_defined == false && firstTime == true)
+    {
+      VC_ROI::reset();
+
+      do
+      {
+        cv::Mat img_input(frame);
+        
+        if(showOutput)
+        {
+          cv::imshow("Input", img_input);
+
+          std::cout << "Set ROI (press ESC to skip)" << std::endl;
+          VC_ROI::img_input1 = new IplImage(img_input);
+          cvSetMouseCallback("Input", VC_ROI::VideoCapture_on_mouse, NULL);
+          key = cvWaitKey(0);
+          delete VC_ROI::img_input1;
+        }
+        else
+          key = KEY_ESC;
+
+        if(key == KEY_ESC)
+        {
+          std::cout << "ROI disabled" << std::endl;
+          VC_ROI::reset();
+          VC_ROI::use_roi = false;
+          break;
+        }
+
+        if(VC_ROI::roi_defined)
+        {
+          std::cout << "ROI defined (" << VC_ROI::roi_x0 << "," << VC_ROI::roi_y0 << "," << VC_ROI::roi_x1 << "," << VC_ROI::roi_y1 << ")" << std::endl;
+          break;
+        }
+        else
+          std::cout << "ROI undefined" << std::endl;
+
+      }while(1);
+    }
+
+    if(VC_ROI::use_roi == true && VC_ROI::roi_defined == true)
+    {
+      CvRect rect = cvRect(VC_ROI::roi_x0, VC_ROI::roi_y0, VC_ROI::roi_x1 - VC_ROI::roi_x0, VC_ROI::roi_y1 - VC_ROI::roi_y0);
+      cvSetImageROI(frame, rect);
+    }
+
+    cv::Mat img_input(frame);
+    
+    if(showOutput)
+      cv::imshow("Input", img_input);
+
+    if(firstTime)
+      saveConfig();
+
+    start_time = cv::getTickCount();
+    frameProcessor->process(img_input);
+    int64 delta_time = cv::getTickCount() - start_time;
+    freq = cv::getTickFrequency();
+    fps = freq / delta_time;
+    //std::cout << "FPS: " << fps << std::endl;
+
+    cvResetImageROI(frame);
+
+    key = cvWaitKey(loopDelay);
+    //std::cout << "key: " << key << std::endl;
+
+    if(key == KEY_SPACE)
+      key = cvWaitKey(0);
+
+    if(key == KEY_ESC)
+      break;
+
+    if(stopAt > 0 && stopAt == frameNumber)
+      key = cvWaitKey(0);
+
+    firstTime = false;
+  }while(1);
+
+  cvReleaseCapture(&capture);
+}
+
+void VideoCapture::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/VideoCapture.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "stopAt", stopAt);
+  cvWriteInt(fs, "input_resize_percent", input_resize_percent);
+  cvWriteInt(fs, "enableFlip", enableFlip);
+  cvWriteInt(fs, "use_roi", VC_ROI::use_roi);
+  cvWriteInt(fs, "roi_defined", VC_ROI::roi_defined);
+  cvWriteInt(fs, "roi_x0", VC_ROI::roi_x0);
+  cvWriteInt(fs, "roi_y0", VC_ROI::roi_y0);
+  cvWriteInt(fs, "roi_x1", VC_ROI::roi_x1);
+  cvWriteInt(fs, "roi_y1", VC_ROI::roi_y1);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void VideoCapture::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/VideoCapture.xml", 0, CV_STORAGE_READ);
+
+  stopAt = cvReadIntByName(fs, 0, "stopAt", 0);
+  input_resize_percent = cvReadIntByName(fs, 0, "input_resize_percent", 100);
+  enableFlip = cvReadIntByName(fs, 0, "enableFlip", false);
+  VC_ROI::use_roi = cvReadIntByName(fs, 0, "use_roi", true);
+  VC_ROI::roi_defined = cvReadIntByName(fs, 0, "roi_defined", false);
+  VC_ROI::roi_x0 = cvReadIntByName(fs, 0, "roi_x0", 0);
+  VC_ROI::roi_y0 = cvReadIntByName(fs, 0, "roi_y0", 0);
+  VC_ROI::roi_x1 = cvReadIntByName(fs, 0, "roi_x1", 0);
+  VC_ROI::roi_y1 = cvReadIntByName(fs, 0, "roi_y1", 0);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/VideoCapture.h b/VideoCapture.h
new file mode 100644
index 0000000..caf6f6c
--- /dev/null
+++ b/VideoCapture.h
@@ -0,0 +1,63 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "Config.h"
+#include "IFrameProcessor.h"
+
+class VideoCapture
+{
+private:
+  IFrameProcessor* frameProcessor;
+  CvCapture* capture;
+  IplImage* frame;
+  int key;
+  int64 start_time;
+  int64 delta_time;
+  double freq;
+  double fps;
+  long frameNumber;
+  long stopAt;
+  bool useCamera;
+  int cameraIndex;
+  bool useVideo;
+  std::string videoFileName;
+  int input_resize_percent;
+  bool showOutput;
+  bool enableFlip;
+
+public:
+  VideoCapture();
+  ~VideoCapture();
+
+  void setFrameProcessor(IFrameProcessor* frameProcessorPtr);
+  void setCamera(int cameraIndex);
+  void setVideo(std::string filename);
+  void start();
+
+private:
+  void setUpCamera();
+  void setUpVideo();
+
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/bgslibrary_vs2010_opencv.txt b/bgslibrary_vs2010_opencv.txt
new file mode 100644
index 0000000..6ea8256
--- /dev/null
+++ b/bgslibrary_vs2010_opencv.txt
@@ -0,0 +1,39 @@
+---------------------------------------------------
+BGSLibrary with Visual Studio 2010 and Opencv 2.4.5
+---------------------------------------------------
+
+1) Check our example project at [vs2010] folder
+http://code.google.com/p/bgslibrary/source/browse/trunk/vs2010
+
+
+Or configure manually by:
+
+
+1) Install OpenCV
+1.a) Download OpenCV 2.4.5 from http://opencv.org/
+2.b) Install in: C:\OpenCV2.4.5
+2.c) Add OpenCV binaries in your Path
+C:\OpenCV2.4.5\build\x86\vc10\bin
+
+2) Download BGSLibrary
+2.a) Checkout bgslibrary SVN at C:\bgslibrary
+
+3) Start Visual Studio 2010
+3.a) Create New Project
+3.b) Select Visual C++ -> Win32 -> Win32 Console Application
+3.c) Set project location: C:\bgslibrary
+3.d) Set project name: bgslibrary
+3.e) Set Empty project 
+3.f) Add Demo.cpp in [Source Files]
+3.g) Add content of c:\bgslibrary\package_bgs\*.* in [Header Files]
+3.h) Add content of c:\bgslibrary\package_analysis\*.* in [Header Files]
+3.i) Change to [Release] [Win32] mode
+3.j) Click on Project->Properties
+3.k) Change [Output Directory] to ..\
+3.l) Add OpenCV include in [C/C++] -> [Additional Include Directories]
+C:\OpenCV2.4.5\build\include;C:\OpenCV2.4.5\build\include\opencv;
+3.m) Add OpenCV libraries in [Linker]->[Input]
+C:\OpenCV2.4.5\build\x86\vc10\lib\*.lib
+3.n) Click in Build and wait
+3.o) Run C:\bgslibrary\bgslibrary.exe
+Enjoy!
\ No newline at end of file
diff --git a/config/FrameProcessor.xml b/config/FrameProcessor.xml
new file mode 100644
index 0000000..c76f826
--- /dev/null
+++ b/config/FrameProcessor.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<opencv_storage>
+<tictoc>""</tictoc>
+<enablePreProcessor>1</enablePreProcessor>
+<enableForegroundMaskAnalysis>0</enableForegroundMaskAnalysis>
+<enableFrameDifferenceBGS>1</enableFrameDifferenceBGS>
+<enableStaticFrameDifferenceBGS>0</enableStaticFrameDifferenceBGS>
+<enableWeightedMovingMeanBGS>0</enableWeightedMovingMeanBGS>
+<enableWeightedMovingVarianceBGS>0</enableWeightedMovingVarianceBGS>
+<enableMixtureOfGaussianV1BGS>0</enableMixtureOfGaussianV1BGS>
+<enableMixtureOfGaussianV2BGS>0</enableMixtureOfGaussianV2BGS>
+<enableAdaptiveBackgroundLearning>0</enableAdaptiveBackgroundLearning>
+<enableGMG>0</enableGMG>
+<enableDPAdaptiveMedianBGS>0</enableDPAdaptiveMedianBGS>
+<enableDPGrimsonGMMBGS>0</enableDPGrimsonGMMBGS>
+<enableDPZivkovicAGMMBGS>0</enableDPZivkovicAGMMBGS>
+<enableDPMeanBGS>0</enableDPMeanBGS>
+<enableDPWrenGABGS>0</enableDPWrenGABGS>
+<enableDPPratiMediodBGS>0</enableDPPratiMediodBGS>
+<enableDPEigenbackgroundBGS>0</enableDPEigenbackgroundBGS>
+<enableDPTextureBGS>0</enableDPTextureBGS>
+<enableT2FGMM_UM>0</enableT2FGMM_UM>
+<enableT2FGMM_UV>0</enableT2FGMM_UV>
+<enableT2FMRF_UM>0</enableT2FMRF_UM>
+<enableT2FMRF_UV>0</enableT2FMRF_UV>
+<enableFuzzySugenoIntegral>0</enableFuzzySugenoIntegral>
+<enableFuzzyChoquetIntegral>0</enableFuzzyChoquetIntegral>
+<enableLBSimpleGaussian>0</enableLBSimpleGaussian>
+<enableLBFuzzyGaussian>0</enableLBFuzzyGaussian>
+<enableLBMixtureOfGaussians>0</enableLBMixtureOfGaussians>
+<enableLBAdaptiveSOM>0</enableLBAdaptiveSOM>
+<enableLBFuzzyAdaptiveSOM>0</enableLBFuzzyAdaptiveSOM>
+<enableLbpMrf>0</enableLbpMrf>
+<enableMultiLayerBGS>0</enableMultiLayerBGS>
+<enablePBAS>0</enablePBAS>
+<enableVuMeter>0</enableVuMeter>
+<enableKDE>0</enableKDE>
+</opencv_storage>
diff --git a/config/PreProcessor.xml b/config/PreProcessor.xml
new file mode 100644
index 0000000..e58b318
--- /dev/null
+++ b/config/PreProcessor.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<opencv_storage>
+<equalizeHist>0</equalizeHist>
+<gaussianBlur>0</gaussianBlur>
+<enableShow>1</enableShow>
+</opencv_storage>
diff --git a/config/VideoCapture.xml b/config/VideoCapture.xml
new file mode 100644
index 0000000..60dd9aa
--- /dev/null
+++ b/config/VideoCapture.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<opencv_storage>
+<stopAt>0</stopAt>
+<input_resize_percent>100</input_resize_percent>
+<enableFlip>0</enableFlip>
+<use_roi>0</use_roi>
+<roi_defined>0</roi_defined>
+<roi_x0>0</roi_x0>
+<roi_y0>0</roi_y0>
+<roi_x1>0</roi_x1>
+<roi_y1>0</roi_y1>
+<showOutput>1</showOutput>
+</opencv_storage>
diff --git a/dataset/video.avi b/dataset/video.avi
new file mode 100644
index 0000000000000000000000000000000000000000..a29f00658be7d05b10344859e6bee9a501a7a2b1
GIT binary patch
literal 1049784
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%0DOBjHZ}0zW=cniIiGQi5
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
z%0D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%0AC0p0bmfKcqxpDc%
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%0Dt#eC>I0HRj*aRF2gwB`>%3J@qU2
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

literal 0
HcmV?d00001

diff --git a/demos/DemoFrameDifferenceBGS.cpp b/demos/DemoFrameDifferenceBGS.cpp
new file mode 100644
index 0000000..5f81242
--- /dev/null
+++ b/demos/DemoFrameDifferenceBGS.cpp
@@ -0,0 +1,49 @@
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "package_bgs/FrameDifferenceBGS.h"
+
+int main(int argc, char **argv)
+{
+  CvCapture *capture = 0;
+  
+  capture = cvCaptureFromCAM(0);
+  //capture = cvCaptureFromAVI("video.avi");
+  
+  if(!capture){
+    std::cerr << "Cannot open initialize webcam!" << std::endl;
+    return 1;
+  }
+  
+  IplImage *frame = cvQueryFrame(capture);
+  
+  FrameDifferenceBGS* bgs = new FrameDifferenceBGS;
+
+  int key = 0;
+  while(key != 'q')
+  {
+    frame = cvQueryFrame(capture);
+
+    if(!frame) break;
+
+    cv::Mat img_input(frame,true);
+    cv::resize(img_input,img_input,cv::Size(320,240));
+    cv::imshow("input", img_input);
+    
+    cv::Mat img_mask;
+    bgs->process(img_input, img_mask); // automatically shows the foreground mask image
+    
+    //if(!img_mask.empty())
+    //  do something
+    
+    key = cvWaitKey(1);
+  }
+
+  delete bgs;
+
+  cvDestroyAllWindows();
+  cvReleaseCapture(&capture);
+  
+  return 0;
+}
diff --git a/demos/DemoMultiLayerBGS.cpp b/demos/DemoMultiLayerBGS.cpp
new file mode 100644
index 0000000..bf2bbad
--- /dev/null
+++ b/demos/DemoMultiLayerBGS.cpp
@@ -0,0 +1,49 @@
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "package_bgs/jmo/MultiLayerBGS.h"
+
+int main(int argc, char **argv)
+{
+  CvCapture *capture = 0;
+  
+  capture = cvCaptureFromCAM(0);
+  //capture = cvCaptureFromAVI("video.avi");
+  
+  if(!capture){
+    std::cerr << "Cannot open initialize webcam!" << std::endl;
+    return 1;
+  }
+  
+  IplImage *frame = cvQueryFrame(capture);
+  
+  MultiLayerBGS* bgs = new MultiLayerBGS;
+
+  int key = 0;
+  while(key != 'q')
+  {
+    frame = cvQueryFrame(capture);
+
+    if(!frame) break;
+
+    cv::Mat img_input(frame,true);
+    cv::resize(img_input,img_input,cv::Size(320,240));
+    cv::imshow("input", img_input);
+    
+    cv::Mat img_mask;
+    bgs->process(img_input, img_mask); // automatically shows the foreground mask image
+    
+    //if(!img_mask.empty())
+    //  do something
+    
+    key = cvWaitKey(1);
+  }
+
+  delete bgs;
+
+  cvDestroyAllWindows();
+  cvReleaseCapture(&capture);
+  
+  return 0;
+}
diff --git a/package_analysis/ForegroundMaskAnalysis.cpp b/package_analysis/ForegroundMaskAnalysis.cpp
new file mode 100644
index 0000000..45645a0
--- /dev/null
+++ b/package_analysis/ForegroundMaskAnalysis.cpp
@@ -0,0 +1,101 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "ForegroundMaskAnalysis.h"
+
+ForegroundMaskAnalysis::ForegroundMaskAnalysis() : firstTime(true), stopAt(0), showOutput(true), img_ref_path("")
+{
+  std::cout << "ForegroundMaskAnalysis()" << std::endl;
+}
+
+ForegroundMaskAnalysis::~ForegroundMaskAnalysis()
+{
+  std::cout << "~ForegroundMaskAnalysis()" << std::endl;
+}
+
+void ForegroundMaskAnalysis::process(const long &frameNumber, const std::string &name, const cv::Mat &img_input)
+{
+  if(img_input.empty())
+    return;
+
+  if(stopAt == 0)
+  {
+    loadConfig();
+
+    if(firstTime)
+      saveConfig();
+  }
+
+  if(stopAt == frameNumber && img_ref_path.empty() == false)
+  {
+    cv::Mat img_ref = cv::imread(img_ref_path, 0);
+
+    if(showOutput)
+      cv::imshow("ForegroundMaskAnalysis", img_ref);
+
+    int rn = cv::countNonZero(img_ref);
+    cv::Mat i;
+    cv::Mat u;
+
+    if(rn > 0)
+    {
+      i = img_input & img_ref;
+      u = img_input | img_ref;
+    }
+    else
+    {
+      i = (~img_input) & (~img_ref);
+      u = (~img_input) | (~img_ref);
+    }
+
+    int in = cv::countNonZero(i);
+    int un = cv::countNonZero(u);
+    
+    double s = (((double)in) / ((double)un));
+    
+    if(showOutput)
+    {
+      cv::imshow("A^B", i);
+      cv::imshow("AvB", u);
+    }
+
+    std::cout << name << " - Similarity Measure: " << s << " press ENTER to continue" << std::endl;
+
+    cv::waitKey(0);
+  }
+
+  firstTime = false;
+}
+
+void ForegroundMaskAnalysis::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/ForegroundMaskAnalysis.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "stopAt", stopAt);
+  cvWriteString(fs, "img_ref_path", img_ref_path.c_str());
+  
+  cvReleaseFileStorage(&fs);
+}
+
+void ForegroundMaskAnalysis::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/ForegroundMaskAnalysis.xml", 0, CV_STORAGE_READ);
+  
+  stopAt = cvReadIntByName(fs, 0, "stopAt", 0);
+  img_ref_path = cvReadStringByName(fs, 0, "img_ref_path", "");
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_analysis/ForegroundMaskAnalysis.h b/package_analysis/ForegroundMaskAnalysis.h
new file mode 100644
index 0000000..d6bfdae
--- /dev/null
+++ b/package_analysis/ForegroundMaskAnalysis.h
@@ -0,0 +1,42 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <string>
+#include <cv.h>
+#include <highgui.h>
+
+class ForegroundMaskAnalysis
+{
+private:
+  bool firstTime;
+  bool showOutput;
+
+public:
+  ForegroundMaskAnalysis();
+  ~ForegroundMaskAnalysis();
+  
+  long stopAt;
+  std::string img_ref_path;
+
+  void process(const long &frameNumber, const std::string &name, const cv::Mat &img_input);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
\ No newline at end of file
diff --git a/package_bgs/AdaptiveBackgroundLearning.cpp b/package_bgs/AdaptiveBackgroundLearning.cpp
new file mode 100644
index 0000000..b111e65
--- /dev/null
+++ b/package_bgs/AdaptiveBackgroundLearning.cpp
@@ -0,0 +1,111 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "AdaptiveBackgroundLearning.h"
+
+AdaptiveBackgroundLearning::AdaptiveBackgroundLearning() : firstTime(true), alpha(0.05), limit(-1), counter(0), minVal(0.0), maxVal(1.0), 
+  enableThreshold(true), threshold(15), showForeground(true), showBackground(true)
+{
+  std::cout << "AdaptiveBackgroundLearning()" << std::endl;
+}
+
+AdaptiveBackgroundLearning::~AdaptiveBackgroundLearning()
+{
+  std::cout << "~AdaptiveBackgroundLearning()" << std::endl;
+}
+
+void AdaptiveBackgroundLearning::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  if(img_background.empty())
+    img_input.copyTo(img_background);
+
+  cv::Mat img_input_f(img_input.size(), CV_32F);
+  img_input.convertTo(img_input_f, CV_32F, 1./255.);
+
+  cv::Mat img_background_f(img_background.size(), CV_32F);
+  img_background.convertTo(img_background_f, CV_32F, 1./255.);
+
+  cv::Mat img_diff_f(img_input.size(), CV_32F);
+  cv::absdiff(img_input_f, img_background_f, img_diff_f);
+
+  if((limit > 0 && limit < counter) || limit == -1)
+  {
+    img_background_f = alpha*img_input_f + (1-alpha)*img_background_f;
+    
+    cv::Mat img_new_background(img_input.size(), CV_8U);
+    img_background_f.convertTo(img_new_background, CV_8U, 255.0/(maxVal - minVal), -minVal);
+    img_new_background.copyTo(img_background);
+
+    if(limit > 0 && limit < counter)
+      counter++;
+  }
+  
+  cv::Mat img_foreground(img_input.size(), CV_8U);
+  img_diff_f.convertTo(img_foreground, CV_8U, 255.0/(maxVal - minVal), -minVal);
+
+  if(img_foreground.channels() == 3)
+    cv::cvtColor(img_foreground, img_foreground, CV_BGR2GRAY);
+
+  if(enableThreshold)
+    cv::threshold(img_foreground, img_foreground, threshold, 255, cv::THRESH_BINARY);
+  
+  if(showForeground)
+    cv::imshow("A-Learning FG", img_foreground);
+
+  if(showBackground)
+    cv::imshow("A-Learning BG", img_background);
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+
+  firstTime = false;
+}
+
+void AdaptiveBackgroundLearning::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/AdaptiveBackgroundLearning.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteInt(fs, "limit", limit);
+  cvWriteInt(fs, "enableThreshold", enableThreshold);
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "showForeground", showForeground);
+  cvWriteInt(fs, "showBackground", showBackground);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void AdaptiveBackgroundLearning::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/AdaptiveBackgroundLearning.xml", 0, CV_STORAGE_READ);
+  
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.05);
+  limit = cvReadIntByName(fs, 0, "limit", -1);
+  enableThreshold = cvReadIntByName(fs, 0, "enableThreshold", true);
+  threshold = cvReadIntByName(fs, 0, "threshold", 15);
+  showForeground = cvReadIntByName(fs, 0, "showForeground", true);
+  showBackground = cvReadIntByName(fs, 0, "showBackground", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/AdaptiveBackgroundLearning.h b/package_bgs/AdaptiveBackgroundLearning.h
new file mode 100644
index 0000000..eb07a64
--- /dev/null
+++ b/package_bgs/AdaptiveBackgroundLearning.h
@@ -0,0 +1,50 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "IBGS.h"
+
+class AdaptiveBackgroundLearning : public IBGS
+{
+private:
+  bool firstTime;
+  cv::Mat img_background;
+  double alpha;
+  long limit;
+  long counter;
+  double minVal;
+  double maxVal;
+  bool enableThreshold;
+  int threshold;
+  bool showForeground;
+  bool showBackground;
+
+public:
+  AdaptiveBackgroundLearning();
+  ~AdaptiveBackgroundLearning();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/AdaptiveSelectiveBackgroundLearning.cpp b/package_bgs/AdaptiveSelectiveBackgroundLearning.cpp
new file mode 100644
index 0000000..cd3e7d3
--- /dev/null
+++ b/package_bgs/AdaptiveSelectiveBackgroundLearning.cpp
@@ -0,0 +1,131 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "AdaptiveSelectiveBackgroundLearning.h"
+
+AdaptiveSelectiveBackgroundLearning::AdaptiveSelectiveBackgroundLearning() : firstTime(true), 
+alphaLearn(0.05), alphaDetection(0.05), learningFrames(-1), counter(0), minVal(0.0), maxVal(1.0),
+threshold(15), showOutput(true)
+{
+  std::cout << "AdaptiveSelectiveBackgroundLearning()" << std::endl;
+}
+
+AdaptiveSelectiveBackgroundLearning::~AdaptiveSelectiveBackgroundLearning()
+{
+  std::cout << "~AdaptiveSelectiveBackgroundLearning()" << std::endl;
+}
+
+void AdaptiveSelectiveBackgroundLearning::process(const cv::Mat &img_input_, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input_.empty())
+    return;
+
+  cv::Mat img_input;
+  if (img_input_.channels() == 3)
+    cv::cvtColor(img_input_, img_input, CV_BGR2GRAY);
+  else
+    img_input_.copyTo(img_input);
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  if(img_background.empty())
+    img_input.copyTo(img_background);
+
+  cv::Mat img_input_f(img_input.size(), CV_32F);
+  img_input.convertTo(img_input_f, CV_32F, 1./255.);
+
+  cv::Mat img_background_f(img_background.size(), CV_32F);
+  img_background.convertTo(img_background_f, CV_32F, 1./255.);
+
+  cv::Mat img_diff_f(img_input.size(), CV_32F);
+  cv::absdiff(img_input_f, img_background_f, img_diff_f);
+
+  cv::Mat img_foreground(img_input.size(), CV_8U);
+  img_diff_f.convertTo(img_foreground, CV_8U, 255.0 / (maxVal - minVal), -minVal);
+
+  cv::threshold(img_foreground, img_foreground, threshold, 255, cv::THRESH_BINARY);
+  cv::medianBlur(img_foreground, img_foreground, 3);
+
+  if (learningFrames > 0 && counter <= learningFrames)
+  {
+    //std::cout << "Adaptive update..." << std::endl;
+    // Only Adaptive update of the background model
+    img_background_f = alphaLearn * img_input_f + (1 - alphaLearn) * img_background_f;
+    counter++;
+  }
+  else
+  {
+    //std::cout << "Adaptive and Selective update..." << std::endl;
+    int rows = img_input.rows;
+    int cols = img_input.cols;
+
+    for (int i = 0; i < rows; i++)
+    {
+      for (int j = 0; j < cols; j++)
+      {
+        // Adaptive and Selective update of the background model
+        if (img_foreground.at<uchar>(i, j) == 0)
+        {
+          img_background_f.at<float>(i, j) = alphaDetection * img_input_f.at<float>(i, j) + (1 - alphaDetection) * img_background_f.at<float>(i, j);
+        }
+      }
+    }
+  }
+
+  cv::Mat img_new_background(img_input.size(), CV_8U);
+  img_background_f.convertTo(img_new_background, CV_8U, 255.0 / (maxVal - minVal), -minVal);
+  img_new_background.copyTo(img_background);
+  
+  if(showOutput)
+  {
+    cv::imshow("AS-Learning FG", img_foreground);
+    cv::imshow("AS-Learning BG", img_background);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+
+  firstTime = false;
+}
+
+void AdaptiveSelectiveBackgroundLearning::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/AdaptiveSelectiveBackgroundLearning.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "learningFrames", learningFrames);
+  cvWriteReal(fs, "alphaLearn", alphaLearn);
+  cvWriteReal(fs, "alphaDetection", alphaDetection);
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void AdaptiveSelectiveBackgroundLearning::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/AdaptiveSelectiveBackgroundLearning.xml", 0, CV_STORAGE_READ);
+  
+  learningFrames = cvReadIntByName(fs, 0, "learningFrames", 90);
+  alphaLearn = cvReadRealByName(fs, 0, "alphaLearn", 0.05);
+  alphaDetection = cvReadRealByName(fs, 0, "alphaDetection", 0.05);
+  threshold = cvReadIntByName(fs, 0, "threshold", 25);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/AdaptiveSelectiveBackgroundLearning.h b/package_bgs/AdaptiveSelectiveBackgroundLearning.h
new file mode 100644
index 0000000..cb9f4d5
--- /dev/null
+++ b/package_bgs/AdaptiveSelectiveBackgroundLearning.h
@@ -0,0 +1,49 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "IBGS.h"
+
+class AdaptiveSelectiveBackgroundLearning : public IBGS
+{
+private:
+  bool firstTime;
+  cv::Mat img_background;
+  double alphaLearn;
+  double alphaDetection;
+  long learningFrames;
+  long counter;
+  double minVal;
+  double maxVal;
+  int threshold;
+  bool showOutput;
+
+public:
+  AdaptiveSelectiveBackgroundLearning();
+  ~AdaptiveSelectiveBackgroundLearning();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/FrameDifferenceBGS.cpp b/package_bgs/FrameDifferenceBGS.cpp
new file mode 100644
index 0000000..e871651
--- /dev/null
+++ b/package_bgs/FrameDifferenceBGS.cpp
@@ -0,0 +1,83 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "FrameDifferenceBGS.h"
+
+FrameDifferenceBGS::FrameDifferenceBGS() : firstTime(true), enableThreshold(true), threshold(15), showOutput(true)
+{
+  std::cout << "FrameDifferenceBGS()" << std::endl;
+}
+
+FrameDifferenceBGS::~FrameDifferenceBGS()
+{
+  std::cout << "~FrameDifferenceBGS()" << std::endl;
+}
+
+void FrameDifferenceBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  if(img_input_prev.empty())
+  {
+    img_input.copyTo(img_input_prev);
+    return;
+  }
+
+  cv::absdiff(img_input_prev, img_input, img_foreground);
+
+  if(img_foreground.channels() == 3)
+    cv::cvtColor(img_foreground, img_foreground, CV_BGR2GRAY);
+
+  if(enableThreshold)
+    cv::threshold(img_foreground, img_foreground, threshold, 255, cv::THRESH_BINARY);
+
+  if(showOutput)
+    cv::imshow("Frame Difference", img_foreground);
+
+  img_foreground.copyTo(img_output);
+
+  img_input.copyTo(img_input_prev);
+
+  firstTime = false;
+}
+
+void FrameDifferenceBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/FrameDifferenceBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "enableThreshold", enableThreshold);
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void FrameDifferenceBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/FrameDifferenceBGS.xml", 0, CV_STORAGE_READ);
+  
+  enableThreshold = cvReadIntByName(fs, 0, "enableThreshold", true);
+  threshold = cvReadIntByName(fs, 0, "threshold", 15);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/FrameDifferenceBGS.h b/package_bgs/FrameDifferenceBGS.h
new file mode 100644
index 0000000..3fab44d
--- /dev/null
+++ b/package_bgs/FrameDifferenceBGS.h
@@ -0,0 +1,44 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "IBGS.h"
+
+class FrameDifferenceBGS : public IBGS
+{
+private:
+  bool firstTime;
+  cv::Mat img_input_prev;
+  cv::Mat img_foreground;
+  bool enableThreshold;
+  int threshold;
+  bool showOutput;
+
+public:
+  FrameDifferenceBGS();
+  ~FrameDifferenceBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
\ No newline at end of file
diff --git a/package_bgs/GMG.cpp b/package_bgs/GMG.cpp
new file mode 100644
index 0000000..675b23c
--- /dev/null
+++ b/package_bgs/GMG.cpp
@@ -0,0 +1,99 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "GMG.h"
+
+GMG::GMG() : firstTime(true), initializationFrames(20), decisionThreshold(0.7), showOutput(true)
+{
+  std::cout << "GMG()" << std::endl;
+
+  cv::initModule_video();
+  cv::setUseOptimized(true);
+  cv::setNumThreads(8);
+
+  fgbg = cv::Algorithm::create<cv::BackgroundSubtractorGMG>("BackgroundSubtractor.GMG");
+}
+
+GMG::~GMG()
+{
+  std::cout << "~GMG()" << std::endl;
+}
+
+void GMG::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+  {
+    fgbg->set("initializationFrames", initializationFrames);
+    fgbg->set("decisionThreshold", decisionThreshold);
+
+    saveConfig();
+  }
+  
+  if(fgbg.empty())
+  {
+    std::cerr << "Failed to create BackgroundSubtractor.GMG Algorithm." << std::endl;
+    return;
+  }
+
+  (*fgbg)(img_input, img_foreground);
+
+  cv::Mat img_background;
+  (*fgbg).getBackgroundImage(img_background);
+
+  img_input.copyTo(img_segmentation);
+  cv::add(img_input, cv::Scalar(100, 100, 0), img_segmentation, img_foreground);
+
+  if(showOutput)
+  {
+    if (!img_foreground.empty())
+      cv::imshow("GMG FG (Godbehere-Matsukawa-Goldberg)", img_foreground);
+    
+    if (!img_background.empty())
+      cv::imshow("GMG BG (Godbehere-Matsukawa-Goldberg)", img_background);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+
+  firstTime = false;
+}
+
+void GMG::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/GMG.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "initializationFrames", initializationFrames);
+  cvWriteReal(fs, "decisionThreshold", decisionThreshold);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void GMG::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/GMG.xml", 0, CV_STORAGE_READ);
+  
+  initializationFrames = cvReadIntByName(fs, 0, "initializationFrames", 20);
+  decisionThreshold = cvReadRealByName(fs, 0, "decisionThreshold", 0.7);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+  
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/GMG.h b/package_bgs/GMG.h
new file mode 100644
index 0000000..9da28ad
--- /dev/null
+++ b/package_bgs/GMG.h
@@ -0,0 +1,45 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <opencv2/opencv.hpp>
+
+#include "IBGS.h"
+
+class GMG : public IBGS
+{
+private:
+  bool firstTime;
+  cv::Ptr<cv::BackgroundSubtractorGMG> fgbg;
+  int initializationFrames;
+  double decisionThreshold;
+  cv::Mat img_foreground;
+  cv::Mat img_segmentation;
+  bool showOutput;
+
+public:
+  GMG();
+  ~GMG();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/IBGS.h b/package_bgs/IBGS.h
new file mode 100644
index 0000000..0b57658
--- /dev/null
+++ b/package_bgs/IBGS.h
@@ -0,0 +1,33 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <cv.h>
+
+class IBGS
+{
+public:
+  virtual void process(const cv::Mat &img_input, cv::Mat &img_foreground, cv::Mat &img_background) = 0;
+  /*virtual void process(const cv::Mat &img_input, cv::Mat &img_foreground){
+    process(img_input, img_foreground, cv::Mat());
+  }*/
+  virtual ~IBGS(){}
+
+private:
+  virtual void saveConfig() = 0;
+  virtual void loadConfig() = 0;
+};
diff --git a/package_bgs/MixtureOfGaussianV1BGS.cpp b/package_bgs/MixtureOfGaussianV1BGS.cpp
new file mode 100644
index 0000000..51d41eb
--- /dev/null
+++ b/package_bgs/MixtureOfGaussianV1BGS.cpp
@@ -0,0 +1,95 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "MixtureOfGaussianV1BGS.h"
+
+MixtureOfGaussianV1BGS::MixtureOfGaussianV1BGS() : firstTime(true), alpha(0.05), enableThreshold(true), threshold(15), showOutput(true)
+{
+  std::cout << "MixtureOfGaussianV1BGS()" << std::endl;
+}
+
+MixtureOfGaussianV1BGS::~MixtureOfGaussianV1BGS()
+{
+  std::cout << "~MixtureOfGaussianV1BGS()" << std::endl;
+}
+
+void MixtureOfGaussianV1BGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  //------------------------------------------------------------------
+  // BackgroundSubtractorMOG
+  // http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog
+  //
+  // Gaussian Mixture-based Backbround/Foreground Segmentation Algorithm.
+  //
+  // The class implements the algorithm described in:
+  //   P. KadewTraKuPong and R. Bowden, 
+  //   An improved adaptive background mixture model for real-time tracking with shadow detection, 
+  //   Proc. 2nd European Workshp on Advanced Video-Based Surveillance Systems, 2001
+  //------------------------------------------------------------------
+
+  mog(img_input, img_foreground, alpha);
+  cv::Mat img_background;
+  mog.getBackgroundImage(img_background);
+
+  if(enableThreshold)
+    cv::threshold(img_foreground, img_foreground, threshold, 255, cv::THRESH_BINARY);
+
+  if(showOutput)
+  {
+    if (!img_foreground.empty())
+      cv::imshow("GMM FG (KadewTraKuPong&Bowden)", img_foreground);
+    
+    if (!img_background.empty())
+      cv::imshow("GMM BG (KadewTraKuPong&Bowden)", img_background);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+
+  firstTime = false;
+}
+
+void MixtureOfGaussianV1BGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/MixtureOfGaussianV1BGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteInt(fs, "enableThreshold", enableThreshold);
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void MixtureOfGaussianV1BGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/MixtureOfGaussianV1BGS.xml", 0, CV_STORAGE_READ);
+  
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.05);
+  enableThreshold = cvReadIntByName(fs, 0, "enableThreshold", true);
+  threshold = cvReadIntByName(fs, 0, "threshold", 15);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/MixtureOfGaussianV1BGS.h b/package_bgs/MixtureOfGaussianV1BGS.h
new file mode 100644
index 0000000..8a67acc
--- /dev/null
+++ b/package_bgs/MixtureOfGaussianV1BGS.h
@@ -0,0 +1,47 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+#include <opencv2/video/background_segm.hpp>
+
+#include "IBGS.h"
+
+class MixtureOfGaussianV1BGS : public IBGS
+{
+private:
+  bool firstTime;
+  cv::BackgroundSubtractorMOG mog;
+  cv::Mat img_foreground;
+  double alpha;
+  bool enableThreshold;
+  int threshold;
+  bool showOutput;
+
+public:
+  MixtureOfGaussianV1BGS();
+  ~MixtureOfGaussianV1BGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/MixtureOfGaussianV2BGS.cpp b/package_bgs/MixtureOfGaussianV2BGS.cpp
new file mode 100644
index 0000000..5ce33a3
--- /dev/null
+++ b/package_bgs/MixtureOfGaussianV2BGS.cpp
@@ -0,0 +1,98 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "MixtureOfGaussianV2BGS.h"
+
+MixtureOfGaussianV2BGS::MixtureOfGaussianV2BGS() : firstTime(true), alpha(0.05), enableThreshold(true), threshold(15), showOutput(true)
+{
+  std::cout << "MixtureOfGaussianV2BGS()" << std::endl;
+}
+
+MixtureOfGaussianV2BGS::~MixtureOfGaussianV2BGS()
+{
+  std::cout << "~MixtureOfGaussianV2BGS()" << std::endl;
+}
+
+void MixtureOfGaussianV2BGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  //------------------------------------------------------------------
+  // BackgroundSubtractorMOG2
+  // http://opencv.itseez.com/modules/video/doc/motion_analysis_and_object_tracking.html#backgroundsubtractormog2
+  //
+  // Gaussian Mixture-based Backbround/Foreground Segmentation Algorithm.
+  //
+  // The class implements the Gaussian mixture model background subtraction described in:
+  //  (1) Z.Zivkovic, Improved adaptive Gausian mixture model for background subtraction, International Conference Pattern Recognition, UK, August, 2004, 
+  //  The code is very fast and performs also shadow detection. Number of Gausssian components is adapted per pixel.
+  //
+  //  (2) Z.Zivkovic, F. van der Heijden, Efficient Adaptive Density Estimation per Image Pixel for the Task of Background Subtraction, 
+  //  Pattern Recognition Letters, vol. 27, no. 7, pages 773-780, 2006. 
+  //  The algorithm similar to the standard Stauffer&Grimson algorithm with additional selection of the number of the Gaussian components based on: 
+  //    Z.Zivkovic, F.van der Heijden, Recursive unsupervised learning of finite mixture models, IEEE Trans. on Pattern Analysis and Machine Intelligence, 
+  //    vol.26, no.5, pages 651-656, 2004.
+  //------------------------------------------------------------------
+
+  mog(img_input, img_foreground, alpha);
+  
+  cv::Mat img_background;
+  mog.getBackgroundImage(img_background);
+
+  if(enableThreshold)
+    cv::threshold(img_foreground, img_foreground, threshold, 255, cv::THRESH_BINARY);
+
+  if(showOutput)
+  {
+    cv::imshow("GMM (Zivkovic&Heijden)", img_foreground);
+    cv::imshow("GMM BKG (Zivkovic&Heijden)", img_background);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+
+  firstTime = false;
+}
+
+void MixtureOfGaussianV2BGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/MixtureOfGaussianV2BGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteInt(fs, "enableThreshold", enableThreshold);
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void MixtureOfGaussianV2BGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/MixtureOfGaussianV2BGS.xml", 0, CV_STORAGE_READ);
+  
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.05);
+  enableThreshold = cvReadIntByName(fs, 0, "enableThreshold", true);
+  threshold = cvReadIntByName(fs, 0, "threshold", 15);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/MixtureOfGaussianV2BGS.h b/package_bgs/MixtureOfGaussianV2BGS.h
new file mode 100644
index 0000000..495d701
--- /dev/null
+++ b/package_bgs/MixtureOfGaussianV2BGS.h
@@ -0,0 +1,47 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+#include <opencv2/video/background_segm.hpp>
+
+#include "IBGS.h"
+
+class MixtureOfGaussianV2BGS : public IBGS
+{
+private:
+  bool firstTime;
+  cv::BackgroundSubtractorMOG2 mog;
+  cv::Mat img_foreground;
+  double alpha;
+  bool enableThreshold;
+  int threshold;
+  bool showOutput;
+
+public:
+  MixtureOfGaussianV2BGS();
+  ~MixtureOfGaussianV2BGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/StaticFrameDifferenceBGS.cpp b/package_bgs/StaticFrameDifferenceBGS.cpp
new file mode 100644
index 0000000..3463c45
--- /dev/null
+++ b/package_bgs/StaticFrameDifferenceBGS.cpp
@@ -0,0 +1,79 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "StaticFrameDifferenceBGS.h"
+
+StaticFrameDifferenceBGS::StaticFrameDifferenceBGS() : firstTime(true), enableThreshold(true), threshold(15), showOutput(true)
+{
+  std::cout << "StaticFrameDifferenceBGS()" << std::endl;
+}
+
+StaticFrameDifferenceBGS::~StaticFrameDifferenceBGS()
+{
+  std::cout << "~StaticFrameDifferenceBGS()" << std::endl;
+}
+
+void StaticFrameDifferenceBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  if(img_background.empty())
+    img_input.copyTo(img_background);
+  
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  cv::absdiff(img_input, img_background, img_foreground);
+
+  if(img_foreground.channels() == 3)
+    cv::cvtColor(img_foreground, img_foreground, CV_BGR2GRAY);
+
+  if(enableThreshold)
+    cv::threshold(img_foreground, img_foreground, threshold, 255, cv::THRESH_BINARY);
+
+  if(showOutput)
+    cv::imshow("Static Frame Difference", img_foreground);
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+
+  firstTime = false;
+}
+
+void StaticFrameDifferenceBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/StaticFrameDifferenceBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "enableThreshold", enableThreshold);
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void StaticFrameDifferenceBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/StaticFrameDifferenceBGS.xml", 0, CV_STORAGE_READ);
+  
+  enableThreshold = cvReadIntByName(fs, 0, "enableThreshold", true);
+  threshold = cvReadIntByName(fs, 0, "threshold", 15);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/StaticFrameDifferenceBGS.h b/package_bgs/StaticFrameDifferenceBGS.h
new file mode 100644
index 0000000..416d13b
--- /dev/null
+++ b/package_bgs/StaticFrameDifferenceBGS.h
@@ -0,0 +1,45 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "IBGS.h"
+
+class StaticFrameDifferenceBGS : public IBGS
+{
+private:
+  bool firstTime;
+  cv::Mat img_background;
+  cv::Mat img_foreground;
+  bool enableThreshold;
+  int threshold;
+  bool showOutput;
+
+public:
+  StaticFrameDifferenceBGS();
+  ~StaticFrameDifferenceBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/WeightedMovingMeanBGS.cpp b/package_bgs/WeightedMovingMeanBGS.cpp
new file mode 100644
index 0000000..841c467
--- /dev/null
+++ b/package_bgs/WeightedMovingMeanBGS.cpp
@@ -0,0 +1,122 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "WeightedMovingMeanBGS.h"
+
+WeightedMovingMeanBGS::WeightedMovingMeanBGS() : firstTime(true), enableWeight(true), enableThreshold(true), threshold(15), showOutput(true), showBackground(false)
+{
+  std::cout << "WeightedMovingMeanBGS()" << std::endl;
+}
+
+WeightedMovingMeanBGS::~WeightedMovingMeanBGS()
+{
+  std::cout << "~WeightedMovingMeanBGS()" << std::endl;
+}
+
+void WeightedMovingMeanBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  if(img_input_prev_1.empty())
+  {
+    img_input.copyTo(img_input_prev_1);
+    return;
+  }
+
+  if(img_input_prev_2.empty())
+  {
+    img_input_prev_1.copyTo(img_input_prev_2);
+    img_input.copyTo(img_input_prev_1);
+    return;
+  }
+  
+  cv::Mat img_input_f(img_input.size(), CV_32F);
+  img_input.convertTo(img_input_f, CV_32F, 1./255.);
+
+  cv::Mat img_input_prev_1_f(img_input.size(), CV_32F);
+  img_input_prev_1.convertTo(img_input_prev_1_f, CV_32F, 1./255.);
+
+  cv::Mat img_input_prev_2_f(img_input.size(), CV_32F);
+  img_input_prev_2.convertTo(img_input_prev_2_f, CV_32F, 1./255.);
+
+  cv::Mat img_background_f(img_input.size(), CV_32F);
+  
+  if(enableWeight)
+    img_background_f = ((img_input_f * 0.5) + (img_input_prev_1_f * 0.3) + (img_input_prev_2_f * 0.2));
+  else
+    img_background_f = ((img_input_f) + (img_input_prev_1_f) + (img_input_prev_2_f)) / 3.0;
+
+  cv::Mat img_background(img_background_f.size(), CV_8U);
+
+  double minVal, maxVal;
+  minVal = 0.; maxVal = 1.;
+  img_background_f.convertTo(img_background, CV_8U, 255.0/(maxVal - minVal), -minVal);
+  
+  if(showBackground)
+    cv::imshow("W Moving Mean BG Model", img_background);
+
+  cv::Mat img_foreground;
+  cv::absdiff(img_input, img_background, img_foreground);
+
+  if(img_foreground.channels() == 3)
+    cv::cvtColor(img_foreground, img_foreground, CV_BGR2GRAY);
+
+  if(enableThreshold)
+    cv::threshold(img_foreground, img_foreground, threshold, 255, cv::THRESH_BINARY);
+
+  if(showOutput)
+    cv::imshow("W Moving Mean FG Mask", img_foreground);
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+
+  img_input_prev_1.copyTo(img_input_prev_2);
+  img_input.copyTo(img_input_prev_1);
+
+  firstTime = false;
+}
+
+void WeightedMovingMeanBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/WeightedMovingMeanBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "enableWeight", enableWeight);
+  cvWriteInt(fs, "enableThreshold", enableThreshold);
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "showOutput", showOutput);
+  cvWriteInt(fs, "showBackground", showBackground);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void WeightedMovingMeanBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/WeightedMovingMeanBGS.xml", 0, CV_STORAGE_READ);
+  
+  enableWeight = cvReadIntByName(fs, 0, "enableWeight", true);
+  enableThreshold = cvReadIntByName(fs, 0, "enableThreshold", true);
+  threshold = cvReadIntByName(fs, 0, "threshold", 15);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+  showBackground = cvReadIntByName(fs, 0, "showBackground", false);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/WeightedMovingMeanBGS.h b/package_bgs/WeightedMovingMeanBGS.h
new file mode 100644
index 0000000..a6684e7
--- /dev/null
+++ b/package_bgs/WeightedMovingMeanBGS.h
@@ -0,0 +1,47 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "IBGS.h"
+
+class WeightedMovingMeanBGS : public IBGS
+{
+private:
+  bool firstTime;
+  cv::Mat img_input_prev_1;
+  cv::Mat img_input_prev_2;
+  bool enableWeight;
+  bool enableThreshold;
+  int threshold;
+  bool showOutput;
+  bool showBackground;
+
+public:
+  WeightedMovingMeanBGS();
+  ~WeightedMovingMeanBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/WeightedMovingVarianceBGS.cpp b/package_bgs/WeightedMovingVarianceBGS.cpp
new file mode 100644
index 0000000..7e691e9
--- /dev/null
+++ b/package_bgs/WeightedMovingVarianceBGS.cpp
@@ -0,0 +1,161 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "WeightedMovingVarianceBGS.h"
+
+WeightedMovingVarianceBGS::WeightedMovingVarianceBGS() : firstTime(true), enableWeight(true), 
+  enableThreshold(true), threshold(15), showOutput(true)
+{
+  std::cout << "WeightedMovingVarianceBGS()" << std::endl;
+}
+
+WeightedMovingVarianceBGS::~WeightedMovingVarianceBGS()
+{
+  std::cout << "~WeightedMovingVarianceBGS()" << std::endl;
+}
+
+void WeightedMovingVarianceBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  if(img_input_prev_1.empty())
+  {
+    img_input.copyTo(img_input_prev_1);
+    return;
+  }
+
+  if(img_input_prev_2.empty())
+  {
+    img_input_prev_1.copyTo(img_input_prev_2);
+    img_input.copyTo(img_input_prev_1);
+    return;
+  }
+
+  cv::Mat img_input_f(img_input.size(), CV_32F);
+  img_input.convertTo(img_input_f, CV_32F, 1./255.);
+
+  cv::Mat img_input_prev_1_f(img_input.size(), CV_32F);
+  img_input_prev_1.convertTo(img_input_prev_1_f, CV_32F, 1./255.);
+
+  cv::Mat img_input_prev_2_f(img_input.size(), CV_32F);
+  img_input_prev_2.convertTo(img_input_prev_2_f, CV_32F, 1./255.);
+
+  cv::Mat img_foreground;
+
+  // Weighted mean
+  cv::Mat img_mean_f(img_input.size(), CV_32F);
+  
+  if(enableWeight)
+    img_mean_f = ((img_input_f * 0.5) + (img_input_prev_1_f * 0.3) + (img_input_prev_2_f * 0.2));
+  else
+    img_mean_f = ((img_input_f * 0.3) + (img_input_prev_1_f * 0.3) + (img_input_prev_2_f * 0.3));
+  
+  // Weighted variance
+  cv::Mat img_1_f(img_input.size(), CV_32F);
+  cv::Mat img_2_f(img_input.size(), CV_32F);
+  cv::Mat img_3_f(img_input.size(), CV_32F);
+  cv::Mat img_4_f(img_input.size(), CV_32F);
+
+  if(enableWeight)
+  {
+    img_1_f = computeWeightedVariance(img_input_f, img_mean_f, 0.5);
+    img_2_f = computeWeightedVariance(img_input_prev_1_f, img_mean_f, 0.3);
+    img_3_f = computeWeightedVariance(img_input_prev_2_f, img_mean_f, 0.2);
+    img_4_f = (img_1_f + img_2_f + img_3_f);
+  }
+  else
+  {
+    img_1_f = computeWeightedVariance(img_input_f, img_mean_f, 0.3);
+    img_2_f = computeWeightedVariance(img_input_prev_1_f, img_mean_f, 0.3);
+    img_3_f = computeWeightedVariance(img_input_prev_2_f, img_mean_f, 0.3);
+    img_4_f = (img_1_f + img_2_f + img_3_f);
+  }
+  
+  // Standard deviation
+  cv::Mat img_sqrt_f(img_input.size(), CV_32F);
+  cv::sqrt(img_4_f, img_sqrt_f);
+  cv::Mat img_sqrt(img_input.size(), CV_8U);
+  double minVal, maxVal;
+  minVal = 0.; maxVal = 1.;
+  img_sqrt_f.convertTo(img_sqrt, CV_8U, 255.0/(maxVal - minVal), -minVal);
+  img_sqrt.copyTo(img_foreground);
+
+  if(img_foreground.channels() == 3)
+    cv::cvtColor(img_foreground, img_foreground, CV_BGR2GRAY);
+
+  if(enableThreshold)
+    cv::threshold(img_foreground, img_foreground, threshold, 255, cv::THRESH_BINARY);
+
+  if(showOutput)
+    cv::imshow("W Moving Variance", img_foreground);
+
+  img_foreground.copyTo(img_output);
+
+  img_input_prev_1.copyTo(img_input_prev_2);
+  img_input.copyTo(img_input_prev_1);
+  
+  firstTime = false;
+}
+
+//unused
+cv::Mat WeightedMovingVarianceBGS::computeWeightedMean(const std::vector<cv::Mat> &v_img_input_f, const std::vector<double> weights)
+{
+  cv::Mat img;
+  return img;
+}
+
+cv::Mat WeightedMovingVarianceBGS::computeWeightedVariance(const cv::Mat &img_input_f, const cv::Mat &img_mean_f, const double weight)
+{
+  //ERROR in return (weight * ((cv::abs(img_input_f - img_mean_f))^2.));
+  
+  cv::Mat img_f_absdiff(img_input_f.size(), CV_32F);
+  cv::absdiff(img_input_f, img_mean_f, img_f_absdiff);
+  cv::Mat img_f_pow(img_input_f.size(), CV_32F);
+  cv::pow(img_f_absdiff, 2.0, img_f_pow);
+  cv::Mat img_f = weight * img_f_pow;
+  
+  return img_f;
+}
+
+void WeightedMovingVarianceBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/WeightedMovingVarianceBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "enableWeight", enableWeight);
+  cvWriteInt(fs, "enableThreshold", enableThreshold);
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "showOutput", showOutput);
+  
+  cvReleaseFileStorage(&fs);
+}
+
+void WeightedMovingVarianceBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/WeightedMovingVarianceBGS.xml", 0, CV_STORAGE_READ);
+  
+  enableWeight = cvReadIntByName(fs, 0, "enableWeight", true);
+  enableThreshold = cvReadIntByName(fs, 0, "enableThreshold", true);
+  threshold = cvReadIntByName(fs, 0, "threshold", 15);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+  
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/WeightedMovingVarianceBGS.h b/package_bgs/WeightedMovingVarianceBGS.h
new file mode 100644
index 0000000..f07cf59
--- /dev/null
+++ b/package_bgs/WeightedMovingVarianceBGS.h
@@ -0,0 +1,48 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "IBGS.h"
+
+class WeightedMovingVarianceBGS : public IBGS
+{
+private:
+  bool firstTime;
+  cv::Mat img_input_prev_1;
+  cv::Mat img_input_prev_2;
+  bool enableWeight;
+  bool enableThreshold;
+  int threshold;
+  bool showOutput;
+
+public:
+  WeightedMovingVarianceBGS();
+  ~WeightedMovingVarianceBGS();
+
+  cv::Mat computeWeightedMean(const std::vector<cv::Mat> &v_img_input_f, const std::vector<double> weights);
+  cv::Mat computeWeightedVariance(const cv::Mat &img_input_f, const cv::Mat &img_mean_f, const double weight);
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
diff --git a/package_bgs/ae/KDE.cpp b/package_bgs/ae/KDE.cpp
new file mode 100644
index 0000000..2cbbd8c
--- /dev/null
+++ b/package_bgs/ae/KDE.cpp
@@ -0,0 +1,128 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "KDE.h"
+
+KDE::KDE() : SequenceLength(50), TimeWindowSize(100), SDEstimationFlag(1), lUseColorRatiosFlag(1),
+  th(10e-8), alpha(0.3), framesToLearn(10), frameNumber(0), firstTime(true), showOutput(true)
+{
+  p = new NPBGSubtractor;
+  std::cout << "KDE()" << std::endl;
+}
+
+KDE::~KDE()
+{
+  delete FGImage;
+  delete p;
+  std::cout << "~KDE()" << std::endl;
+}
+
+void KDE::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+  {
+    rows = img_input.size().height;
+    cols = img_input.size().width;
+    color_channels = img_input.channels();
+
+    // SequenceLength: number of samples for each pixel.
+    // TimeWindowSize: Time window for sampling. for example in the call above, the bg will sample 50 points out of 100 frames. 
+    // this rate will affect how fast the model adapt.
+    // SDEstimationFlag: True means to estimate suitable kernel bandwidth to each pixel, False uses a default value.
+    // lUseColorRatiosFlag: True means use normalized RGB for color (recommended.)
+    p->Intialize(rows,cols,color_channels,SequenceLength,TimeWindowSize,SDEstimationFlag,lUseColorRatiosFlag);
+    // th: 0-1 is the probability threshold for a pixel to be a foregroud. typically make it small as 10e-8. the smaller the value the less false positive and more false negative.
+    // alpha: 0-1, for color. typically set to 0.3. this affect shadow suppression.
+    p->SetThresholds(th,alpha);
+
+    FGImage = new unsigned char[rows*cols];
+    //FilteredFGImage = new unsigned char[rows*cols];
+    FilteredFGImage = 0;
+    DisplayBuffers = 0;
+
+    img_foreground = cv::Mat::zeros(rows,cols,CV_8UC1);
+
+    frameNumber = 0;
+    saveConfig();
+    firstTime = false;
+  }
+
+  // Stores the first N frames to build the background model
+  if(frameNumber < framesToLearn)
+  {
+    p->AddFrame(img_input.data);
+    frameNumber++;
+    return;
+  }
+
+  // Build the background model with first 10 frames
+  if(frameNumber == framesToLearn)
+  {
+    p->Estimation();
+    frameNumber++;
+  }
+
+  // Now, we can subtract the background
+  ((NPBGSubtractor *)p)->NBBGSubtraction(img_input.data,FGImage,FilteredFGImage,DisplayBuffers);
+  
+  // At each frame also you can call the update function to adapt the bg
+  // here you pass a mask where pixels with true value will be masked out of the update.
+  ((NPBGSubtractor *)p)->Update(FGImage);
+
+  img_foreground.data = FGImage;
+
+  if(showOutput)
+    cv::imshow("KDE", img_foreground);
+
+  img_foreground.copyTo(img_output);
+}
+
+void KDE::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/KDE.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "framesToLearn", framesToLearn);
+  cvWriteInt(fs, "SequenceLength", SequenceLength);
+  cvWriteInt(fs, "TimeWindowSize", TimeWindowSize);
+  cvWriteInt(fs, "SDEstimationFlag", SDEstimationFlag);
+  cvWriteInt(fs, "lUseColorRatiosFlag", lUseColorRatiosFlag);
+  cvWriteReal(fs, "th", th);
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void KDE::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/KDE.xml", 0, CV_STORAGE_READ);
+  
+  framesToLearn = cvReadIntByName(fs, 0, "framesToLearn", 10);
+  SequenceLength = cvReadIntByName(fs, 0, "SequenceLength", 50);
+  TimeWindowSize = cvReadIntByName(fs, 0, "TimeWindowSize", 100);
+  SDEstimationFlag = cvReadIntByName(fs, 0, "SDEstimationFlag", 1);
+  lUseColorRatiosFlag = cvReadIntByName(fs, 0, "lUseColorRatiosFlag", 1);
+  th = cvReadRealByName(fs, 0, "th", 10e-8);
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.3);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/ae/KDE.h b/package_bgs/ae/KDE.h
new file mode 100644
index 0000000..39f01dc
--- /dev/null
+++ b/package_bgs/ae/KDE.h
@@ -0,0 +1,58 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "NPBGSubtractor.h"
+#include "../IBGS.h"
+
+class KDE : public IBGS
+{
+private:
+  NPBGSubtractor *p;
+  int rows;
+  int cols;
+  int color_channels;
+  int SequenceLength;
+  int TimeWindowSize;
+  int SDEstimationFlag;
+  int lUseColorRatiosFlag;
+  double th;
+  double alpha;
+  int framesToLearn;
+  int frameNumber;
+  bool firstTime;
+  bool showOutput;
+
+  cv::Mat img_foreground;
+  unsigned char *FGImage;
+  unsigned char *FilteredFGImage;
+  unsigned char **DisplayBuffers;
+
+public:
+  KDE();
+  ~KDE();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+  
+private:
+  void saveConfig();
+  void loadConfig();
+};
diff --git a/package_bgs/ae/KernelTable.cpp b/package_bgs/ae/KernelTable.cpp
new file mode 100644
index 0000000..9e20d7c
--- /dev/null
+++ b/package_bgs/ae/KernelTable.cpp
@@ -0,0 +1,116 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*
+*
+* Copyright 2001 by Ahmed Elgammal All  rights reserved.
+*
+* Permission to use, copy,  or modify this software and  its documentation
+* for  educational  and  research purposes only and without fee  is hereby
+* granted, provided  that this copyright notice and the original authors's
+* name appear  on all copies and supporting documentation.  If individual
+* files are  separated from  this  distribution directory  structure, this
+* copyright notice must be included.  For any other uses of this software,
+* in original or  modified form, including but not limited to distribution
+* in whole or in  part, specific  prior permission  must be  obtained from
+* Author or UMIACS.  These programs shall not  be  used, rewritten, or  
+* adapted as  the basis  of  a commercial  software  or  hardware product 
+* without first obtaining appropriate licenses  from Author. 
+* Other than these cases, no part of this software may be used or
+* distributed without written permission of the author.
+*
+* Neither the author nor UMIACS make any representations about the 
+* suitability of this software for any purpose.  It is provided 
+* "as is" without express or implied warranty.
+*
+* Ahmed Elgammal
+* 
+* University of Maryland at College Park
+* UMIACS
+* A.V. Williams Bldg. 
+* CollegePark, MD 20742
+* E-mail:  elgammal@umiacs.umd.edu
+*
+**/
+
+#include "KernelTable.h"
+#include <math.h>
+
+#define PI 3.14159
+
+KernelLUTable::KernelLUTable()
+{
+  std::cout << "KernelLUTable()" << std::endl;
+}
+
+KernelLUTable::~KernelLUTable()
+{
+  delete kerneltable;
+  delete kernelsums;
+  std::cout << "~KernelLUTable()" << std::endl;
+}
+
+KernelLUTable::KernelLUTable(int KernelHalfWidth, double Segmamin, double Segmamax, int Segmabins)
+{
+  std::cout << "KernelLUTable()" << std::endl;
+
+  double C1,C2,v,segma,sum;
+  int bin,b;
+
+  minsegma = Segmamin;
+  maxsegma = Segmamax;
+  segmabins = Segmabins;
+  tablehalfwidth = KernelHalfWidth;
+
+  // Generate the Kernel
+
+  // allocate memory for the Kernal Table
+  kerneltable = new double[segmabins*(2*KernelHalfWidth+1)];
+  kernelsums = new double[segmabins];
+
+  double segmastep = (maxsegma - minsegma) / segmabins;
+  double y;
+
+  for(segma = minsegma, bin = 0; bin < segmabins; segma += segmastep, bin++) 
+  {
+    C1 = 1/(sqrt(2*PI)*segma);
+    C2 = -1/(2*segma*segma);
+
+    b = (2*KernelHalfWidth+1)*bin;
+    sum = 0;
+    
+    for(int x = 0; x <= KernelHalfWidth; x++)
+    {
+      y = x/1.0;
+      v = C1*exp(C2*y*y);
+      kerneltable[b+KernelHalfWidth+x]=v;
+      kerneltable[b+KernelHalfWidth-x]=v;
+      sum += 2*v;
+    }
+
+    sum -= C1;
+
+    kernelsums[bin] = sum;
+
+    // Normailization
+    for(int x = 0; x <= KernelHalfWidth; x++)
+    {
+      v = kerneltable[b+KernelHalfWidth+x] / sum;
+      kerneltable[b+KernelHalfWidth+x]=v;
+      kerneltable[b+KernelHalfWidth-x]=v;
+    }
+  }
+}
diff --git a/package_bgs/ae/KernelTable.h b/package_bgs/ae/KernelTable.h
new file mode 100644
index 0000000..bc37cc4
--- /dev/null
+++ b/package_bgs/ae/KernelTable.h
@@ -0,0 +1,71 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*
+*
+* Copyright 2001 by Ahmed Elgammal All  rights reserved.
+*
+* Permission to use, copy,  or modify this software and  its documentation
+* for  educational  and  research purposes only and without fee  is hereby
+* granted, provided  that this copyright notice and the original authors's
+* name appear  on all copies and supporting documentation.  If individual
+* files are  separated from  this  distribution directory  structure, this
+* copyright notice must be included.  For any other uses of this software,
+* in original or  modified form, including but not limited to distribution
+* in whole or in  part, specific  prior permission  must be  obtained from
+* Author or UMIACS.  These programs shall not  be  used, rewritten, or  
+* adapted as  the basis  of  a commercial  software  or  hardware product 
+* without first obtaining appropriate licenses  from Author. 
+* Other than these cases, no part of this software may be used or
+* distributed without written permission of the author.
+*
+* Neither the author nor UMIACS make any representations about the 
+* suitability of this software for any purpose.  It is provided 
+* "as is" without express or implied warranty.
+*
+* Ahmed Elgammal
+* 
+* University of Maryland at College Park
+* UMIACS
+* A.V. Williams Bldg. 
+* CollegePark, MD 20742
+* E-mail:  elgammal@umiacs.umd.edu
+*
+**/
+
+#ifndef __KERNEL_TABLE__
+#define __KERNEL_TABLE__
+
+#include <iostream>
+
+class KernelLUTable
+{
+public:
+  double minsegma;
+  double maxsegma;
+  int segmabins;
+  int tablehalfwidth;
+  double *kerneltable;
+  double *kernelsums;
+
+public:
+  KernelLUTable();
+  ~KernelLUTable();
+
+  KernelLUTable(int KernelHalfWidth,double Segmamin,double Segmamax,int Segmabins);
+};
+
+#endif
diff --git a/package_bgs/ae/NPBGSubtractor.cpp b/package_bgs/ae/NPBGSubtractor.cpp
new file mode 100644
index 0000000..0f77a9a
--- /dev/null
+++ b/package_bgs/ae/NPBGSubtractor.cpp
@@ -0,0 +1,1160 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*
+*
+* Copyright 2001 by Ahmed Elgammal All  rights reserved.
+*
+* Permission to use, copy,  or modify this software and  its documentation
+* for  educational  and  research purposes only and without fee  is hereby
+* granted, provided  that this copyright notice and the original authors's
+* name appear  on all copies and supporting documentation.  If individual
+* files are  separated from  this  distribution directory  structure, this
+* copyright notice must be included.  For any other uses of this software,
+* in original or  modified form, including but not limited to distribution
+* in whole or in  part, specific  prior permission  must be  obtained from
+* Author or UMIACS.  These programs shall not  be  used, rewritten, or  
+* adapted as  the basis  of  a commercial  software  or  hardware product 
+* without first obtaining appropriate licenses  from Author. 
+* Other than these cases, no part of this software may be used or
+* distributed without written permission of the author.
+*
+* Neither the author nor UMIACS make any representations about the 
+* suitability of this software for any purpose.  It is provided 
+* "as is" without express or implied warranty.
+*
+* Ahmed Elgammal
+* 
+* University of Maryland at College Park
+* UMIACS
+* A.V. Williams Bldg. 
+* CollegePark, MD 20742
+* E-mail:  elgammal@umiacs.umd.edu
+*
+**/
+
+// NPBGSubtractor.cpp: implementation of the NPBGSubtractor class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "NPBGSubtractor.h"
+#include <assert.h>
+#include <math.h>
+#include <string.h>
+
+//#ifdef _DEBUG
+//#undef THIS_FILE
+//static char THIS_FILE[]=__FILE__;
+//#define new DEBUG_NEW
+//#endif
+
+void BGR2SnGnRn(unsigned char * in_image,
+                unsigned char * out_image,
+                unsigned int rows,
+                unsigned int cols)
+{
+  unsigned int i;
+  unsigned int r1,r2,r3;
+  unsigned int r,g,b;
+  double s;
+
+  for(i = 0; i < rows*cols*3; i += 3)
+  {
+    b=in_image[i];
+    g=in_image[i+1];
+    r=in_image[i+2];
+
+    // calculate color ratios
+    s = (double) 255 / (double) (b+g+r+30);
+
+    r2 =(unsigned int) ((g+10) * s );
+    r3 =(unsigned int) ((r+10) * s );
+
+    out_image[i]   = (unsigned char) (((unsigned int) b+g+r) / 3);
+    out_image[i+1] = (unsigned char) (r2 > 255 ? 255 : r2) ;
+    out_image[i+2] = (unsigned char) (r3 > 255 ? 255 : r3) ;
+  }
+}
+
+void UpdateDiffHist(unsigned char * image1, unsigned char * image2, DynamicMedianHistogram * pHist)
+{
+  unsigned int j;
+  int bin,diff;
+
+  unsigned int  imagesize	= pHist->imagesize;
+  unsigned char histbins	= pHist->histbins;
+  unsigned char *pAbsDiffHist = pHist->Hist;
+
+  int histbins_1 = histbins-1;
+  
+  for(j = 0; j < imagesize; j++)
+  {
+    diff = (int) image1[j] - (int) image2[j];
+    diff = abs(diff);
+    // update histogram
+    bin = (diff < histbins ? diff : histbins_1);
+    pAbsDiffHist[j*histbins+bin]++;
+  }
+}
+
+void FindHistMedians(DynamicMedianHistogram * pAbsDiffHist)
+{
+  unsigned char * Hist		   = pAbsDiffHist->Hist;
+  unsigned char * MedianBins = pAbsDiffHist->MedianBins;
+  unsigned char * AccSum	   = pAbsDiffHist->AccSum;
+  unsigned char histsum		   = pAbsDiffHist->histsum;
+  unsigned char histbins		 = pAbsDiffHist->histbins;
+  unsigned int imagesize		 = pAbsDiffHist->imagesize;
+
+  int sum;
+  int bin;
+  unsigned int histindex;
+  unsigned char medianCount=histsum/2;
+  unsigned int j;
+
+  // find medians
+  for(j = 0; j < imagesize; j++)
+  {
+    // find the median
+    bin=0;
+    sum=0;
+
+    histindex=j*histbins;
+
+    while(sum < medianCount)
+    {
+      sum+=Hist[histindex+bin];
+      bin++;
+    }
+
+    bin--;
+
+    MedianBins[j]=bin;
+    AccSum[j]=sum;
+  }
+}
+
+DynamicMedianHistogram BuildAbsDiffHist(unsigned char * pSequence,
+  unsigned int rows,
+  unsigned int cols,
+  unsigned int color_channels,
+  unsigned int SequenceLength,
+  unsigned int histbins)
+{
+
+  unsigned int imagesize=rows*cols*color_channels;
+  unsigned int i;
+
+  DynamicMedianHistogram Hist;
+
+  unsigned char *pAbsDiffHist = new unsigned char[rows*cols*color_channels*histbins];
+  unsigned char *pMedianBins = new unsigned char[rows*cols*color_channels];
+  unsigned char *pMedianFreq = new unsigned char[rows*cols*color_channels];
+  unsigned char *pAccSum = new unsigned char[rows*cols*color_channels];
+
+  memset(pAbsDiffHist,0,rows*cols*color_channels*histbins);
+
+  Hist.Hist = pAbsDiffHist;
+  Hist.MedianBins = pMedianBins;
+  Hist.MedianFreq = pMedianFreq;
+  Hist.AccSum = pAccSum;
+  Hist.histbins = histbins;
+  Hist.imagesize = rows*cols*color_channels;
+  Hist.histsum = SequenceLength-1;
+
+  unsigned char *image1, *image2;
+  for(i = 1; i < SequenceLength; i++)
+  {
+    // find diff between frame i,i-1;
+    image1 = pSequence+(i-1)*imagesize;
+    image2 = pSequence+(i)*imagesize;
+
+    UpdateDiffHist(image1,image2,&Hist);
+  }
+
+  FindHistMedians(&Hist);
+
+  return Hist;
+}
+
+void EstimateSDsFromAbsDiffHist(DynamicMedianHistogram * pAbsDiffHist,
+                                unsigned char * pSDs,
+                                unsigned int imagesize,
+                                double MinSD,
+                                double MaxSD,
+                                unsigned int kernelbins)
+{
+  double v;
+  double kernelbinfactor=(kernelbins-1)/(MaxSD-MinSD);
+  int medianCount; 
+  int sum;
+  int bin;
+  unsigned int histindex;
+  unsigned int j;
+  unsigned int x1,x2;
+
+  unsigned char *Hist		    =pAbsDiffHist->Hist;
+  unsigned char *MedianBins	=pAbsDiffHist->MedianBins;
+  unsigned char *AccSum		  =pAbsDiffHist->AccSum;
+  unsigned char histsum		  =pAbsDiffHist->histsum;
+  unsigned char histbins		=pAbsDiffHist->histbins;
+
+  medianCount=(histsum)/2 ;
+
+  for(j = 0; j < imagesize; j++)
+  {
+    histindex=j*histbins;
+
+    bin=MedianBins[j];
+    sum=AccSum[j];
+
+    x1=sum-Hist[histindex+bin];
+    x2=sum;
+
+    // interpolate to get the median
+    // x1 < 50 % < x2
+
+    v =1.04 * ((double) bin-(double) (x2-medianCount)/ (double) (x2-x1));
+    v=( v <= MinSD ? MinSD : v);
+
+    // convert sd to kernel table bin
+
+    bin=(int) (v>=MaxSD ? kernelbins-1 : floor((v-MinSD)*kernelbinfactor+.5));
+
+    assert(bin>=0 && bin < kernelbins );
+
+    pSDs[j]=bin;
+  }
+}
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+NPBGSubtractor::NPBGSubtractor(){}
+
+NPBGSubtractor::~NPBGSubtractor()
+{
+  delete AbsDiffHist.Hist;
+  delete AbsDiffHist.MedianBins;
+  delete AbsDiffHist.MedianFreq;
+  delete AbsDiffHist.AccSum;
+  delete KernelTable;
+  delete BGModel->SDbinsImage;
+  delete BGModel;
+  delete Pimage1;
+  delete Pimage2;
+  delete tempFrame;
+  delete imageindex->List;
+  delete imageindex;
+}
+
+int NPBGSubtractor::Intialize(unsigned int prows,
+                              unsigned int pcols,
+                              unsigned int pcolor_channels,
+                              unsigned int SequenceLength,
+                              unsigned int pTimeWindowSize,
+                              unsigned char pSDEstimationFlag,
+                              unsigned char pUseColorRatiosFlag)
+{
+
+  rows=prows;
+  cols=pcols;
+  color_channels=pcolor_channels;
+  imagesize=rows*cols*color_channels;
+  SdEstimateFlag = pSDEstimationFlag;
+  UseColorRatiosFlag=pUseColorRatiosFlag;
+  //SampleSize = SequenceLength;
+
+  AdaptBGFlag = FALSE;
+  //
+  SubsetFlag = TRUE;
+
+  UpdateSDRate = 0;
+
+  BGModel = new NPBGmodel(rows,cols,color_channels,SequenceLength,pTimeWindowSize,500);
+
+  Pimage1= new double[rows*cols];
+  Pimage2= new double[rows*cols];
+
+  tempFrame= new unsigned char[rows*cols*3];
+
+  imageindex = new ImageIndex;
+  imageindex->List= new unsigned int [rows*cols];
+
+  // error checking
+  if (BGModel==NULL)
+    return 0;
+
+  return 1;
+}
+
+void NPBGSubtractor::AddFrame(unsigned char *ImageBuffer)
+{
+  if(UseColorRatiosFlag && color_channels==3)
+    BGR2SnGnRn(ImageBuffer,ImageBuffer,rows,cols);
+  
+  BGModel->AddFrame(ImageBuffer);
+}
+
+void NPBGSubtractor::Estimation()
+{
+  int SampleSize=BGModel->SampleSize;
+
+  memset(BGModel->TemporalMask,0,rows*cols*BGModel->TemporalBufferLength);
+
+  //BGModel->AccMask= new unsigned int [rows*cols];
+  memset(BGModel->AccMask,0,rows*cols*sizeof(unsigned int));
+
+  unsigned char *pSDs = new unsigned char[rows*cols*color_channels];
+
+  //DynamicMedianHistogram AbsDiffHist;
+
+  int Abshistbins = 20;
+
+  TimeIndex=0;
+
+  // estimate standard deviations 
+
+  if(SdEstimateFlag)
+  {
+    AbsDiffHist = BuildAbsDiffHist(BGModel->Sequence,rows,cols,color_channels,SampleSize,Abshistbins);
+    EstimateSDsFromAbsDiffHist(&AbsDiffHist,pSDs,imagesize,SEGMAMIN,SEGMAMAX,SEGMABINS);
+  }
+  else
+  {
+    unsigned int bin;
+    bin = (unsigned int) floor(((DEFAULTSEGMA-SEGMAMIN)*SEGMABINS)/(SEGMAMAX-SEGMAMIN));
+    memset(pSDs,bin,rows*cols*color_channels*sizeof(unsigned char));
+  }
+
+  BGModel->SDbinsImage=pSDs;
+
+  // Generate the Kernel
+  KernelTable = new KernelLUTable(KERNELHALFWIDTH,SEGMAMIN,SEGMAMAX,SEGMABINS);
+}
+
+/*********************************************************************/
+
+void BuildImageIndex(unsigned char * Image,
+                     ImageIndex * imageIndex,
+                     unsigned int rows,
+                     unsigned int cols)
+{
+  unsigned int i,j;
+  unsigned int r,c;
+  unsigned int * image_list;
+
+  j=cols+1;
+  i=0;
+  image_list=imageIndex->List;
+
+  for(r = 1; r < rows-1; r++)
+  {
+    for(c = 1; c < cols-1; c++)
+    {
+      if(Image[j])
+        image_list[i++]=j;
+      
+      j++;
+    }
+    j+=2;
+  }
+
+  imageIndex->cnt = i;
+}
+
+/*********************************************************************/
+
+void HystExpandOperatorIndexed(unsigned char * inImage,
+                               ImageIndex * inIndex,
+                               double * Pimage,
+                               double hyst_th,
+                               unsigned char * outImage,
+                               ImageIndex * outIndex,
+                               unsigned int urows,
+                               unsigned int ucols)
+{
+  unsigned int * in_list;
+  unsigned int in_cnt;
+  unsigned int * out_list;
+
+  int rows,cols;
+
+  int Nbr[9];
+  unsigned int i,j;
+  unsigned int k;
+  unsigned int idx;
+
+  rows=(int)  urows;
+  cols=(int)  ucols;
+
+  in_cnt=inIndex->cnt;
+  in_list=inIndex->List;
+
+  Nbr[0]=-cols-1;
+  Nbr[1]=-cols;
+  Nbr[2]=-cols+1;
+  Nbr[3]=-1;
+  Nbr[4]=0;
+  Nbr[5]=1;
+  Nbr[6]=cols-1;
+  Nbr[7]=cols;
+  Nbr[8]=cols+1;
+
+  memset(outImage,0,rows*cols);
+
+  out_list=outIndex->List;
+  k=0;
+  
+  for(i = 0; i < in_cnt; i++)
+  {
+    for(j = 0; j < 9; j++)
+    {
+      idx = in_list[i] + Nbr[j];
+
+      if(Pimage[idx] < hyst_th)
+        outImage[idx] = 255;
+    }
+  }
+
+  // build index for out image
+  BuildImageIndex(outImage,outIndex,urows,ucols);
+}
+
+/*********************************************************************/
+
+void HystShrinkOperatorIndexed(unsigned char * inImage,
+                               ImageIndex * inIndex,
+                               double * Pimage,
+                               double hyst_th,
+                               unsigned char * outImage,
+                               ImageIndex * outIndex,
+                               unsigned int urows,
+                               unsigned int ucols)
+{
+  unsigned int * in_list;
+  unsigned int in_cnt;
+  unsigned int * out_list;
+
+  int rows,cols;
+
+  int Nbr[9];
+  unsigned int i,j;
+  unsigned int k,idx;
+
+  rows=(int) urows;
+  cols=(int) ucols;
+
+  in_cnt=inIndex->cnt;
+  in_list=inIndex->List;
+
+  Nbr[0]=-cols-1;
+  Nbr[1]=-cols;
+  Nbr[2]=-cols+1;
+  Nbr[3]=-1;
+  Nbr[4]=0;
+  Nbr[5]=1;
+  Nbr[6]=cols-1;
+  Nbr[7]=cols;
+  Nbr[8]=cols+1;
+
+  memset(outImage,0,rows*cols);
+
+  out_list=outIndex->List;
+  k=0;
+  
+  for(i = 0; i < in_cnt; i++)
+  {
+    idx = in_list[i];
+    j = 0;
+
+    while(j < 9 && inImage[idx+Nbr[j]])
+      j++;
+    
+    if(j >= 9 || Pimage[idx] <= hyst_th)
+      outImage[idx]=255;
+  }
+
+  BuildImageIndex(outImage,outIndex,rows,cols);
+}
+
+/*********************************************************************/
+
+void ExpandOperatorIndexed(unsigned char * inImage,
+                           ImageIndex * inIndex,
+                           unsigned char * outImage,
+                           ImageIndex * outIndex,
+                           unsigned int urows,
+                           unsigned int ucols)
+{
+  unsigned int * in_list;
+  unsigned int in_cnt;
+  unsigned int * out_list;
+
+  int rows,cols;
+
+  int Nbr[9];
+  unsigned int i,j;
+  unsigned int k;
+  unsigned int idx;
+
+  rows=(int)  urows;
+  cols=(int)  ucols;
+
+  in_cnt=inIndex->cnt;
+  in_list=inIndex->List;
+
+  Nbr[0]=-cols-1;
+  Nbr[1]=-cols;
+  Nbr[2]=-cols+1;
+  Nbr[3]=-1;
+  Nbr[4]=0;
+  Nbr[5]=1;
+  Nbr[6]=cols-1;
+  Nbr[7]=cols;
+  Nbr[8]=cols+1;
+
+
+  memset(outImage,0,rows*cols);
+
+
+  out_list=outIndex->List;
+  k=0;
+  for (i=0; i<in_cnt;i++)
+    for (j=0;j<9;j++) {
+      idx=in_list[i]+Nbr[j];
+      outImage[idx]=255;
+    }
+
+
+    // build index for out image
+
+    BuildImageIndex(outImage,outIndex,rows,cols);
+
+}
+
+/*********************************************************************/
+
+void ShrinkOperatorIndexed(unsigned char * inImage,
+                           ImageIndex * inIndex,
+                           unsigned char * outImage,
+                           ImageIndex * outIndex,
+                           unsigned int urows,
+                           unsigned int ucols)
+{
+
+  unsigned int * in_list;
+  unsigned int in_cnt;
+  unsigned int * out_list;
+
+  int rows,cols;
+
+  int Nbr[9];
+  unsigned int i,j;
+  unsigned int k,idx;
+
+  rows=(int) urows;
+  cols=(int) ucols;
+
+  in_cnt=inIndex->cnt;
+  in_list=inIndex->List;
+
+  Nbr[0]=-cols-1;
+  Nbr[1]=-cols;
+  Nbr[2]=-cols+1;
+  Nbr[3]=-1;
+  Nbr[4]=0;
+  Nbr[5]=1;
+  Nbr[6]=cols-1;
+  Nbr[7]=cols;
+  Nbr[8]=cols+1;
+
+
+  memset(outImage,0,rows*cols);
+
+  out_list=outIndex->List;
+  k=0;
+  for (i=0; i<in_cnt;i++) {
+    idx=in_list[i];
+    j=0;
+
+    while ( j<9 && inImage[idx+Nbr[j]]){
+      j++;
+    }
+
+    if (j>=9) {
+      outImage[idx]=255;
+    }
+  }
+
+  BuildImageIndex(outImage,outIndex,rows,cols);
+}
+
+/*********************************************************************/
+
+void NoiseFilter_o(unsigned char * Image,
+                   unsigned char * ResultIm,
+                   int rows,
+                   int cols,
+                   unsigned char th)
+{
+  /* assuming input is 1 for on, 0 for off */
+
+
+  int r,c;
+  unsigned char *p,*n,*nw,*ne,*e,*w,*s,*sw,*se;
+  unsigned int v;
+  unsigned int TH;
+
+  unsigned char * ResultPtr;
+
+  TH=255*th;
+
+  memset(ResultIm,0,rows*cols);
+
+  p=Image+cols+1;
+  ResultPtr=ResultIm+cols+1;
+
+  for(r=1;r<rows-1;r++)
+  {
+    for(c=1;c<cols-1;c++)
+    {
+      if (*p)
+      {
+        n=p-cols;
+        ne=n+1;
+        nw=n-1;
+        e=p+1;
+        w=p-1;
+        s=p+cols;
+        se=s+1;
+        sw=s-1;
+
+        v=(unsigned int) *nw+*n+*ne+*w+*e+*sw+*s+*se;
+
+        if (v>=TH)
+          *ResultPtr=255;
+        else
+          *ResultPtr=0;
+      }
+      p++;
+      ResultPtr++;
+    }
+    p+=2;
+    ResultPtr+=2;
+  }
+}
+
+/*********************************************************************/
+
+void NPBGSubtractor::SequenceBGUpdate_Pairs(unsigned char * image,
+                                            unsigned char * Mask)
+{
+  unsigned int i,ic;
+  unsigned char * pSequence 	=BGModel->Sequence;
+  unsigned char * PixelQTop		=BGModel->PixelQTop;
+  unsigned int Top						=BGModel->Top;
+  unsigned int rate;
+
+  int TemporalBufferTop						=(int) BGModel->TemporalBufferTop;
+  unsigned char * pTemporalBuffer	= BGModel->TemporalBuffer;
+  unsigned char * pTemporalMask		= BGModel->TemporalMask;
+  int TemporalBufferLength				= BGModel->TemporalBufferLength;
+
+  unsigned int * AccMask		=	BGModel->AccMask;
+  unsigned int ResetMaskTh	= BGModel->ResetMaskTh;
+
+  unsigned char *pAbsDiffHist = AbsDiffHist.Hist;
+  unsigned char histbins = AbsDiffHist.histbins;
+  int histbins_1=histbins-1;
+
+  int TimeWindowSize = BGModel->TimeWindowSize;
+  int SampleSize = BGModel->SampleSize;
+
+  int TemporalBufferNext;
+
+  unsigned int imagebuffersize=rows*cols*color_channels;
+  unsigned int imagespatialsize=rows*cols;
+
+  unsigned char mask;
+
+  unsigned int histindex;
+  unsigned char diff;
+  unsigned char bin;
+
+  static int TBCount=0;
+
+  unsigned char * pTBbase1, * pTBbase2;
+  unsigned char * pModelbase1, * pModelbase2;
+
+  rate=TimeWindowSize/SampleSize;
+  rate=(rate > 2) ? rate : 2;
+
+
+  TemporalBufferNext=(TemporalBufferTop+1) 
+    % TemporalBufferLength;
+
+  // pointers to Masks : Top and Next
+  unsigned char * pTMaskTop=pTemporalMask+TemporalBufferTop*imagespatialsize;
+  unsigned char * pTMaskNext=pTemporalMask+TemporalBufferNext*imagespatialsize;
+
+  // pointers to TB frames: Top and Next
+  unsigned char * pTBTop=pTemporalBuffer+TemporalBufferTop*imagebuffersize;
+  unsigned char * pTBNext=pTemporalBuffer+TemporalBufferNext*imagebuffersize;
+
+  if ( ((TimeIndex) % rate == 0)  && TBCount >= TemporalBufferLength )
+  {
+    for(i=0,ic=0;i<imagespatialsize;i++,ic+=color_channels)
+    {
+      mask= * (pTMaskTop+i) || * (pTMaskNext+i);
+
+      if(!mask)
+      {
+        // pointer to TB pixels to be added to the model
+        pTBbase1=pTBTop+ic;
+        pTBbase2=pTBNext+ic;
+
+        // pointers to Model pixels to be replaced
+        pModelbase1=pSequence+PixelQTop[i]*imagebuffersize+ic;
+        pModelbase2=pSequence+((PixelQTop[i]+1)% SampleSize)*imagebuffersize+ic;
+
+        // update Deviation Histogram
+        if(SdEstimateFlag)
+        {
+          if(color_channels==1)
+          {
+            histindex=i*histbins;	
+
+            // add new pair from temporal buffer
+            diff=(unsigned char) abs((int) *pTBbase1 - (int) *pTBbase2);
+            bin=(diff < histbins ? diff : histbins_1);
+            pAbsDiffHist[histindex+bin]++;
+
+
+            // remove old pair from the model
+            diff=(unsigned char) abs((int) *pModelbase1-(int) *pModelbase2);
+            bin=(diff < histbins ? diff : histbins_1);
+            pAbsDiffHist[histindex+bin]--;
+          }
+          else
+          {
+            // color
+
+            // add new pair from temporal buffer
+            histindex=ic*histbins;	
+            diff=abs(*pTBbase1 -
+              *pTBbase2);
+            bin=(diff < histbins ? diff : histbins_1);
+            pAbsDiffHist[histindex+bin]++;
+
+            histindex+=histbins;	
+            diff=abs(*(pTBbase1+1) -
+              *(pTBbase2+1));
+            bin=(diff < histbins ? diff : histbins_1);
+            pAbsDiffHist[histindex+bin]++;
+
+            histindex+=histbins;	
+            diff=abs(*(pTBbase1+2) -
+              *(pTBbase2+2));
+            bin=(diff < histbins ? diff : histbins_1);
+            pAbsDiffHist[histindex+bin]++;
+
+            // remove old pair from the model
+            histindex=ic*histbins;	
+
+            diff=abs(*pModelbase1-
+              *pModelbase2);
+            bin=(diff < histbins ? diff : histbins_1);
+            pAbsDiffHist[histindex+bin]--;
+
+            histindex+=histbins;	
+            diff=abs(*(pModelbase1+1)-
+              *(pModelbase2+1));
+            bin=(diff < histbins ? diff : histbins_1);
+            pAbsDiffHist[histindex+bin]--;
+
+            histindex+=histbins;	
+            diff=abs(*(pModelbase1+2)-
+              *(pModelbase2+2));
+            bin=(diff < histbins ? diff : histbins_1);
+            pAbsDiffHist[histindex+bin]--;
+          }
+        }
+
+        // add new pair into the model
+        memcpy(pModelbase1,pTBbase1, color_channels*sizeof(unsigned char));
+
+        memcpy(pModelbase2,pTBbase2, color_channels*sizeof(unsigned char));
+
+        PixelQTop[i]=(PixelQTop[i]+2) % SampleSize;
+      }
+    }
+  } // end if (sampling event)
+
+  // update temporal buffer
+  // add new frame to Temporal buffer.
+  memcpy(pTBTop,image,imagebuffersize);
+
+  // update AccMask
+  // update new Mask with information in AccMask
+
+  for (i=0;i<rows*cols;i++)
+  {
+    if (Mask[i])
+      AccMask[i]++;
+    else
+      AccMask[i]=0;
+
+    if (AccMask[i] > ResetMaskTh)
+      Mask[i]=0;
+  }
+
+  // add new mask
+  memcpy(pTMaskTop,Mask,imagespatialsize);
+
+  // advance Temporal buffer pointer
+  TemporalBufferTop=(TemporalBufferTop+1) % TemporalBufferLength;
+
+  BGModel->TemporalBufferTop=TemporalBufferTop;
+
+  TBCount++;
+
+  // estimate SDs
+
+  if (SdEstimateFlag && UpdateSDRate && ((TimeIndex) % UpdateSDRate == 0))
+  {
+    double MaxSD = KernelTable->maxsegma;
+    double MinSD = KernelTable->minsegma;
+    int KernelBins = KernelTable->segmabins;
+
+    unsigned char * pSDs= BGModel->SDbinsImage;
+
+    FindHistMedians(&(AbsDiffHist));
+    EstimateSDsFromAbsDiffHist(&(AbsDiffHist),pSDs,imagebuffersize,MinSD,MaxSD,KernelBins);
+  }
+
+  TimeIndex++;
+}
+
+/*********************************************************************/
+
+void DisplayPropabilityImageWithThresholding(double * Pimage,
+                                             unsigned char * DisplayImage,
+                                             double Threshold,
+                                             unsigned int rows,
+                                             unsigned int cols)
+{
+  double p;
+
+  for(unsigned int i=0;i<rows*cols;i++)
+  {
+    p = Pimage[i];
+
+    DisplayImage[i]=(p > Threshold) ?  0 : 255;
+  }
+}
+
+/*********************************************************************/
+
+void NPBGSubtractor::NPBGSubtraction_Subset_Kernel(
+  unsigned char * image,
+  unsigned char * FGImage,
+  unsigned char * FilteredFGImage)
+{
+  unsigned int i,j;
+  unsigned char *pSequence 	=BGModel->Sequence;
+
+  unsigned int SampleSize			= BGModel->SampleSize;
+
+  double *kerneltable	= KernelTable->kerneltable;
+  int KernelHalfWidth		= KernelTable->tablehalfwidth;
+  double *KernelSum			= KernelTable->kernelsums;
+  double KernelMaxSigma = KernelTable->maxsegma;
+  double KernelMinSigma = KernelTable->minsegma;
+  int KernelBins				= KernelTable->segmabins;
+  unsigned char * SDbins= BGModel->SDbinsImage;
+
+  unsigned char * SaturationImage=FilteredFGImage;
+
+  // default sigmas .. to be removed.
+  double sigma1;
+  double sigma2;
+  double sigma3;
+
+  sigma1=2.25;
+  sigma2=2.25;
+  sigma3=2.25;
+
+  double p;
+  double th;
+
+  double alpha,beta,beta_over_alpha, betau,betau_over_alpha;
+
+  alpha= AlphaValue;
+
+  /* intialize FG image */
+
+  memset(FGImage,0,rows*cols);
+
+  //Threshold=1;
+  th = Threshold * SampleSize;
+
+  double sum=0,kernel1,kernel2,kernel3;
+  int k,g;
+
+
+  if (color_channels==1) 
+  {
+    // gray scale
+
+    int kernelbase;
+    
+    for (i=0;i<rows*cols;i++)
+    {
+      kernelbase=SDbins[i]*(2*KernelHalfWidth+1);
+      sum=0;
+      j=0;
+
+      while (j<SampleSize && sum < th)
+      {
+        g=pSequence[j*imagesize+i];
+        k= g-  image[i] +KernelHalfWidth;
+        sum+=kerneltable[kernelbase+k];
+        j++;
+      }
+
+      p=sum/j;
+      Pimage1[i]=p;
+    }
+  }
+  else if (UseColorRatiosFlag && SubsetFlag)
+  {
+    // color ratios
+
+    unsigned int ig;
+    int base;
+
+    int kernelbase1;
+    int kernelbase2;
+    int kernelbase3;
+
+    unsigned int kerneltablewidth=2*KernelHalfWidth+1;
+
+    beta=3.0;    // minimum bound on the range.
+    betau=100.0;
+
+    beta_over_alpha = beta / alpha;
+    betau_over_alpha = betau / alpha;
+
+
+    double brightness_lowerbound = 1-alpha;
+    double brightness_upperbound = 1+alpha;
+    int x1,x2;
+    unsigned int SubsampleCount;
+
+    for (i=0,ig=0;i<imagesize;i+=3,ig++)
+    {
+      kernelbase1=SDbins[i]*kerneltablewidth;
+      kernelbase2=SDbins[i+1]*kerneltablewidth;
+      kernelbase3=SDbins[i+2]*kerneltablewidth;
+
+      sum=0;
+      j=0;
+      SubsampleCount=0;
+
+      while (j<SampleSize && sum < th)
+      {
+        base=j*imagesize+i;
+        g=pSequence[base];
+        
+        if (g < beta_over_alpha)
+        {
+          x1=(int) (g-beta);
+          x2=(int) (g+beta);
+        }
+        else if (g > betau_over_alpha)
+        {
+          x1=(int) (g-betau);
+          x2=(int) (g+betau);
+        }
+        else
+        {
+          x1=(int) (g*brightness_lowerbound+0.5);
+          x2=(int) (g*brightness_upperbound+0.5);
+        }
+
+        if(x1<image[i] && image[i] <x2)
+        {
+          g=pSequence[base+1];
+          k= (g-  image[i+1]) +KernelHalfWidth;
+          kernel2=kerneltable[kernelbase2+k];
+
+          g=pSequence[base+2];
+          k= (g-  image[i+2]) +KernelHalfWidth;
+          kernel3=kerneltable[kernelbase3+k];
+
+          sum+=kernel2*kernel3;
+
+          SubsampleCount++;
+        }
+        j++;
+      }
+
+      p=sum / j;
+      Pimage1[ig]=p;
+    }	
+  }
+  else if (UseColorRatiosFlag && ! SubsetFlag)
+  {
+    // color ratios
+
+    unsigned int ig;
+    int base;
+    int bin;
+
+    int kernelbase1;
+    int kernelbase2;
+    int kernelbase3;
+
+    unsigned int kerneltablewidth=2*KernelHalfWidth+1;
+
+    int gmin,gmax;
+    double gfactor;
+
+    gmax=200;
+    gmin=10;
+
+    gfactor = (KernelMaxSigma-KernelMinSigma) / (double) (gmax - gmin);
+
+    for (i=0,ig=0;i<imagesize;i+=3,ig++)
+    {
+
+      bin=(int) floor(((alpha*16-KernelMinSigma)*KernelBins)/(KernelMaxSigma-KernelMinSigma));
+
+      kernelbase1=bin*kerneltablewidth;
+      kernelbase2=SDbins[i+1]*kerneltablewidth;
+      kernelbase3=SDbins[i+2]*kerneltablewidth;
+
+      sum=0;
+      j=0;
+
+      while (j<SampleSize && sum < th)
+      {
+        base=j*imagesize+i;
+        g=pSequence[base];
+
+        if (g < gmin )
+          bin=0;
+        else if (g > gmax)
+          bin = KernelBins -1 ;
+        else
+          bin= (int) ((g-gmin) * gfactor + 0.5);
+        
+        kernelbase1=bin*kerneltablewidth;
+
+        k= (g-  image[i]) +KernelHalfWidth;
+        kernel1=kerneltable[kernelbase1+k];
+
+        g=pSequence[base+1];
+        k= (g-  image[i+1]) +KernelHalfWidth;
+        kernel2=kerneltable[kernelbase2+k];
+
+        g=pSequence[base+2];
+        k= (g-  image[i+2]) +KernelHalfWidth;
+        kernel3=kerneltable[kernelbase3+k];
+
+        sum+=kernel1*kernel2*kernel3;
+        j++;
+      }
+
+      p=sum / j;
+      Pimage1[ig]=p;
+    }
+  }
+  else // RGB color
+  {
+    unsigned int ig;
+    int base;
+
+    int kernelbase1;
+    int kernelbase2;
+    int kernelbase3;
+    unsigned int kerneltablewidth=2*KernelHalfWidth+1;
+
+    for (i=0,ig=0;i<imagesize;i+=3,ig++)
+    {
+      // used extimated kernel width to access the right kernel
+      kernelbase1=SDbins[i]*kerneltablewidth;
+      kernelbase2=SDbins[i+1]*kerneltablewidth;
+      kernelbase3=SDbins[i+2]*kerneltablewidth;
+
+      sum=0;
+      j=0;
+      while (j<SampleSize && sum < th)
+      {
+        base=j*imagesize+i;
+        g=pSequence[base];
+        k= (g-  image[i]) +KernelHalfWidth;
+        kernel1=kerneltable[kernelbase1+k];
+
+        g=pSequence[base+1];
+        k= (g-  image[i+1]) +KernelHalfWidth;
+        kernel2=kerneltable[kernelbase2+k];
+
+        g=pSequence[base+2];
+        k= (g-  image[i+2]) +KernelHalfWidth;
+        kernel3=kerneltable[kernelbase3+k];
+
+        sum+=kernel1*kernel2*kernel3;
+        j++;
+      }
+      
+      p=sum/j;
+      Pimage1[ig]=p;
+    }
+  }
+
+  DisplayPropabilityImageWithThresholding(Pimage1,FGImage,Threshold,rows,cols);
+}
+
+/*********************************************************************/
+
+void NPBGSubtractor::NBBGSubtraction(unsigned char * Frame,
+                                     unsigned char * FGImage,
+                                     unsigned char * FilteredFGImage,
+                                     unsigned char ** DisplayBuffers)
+{
+  if(UseColorRatiosFlag)
+    BGR2SnGnRn(Frame,tempFrame,rows,cols);
+  else
+    memcpy(tempFrame,Frame,rows*cols*color_channels);
+
+  NPBGSubtraction_Subset_Kernel(tempFrame,FGImage,FilteredFGImage);	
+  /*NoiseFilter_o(FGImage,DisplayBuffers[3],rows,cols,4);
+  BuildImageIndex(DisplayBuffers[3],imageindex,rows,cols);
+
+  ExpandOperatorIndexed(DisplayBuffers[3],imageindex,DisplayBuffers[4],imageindex,rows,cols);
+  ShrinkOperatorIndexed(DisplayBuffers[4],imageindex,FilteredFGImage,imageindex,rows,cols);
+
+  memset(DisplayBuffers[3],0,rows*cols);*/
+}
+
+void NPBGSubtractor::Update(unsigned char * FGMask)
+{
+  if(UpdateBGFlag)
+    SequenceBGUpdate_Pairs(tempFrame,FGMask);
+}
diff --git a/package_bgs/ae/NPBGSubtractor.h b/package_bgs/ae/NPBGSubtractor.h
new file mode 100644
index 0000000..e7f3795
--- /dev/null
+++ b/package_bgs/ae/NPBGSubtractor.h
@@ -0,0 +1,154 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*
+*
+* Copyright 2001 by Ahmed Elgammal All  rights reserved.
+*
+* Permission to use, copy,  or modify this software and  its documentation
+* for  educational  and  research purposes only and without fee  is hereby
+* granted, provided  that this copyright notice and the original authors's
+* name appear  on all copies and supporting documentation.  If individual
+* files are  separated from  this  distribution directory  structure, this
+* copyright notice must be included.  For any other uses of this software,
+* in original or  modified form, including but not limited to distribution
+* in whole or in  part, specific  prior permission  must be  obtained from
+* Author or UMIACS.  These programs shall not  be  used, rewritten, or  
+* adapted as  the basis  of  a commercial  software  or  hardware product 
+* without first obtaining appropriate licenses  from Author. 
+* Other than these cases, no part of this software may be used or
+* distributed without written permission of the author.
+*
+* Neither the author nor UMIACS make any representations about the 
+* suitability of this software for any purpose.  It is provided 
+* "as is" without express or implied warranty.
+*
+* Ahmed Elgammal
+* 
+* University of Maryland at College Park
+* UMIACS
+* A.V. Williams Bldg. 
+* CollegePark, MD 20742
+* E-mail:  elgammal@umiacs.umd.edu
+*
+**/
+
+// NPBGSubtractor.h: interface for the NPBGSubtractor class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_NPBGSUBTRACTOR_H__84B0F51E_6E65_41E4_AC01_723B406363C4__INCLUDED_)
+#define AFX_NPBGSUBTRACTOR_H__84B0F51E_6E65_41E4_AC01_723B406363C4__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "NPBGmodel.h"
+#include "KernelTable.h"
+
+#define FALSE 0
+#define TRUE 1
+
+// kernal look up table settings
+#define 	KERNELHALFWIDTH 255
+#define 	SEGMAMAX 36.5
+#define	  SEGMAMIN 0.5
+#define		SEGMABINS 80
+#define		DEFAULTSEGMA 1.0
+
+typedef struct
+{
+  unsigned char *Hist;
+  unsigned char *MedianBins;
+  unsigned char *MedianFreq;
+  unsigned char *AccSum;
+  unsigned char histbins;
+  unsigned char histsum;
+  unsigned int  imagesize;
+} DynamicMedianHistogram;
+
+typedef struct
+{
+  unsigned int cnt;
+  unsigned int *List;
+} ImageIndex;
+
+class NPBGSubtractor  
+{
+private:
+  unsigned int rows;
+  unsigned int cols;
+  unsigned int color_channels;
+  unsigned int imagesize;
+  // flags
+  unsigned char UpdateBGFlag;
+  unsigned char SdEstimateFlag;
+  unsigned char UseColorRatiosFlag;
+  unsigned char AdaptBGFlag;
+  unsigned char SubsetFlag;
+  //
+  int UpdateSDRate;
+  double Threshold;
+  double AlphaValue;
+  unsigned int TimeIndex;
+  ImageIndex  *imageindex;
+  unsigned char *tempFrame;
+  KernelLUTable *KernelTable;
+  NPBGmodel *BGModel;
+  DynamicMedianHistogram AbsDiffHist;
+  double *Pimage1;
+  double *Pimage2;
+  //
+  void NPBGSubtraction_Subset_Kernel(unsigned char * image, unsigned char * FGImage, unsigned char * FilteredFGImage);
+  void SequenceBGUpdate_Pairs(unsigned char * image, unsigned char * Mask);
+
+public:
+  NPBGSubtractor();
+  virtual ~NPBGSubtractor();
+  //~NPBGSubtractor();
+
+  int Intialize(unsigned int rows,
+    unsigned int cols,
+    unsigned int color_channels,
+    unsigned int SequenceLength,
+    unsigned int TimeWindowSize,
+    unsigned char SDEstimationFlag,
+    unsigned char UseColorRatiosFlag);
+
+  void AddFrame(unsigned char * ImageBuffer);
+
+  void Estimation();
+
+  void NBBGSubtraction(unsigned char *Frame,
+    unsigned char *FGImage,
+    unsigned char *FilteredFGImage,
+    unsigned char **DisplayBuffers);
+
+  void Update(unsigned char *);
+
+  void SetThresholds(double th, double alpha)
+  {
+    Threshold = th;
+    AlphaValue = alpha;
+  };
+
+  void SetUpdateFlag(unsigned int bgflag){
+    UpdateBGFlag = bgflag;
+  };
+};
+
+#endif // !defined(AFX_NPBGSUBTRACTOR_H__84B0F51E_6E65_41E4_AC01_723B406363C4__INCLUDED_)
diff --git a/package_bgs/ae/NPBGmodel.cpp b/package_bgs/ae/NPBGmodel.cpp
new file mode 100644
index 0000000..2c8b074
--- /dev/null
+++ b/package_bgs/ae/NPBGmodel.cpp
@@ -0,0 +1,127 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*
+*
+* Copyright 2001 by Ahmed Elgammal All  rights reserved.
+*
+* Permission to use, copy,  or modify this software and  its documentation
+* for  educational  and  research purposes only and without fee  is hereby
+* granted, provided  that this copyright notice and the original authors's
+* name appear  on all copies and supporting documentation.  If individual
+* files are  separated from  this  distribution directory  structure, this
+* copyright notice must be included.  For any other uses of this software,
+* in original or  modified form, including but not limited to distribution
+* in whole or in  part, specific  prior permission  must be  obtained from
+* Author or UMIACS.  These programs shall not  be  used, rewritten, or  
+* adapted as  the basis  of  a commercial  software  or  hardware product 
+* without first obtaining appropriate licenses  from Author. 
+* Other than these cases, no part of this software may be used or
+* distributed without written permission of the author.
+*
+* Neither the author nor UMIACS make any representations about the 
+* suitability of this software for any purpose.  It is provided 
+* "as is" without express or implied warranty.
+*
+* Ahmed Elgammal
+* 
+* University of Maryland at College Park
+* UMIACS
+* A.V. Williams Bldg. 
+* CollegePark, MD 20742
+* E-mail:  elgammal@umiacs.umd.edu
+*
+**/
+
+// NPBGmodel.cpp: implementation of the NPBGmodel class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "NPBGmodel.h"
+#include "memory.h"
+
+#ifdef _DEBUG
+#undef THIS_FILE
+static char THIS_FILE[]=__FILE__;
+//#define new DEBUG_NEW
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+NPBGmodel::NPBGmodel()
+{
+  std::cout << "NPBGmodel()" << std::endl;
+}
+
+NPBGmodel::~NPBGmodel()
+{
+  delete Sequence;
+  delete PixelQTop;
+  delete TemporalBuffer;
+  delete TemporalMask;
+  delete AccMask;
+  //delete SDbinsImage;
+  std::cout << "~NPBGmodel()" << std::endl;
+}
+
+NPBGmodel::NPBGmodel(unsigned int Rows,
+                     unsigned int Cols,
+                     unsigned int ColorChannels,
+                     unsigned int Length,
+                     unsigned int pTimeWindowSize,
+                     unsigned int bg_suppression_time)
+{
+  std::cout << "NPBGmodel()" << std::endl;
+
+  imagesize = Rows*Cols*ColorChannels;
+
+  rows = Rows;
+  cols = Cols;
+  color_channels = ColorChannels;
+
+  SampleSize = Length;
+
+  TimeWindowSize = pTimeWindowSize;
+
+  Sequence	= new unsigned char[imagesize*Length];
+  Top = 0;
+  memset(Sequence,0,imagesize*Length);
+
+  PixelQTop = new unsigned char[rows*cols];
+
+  // temporalBuffer
+  TemporalBufferLength = (TimeWindowSize/Length > 2 ? TimeWindowSize/Length:2);
+  TemporalBuffer = new unsigned char[imagesize*TemporalBufferLength];
+  TemporalMask = new unsigned char[rows*cols*TemporalBufferLength];
+
+  TemporalBufferTop = 0;
+
+  AccMask = new unsigned int[rows*cols];
+
+  ResetMaskTh = bg_suppression_time;
+}
+
+void NPBGmodel::AddFrame(unsigned char *ImageBuffer)		
+{
+  memcpy(Sequence+Top*imagesize,ImageBuffer,imagesize);
+  Top = (Top + 1) % SampleSize;		
+
+  memset(PixelQTop, (unsigned char) Top, rows*cols);
+
+  memcpy(TemporalBuffer,ImageBuffer,imagesize);
+}
diff --git a/package_bgs/ae/NPBGmodel.h b/package_bgs/ae/NPBGmodel.h
new file mode 100644
index 0000000..9e28510
--- /dev/null
+++ b/package_bgs/ae/NPBGmodel.h
@@ -0,0 +1,111 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*
+*
+* Copyright 2001 by Ahmed Elgammal All  rights reserved.
+*
+* Permission to use, copy,  or modify this software and  its documentation
+* for  educational  and  research purposes only and without fee  is hereby
+* granted, provided  that this copyright notice and the original authors's
+* name appear  on all copies and supporting documentation.  If individual
+* files are  separated from  this  distribution directory  structure, this
+* copyright notice must be included.  For any other uses of this software,
+* in original or  modified form, including but not limited to distribution
+* in whole or in  part, specific  prior permission  must be  obtained from
+* Author or UMIACS.  These programs shall not  be  used, rewritten, or  
+* adapted as  the basis  of  a commercial  software  or  hardware product 
+* without first obtaining appropriate licenses  from Author. 
+* Other than these cases, no part of this software may be used or
+* distributed without written permission of the author.
+*
+* Neither the author nor UMIACS make any representations about the 
+* suitability of this software for any purpose.  It is provided 
+* "as is" without express or implied warranty.
+*
+* Ahmed Elgammal
+* 
+* University of Maryland at College Park
+* UMIACS
+* A.V. Williams Bldg. 
+* CollegePark, MD 20742
+* E-mail:  elgammal@umiacs.umd.edu
+*
+**/
+
+// NPBGmodel.h: interface for the NPBGmodel class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_NPBGMODEL_H__CCAF05D4_D06E_44C2_95D8_979E2249953A__INCLUDED_)
+#define AFX_NPBGMODEL_H__CCAF05D4_D06E_44C2_95D8_979E2249953A__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include <iostream>
+
+class NPBGmodel  
+{
+private:
+  unsigned char *Sequence;
+  unsigned int SampleSize;
+  unsigned int TimeWindowSize;
+
+  unsigned int rows,cols,color_channels;
+  unsigned int imagesize;
+
+  unsigned int Top;
+  unsigned char *PixelQTop;
+
+  //unsigned int *PixelUpdateCounter;
+
+  unsigned char *SDbinsImage; 
+
+  unsigned char *TemporalBuffer;
+  unsigned char TemporalBufferLength;
+  unsigned char TemporalBufferTop;
+  unsigned char *TemporalBufferMask;
+
+  unsigned char *TemporalMask;
+  unsigned char TemporalMaskLength;
+  unsigned char TemporalMaskTop;
+
+  unsigned int *AccMask;
+  unsigned int ResetMaskTh;	// Max continous duration a pixel can be detected before
+  // it is forced to be updated...
+
+  double *weights;
+
+public:
+  NPBGmodel();
+  //~NPBGmodel();
+  virtual ~NPBGmodel();
+
+  NPBGmodel(unsigned int Rows,
+    unsigned int Cols,
+    unsigned int ColorChannels,
+    unsigned int Length,
+    unsigned int pTimeWindowSize,
+    unsigned int bg_suppression_time);
+
+  void AddFrame(unsigned char *ImageBuffer);
+
+  friend class NPBGSubtractor;
+};
+
+#endif // !defined(AFX_NPBGMODEL_H__CCAF05D4_D06E_44C2_95D8_979E2249953A__INCLUDED_)
diff --git a/package_bgs/av/TBackground.cpp b/package_bgs/av/TBackground.cpp
new file mode 100644
index 0000000..2e97d93
--- /dev/null
+++ b/package_bgs/av/TBackground.cpp
@@ -0,0 +1,166 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*
+*  TBackground.cpp
+*  Framework
+*
+*  Created by Robinault Lionel on 07/12/11.
+*
+*/
+
+#include "TBackground.h"
+
+TBackground::TBackground(void)
+{
+  std::cout << "TBackground()" << std::endl;
+}
+
+TBackground::~TBackground(void)
+{
+  Clear();
+  std::cout << "~TBackground()" << std::endl;
+}
+
+void TBackground::Clear(void)
+{
+}
+
+void TBackground::Reset(void)
+{
+}
+
+int TBackground::GetParameterCount(void)
+{
+  return 0;
+}
+
+std::string TBackground::GetParameterName(int nInd)
+{
+  return "";
+}
+
+std::string TBackground::GetParameterValue(int nInd)
+{
+  return "";
+}
+
+int TBackground::SetParameterValue(int nInd, std::string csNew)
+{
+  return 0;
+}
+
+int TBackground::Init(IplImage * pSource)
+{
+  return 0;
+}
+
+bool TBackground::isInitOk(IplImage * pSource, IplImage *pBackground, IplImage *pMotionMask)
+{
+  bool bResult = TRUE;
+  int nbl, nbc;
+
+  if(pSource == NULL || pSource->nChannels != 1 || pSource->depth != IPL_DEPTH_8U)
+    bResult = FALSE;
+
+  if(bResult)
+  {
+    nbl = pSource->height;
+    nbc = pSource->width;
+    
+    if(pBackground == NULL || pBackground->width != nbc || pBackground->height != nbl || pBackground->imageSize != pSource->imageSize)
+      bResult = FALSE;
+    
+    if(pMotionMask == NULL || pMotionMask->width != nbc || pMotionMask->height != nbl || pMotionMask->imageSize != pSource->imageSize)
+      bResult = FALSE;
+  }
+
+  return bResult;
+}
+
+int TBackground::UpdateBackground(IplImage * pSource, IplImage *pBackground, IplImage *pMotionMask)
+{
+  return 0;
+}
+
+IplImage *TBackground::CreateTestImg()
+{
+  IplImage *pImage = cvCreateImage(cvSize(256, 256), IPL_DEPTH_8U, 3);
+
+  if(pImage != NULL)
+    cvSetZero(pImage);
+
+  return pImage;
+}
+
+int TBackground::UpdateTest(IplImage *pSource, IplImage *pBackground, IplImage *pTest, int nX, int nY, int nInd)
+{
+  int nErr = 0;
+  CvScalar Color;
+  unsigned char *ptr;
+  int l, c;
+
+  if(pTest == NULL || !isInitOk(pSource, pBackground, pSource))
+    nErr = 1;
+
+  if(!nErr)
+  {
+    if(pTest->width != 256 || pTest->height != 256 || pTest->nChannels != 3)
+      nErr = 1;
+
+    if(nX < 0 || nX > pSource->width || nY < 0 || nY > pSource->height)
+      nErr = 1;
+
+    switch(nInd)
+    {
+      case 0 : Color = cvScalar(128, 0, 0); break;
+      case 1 : Color = cvScalar(0, 128, 0); break;
+      case 2 : Color = cvScalar(0, 0, 128); break;
+      default : nErr = 1;
+    }
+  }
+
+  if(!nErr)
+  {
+    // recupere l'indice de la colonne
+    ptr = (unsigned char *)(pTest->imageData);
+    c = *ptr;
+    
+    // efface la colonne
+    cvLine(pTest, cvPoint(c, 0), cvPoint(c, 255), cvScalar(0));
+    *ptr += 1;
+
+    //recupere la couleur du fond
+    ptr = (unsigned char *)(pBackground->imageData + pBackground->widthStep * nY);
+    ptr += nX;
+    l = *ptr;
+
+    // dessine la couleur
+    cvLine(pTest, cvPoint(c, l - 5), cvPoint(c, l + 5), Color);
+
+    //recupere la couleur du point
+    ptr = (unsigned char *)(pSource->imageData + pSource->widthStep * nY);
+    ptr += nX;
+    l = *ptr;
+
+    // dessine la couleur
+    ptr = (unsigned char *)(pTest->imageData + pTest->widthStep * l);
+    ptr += (c * 3) + nInd;
+    *ptr = 255;
+  }
+
+  return nErr;
+}
diff --git a/package_bgs/av/TBackground.h b/package_bgs/av/TBackground.h
new file mode 100644
index 0000000..974cab9
--- /dev/null
+++ b/package_bgs/av/TBackground.h
@@ -0,0 +1,51 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*
+*  TBackground.h
+*  Framework
+*
+*  Created by Robinault Lionel on 07/12/11.
+*
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+class TBackground
+{
+public:
+  TBackground(void);
+  virtual ~TBackground(void);
+
+  virtual void Clear(void);
+  virtual void Reset(void);
+
+  virtual int UpdateBackground(IplImage * pSource, IplImage *pBackground, IplImage *pMotionMask);
+  virtual int UpdateTest(IplImage *pSource, IplImage *pBackground, IplImage *pTest, int nX, int nY, int nInd);
+  virtual IplImage *CreateTestImg();
+
+  virtual int GetParameterCount(void);
+  virtual std::string GetParameterName(int nInd);
+  virtual std::string GetParameterValue(int nInd);
+  virtual int SetParameterValue(int nInd, std::string csNew);
+
+protected:
+  virtual int Init(IplImage * pSource);
+  virtual bool isInitOk(IplImage * pSource, IplImage *pBackground, IplImage *pMotionMask);
+};
diff --git a/package_bgs/av/TBackgroundVuMeter.cpp b/package_bgs/av/TBackgroundVuMeter.cpp
new file mode 100644
index 0000000..4597621
--- /dev/null
+++ b/package_bgs/av/TBackgroundVuMeter.cpp
@@ -0,0 +1,380 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*
+*  TBackgroundVuMeter.cpp
+*  Framework
+*
+*  Created by Robinault Lionel on 07/12/11.
+*
+*/
+#include "TBackgroundVuMeter.h"
+
+#define PROCESS_PAR_COUNT 3
+
+TBackgroundVuMeter::TBackgroundVuMeter(void)
+  : m_pHist(NULL)
+  , m_nBinSize(8)
+  , m_nBinCount(0)
+  , m_fAlpha(0.995)
+  , m_fThreshold(0.03)
+  , m_nCount(0)
+{
+  std::cout << "TBackgroundVuMeter()" << std::endl;
+}
+
+TBackgroundVuMeter::~TBackgroundVuMeter(void)
+{
+  Clear();
+  std::cout << "~TBackgroundVuMeter()" << std::endl;
+}
+
+void TBackgroundVuMeter::Clear(void)
+{
+  int i;
+
+  TBackground::Clear();
+
+  if(m_pHist != NULL)
+  {
+    for(i = 0; i < m_nBinCount; ++i)
+    {
+      if(m_pHist[i] != NULL)
+        cvReleaseImage(&m_pHist[i]);
+    }
+
+    delete m_pHist;
+    m_pHist = NULL;
+    m_nBinCount = 0;
+  }
+
+  m_nCount = 0;
+}
+
+void TBackgroundVuMeter::Reset(void)
+{
+  int i;
+  float fVal = 0.0;
+
+  TBackground::Reset();
+
+  if(m_pHist != NULL)
+  {
+    //		fVal = (m_nBinCount != 0) ? (float)(1.0 / (double)m_nBinCount) : (float)0.0;
+    fVal = 0.0;
+
+    for(i = 0; i < m_nBinCount; ++i)
+    {
+      if(m_pHist[i] != NULL)
+      {
+        cvSetZero(m_pHist[i]);
+        cvAddS(m_pHist[i], cvScalar(fVal), m_pHist[i]);
+      }
+    }
+  }
+
+  m_nCount = 0;
+}
+
+int TBackgroundVuMeter::GetParameterCount(void)
+{
+  return TBackground::GetParameterCount() + PROCESS_PAR_COUNT;
+}
+
+std::string TBackgroundVuMeter::GetParameterName(int nInd)
+{
+  std::string csResult;
+  int nNb;
+
+  nNb = TBackground::GetParameterCount();
+
+  if(nInd >= nNb)
+  {
+    nInd -= nNb;
+
+    switch(nInd)
+    {
+    case 0 : csResult = "Bin size"; break;
+    case 1 : csResult = "Alpha"; break;
+    case 2 : csResult = "Threshold"; break;
+    }
+  }
+  else 
+    csResult = TBackground::GetParameterName(nInd);
+
+  return csResult;
+}
+
+std::string TBackgroundVuMeter::GetParameterValue(int nInd)
+{
+  std::string csResult;
+  int nNb;
+
+  nNb = TBackground::GetParameterCount();
+
+  if(nInd >= nNb)
+  {
+    nInd -= nNb;
+
+    char buff[100];
+    
+    switch(nInd)
+    {
+      case 0 : sprintf(buff, "%d", m_nBinSize); break;
+      case 1 : sprintf(buff, "%.3f", m_fAlpha); break;
+      case 2 : sprintf(buff, "%.2f", m_fThreshold); break;
+    }
+
+    csResult = buff;
+  }
+  else 
+    csResult = TBackground::GetParameterValue(nInd);
+
+  return csResult;
+}
+
+int TBackgroundVuMeter::SetParameterValue(int nInd, std::string csNew)
+{
+  int nErr = 0;
+
+  int nNb;
+
+  nNb = TBackground::GetParameterCount();
+
+  if(nInd >= nNb)
+  {
+    nInd -= nNb;
+
+    switch(nInd)
+    {
+      case 0 : SetBinSize(atoi(csNew.c_str())); break;
+      case 1 : SetAlpha(atof(csNew.c_str())); break;
+      case 2 : SetThreshold(atof(csNew.c_str())); break;
+      default : nErr = 1;
+    }
+  }
+  else 
+    nErr = TBackground::SetParameterValue(nInd, csNew);
+
+  return nErr;
+}
+
+int TBackgroundVuMeter::Init(IplImage * pSource)
+{
+  int nErr = 0;
+  int i;
+  int nbl, nbc;
+
+  Clear();
+
+  nErr = TBackground::Init(pSource);
+
+  if(pSource == NULL)
+    nErr = 1;
+
+  // calcul le nb de bin
+  if(!nErr)
+  {
+    nbl = pSource->height;
+    nbc = pSource->width;
+    m_nBinCount = (m_nBinSize != 0) ? 256 / m_nBinSize : 0;
+
+    if(m_nBinCount <= 0 || m_nBinCount > 256)
+      nErr = 1;
+  }
+
+  // creation du tableau de pointeur
+  if(!nErr)
+  {
+    m_pHist = new IplImage *[m_nBinCount];
+
+    if(m_pHist == NULL)
+      nErr = 1;
+  }
+
+  // creation des images
+  if(!nErr)
+  {
+    for(i = 0; i < m_nBinCount; ++i)
+    {
+      m_pHist[i] = cvCreateImage(cvSize(nbc, nbl), IPL_DEPTH_32F, 1);
+
+      if(m_pHist[i] == NULL)
+        nErr = 1;
+    }
+  }
+
+  if(!nErr) 
+    Reset();
+  else
+    Clear();
+
+  return nErr;
+}
+
+bool TBackgroundVuMeter::isInitOk(IplImage * pSource, IplImage *pBackground, IplImage *pMotionMask)
+{
+  bool bResult = TRUE;
+  int i;
+  int nbl, nbc;
+
+  bResult = TBackground::isInitOk(pSource, pBackground, pMotionMask);
+
+  if(pSource == NULL)
+    bResult = FALSE;
+
+  if(m_nBinSize == 0)
+    bResult = FALSE;
+
+  if(bResult)
+  {
+    i = (m_nBinSize != 0) ? 256 / m_nBinSize : 0;
+
+    if(i != m_nBinCount || m_pHist == NULL)
+      bResult = FALSE;
+  }
+
+  if(bResult)
+  {
+    nbl = pSource->height;
+    nbc = pSource->width;
+
+    for(i = 0; i < m_nBinCount; ++i)
+    {
+      if(m_pHist[i] == NULL || m_pHist[i]->width != nbc || m_pHist[i]->height != nbl)
+        bResult = FALSE;
+    }
+  }
+
+  return bResult;
+}
+
+int TBackgroundVuMeter::UpdateBackground(IplImage *pSource, IplImage *pBackground, IplImage *pMotionMask)
+{
+  int nErr = 0;
+  int i, l, c, nbl, nbc;
+  unsigned char *ptrs, *ptrb, *ptrm;
+  float *ptr1, *ptr2;
+  unsigned char v;
+
+  if(!isInitOk(pSource, pBackground, pMotionMask))
+    nErr = Init(pSource);
+  
+  if(!nErr)
+  {
+    m_nCount++;
+    nbc = pSource->width;
+    nbl = pSource->height;
+    v = m_nBinSize;
+
+    // multiplie tout par alpha
+    for(i = 0; i < m_nBinCount; ++i)
+      cvConvertScale(m_pHist[i], m_pHist[i], m_fAlpha, 0.0);
+
+    for(l = 0; l < nbl; ++l)
+    {
+      ptrs = (unsigned char *)(pSource->imageData + pSource->widthStep * l);
+      ptrm = (unsigned char *)(pMotionMask->imageData + pMotionMask->widthStep * l);
+      ptrb = (unsigned char *)(pBackground->imageData + pBackground->widthStep * l);
+
+      for(c = 0; c < nbc; ++c, ptrs++, ptrb++, ptrm++)
+      {
+        // recherche le bin � augmenter
+        i = *ptrs / v;
+        
+        if(i < 0 || i >= m_nBinCount)
+          i = 0;
+        
+        ptr1 = (float *)(m_pHist[i]->imageData + m_pHist[i]->widthStep * l);
+        ptr1 += c;
+
+        *ptr1 += (float)(1.0 - m_fAlpha);
+        *ptrm = (*ptr1 < m_fThreshold) ? 255 : 0;
+
+        // recherche le bin du fond actuel
+        i = *ptrb / v;
+        
+        if(i < 0 || i >= m_nBinCount)
+          i = 0;
+        
+        ptr2 = (float *)(m_pHist[i]->imageData + m_pHist[i]->widthStep * l);
+        ptr2 += c;
+
+        if(*ptr2 < *ptr1)
+          *ptrb = *ptrs;
+      }
+    }
+
+    if(m_nCount < 5)
+      cvSetZero(pMotionMask);
+  }
+
+  return nErr;
+}
+
+IplImage *TBackgroundVuMeter::CreateTestImg()
+{
+  IplImage *pImage = NULL;
+
+  if(m_nBinCount > 0)
+    pImage = cvCreateImage(cvSize(m_nBinCount, 100), IPL_DEPTH_8U, 3);
+
+  if(pImage != NULL)
+    cvSetZero(pImage);
+
+  return pImage;
+}
+
+int TBackgroundVuMeter::UpdateTest(IplImage *pSource, IplImage *pBackground, IplImage *pTest, int nX, int nY, int nInd)
+{
+  int nErr = 0;
+  int i, nbl, nbc;
+  float *ptrf;
+
+  if(pTest == NULL || !isInitOk(pSource, pBackground, pSource)) 
+    nErr = 1;
+
+  if(!nErr)
+  {
+    nbl = pTest->height;
+    nbc = pTest->width;
+
+    if(nbl != 100 || nbc != m_nBinCount) 
+      nErr = 1;
+
+    if(nX < 0 || nX >= pSource->width || nY < 0 || nY >= pSource->height)
+      nErr = 1;
+  }
+
+  if(!nErr)
+  {
+    cvSetZero(pTest);
+
+    for(i = 0; i < m_nBinCount; ++i)
+    {
+      ptrf = (float *)(m_pHist[i]->imageData + m_pHist[i]->widthStep * nY);
+      ptrf += nX;
+
+      if(*ptrf >= 0 || *ptrf <= 1.0) {
+        cvLine(pTest, cvPoint(i, 100), cvPoint(i, (int)(100.0 * (1.0 - *ptrf))), cvScalar(0, 255, 0));
+      }
+    }
+
+    cvLine(pTest, cvPoint(0, (int)(100.0 * (1.0 - m_fThreshold))), cvPoint(m_nBinCount, (int)(100.0 * (1.0 - m_fThreshold))), cvScalar(0, 128, 0));
+  }
+
+  return nErr;
+}
diff --git a/package_bgs/av/TBackgroundVuMeter.h b/package_bgs/av/TBackgroundVuMeter.h
new file mode 100644
index 0000000..1a19324
--- /dev/null
+++ b/package_bgs/av/TBackgroundVuMeter.h
@@ -0,0 +1,67 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*
+*  TBackgroundVuMeter.h
+*  Framework
+*
+*  Created by Robinault Lionel on 07/12/11.
+*
+*/
+#pragma once
+
+#include "TBackground.h"
+
+class TBackgroundVuMeter : public TBackground
+{
+public:
+  TBackgroundVuMeter(void);
+  virtual ~TBackgroundVuMeter(void);
+
+  virtual void Clear(void);
+  virtual void Reset(void);
+
+  virtual int UpdateBackground(IplImage * pSource, IplImage *pBackground, IplImage *pMotionMask);
+
+  virtual IplImage *CreateTestImg();
+  virtual int UpdateTest(IplImage *pSource, IplImage *pBackground, IplImage *pTest, int nX, int nY, int nInd);
+
+  virtual int GetParameterCount(void);
+  virtual std::string GetParameterName(int nInd);
+  virtual std::string GetParameterValue(int nInd);
+  virtual int SetParameterValue(int nInd, std::string csNew);
+
+  inline void SetBinSize(int nNew) { m_nBinSize = (nNew > 0 && nNew < 255) ?  nNew : 8; }
+  inline double GetBinSize() { return m_nBinSize; }
+
+  inline void SetAlpha(double fNew) { m_fAlpha = (fNew > 0.0 && fNew < 1.0) ?  fNew : 0.995; }
+  inline double GetAlpha() { return m_fAlpha; }
+
+  inline void SetThreshold(double fNew) { m_fThreshold = (fNew > 0.0 && fNew < 1.0) ?  fNew : 0.03; }
+  inline double GetThreshold() { return m_fThreshold; }
+
+protected:
+  IplImage **m_pHist;
+
+  int m_nBinCount;
+  int m_nBinSize;
+  int m_nCount;
+  double m_fAlpha;
+  double m_fThreshold;
+
+  virtual int Init(IplImage * pSource);
+  virtual bool isInitOk(IplImage * pSource, IplImage *pBackground, IplImage *pMotionMask);
+};
diff --git a/package_bgs/av/VuMeter.cpp b/package_bgs/av/VuMeter.cpp
new file mode 100644
index 0000000..29a1477
--- /dev/null
+++ b/package_bgs/av/VuMeter.cpp
@@ -0,0 +1,116 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "VuMeter.h"
+
+VuMeter::VuMeter() : firstTime(true), showOutput(true), enableFilter(true), binSize(8), alpha(0.995), threshold(0.03)
+{
+  std::cout << "VuMeter()" << std::endl;
+}
+
+VuMeter::~VuMeter()
+{
+  cvReleaseImage(&mask);
+  cvReleaseImage(&background);
+  cvReleaseImage(&gray);
+
+  std::cout << "~VuMeter()" << std::endl;
+}
+
+void VuMeter::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+  else
+    frame = new IplImage(img_input);
+
+  loadConfig();
+
+  if(firstTime)
+  {
+    bgs.SetAlpha(alpha);
+    bgs.SetBinSize(binSize);
+    bgs.SetThreshold(threshold);
+
+    gray = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1);
+    cvCvtColor(frame,gray,CV_RGB2GRAY);
+
+    background = cvCreateImage(cvGetSize(gray),IPL_DEPTH_8U,1);
+    cvCopy(gray, background);
+
+    mask = cvCreateImage(cvGetSize(gray),IPL_DEPTH_8U,1);
+    cvZero(mask);
+
+    saveConfig();
+  }
+  else
+    cvCvtColor(frame,gray,CV_RGB2GRAY);
+  
+  bgs.UpdateBackground(gray,background,mask);
+  cv::Mat img_foreground(mask);
+  cv::Mat img_bkg(background);
+
+  if(enableFilter)
+  {
+    cv::erode(img_foreground,img_foreground,cv::Mat());
+    cv::medianBlur(img_foreground, img_foreground, 5);
+  }
+
+  if(showOutput)
+  {
+    if(!img_foreground.empty())
+      cv::imshow("VuMeter", img_foreground);
+    
+    if(!img_bkg.empty())
+      cv::imshow("VuMeter Bkg Model", img_bkg);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_bkg.copyTo(img_bgmodel);
+  
+  delete frame;
+  firstTime = false;
+}
+
+void VuMeter::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/VuMeter.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "enableFilter", enableFilter);
+  
+  cvWriteInt(fs, "binSize", binSize);
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteReal(fs, "threshold", threshold);
+  
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void VuMeter::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/VuMeter.xml", 0, CV_STORAGE_READ);
+  
+  enableFilter = cvReadIntByName(fs, 0, "enableFilter", true);
+  
+  binSize = cvReadIntByName(fs, 0, "binSize", 8);
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.995);
+  threshold = cvReadRealByName(fs, 0, "threshold", 0.03);
+  
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/av/VuMeter.h b/package_bgs/av/VuMeter.h
new file mode 100644
index 0000000..7884ff6
--- /dev/null
+++ b/package_bgs/av/VuMeter.h
@@ -0,0 +1,53 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "TBackgroundVuMeter.h"
+#include "../IBGS.h"
+
+class VuMeter : public IBGS
+{
+private:
+  TBackgroundVuMeter bgs;
+
+  IplImage *frame;
+  IplImage *gray;
+  IplImage *background;
+  IplImage *mask;
+  
+  bool firstTime;
+  bool showOutput;
+  bool enableFilter;
+  
+  int binSize;
+  double alpha;
+  double threshold;
+  
+public:
+  VuMeter();
+  ~VuMeter();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
diff --git a/package_bgs/ck/LbpMrf.cpp b/package_bgs/ck/LbpMrf.cpp
new file mode 100644
index 0000000..f3d068c
--- /dev/null
+++ b/package_bgs/ck/LbpMrf.cpp
@@ -0,0 +1,87 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+
+Csaba, Kertész: Texture-Based Foreground Detection, International Journal of Signal Processing,
+Image Processing and Pattern Recognition (IJSIP), Vol. 4, No. 4, 2011.
+
+*/
+#include "LbpMrf.h"
+
+#include "MotionDetection.hpp"
+
+LbpMrf::LbpMrf() : firstTime(true), Detector(NULL), showOutput(true)
+{
+  std::cout << "LbpMrf()" << std::endl;
+  Detector = new MotionDetection();
+  Detector->SetMode(MotionDetection::md_LBPHistograms);
+}
+
+LbpMrf::~LbpMrf()
+{
+  std::cout << "~LbpMrf()" << std::endl;
+  delete Detector;
+  Detector = NULL;
+}
+
+void LbpMrf::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+  {
+    saveConfig();
+  }
+
+  IplImage TempImage(img_input);
+  MEImage InputImage(img_input.cols, img_input.rows, img_input.channels());
+  MEImage OutputImage(img_input.cols, img_input.rows, img_input.channels());
+
+  InputImage.SetIplImage((void*)&TempImage);
+
+  Detector->DetectMotions(InputImage);
+  Detector->GetMotionsMask(OutputImage);
+  img_output = (IplImage*)OutputImage.GetIplImage();
+  bitwise_not(img_output, img_bgmodel);
+
+  if(showOutput)
+  {
+    cv::imshow("LBP-MRF FG", img_output);
+    cv::imshow("LBP-MRF BG", img_bgmodel);
+  }
+
+  firstTime = false;
+}
+
+void LbpMrf::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LbpMrf.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void LbpMrf::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LbpMrf.xml", 0, CV_STORAGE_READ);
+
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/ck/LbpMrf.h b/package_bgs/ck/LbpMrf.h
new file mode 100644
index 0000000..6fd7267
--- /dev/null
+++ b/package_bgs/ck/LbpMrf.h
@@ -0,0 +1,44 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <opencv2/opencv.hpp>
+
+#include "../IBGS.h"
+
+class MotionDetection;
+
+class LbpMrf : public IBGS
+{
+private:
+  bool firstTime;
+  MotionDetection* Detector;
+  cv::Mat img_foreground;
+  cv::Mat img_segmentation;
+  bool showOutput;
+
+public:
+  LbpMrf();
+  ~LbpMrf();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
diff --git a/package_bgs/ck/MEDefs.cpp b/package_bgs/ck/MEDefs.cpp
new file mode 100644
index 0000000..9347353
--- /dev/null
+++ b/package_bgs/ck/MEDefs.cpp
@@ -0,0 +1,40 @@
+/*
+ *  This file is part of the AiBO+ project
+ *
+ *  Copyright (C) 2005-2013 Csaba Kertész (csaba.kertesz@gmail.com)
+ *
+ *  AiBO+ is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  AiBO+ is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "MEDefs.hpp"
+
+#include <math.h>
+
+float MERound(float number)
+{
+	double FracPart = 0.0;
+	double IntPart = 0.0;
+	float Ret = 0.0;
+
+	FracPart = modf((double)number, &IntPart);
+	if (number >= 0)
+	{
+	  Ret = (float)(FracPart >= 0.5 ? IntPart+1 : IntPart);
+	} else {
+	  Ret = (float)(FracPart <= -0.5 ? IntPart-1 : IntPart);
+	}
+	return Ret;
+}
diff --git a/package_bgs/ck/MEDefs.hpp b/package_bgs/ck/MEDefs.hpp
new file mode 100644
index 0000000..d5bc246
--- /dev/null
+++ b/package_bgs/ck/MEDefs.hpp
@@ -0,0 +1,83 @@
+/*
+ *  This file is part of the AiBO+ project
+ *
+ *  Copyright (C) 2005-2013 Csaba Kertész (csaba.kertesz@gmail.com)
+ *
+ *  AiBO+ is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  AiBO+ is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef MEDefs_hpp
+#define MEDefs_hpp
+
+/**
+ *  @addtogroup mindeye
+ *  @{
+ */
+
+/// Pi value
+#ifndef ME_PI_VALUE
+#define ME_PI_VALUE 3.14159265
+#endif
+
+/*! Process state */
+typedef enum {
+  ps_Min = 0,                /*!< Minimum value */
+  ps_Uninitialized = ps_Min, /*!< Uninitialized state */
+  ps_Initialized,            /*!< Initialized state */
+  ps_InProgress,             /*!< In progress state */
+  ps_Successful,             /*!< Successful state */
+  ps_Max = ps_Successful     /*!< Maximum value */
+} MEProcessStateType;
+
+template <typename T>
+const T& MEMin(const T& a, const T& b)
+{
+  if (a < b)
+    return a;
+  return b;
+}
+
+template <typename T>
+const T& MEMax(const T& a, const T& b)
+{
+  if (a < b)
+    return b;
+  return a;
+}
+
+template <typename T>
+const T& MEBound(const T& min, const T& val, const T& max)
+{
+  return MEMax(min, MEMin(max, val));
+}
+
+/*!
+ * @brief Round a float number
+ *
+ * @param number number to round
+ *
+ * @return New float number
+ *
+ * This method rounds a float number, if the fraction is .5 or lower
+ * then it rounds down, otherwise up.
+ *
+ */
+
+float MERound(float number);
+
+/** @} */
+
+#endif
diff --git a/package_bgs/ck/MEHistogram.cpp b/package_bgs/ck/MEHistogram.cpp
new file mode 100644
index 0000000..126fd25
--- /dev/null
+++ b/package_bgs/ck/MEHistogram.cpp
@@ -0,0 +1,508 @@
+/*
+ *  This file is part of the AiBO+ project
+ *
+ *  Copyright (C) 2005-2013 Csaba Kertész (csaba.kertesz@gmail.com)
+ *
+ *  AiBO+ is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  AiBO+ is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ *  Some histogram stretch codes are based on how Gimp does it, the same
+ *  GPL 2 license applies for the following authors:
+ *
+ *  The GIMP -- an image manipulation program
+ *  Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ */
+
+#include "MEHistogram.hpp"
+
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#include <cv.h>
+#else
+#include <opencv/cv.h>
+#endif
+
+#include "MEDefs.hpp"
+#include "MEImage.hpp"
+
+MEHistogram::MEHistogram()
+{
+  Clear();
+}
+
+
+MEHistogram::~MEHistogram()
+{
+}
+
+
+void MEHistogram::Clear()
+{
+  memset(&HistogramData, 0, 256*sizeof(int));
+}
+
+
+bool MEHistogram::operator==(MEHistogram& histogram) const
+{
+  bool ret = true;
+
+  for (int i = 255; i >= 0; --i)
+  {
+    if (HistogramData[i] != histogram.HistogramData[i])
+    {
+      ret = false;
+      break;
+    }
+  }
+  return ret;
+}
+
+
+void MEHistogram::Calculate(MEImage& image, int channel, HistogramType mode)
+{
+  int Channel = (channel < 1) ? 1 : ((channel > image.GetLayers()) ? image.GetLayers() : channel);
+
+  if (mode == h_Overwrite)
+  {
+    Clear();
+  }
+
+  unsigned char *ImageData = image.GetImageData();
+  int rowStart = 0;
+
+  for (int i = image.GetHeight()-1; i >= 0; i--)
+  {
+    for (int i1 = (image.GetWidth()-1)*image.GetLayers()+Channel-1; i1 >= Channel-1; i1 -= image.GetLayers())
+    {
+      HistogramData[ImageData[rowStart+i1]]++;
+    }
+    rowStart += image.GetRowWidth();
+  }
+}
+
+
+void MEHistogram::Calculate(MEImage& image, HistogramType mode)
+{
+  if (mode == h_Overwrite)
+  {
+    Clear();
+  }
+
+  unsigned char *ImageData = image.GetImageData();
+  int RowStart = 0;
+  int RowWidth = image.GetRowWidth();
+
+  for (int i = image.GetHeight()-1; i >= 0; i--)
+  {
+    for (int i1 = image.GetWidth()*image.GetLayers()-1; i1 >= 0; i1--)
+    {
+      HistogramData[ImageData[RowStart+i1]]++;
+    }
+    RowStart += RowWidth;
+  }
+}
+
+
+void MEHistogram::Calculate(MEImage& image, int channel, int x0, int y0, int x1, int y1)
+{
+  int Channel = (channel < 1) ? 1 : ((channel > image.GetLayers()) ? image.GetLayers() : channel);
+  unsigned char *ImageData = image.GetImageData();
+  int RowStart = 0;
+  int RowWidth = image.GetRowWidth();
+  int X0 = x0 > x1 ? x1 : x0;
+  int Y0 = y0 > y1 ? y1 : y0;
+  int X1 = x0 < x1 ? x1 : x0;
+  int Y1 = y0 < y1 ? y1 : y0;
+
+  Clear();
+
+  // Compute the correct region coordinates and check them
+  X0 = X0 < 0 ? 0 : X0;
+  Y0 = Y0 < 0 ? 0 : Y0;
+  X1 = X1 > image.GetWidth()-1 ? image.GetWidth()-1 : X1;
+  Y1 = Y1 > image.GetHeight()-1 ? image.GetHeight()-1 : Y1;
+  RowStart = Y0*image.GetRowWidth();
+
+  for (int i = Y1; i >= Y0; --i)
+  {
+    for (int i1 = X1*image.GetLayers()+Channel-1; i1 >= X0*image.GetLayers()+Channel-1;
+         i1 -= image.GetLayers())
+    {
+      HistogramData[ImageData[RowStart+i1]]++;
+    }
+    RowStart += RowWidth;
+  }
+}
+
+
+int MEHistogram::GetPeakIndex() const
+{
+  int PeakIndex = 0;
+  int PeakValue = 0;
+
+  for (int i = 0; i < 256; i++)
+  {
+    if (PeakValue < HistogramData[i])
+    {
+      PeakValue = HistogramData[i];
+      PeakIndex = i;
+    }
+  }
+  return PeakIndex;
+}
+
+
+int MEHistogram::GetLowestLimitIndex(int threshold) const
+{
+  int MinIndex = 0;
+
+  for (int i = 0; i < 256; i++)
+  {
+    if (threshold <= HistogramData[i])
+    {
+      MinIndex = i;
+      break;
+    }
+  }
+  return MinIndex;
+}
+
+
+int MEHistogram::GetHighestLimitIndex(int threshold) const
+{
+  int MaxIndex = 255;
+
+  for (int i = 255; i >= 0; i--)
+  {
+    if (threshold <= HistogramData[i])
+    {
+      MaxIndex = i;
+      break;
+    }
+  }
+  return MaxIndex;
+}
+
+
+int MEHistogram::GetPowerAmount(int minindex, int maxindex) const
+{
+  int ValueAmount = 0;
+  int MinIndex = (minindex > 255) ? 255 : ((minindex < 0) ? 0 : minindex);
+  int MaxIndex = (maxindex > 255) ? 255 : ((maxindex < 0) ? 0 : maxindex);
+
+  if (MinIndex > MaxIndex)
+  {
+    int TempInt = MinIndex;
+    MinIndex = MaxIndex;
+    MaxIndex = TempInt;
+  }
+
+  for (int i = MinIndex; i <= MaxIndex; i++)
+  {
+    ValueAmount += HistogramData[i];
+  }
+  return ValueAmount;
+}
+
+
+int MEHistogram::GetCentroidIndex() const
+{
+  int ValueAmount = GetPowerAmount(0, 255);
+  int WeightedValueAmount = 1;
+  int CentroidIndex = 0;
+
+  // Calculate the normal and weighted amount of histogram values
+  for (int i = 0; i < 256; i++)
+  {
+    WeightedValueAmount += i*HistogramData[i];
+  }
+  // Calculate the centroid point of the histogram
+  CentroidIndex = WeightedValueAmount / ValueAmount;
+  return CentroidIndex;
+}
+
+
+bool MEHistogram::Stretch(StretchType mode)
+{
+  int MinIndex = -1;
+  int MaxIndex = -1;
+  int Percent = -1;
+  double Percentage = 0.0;
+  double NextPercentage = 0.0;
+  double Count = 0.0;
+  double NewCount = 0.0;
+  bool Ret = true;
+
+  switch (mode)
+  {
+    case s_OwnMode:
+      Percent = 20;
+      MinIndex = GetLowestLimitIndex(Percent);
+      MaxIndex = GetHighestLimitIndex(Percent);
+
+      while ((abs(MaxIndex-MinIndex) < 52) && (Percent > 1))
+      {
+        Percent = Percent / 2;
+        MinIndex = GetLowestLimitIndex(Percent);
+        MaxIndex = GetHighestLimitIndex(Percent);
+
+        // The calculation gives wrong answer back
+        if (MinIndex == 0 && MaxIndex == 255)
+        {
+          MinIndex = 128;
+          MaxIndex = 128;
+          Ret = false;
+        }
+      }
+      break;
+
+    case s_GimpMode:
+      Count = GetPowerAmount(0, 255);
+      NewCount = 0;
+
+      for (int i = 0; i < 255; i++)
+      {
+        double Value = 0.0;
+        double NextValue = 0.0;
+
+        Value = HistogramData[i];
+        NextValue = HistogramData[i+1];
+        NewCount += Value;
+        Percentage = NewCount / Count;
+        NextPercentage = (NewCount+NextValue) / Count;
+
+        if (fabs(Percentage-0.006) < fabs(NextPercentage-0.006))
+        {
+          MinIndex = i+1;
+          break;
+        }
+      }
+      NewCount = 0.0;
+      for (int i = 255; i > 0; i--)
+      {
+        double Value = 0.0;
+        double NextValue = 0.0;
+
+        Value = HistogramData[i];
+        NextValue = HistogramData[i-1];
+        NewCount += Value;
+        Percentage = NewCount / Count;
+        NextPercentage = (NewCount+NextValue) / Count;
+
+        if (fabs(Percentage-0.006) < fabs(NextPercentage-0.006))
+        {
+          MaxIndex = i-1;
+          break;
+        }
+      }
+      break;
+
+    default:
+      break;
+  }
+
+  if (MaxIndex <= MinIndex)
+  {
+    MinIndex = 0;
+    MaxIndex = 255;
+    Ret = false;
+  }
+  if (MaxIndex-MinIndex <= 10 ||
+      (MaxIndex-MinIndex <= 20 && (float)GetPowerAmount(MinIndex, MaxIndex) / GetPowerAmount(0, 255) < 0.20))
+  {
+    MinIndex = 0;
+    MaxIndex = 255;
+    Ret = false;
+  }
+  if (Ret)
+  {
+    unsigned char TransformedHistogram[256];
+
+    for (int i = 0; i < 256; ++i)
+    {
+      TransformedHistogram[i] = (unsigned char)MEBound(0, 255*(i-MinIndex) / (MaxIndex-MinIndex), 255);
+    }
+    for (int i = 0; i < 256; ++i)
+    {
+      HistogramData[i] = TransformedHistogram[i];
+    }
+  }
+  return Ret;
+}
+
+
+MEHistogramTransform::MEHistogramTransform() : ChannelMode(p_SeparateChannels),
+StretchMode(MEHistogram::s_GimpMode), DiscreteStretchingDone(false)
+{
+}
+
+
+MEHistogramTransform::~MEHistogramTransform()
+{
+}
+
+
+void MEHistogramTransform::HistogramStretch(MEImage& image)
+{
+  SetStretchProcessingMode(p_SeparateChannels, MEHistogram::s_GimpMode);
+  HistogramStretch(image, t_Continuous);
+}
+
+
+void MEHistogramTransform::HistogramStretch(MEImage& image, TransformType time_mode)
+{
+  if (time_mode == t_Continuous)
+  {
+    DiscreteStretchingDone = false;
+  }
+
+  if (ChannelMode == p_Average || image.GetLayers() == 1)
+  {
+    if (time_mode == t_Continuous || (time_mode == t_Discrete && !DiscreteStretchingDone))
+    {
+      RedChannel.Calculate(image, 1, MEHistogram::h_Overwrite);
+
+      for (int l = 1; l < image.GetLayers(); l++)
+      {
+        RedChannel.Calculate(image, l+1, MEHistogram::h_Add);
+      }
+      RedChannel.Stretch(StretchMode);
+      if (time_mode == t_Discrete && !DiscreteStretchingDone)
+      {
+        DiscreteStretchingDone = true;
+      }
+    }
+    unsigned char *ImageData = image.GetImageData();
+    int RowStart = 0;
+    int RowWidth = image.GetRowWidth();
+
+    for (int i = image.GetHeight()-1; i >= 0; i--)
+    {
+      for (int i1 = image.GetWidth()*image.GetLayers()-1; i1 >= 0; i1--)
+      {
+        ImageData[RowStart+i1] = RedChannel.HistogramData[ImageData[RowStart+i1]];
+      }
+      RowStart += RowWidth;
+    }
+  } else
+  if (ChannelMode == p_SeparateChannels)
+  {
+    if (time_mode == t_Continuous || (time_mode == t_Discrete && !DiscreteStretchingDone))
+    {
+      RedChannel.Calculate(image, 1, MEHistogram::h_Overwrite);
+      GreenChannel.Calculate(image, 2, MEHistogram::h_Overwrite);
+      BlueChannel.Calculate(image, 3, MEHistogram::h_Overwrite);
+      RedChannel.Stretch(StretchMode);
+      GreenChannel.Stretch(StretchMode);
+      BlueChannel.Stretch(StretchMode);
+      if (time_mode == t_Discrete && !DiscreteStretchingDone)
+      {
+        DiscreteStretchingDone = true;
+      }
+    }
+    unsigned char *ImageData = image.GetImageData();
+    int RowStart = 0;
+    int RowWidth = image.GetRowWidth();
+
+    for (int i = image.GetHeight()-1; i >= 0; i--)
+    {
+      for (int i1 = image.GetWidth()*image.GetLayers()-3; i1 >= 0; i1 -= 3)
+      {
+        ImageData[RowStart+i1] = RedChannel.HistogramData[ImageData[RowStart+i1]];
+        ImageData[RowStart+i1+1] = GreenChannel.HistogramData[ImageData[RowStart+i1+1]];
+        ImageData[RowStart+i1+2] = BlueChannel.HistogramData[ImageData[RowStart+i1+2]];
+      }
+      RowStart += RowWidth;
+    }
+  }
+}
+
+
+void MEHistogramTransform::HistogramEqualize(MEImage& image)
+{
+  DiscreteStretchingDone = false;
+  IplImage* cvDest8bitImg = NULL;
+  IplImage* cvDestImg = NULL;
+
+  switch (image.GetLayers())
+  {
+    case 1:
+      // Grayscale image
+      cvDest8bitImg = cvCreateImage(cvSize(image.GetWidth(), image.GetHeight()), 8, 1);
+      cvEqualizeHist((IplImage*)image.GetIplImage(), cvDest8bitImg);
+      image.SetIplImage((void*)cvDest8bitImg);
+      cvReleaseImage(&cvDest8bitImg);
+      break;
+
+    case 3:
+      // RGB image
+      cvDestImg = cvCreateImage(cvSize(image.GetWidth(), image.GetHeight()), 8, 3);
+      IplImage *cvR, *cvG, *cvB;
+
+      cvR = cvCreateImage(cvSize(image.GetWidth(), image.GetHeight()), 8, 1);
+      cvG = cvCreateImage(cvSize(image.GetWidth(), image.GetHeight()), 8, 1);
+      cvB = cvCreateImage(cvSize(image.GetWidth(), image.GetHeight()), 8, 1);
+
+      cvSplit((IplImage*)image.GetIplImage(), cvR, cvG, cvB, NULL);
+      cvEqualizeHist(cvR, cvR);
+      cvEqualizeHist(cvG, cvG);
+      cvEqualizeHist(cvB, cvB);
+      cvMerge(cvR, cvG, cvB, NULL, cvDestImg);
+
+      image.SetIplImage((void*)cvDestImg);
+      cvReleaseImage(&cvR);
+      cvReleaseImage(&cvG);
+      cvReleaseImage(&cvB);
+      cvReleaseImage(&cvDestImg);
+      break;
+
+    default:
+      break;
+  }
+}
+
+
+void MEHistogramTransform::SetStretchProcessingMode(ProcessingType new_channel_mode,
+                                                    MEHistogram::StretchType new_stretch_mode)
+{
+  DiscreteStretchingDone = false;
+
+  switch(new_channel_mode)
+  {
+    case p_SeparateChannels:
+      ChannelMode = new_channel_mode;
+      break;
+
+    case p_Average:
+      ChannelMode = new_channel_mode;
+      break;
+
+    default:
+      break;
+  }
+
+  switch(new_stretch_mode)
+  {
+    case MEHistogram::s_OwnMode:
+      StretchMode = new_stretch_mode;
+      break;
+
+    case MEHistogram::s_GimpMode:
+      StretchMode = new_stretch_mode;
+      break;
+
+    default:
+      break;
+  }
+}
diff --git a/package_bgs/ck/MEHistogram.hpp b/package_bgs/ck/MEHistogram.hpp
new file mode 100644
index 0000000..5b2b47f
--- /dev/null
+++ b/package_bgs/ck/MEHistogram.hpp
@@ -0,0 +1,348 @@
+/*
+ *  This file is part of the AiBO+ project
+ *
+ *  Copyright (C) 2005-2013 Csaba Kertész (csaba.kertesz@gmail.com)
+ *
+ *  AiBO+ is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  AiBO+ is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef MEHistogram_hpp
+#define MEHistogram_hpp
+
+/**
+ *  @addtogroup mindeye
+ *  @{
+ */
+
+class MEImage;
+
+/**
+ * MEHistogram
+ * @brief The class provides basic histogram operations
+ */
+class MEHistogram
+{
+public:
+
+  /// Types of histogram calculation
+  typedef enum {
+    h_Min = 0,           /*!< Minimum value */
+    h_Overwrite = h_Min, /*!< Overwrite */
+    h_Add,               /*!< Add */
+    h_Max = h_Add        /*!< Maximum value */
+  } HistogramType;
+
+  /// Types of histogram stretching
+  typedef enum {
+    s_Min = 0,          /*!< Minimum value */
+    s_OwnMode = s_Min,  /*!< Own mode */
+    s_GimpMode,         /*!< Gimp mode */
+    s_Max = s_GimpMode  /*!< Maximum value */
+  } StretchType;
+
+  /// Constructor of class
+  MEHistogram();
+  /// Destructor of class
+  ~MEHistogram();
+
+  /*!
+   * @brief Clear histogram data
+   *
+   * Clear histogram data.
+   *
+   */
+
+  void Clear();
+
+  /*!
+   * @brief Equality (==) operator
+   *
+   * @param histogram Histogram to be compared
+   *
+   * @return True if the two histograms are equal.
+   *
+   * Compare two histograms.
+   *
+   */
+
+  bool operator==(MEHistogram& histogram) const;
+
+  /*!
+   * @brief Calculate the histogram of one color channel
+   *
+   * @param image Given image for the calculations
+   * @param channel Selected color channel for calculation (Range: 1..x)
+   * @param mode The mode of calculation.
+   *
+   * The method calculates the histograms of a color channel.
+   * There is two different type of the function:
+   *
+   * - h_Add: Add the data to the existing histogram.
+   * - h_Overwrite: Clear the histogram data before the
+   * calculation.
+   *
+   */
+
+  void Calculate(MEImage& image, int channel, HistogramType mode);
+
+  /*!
+   * @brief Calculate the average histogram of an image
+   *
+   * @param image Given image for the calculations
+   * @param mode Histogram calculation mode
+   *
+   * The method calculates the average histogram of an image.
+   *
+   */
+
+  void Calculate(MEImage& image, HistogramType mode = h_Overwrite);
+
+  /*!
+   * @brief Calculate the histogram of an image region
+   *
+   * @param image Given image for the calculations
+   * @param channel Selected color channel for calculation (Range: 1..x)
+   * @param x0 x0 coordinate of the region
+   * @param y0 y0 coordinate of the region
+   * @param x1 x1 coordinate of the region
+   * @param y1 y1 coordinate of the region
+   *
+   * The method calculates the average histogram of an image region
+   * (x0,y0)-(x1,y1).
+   *
+   */
+
+  void Calculate(MEImage& image, int channel, int x0, int y0, int x1, int y1);
+
+  /*!
+   * @brief Get the index of maximum value of the histogram
+   *
+   * @return Index number
+   *
+   * Function gives an index value back where is the highest
+   * peak of the histogram.
+   *
+   */
+
+  int GetPeakIndex() const;
+
+  /*!
+   * @brief Get the lowest histogram index with an threshold value
+   *
+   * @param threshold Specified threshold (in percent: 0..100 %)
+   *
+   * @return Index number
+   *
+   * Function gives the lowest index back whose value reaches
+   * an threshold value calculated by (counted pixel number /
+   * 10*threshold / 100).
+   *
+   */
+
+  int GetLowestLimitIndex(int threshold) const;
+
+  /*!
+   * @brief Get the highest histogram index with an threshold value
+   *
+   * @param threshold Specified threshold (in percent: 0..100 %)
+   *
+   * @return Index number
+   *
+   * Function gives the highest index back whose value reaches
+   * an threshold value calculated by (counted pixel number /
+   * 10*threshold / 100).
+   *
+   */
+
+  int GetHighestLimitIndex(int threshold) const;
+
+  /*!
+   * @brief Get the amount of the histogram values in an interval
+   *
+   * @param minindex Minimal index of the interval
+   * @param maxindex Maximal index of the interval
+   *
+   * @return Amount of the values
+   *
+   * Function calculates the amount of the histogram values
+   * in a given interval.
+   *
+   */
+
+  int GetPowerAmount(int min_index, int max_index) const;
+
+  /*!
+   * @brief Get index value of the centroid point of the histogram
+   *
+   * @return Index number
+   *
+   * Function calculates the centre of area of the histogram and
+   * gives the index number back.
+   *
+   */
+
+  int GetCentroidIndex() const;
+
+  /*!
+   * @brief Stretch the histogram
+   *
+   * @param mode Mode of the histogram stretching
+   *
+   * @return True if successful, otherwise false.
+   *
+   * The function selects and stretches the main power
+   * interval of the histogram. The following calculation
+   * modes are available:
+   *
+   * - s_OwnMode: The calculation of the power
+   * interval is selected by functions Histogram::GetHistogramLowestLimitIndex()
+   * and Histogram::GetHistogramHighestLimitIndex() where the
+   * threshold is 20, 10, 5, 2, 1 in order. The power range will
+   * be selected if the length is at least 52 long or the used
+   * threshold reaches the 1 value.
+   * - s_GimpMode: The minimum index of power interval is
+   * specified by the first fulfilled abs(percentage[i]-0.006) <
+   * fabs(percentage[i+1]-0.006) where the percentage[i] means
+   * the amount of the histogram values in the interval [0, i].
+   * The maximum index is specified by the first fulfilled
+   * (from the end of the histogram) abs(percentage[i]-0.006) <
+   * fabs(percentage[i-1]-0.006) where the percentage[i] means
+   * the amount of the histogram values in the interval [i, 255].
+   *
+   * The stretch operation is rejected if the power interval is
+   * less than 10 or less than 20 and the percentage[min_index, max_index]
+   * / percentage[0, 255] < 0.2.
+   *
+   */
+
+  bool Stretch(StretchType mode);
+
+  /// Histogram spectrum
+  int HistogramData[256];
+};
+
+
+/**
+ * MEHistogramTransform
+ * @brief The class provides histogram operations
+ */
+class MEHistogramTransform
+{
+public:
+  /// Types of histogram processing
+  typedef enum {
+    p_Min = 0,                   /*!< Minimum value */
+    p_SeparateChannels = p_Min, /*!< Separate channels */
+    p_Average,                   /*!< Average */
+    p_Max = p_Average           /*!< Maximum value */
+  } ProcessingType;
+
+  /// Types of histogram transformations
+  typedef enum {
+    t_Min = 0,             /*!< Minimum value */
+    t_Continuous = t_Min, /*!< Continuous */
+    t_Discrete,            /*!< Discrete */
+    t_Max = t_Discrete    /*!< Maximum value */
+  } TransformType;
+
+  /// Constructor of class
+  MEHistogramTransform();
+  /// Destructor of class
+  ~MEHistogramTransform();
+
+  /*!
+   * @brief Histogram stretching an image
+   *
+   * @param image Source image to stretch
+   *
+   * The function stretches the histogram of the given image with
+   * default parameters: process the color channels separately
+   * and continuously.
+   *
+   */
+
+  void HistogramStretch(MEImage& image);
+
+  /*!
+   * @brief Histogram stretching with specified parameters
+   *
+   * @param image Source image to stretch
+   * @param time_mode Mode of the histogram stretching
+   *
+   * The function transformations the histogram of the image.
+   * There is some different possibilities to make the operation:
+   *
+   * - t_Continuous: The function always stretches the
+   * image at each call of the method.
+   * - t_Discrete: A histogram is calculated at the first
+   * call of the function and all further images will be
+   * stretched by this initial histogram.
+   *
+   */
+
+  void HistogramStretch(MEImage& image, TransformType time_mode);
+
+  /*!
+   * @brief Histogram equalization on an image
+   *
+   * @param image Source image to equalize
+   *
+   * The source image is transformed by histogram
+   * equalization.
+   *
+   */
+
+  void HistogramEqualize(MEImage& image);
+
+  /*!
+   * @brief Set the process mode of the histogram transformation
+   *
+   * @param new_channel_mode New mode of processing channels
+   * @param new_stretch_mode New mode of histogram stretching
+   *
+   * The process mode of histogram transformation can be
+   * set by this method. Two process modes are available for
+   * processing channels:
+   *
+   * - p_SeparateChannels: The class processes the color channels
+   * separately.
+   * - p_Average: The color channels are averaged
+   * in the histogram operations.
+   *
+   * Two process modes are usable for histogram stretching:
+   * s_OwnMode and s_GimpMode. See Histogram::Stretch()
+   * for more details.
+   *
+   */
+
+  void SetStretchProcessingMode(ProcessingType new_channel_mode, MEHistogram::StretchType new_stretch_mode);
+
+private:
+  /// Type of the process of histograms
+  ProcessingType ChannelMode;
+  /// Stretch mode
+  MEHistogram::StretchType StretchMode;
+  /// Histograms for red, green and blue color channels
+  MEHistogram RedChannel, GreenChannel, BlueChannel;
+  /// Histogram for average calculation
+  MEHistogram AverageChannel;
+  /// Continuous histogram stretch is done already
+  bool DiscreteStretchingDone;
+};
+
+/** @} */
+
+#endif
diff --git a/package_bgs/ck/MEImage.cpp b/package_bgs/ck/MEImage.cpp
new file mode 100644
index 0000000..5a625a9
--- /dev/null
+++ b/package_bgs/ck/MEImage.cpp
@@ -0,0 +1,1472 @@
+/*
+ *  This file is part of the AiBO+ project
+ *
+ *  Copyright (C) 2005-2013 Csaba Kertész (csaba.kertesz@gmail.com)
+ *
+ *  AiBO+ is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  AiBO+ is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "MEImage.hpp"
+
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#include <cv.h>
+#include <highgui.h>
+#else
+#include <opencv/cv.h>
+#include <opencv/highgui.h>
+#endif
+
+#include "MEDefs.hpp"
+
+#define ME_CAST_TO_IPLIMAGE(image_ptr) ((IplImage*)image_ptr)
+#define ME_RELEASE_IPLIMAGE(image_ptr) \
+  cvReleaseImage((IplImage**)&image_ptr); \
+  image_ptr = NULL;
+
+// RGB to YUV transform
+const float RGBtoYUVMatrix[3][3] =
+  {{ 0.299, 0.587, 0.114 },
+  { -0.147, -0.289, 0.436 },
+  { 0.615, -0.515, -0.100 }};
+
+// RGB to YIQ transform
+const float RGBtoYIQMatrix[3][3] =
+  {{ 0.299, 0.587, 0.114 },
+  { 0.596, -0.274, -0.322 },
+  { 0.212, -0.523, 0.311 }};
+
+MEImage::MEImage(int width, int height, int layers) : cvImg(NULL)
+{
+  _Init(width, height, layers);
+}
+
+
+MEImage::MEImage(const MEImage& other) : cvImg(NULL)
+{
+  _Copy(other);
+}
+
+
+MEImage::~MEImage()
+{
+  if (ME_CAST_TO_IPLIMAGE(cvImg))
+  {
+    ME_RELEASE_IPLIMAGE(cvImg);
+  }
+}
+
+
+void MEImage::Clear()
+{
+  cvSetZero(ME_CAST_TO_IPLIMAGE(cvImg));
+}
+
+
+void MEImage::GetLayer(MEImage& new_layer, int layer_number) const
+{
+  int LayerNumber = layer_number;
+
+  if ((new_layer.GetWidth() != ME_CAST_TO_IPLIMAGE(cvImg)->width) ||
+      (new_layer.GetHeight() != ME_CAST_TO_IPLIMAGE(cvImg)->height) ||
+      (new_layer.GetLayers() != 1))
+  {
+    new_layer.Realloc(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height, 1);
+  }
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels < LayerNumber)
+  {
+    printf("The given layer number is too large (%d > %d)\n",
+               LayerNumber, ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+
+    LayerNumber = ME_CAST_TO_IPLIMAGE(cvImg)->nChannels;
+  }
+  if (LayerNumber <= 0)
+  {
+    printf("The given layer number is too small (%d <= 0)\n", LayerNumber);
+    LayerNumber = 1;
+  }
+
+  cvSetImageCOI(ME_CAST_TO_IPLIMAGE(cvImg), LayerNumber);
+  cvCopy(ME_CAST_TO_IPLIMAGE(cvImg), (IplImage*)new_layer.GetIplImage(), NULL);
+  cvSetImageCOI(ME_CAST_TO_IPLIMAGE(cvImg), 0);
+}
+
+
+void MEImage::SetLayer(MEImage& layer, int layer_number)
+{
+  int LayerNumber = layer_number;
+
+  if (layer.GetWidth() != ME_CAST_TO_IPLIMAGE(cvImg)->width ||
+      layer.GetHeight() != ME_CAST_TO_IPLIMAGE(cvImg)->height)
+  {
+    printf("The dimensions of the layer and "
+               "destination image is different (%dx%d <> %dx%d)\n",
+               layer.GetWidth(), layer.GetHeight(), ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height);
+    return;
+  }
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels < LayerNumber)
+  {
+    printf("The given layer number is too large (%d > %d)\n",
+               LayerNumber, ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+    LayerNumber = ME_CAST_TO_IPLIMAGE(cvImg)->nChannels;
+  }
+  if (LayerNumber <= 0)
+  {
+    printf("The given layer number is too small (%d <= 0)\n", LayerNumber);
+    LayerNumber = 1;
+  }
+  if (layer.GetLayers() != 1)
+  {
+    printf("The layer image has not one color channel (1 != %d)\n",
+               layer.GetLayers());
+    return;
+  }
+  cvSetImageCOI(ME_CAST_TO_IPLIMAGE(cvImg), LayerNumber);
+  cvCopy((IplImage*)layer.GetIplImage(), ME_CAST_TO_IPLIMAGE(cvImg), NULL);
+  cvSetImageCOI(ME_CAST_TO_IPLIMAGE(cvImg), 0);
+}
+
+
+void MEImage::CopyImageData(unsigned char* data)
+{
+  memcpy(ME_CAST_TO_IPLIMAGE(cvImg)->imageData, data, ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->height*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+}
+
+
+void* MEImage::GetIplImage() const
+{
+  return (void*)ME_CAST_TO_IPLIMAGE(cvImg);
+}
+
+
+void MEImage::SetIplImage(void* image)
+{
+  if (ME_CAST_TO_IPLIMAGE(cvImg))
+  {
+    ME_RELEASE_IPLIMAGE(cvImg);
+  }
+  cvImg = cvCloneImage((IplImage*)image);
+  // Correct the origin of the image
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->origin == 1)
+  {
+    MirrorVertical();
+    ME_CAST_TO_IPLIMAGE(cvImg)->origin = 0;
+  }
+}
+
+
+bool MEImage::operator==(const MEImage& image)
+{
+  return Equal(image);
+}
+
+
+bool MEImage::operator!=(const MEImage& image)
+{
+  return !operator==(image);
+}
+
+
+MEImage& MEImage::operator=(const MEImage& other_image)
+{
+  if (&other_image == this)
+    return *this;
+
+  _Copy(other_image);
+  return *this;
+}
+
+
+int MEImage::GetWidth() const
+{
+  return ME_CAST_TO_IPLIMAGE(cvImg) ? ME_CAST_TO_IPLIMAGE(cvImg)->width : 0;
+}
+
+
+int MEImage::GetRowWidth() const
+{
+  return ME_CAST_TO_IPLIMAGE(cvImg) ? ME_CAST_TO_IPLIMAGE(cvImg)->widthStep : 0;
+}
+
+
+int MEImage::GetHeight() const
+{
+  return ME_CAST_TO_IPLIMAGE(cvImg) ? ME_CAST_TO_IPLIMAGE(cvImg)->height : 0;
+}
+
+
+int MEImage::GetLayers() const
+{
+  return ME_CAST_TO_IPLIMAGE(cvImg) ? ME_CAST_TO_IPLIMAGE(cvImg)->nChannels : 0;
+}
+
+
+int MEImage::GetPixelDataNumber() const
+{
+  return ME_CAST_TO_IPLIMAGE(cvImg) ? GetWidth()*GetHeight()*GetLayers() : 0;
+}
+
+
+unsigned char* MEImage::GetImageData() const
+{
+  return ME_CAST_TO_IPLIMAGE(cvImg) ? (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData : NULL;
+}
+
+
+void MEImage::SetData(unsigned char* image_data, int width, int height, int channels)
+{
+  _Init(width, height, channels);
+
+  for (int y = height-1; y >= 0; --y)
+  {
+    int Start = GetRowWidth()*y;
+    int Start2 = width*channels*y;
+
+    memcpy(&ME_CAST_TO_IPLIMAGE(cvImg)->imageData[Start], &image_data[Start2], width*channels);
+  }
+}
+
+
+float MEImage::GetRatio() const
+{
+  return ME_CAST_TO_IPLIMAGE(cvImg) ? (float)ME_CAST_TO_IPLIMAGE(cvImg)->height/(float)ME_CAST_TO_IPLIMAGE(cvImg)->width : 0.0;
+}
+
+
+void MEImage::Realloc(int width, int height)
+{
+  Realloc(width, height, ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+}
+
+
+void MEImage::Realloc(int width, int height, int layers)
+{
+  _Init(width, height, layers);
+}
+
+
+void MEImage::Resize(int new_width, int new_height)
+{
+  if (new_height < 1)
+  {
+    printf("Invalid new height: %d < 1\n", new_height);
+    return;
+  }
+  if (new_width < 1)
+  {
+    printf("Invalid new width: %d < 1\n", new_width);
+    return;
+  }
+  IplImage* TempImg = cvCreateImage(cvSize(new_width, new_height), 8, ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+
+  cvResize(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_INTER_NN);
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
+
+
+void MEImage::ResizeScaleX(int new_width)
+{
+  if (new_width < 1)
+  {
+    printf("Invalid new width: %d < 1\n", new_width);
+    return;
+  }
+  Resize(new_width, (int)((float)new_width*GetRatio()));
+}
+
+
+void MEImage::ResizeScaleY(int new_height)
+{
+  if (new_height < 1)
+  {
+    printf("Invalid new height: %d < 1\n", new_height);
+    return;
+  }
+  Resize((int)((float)new_height*1/GetRatio()), new_height);
+}
+
+
+void MEImage::MirrorHorizontal()
+{
+  cvFlip(ME_CAST_TO_IPLIMAGE(cvImg), NULL, 1);
+}
+
+
+void MEImage::MirrorVertical()
+{
+  cvFlip(ME_CAST_TO_IPLIMAGE(cvImg), NULL, 0);
+}
+
+
+void MEImage::Crop(int x1, int y1, int x2, int y2)
+{
+  int NewX1 = x1;
+  int NewY1 = y1;
+  int NewX2 = x2;
+  int NewY2 = y2;
+
+  NewX1 = (NewX1 < 0) ? 0 : NewX1;
+  NewX1 = (NewX1 > ME_CAST_TO_IPLIMAGE(cvImg)->width) ? ME_CAST_TO_IPLIMAGE(cvImg)->width : NewX1;
+  NewY1 = (NewY1 < 0) ? 0 : NewY1;
+  NewY1 = (NewY1 > ME_CAST_TO_IPLIMAGE(cvImg)->height) ? ME_CAST_TO_IPLIMAGE(cvImg)->height : NewY1;
+
+  NewX2 = (NewX2 < 0) ? 0 : NewX2;
+  NewX2 = (NewX2 > ME_CAST_TO_IPLIMAGE(cvImg)->width) ? ME_CAST_TO_IPLIMAGE(cvImg)->width : NewX2;
+  NewY2 = (NewY2 < 0) ? 0 : NewY2;
+  NewY2 = (NewY2 > ME_CAST_TO_IPLIMAGE(cvImg)->height) ? ME_CAST_TO_IPLIMAGE(cvImg)->height : NewY2;
+
+  if ((NewX2-NewX1) <= 0)
+  {
+    printf("Invalid new width: %d <= 0\n", NewX2-NewX1);
+    return;
+  }
+  if ((NewY2-NewY1) <= 0)
+  {
+    printf("Invalid new height: %d <= 0\n", NewY2-NewY1);
+    return;
+  }
+  IplImage* TempImg = cvCreateImage(cvSize(NewX2-NewX1, NewY2-NewY1), 8, ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+
+  cvSetImageROI(ME_CAST_TO_IPLIMAGE(cvImg), cvRect(NewX1, NewY1, NewX2-NewX1, NewY2-NewY1));
+  cvCopy(ME_CAST_TO_IPLIMAGE(cvImg), TempImg);
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
+
+
+void MEImage::CopyImageInside(int x, int y, MEImage& source_image)
+{
+  int NewX = x;
+  int NewY = y;
+  int PasteLengthX = source_image.GetWidth();
+  int PasteLengthY = source_image.GetHeight();
+
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels != source_image.GetLayers())
+  {
+    if (source_image.GetLayers() == 1 && ME_CAST_TO_IPLIMAGE(cvImg)->nChannels == 3)
+    {
+      source_image.ConvertGrayscaleToRGB();
+    }
+    if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels == 1 && source_image.GetLayers() == 3)
+    {
+      source_image.ConvertToGrayscale(g_OpenCV);
+    }
+  }
+  if (NewX < 0)
+    NewX = 0;
+  if (NewX > ME_CAST_TO_IPLIMAGE(cvImg)->width)
+    NewX = ME_CAST_TO_IPLIMAGE(cvImg)->width;
+  if (NewY < 0)
+    NewY = 0;
+  if (NewY > ME_CAST_TO_IPLIMAGE(cvImg)->height)
+    NewY = ME_CAST_TO_IPLIMAGE(cvImg)->height;
+  if (NewX+PasteLengthX > ME_CAST_TO_IPLIMAGE(cvImg)->width)
+    PasteLengthX = ME_CAST_TO_IPLIMAGE(cvImg)->width-NewX;
+  if (NewY+PasteLengthY > ME_CAST_TO_IPLIMAGE(cvImg)->height)
+    PasteLengthY = ME_CAST_TO_IPLIMAGE(cvImg)->height-NewY;
+
+  if (PasteLengthX != source_image.GetWidth() ||
+      PasteLengthY != source_image.GetHeight())
+  {
+    source_image.Resize(PasteLengthX, PasteLengthY);
+  }
+  cvSetImageROI(ME_CAST_TO_IPLIMAGE(cvImg), cvRect(NewX, NewY, PasteLengthX, PasteLengthY));
+  cvCopy((IplImage*)source_image.GetIplImage(), ME_CAST_TO_IPLIMAGE(cvImg));
+  cvResetImageROI(ME_CAST_TO_IPLIMAGE(cvImg));
+}
+
+
+void MEImage::Erode(int iterations)
+{
+  IplImage* TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width,
+                                           ME_CAST_TO_IPLIMAGE(cvImg)->height),
+                                    8, ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+
+  cvErode(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, NULL, iterations);
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
+
+
+void MEImage::Dilate(int iterations)
+{
+  IplImage* TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width,
+                                           ME_CAST_TO_IPLIMAGE(cvImg)->height),
+                                    8, ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+
+  cvDilate(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, NULL, iterations);
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
+
+
+void MEImage::Smooth()
+{
+  SmoothAdvanced(s_Median, 3);
+}
+
+
+void MEImage::SmoothAdvanced(SmoothType filtermode, int filtersize)
+{
+  IplImage* TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                                    ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+
+  switch (filtermode)
+  {
+    case s_Blur:
+      cvSmooth(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_BLUR, filtersize, filtersize, 0);
+      break;
+    case s_Median:
+      cvSmooth(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_MEDIAN, filtersize, 0, 0);
+      break;
+    case s_Gaussian:
+      cvSmooth(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_GAUSSIAN, filtersize, filtersize, 0);
+      break;
+    default:
+      cvSmooth(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_MEDIAN, filtersize, 0, 0);
+      break;
+  }
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
+
+
+void MEImage::Canny()
+{
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels > 1)
+  {
+    ConvertToGrayscale(g_OpenCV);
+  }
+
+  IplImage* TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                                    ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+  cvCanny(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, 800, 1100, 5);
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
+
+
+void MEImage::Laplace()
+{
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels != 1)
+  {
+    ConvertToGrayscale(g_OpenCV);
+  }
+  IplImage* TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width,
+                                           ME_CAST_TO_IPLIMAGE(cvImg)->height),
+                                    IPL_DEPTH_16S, 1);
+  cvLaplace(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, 3);
+  cvConvertScale(TempImg, ME_CAST_TO_IPLIMAGE(cvImg), 1, 0);
+  ME_RELEASE_IPLIMAGE(cvImg);
+}
+
+
+void MEImage::Quantize(int levels)
+{
+  if (levels <= 0)
+  {
+    printf("Level number is too small (%d <= 0)\n", levels);
+    return;
+  }
+  if (levels > 256)
+  {
+    printf("Level number is too large (%d > 256)\n", levels);
+    return;
+  }
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+
+  for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep*ME_CAST_TO_IPLIMAGE(cvImg)->height-1; i >= 0; --i)
+  {
+    ImageData[i] = ImageData[i] / (256 / levels)*(256 / levels);
+  }
+}
+
+
+void MEImage::Threshold(int threshold_limit)
+{
+  if (threshold_limit < 0)
+  {
+    printf("Threshold number is too small (%d <= 0)\n", threshold_limit);
+    return;
+  }
+  if (threshold_limit > 255)
+  {
+    printf("Threshold number is too large (%d > 255)\n", threshold_limit);
+    return;
+  }
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+
+  for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep*ME_CAST_TO_IPLIMAGE(cvImg)->height-1; i >= 0; --i)
+  {
+    if (ImageData[i] < threshold_limit)
+    {
+      ImageData[i] = 0;
+    }
+  }
+}
+
+
+void MEImage::AdaptiveThreshold()
+{
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels != 1)
+  {
+    ConvertToGrayscale(g_OpenCV);
+  }
+  IplImage* TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                                    ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+  cvAdaptiveThreshold(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, 25,
+                      CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 7, -7);
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
+
+
+void MEImage::ThresholdByMask(MEImage& mask_image)
+{
+  if (mask_image.GetWidth() != ME_CAST_TO_IPLIMAGE(cvImg)->width ||
+      mask_image.GetHeight() != ME_CAST_TO_IPLIMAGE(cvImg)->height)
+  {
+    printf("Image properties are different\n");
+    return;
+  }
+  if (mask_image.GetLayers() != 3 && ME_CAST_TO_IPLIMAGE(cvImg)->nChannels == 3)
+  {
+    mask_image.ConvertGrayscaleToRGB();
+  }
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  unsigned char* MaskImageData = mask_image.GetImageData();
+
+  for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep*ME_CAST_TO_IPLIMAGE(cvImg)->height-1; i >= 0; --i)
+  {
+    if (MaskImageData[i] == 0)
+    {
+      ImageData[i] = 0;
+    }
+  }
+}
+
+
+void MEImage::ColorSpace(ColorSpaceConvertType mode)
+{
+  IplImage* TempImg = NULL;
+  unsigned char* ImageData = NULL;
+  int WidthStep = 0;
+  int RowStart = 0;
+
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels == 1)
+  {
+    printf("No sense to convert: source image is greyscale\n");
+    ConvertGrayscaleToRGB();
+  }
+  switch (mode)
+  {
+    case csc_RGBtoXYZCIED65:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width,
+                                     ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                              ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_RGB2XYZ);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case csc_XYZCIED65toRGB:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width,
+                                     ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                              ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_XYZ2RGB);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case csc_RGBtoHSV:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width,
+                                     ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                              ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_RGB2HSV);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case csc_HSVtoRGB:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width,
+                                     ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                              ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_HSV2RGB);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case csc_RGBtoHLS:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                              ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_RGB2HLS);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case csc_HLStoRGB:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                              ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_HLS2RGB);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case csc_RGBtoCIELab:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                              ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_RGB2Lab);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case csc_CIELabtoRGB:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                              ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_Lab2RGB);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case csc_RGBtoCIELuv:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                              ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_RGB2Luv);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case csc_CIELuvtoRGB:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                              ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_Luv2RGB);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case csc_RGBtoYUV:
+      ComputeColorSpace(csc_RGBtoYUV);
+      break;
+
+    case csc_RGBtoYIQ:
+      ComputeColorSpace(csc_RGBtoYIQ);
+      break;
+
+    case csc_RGBtorgI:
+      ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+      WidthStep = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep;
+      RowStart = 0;
+      for (int y = ME_CAST_TO_IPLIMAGE(cvImg)->height-1; y >= 0; --y)
+      {
+        for (int x = (ME_CAST_TO_IPLIMAGE(cvImg)->width-1)*3; x >= 0; x -= 3)
+        {
+          int r = 0;
+          int g = 0;
+          int I = 0;
+
+          I = (int)ImageData[RowStart+x]+(int)ImageData[RowStart+x+1]+(int)ImageData[RowStart+x+2];
+          r = (int)((float)ImageData[RowStart+x] / I*255);
+          g = (int)((float)ImageData[RowStart+x+1] / I*255);
+          ImageData[RowStart+x] = (unsigned char)r;
+          ImageData[RowStart+x+1] = (unsigned char)g;
+          ImageData[RowStart+x+2] = (unsigned char)(I / 3);
+        }
+        RowStart += WidthStep;
+      }
+      break;
+
+    default:
+      break;
+  }
+}
+
+
+void MEImage::ConvertToGrayscale(GrayscaleType grayscale_mode)
+{
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels == 1)
+  {
+    printf("Image is already grayscale\n");
+    return;
+  }
+  IplImage* TempImg = NULL;
+  unsigned char* ImgData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  unsigned char* ImageData = NULL;
+
+  switch (grayscale_mode)
+  {
+    case g_Average:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8, 1);
+      ImageData = (unsigned char*)TempImg->imageData;
+
+      for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep*ME_CAST_TO_IPLIMAGE(cvImg)->height-3; i >= 0; i -= 3)
+      {
+        ImageData[i / 3] = (ImgData[i]+ImgData[i+1]+ImgData[i+2]) / 3;
+      }
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    case g_OpenCV:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8, 1);
+      cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_RGB2GRAY);
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    default:
+      break;
+  }
+}
+
+
+void MEImage::ConvertGrayscaleToRGB()
+{
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels != 1)
+  {
+    return;
+  }
+  IplImage* TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8, 3);
+
+  cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), TempImg, CV_GRAY2RGB);
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
+
+
+void MEImage::ConvertBGRToRGB()
+{
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels != 3)
+  {
+    return;
+  }
+  cvCvtColor(ME_CAST_TO_IPLIMAGE(cvImg), ME_CAST_TO_IPLIMAGE(cvImg), CV_RGB2BGR);
+}
+
+
+void MEImage::LBP(LBPType mode)
+{
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels > 1)
+  {
+    ConvertToGrayscale(g_OpenCV);
+  }
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  IplImage* TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8, 1);
+  unsigned char* TempImgData = (unsigned char*)TempImg->imageData;
+  int WidthStep = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep;
+  int WidthStep_2 = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep*2;
+
+  cvSetZero(TempImg);
+  switch (mode)
+  {
+    case lbp_Normal:
+      for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep*(ME_CAST_TO_IPLIMAGE(cvImg)->height-2)-1; i >= ME_CAST_TO_IPLIMAGE(cvImg)->widthStep+1; --i)
+      {
+        TempImgData[i] =
+            (ImageData[i] <= ImageData[i-ME_CAST_TO_IPLIMAGE(cvImg)->widthStep-1])+
+            ((ImageData[i] <= ImageData[i-ME_CAST_TO_IPLIMAGE(cvImg)->widthStep])*2)+
+            ((ImageData[i] <= ImageData[i-ME_CAST_TO_IPLIMAGE(cvImg)->widthStep+1])*4)+
+            ((ImageData[i] <= ImageData[i-1])*8)+
+            ((ImageData[i] <= ImageData[i+1])*16)+
+            ((ImageData[i] <= ImageData[i+ME_CAST_TO_IPLIMAGE(cvImg)->widthStep-1])*32)+
+            ((ImageData[i] <= ImageData[i+ME_CAST_TO_IPLIMAGE(cvImg)->widthStep])*64)+
+            ((ImageData[i] <= ImageData[i+ME_CAST_TO_IPLIMAGE(cvImg)->widthStep+1])*128);
+      }
+      break;
+
+    case lbp_Special:
+      for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep*(ME_CAST_TO_IPLIMAGE(cvImg)->height-3)-2; i >= ME_CAST_TO_IPLIMAGE(cvImg)->widthStep*2+2; --i)
+      {
+        int CenterPixel = (ImageData[i+1]+ImageData[i-1]+
+                           ImageData[i-WidthStep]+ImageData[i+WidthStep]) / 4;
+        TempImgData[i] = ((CenterPixel <= (ImageData[i-(WidthStep_2)-2]+
+                           ImageData[i-(WidthStep_2)-1]+
+                           ImageData[i-WidthStep-2]+
+                           ImageData[i-WidthStep-1]) / 4))+
+                         ((CenterPixel <= (ImageData[i-WidthStep]+
+                                            ImageData[i-(WidthStep_2)]) / 2)*2)+
+                         ((CenterPixel <= ((ImageData[i-(WidthStep_2)+2]+
+                           ImageData[i-(WidthStep_2)+1]+
+                           ImageData[i-WidthStep+2]+
+                           ImageData[i-WidthStep+1]) / 4))*4)+
+                         ((CenterPixel <= (ImageData[i-1]+
+                                            ImageData[i-2]) / 2)*8)+
+                         ((CenterPixel <= (ImageData[i+1]+
+                                            ImageData[i+2]) / 2)*16)+
+                         ((CenterPixel <= ((ImageData[i+(WidthStep_2)-2]+
+                           ImageData[i+(WidthStep_2)-1]+
+                           ImageData[i+WidthStep-2]+
+                           ImageData[i+WidthStep-1]) / 4))*32)+
+                         ((CenterPixel <= (ImageData[i+WidthStep]+
+                                            ImageData[i-WidthStep_2]) / 2)*64)+
+                         ((CenterPixel <= ((ImageData[i+(WidthStep_2)+2]+
+                           ImageData[i+(WidthStep_2)+1]+
+                           ImageData[i+WidthStep+2]+
+                           ImageData[i+WidthStep+1]) / 4))*128);
+      }
+      break;
+
+    default:
+      break;
+  }
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
+
+
+void MEImage::Binarize(int threshold)
+{
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+
+  for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->height*ME_CAST_TO_IPLIMAGE(cvImg)->widthStep-1; i >= 0; --i)
+  {
+    if (ImageData[i] >= threshold)
+    {
+      ImageData[i] = 255;
+    } else {
+      ImageData[i] = 0;
+    }
+  }
+}
+
+
+void MEImage::Subtract(MEImage& source, SubtractModeType mode)
+{
+  if (source.GetWidth() != ME_CAST_TO_IPLIMAGE(cvImg)->width ||
+      source.GetHeight() != ME_CAST_TO_IPLIMAGE(cvImg)->height ||
+      source.GetLayers() != ME_CAST_TO_IPLIMAGE(cvImg)->nChannels)
+  {
+    printf("Image properties are different.\n");
+    return;
+  }
+  unsigned char* ImageData = NULL;
+  unsigned char* DstData = NULL;
+  int WidthStep = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep;
+  int RowStart = 0;
+
+  switch (mode)
+  {
+    case sub_Normal:
+      ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+      DstData = source.GetImageData();
+      RowStart = 0;
+
+      for (int y = ME_CAST_TO_IPLIMAGE(cvImg)->height-1; y >= 0; --y)
+      {
+        for (int x = ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels-1; x >= 0; --x)
+        {
+          ImageData[RowStart+x] =
+            ImageData[RowStart+x]-DstData[RowStart+x] < 0 ? 0 :
+            ImageData[RowStart+x]-DstData[RowStart+x];
+        }
+        RowStart += WidthStep;
+      }
+      break;
+
+    case sub_Absolut:
+      ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+      DstData = source.GetImageData();
+      RowStart = 0;
+
+      for (int y = ME_CAST_TO_IPLIMAGE(cvImg)->height-1; y >= 0; --y)
+      {
+        for (int x = ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels-1; x >= 0; --x)
+        {
+          ImageData[RowStart+x] = ImageData[RowStart+x]-
+              DstData[RowStart+x] < 0 ? -ImageData[RowStart+x]+
+              DstData[RowStart+x] : ImageData[RowStart+x]-DstData[RowStart+x];
+        }
+        RowStart += WidthStep;
+      }
+      break;
+
+    default:
+      break;
+  }
+}
+
+
+void MEImage::Multiple(MEImage& source, MultiplicationType mode)
+{
+  if (source.GetWidth() != ME_CAST_TO_IPLIMAGE(cvImg)->width ||
+      source.GetHeight() != ME_CAST_TO_IPLIMAGE(cvImg)->height ||
+      source.GetLayers() != ME_CAST_TO_IPLIMAGE(cvImg)->nChannels)
+  {
+    printf("Image properties are different.\n");
+    return;
+  }
+  float Result = 0.0;
+  IplImage* TempImg = NULL;
+  unsigned char* ImageData = NULL;
+  unsigned char* ImageData2 = NULL;
+  unsigned char* ImageData3 = NULL;
+  unsigned char* DstData = NULL;
+
+  switch (mode)
+  {
+    case m_Normal:
+      Result = 0;
+      ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+      DstData = source.GetImageData();
+
+      for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->height*ME_CAST_TO_IPLIMAGE(cvImg)->widthStep-1; i >= 0; --i)
+      {
+        if ((ImageData[i] >= 128) && (DstData[i] >= 128))
+        {
+          Result = (float)ImageData[i]/128*(float)DstData[i]/128;
+
+          if (Result >= 1)
+          {
+            ImageData[i] = 255;
+          } else {
+            ImageData[i] = 0;
+          }
+        } else {
+          ImageData[i] = 0;
+        }
+      }
+      break;
+
+    case m_Neighbourhood:
+      TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                                     ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+      ImageData2 = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+      DstData = source.GetImageData();
+      ImageData3 = (unsigned char*)TempImg->imageData;
+
+      for (int y = ME_CAST_TO_IPLIMAGE(cvImg)->height-1; y >= 0; --y)
+        for (int x = ME_CAST_TO_IPLIMAGE(cvImg)->width-1; x >= 0; --x)
+          for (int l = ME_CAST_TO_IPLIMAGE(cvImg)->nChannels-1; l >= 0; --l)
+      {
+        if (((DstData[y*ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+
+                      x*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+l] == 255) ||
+            (ImageData2[y*ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+
+                        x*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+l] == 255)) &&
+            (NeighbourhoodCounter(x-2, y-2, n_5x5) > 3) &&
+            (source.NeighbourhoodCounter(x-2, y-2, n_5x5) > 3))
+        {
+          ImageData3[y*ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+
+                     x*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+l] = 255;
+        }
+      }
+      ME_RELEASE_IPLIMAGE(cvImg);
+      cvImg = TempImg;
+      break;
+
+    default:
+      break;
+  }
+}
+
+
+void MEImage::Addition(MEImage& source, AdditionType mode)
+{
+  if (source.GetWidth() != ME_CAST_TO_IPLIMAGE(cvImg)->width ||
+      source.GetHeight() != ME_CAST_TO_IPLIMAGE(cvImg)->height ||
+      source.GetLayers() != ME_CAST_TO_IPLIMAGE(cvImg)->nChannels)
+  {
+    printf("Image properties are different.\n");
+    return;
+  }
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  unsigned char* DstData = source.GetImageData();
+
+  switch (mode)
+  {
+    case a_Average:
+      for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->height*ME_CAST_TO_IPLIMAGE(cvImg)->widthStep-1; i >= 0; --i)
+      {
+        ImageData[i] = (ImageData[i]+DstData[i]) / 2;
+      }
+      break;
+
+    case a_Union:
+      for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->height*ME_CAST_TO_IPLIMAGE(cvImg)->widthStep-1; i >= 0; --i)
+      {
+        if (DstData[i] > ImageData[i])
+        {
+          ImageData[i] = DstData[i];
+        }
+      }
+      break;
+
+    default:
+      break;
+  }
+}
+
+
+void MEImage::EliminateSinglePixels()
+{
+  IplImage* TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                                    ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  unsigned char* DstData = (unsigned char*)TempImg->imageData;
+  int sum = 0;
+  int xy = 0;
+  int ywidth = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep;
+
+  for (int y = ME_CAST_TO_IPLIMAGE(cvImg)->height-1; y >= 0; --y)
+    for (int x = ME_CAST_TO_IPLIMAGE(cvImg)->width-1; x >= 0; --x)
+  {
+    xy = y*ywidth+x*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels;
+
+    for (int l = ME_CAST_TO_IPLIMAGE(cvImg)->nChannels-1; l >= 0; --l)
+    {
+      if ((ImageData[xy+l] > 0) && (x > 0) && (y > 0) && (x < ME_CAST_TO_IPLIMAGE(cvImg)->width-1) && (y < ME_CAST_TO_IPLIMAGE(cvImg)->height-1))
+      {
+        sum = (ImageData[xy-ywidth-ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+l] > 0)+
+              (ImageData[xy-ywidth+l] > 0)+
+              (ImageData[xy-ywidth+ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+l] > 0)+
+              (ImageData[xy-ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+l] > 0)+
+              (ImageData[xy+ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+l] > 0)+
+              (ImageData[xy+ywidth-ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+l] > 0)+
+              (ImageData[xy+ywidth+l] > 0)+
+              (ImageData[xy+ywidth+ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+l] > 0);
+
+        if (sum > 3)
+        {
+          DstData[xy+l] = 255;
+        } else {
+          DstData[xy+l] = 0;
+        }
+      } else {
+        DstData[xy+l] = 0;
+      }
+    }
+  }
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
+
+
+float MEImage::DifferenceAreas(MEImage& reference, int difference) const
+{
+  if (reference.GetWidth() != GetWidth() ||
+      reference.GetHeight() != GetHeight() ||
+      reference.GetLayers() != GetLayers())
+  {
+    printf("Image dimensions or channels are different\n");
+    return -1.0;
+  }
+  float PixelDiff = 0.0;
+  int Pixels = 0;
+  unsigned char* OrigImgData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  unsigned char* RefImgData = reference.GetImageData();
+  int WidthStep = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep;
+  int RowStart = 0;
+
+  for (int y = ME_CAST_TO_IPLIMAGE(cvImg)->height-1; y >= 0; --y)
+  {
+    for (int x = ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels-1; x >= 0; --x)
+    {
+      if (abs(OrigImgData[RowStart+x]-RefImgData[RowStart+x]) > difference)
+        Pixels++;
+    }
+    RowStart += WidthStep;
+  }
+  PixelDiff = (float)Pixels / (ME_CAST_TO_IPLIMAGE(cvImg)->height*ME_CAST_TO_IPLIMAGE(cvImg)->widthStep)*100;
+  return PixelDiff;
+}
+
+
+int MEImage::AverageDifference(MEImage& reference) const
+{
+  if (reference.GetWidth() != GetWidth() ||
+      reference.GetHeight() != GetHeight() ||
+      reference.GetLayers() != GetLayers())
+  {
+    printf("Image dimensions or channels are different\n");
+    return -1;
+  }
+  int Difference = 0;
+  unsigned char* OrigImgData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  unsigned char* RefImgData = reference.GetImageData();
+  int WidthStep = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep;
+  int RowStart = 0;
+
+  for (int y = ME_CAST_TO_IPLIMAGE(cvImg)->height-1; y >= 0; --y)
+  {
+    for (int x = ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels-1; x >= 0; --x)
+    {
+      Difference += abs(OrigImgData[RowStart+x]-RefImgData[RowStart+x]);
+    }
+    RowStart += WidthStep;
+  }
+  Difference = Difference / (ME_CAST_TO_IPLIMAGE(cvImg)->height*ME_CAST_TO_IPLIMAGE(cvImg)->widthStep);
+  return Difference;
+}
+
+
+void MEImage::Minimum(MEImage& image)
+{
+  if (image.GetWidth() != ME_CAST_TO_IPLIMAGE(cvImg)->width ||
+      image.GetHeight() != ME_CAST_TO_IPLIMAGE(cvImg)->height ||
+      image.GetLayers() != ME_CAST_TO_IPLIMAGE(cvImg)->nChannels)
+  {
+    printf("Image properties are different\n");
+    return;
+  }
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  unsigned char* SecData = image.GetImageData();
+  int WidthStep = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep;
+  int RowStart = 0;
+
+  for (int y = ME_CAST_TO_IPLIMAGE(cvImg)->height-1; y >= 0; --y)
+  {
+    for (int x = ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels-1; x >= 0; --x)
+    {
+      ImageData[RowStart+x] = ImageData[RowStart+x] > SecData[RowStart+x] ?
+                              SecData[RowStart+x] : ImageData[RowStart+x];
+    }
+    RowStart += WidthStep;
+  }
+}
+
+
+float MEImage::AverageBrightnessLevel() const
+{
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  int WidthStep = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep;
+  int RowStart = 0;
+  int BrightnessLevel = 0;
+
+  for (int y = ME_CAST_TO_IPLIMAGE(cvImg)->height-1; y >= 0; --y)
+  {
+    for (int x = ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels-1; x >= 0; --x)
+    {
+      BrightnessLevel += (int)ImageData[RowStart+x];
+    }
+    RowStart += WidthStep;
+  }
+  return BrightnessLevel / (GetWidth()*GetHeight()*GetLayers());
+}
+
+
+bool MEImage::Equal(const MEImage& reference) const
+{
+  return Equal(reference, 1);
+}
+
+
+bool MEImage::Equal(const MEImage& reference, int maxabsdiff) const
+{
+  bool Ret = true;
+
+  if (reference.GetWidth() != ME_CAST_TO_IPLIMAGE(cvImg)->width ||
+      reference.GetHeight() != ME_CAST_TO_IPLIMAGE(cvImg)->height ||
+      reference.GetLayers() != ME_CAST_TO_IPLIMAGE(cvImg)->nChannels)
+  {
+    printf("Image properties are different\n");
+    return false;
+  }
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  unsigned char* RefData = reference.GetImageData();
+  int WidthStep = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep;
+  int RowStart = 0;
+
+  for (int y = ME_CAST_TO_IPLIMAGE(cvImg)->height-1; y >= 0; --y)
+  {
+    for (int x = ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels-1; x >= 0; --x)
+    {
+      if (abs(ImageData[RowStart+x]-RefData[RowStart+x]) >= maxabsdiff)
+      {
+        Ret = false;
+        return Ret;
+      }
+    }
+    RowStart += WidthStep;
+  }
+  return Ret;
+}
+
+
+unsigned char MEImage::GrayscalePixel(int x, int y) const
+{
+  int NewX = x;
+  int NewY = y;
+
+  NewX = NewX < 0 ? 0 : NewX;
+  NewX = NewX > ME_CAST_TO_IPLIMAGE(cvImg)->width-1 ? ME_CAST_TO_IPLIMAGE(cvImg)->width-1 : NewX;
+  NewY = NewY < 0 ? 0 : NewY;
+  NewY = NewY > ME_CAST_TO_IPLIMAGE(cvImg)->height-1 ? ME_CAST_TO_IPLIMAGE(cvImg)->height-1 : NewY;
+
+  float Sum = 0;
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+
+  for (int l = 0; l < ME_CAST_TO_IPLIMAGE(cvImg)->nChannels; l++)
+  {
+    Sum = Sum + (int)ImageData[NewY*ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+NewX*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+l];
+  }
+  Sum = Sum / ME_CAST_TO_IPLIMAGE(cvImg)->nChannels;
+  return (unsigned char)(Sum);
+}
+
+
+int MEImage::NeighbourhoodCounter(int startx, int starty,
+                                  NeighbourhoodType neighbourhood) const
+{
+  int IterX = 0;
+  int IterY = 0;
+  int Counter = 0;
+
+  // Determine the iteration numbers
+  switch (neighbourhood)
+  {
+    case n_2x2:
+      IterX = 2;
+      IterY = 2;
+      break;
+
+    case n_3x3:
+      IterX = 3;
+      IterY = 3;
+      break;
+
+    case n_3x2:
+      IterX = 2;
+      IterY = 3;
+      break;
+
+    case n_5x5:
+      IterX = 5;
+      IterY = 5;
+      break;
+
+    case n_7x7:
+      IterX = 7;
+      IterY = 7;
+      break;
+
+    default:
+      IterX = 3;
+      IterY = 3;
+      break;
+  }
+
+  int NewStartX = startx ;
+  int NewStartY = starty;
+
+  NewStartX = startx < 0 ? 0 : startx;
+  NewStartX = startx >= ME_CAST_TO_IPLIMAGE(cvImg)->width-IterX ? ME_CAST_TO_IPLIMAGE(cvImg)->width-IterX-1 : startx;
+  NewStartY = starty < 0 ? 0 : starty;
+  NewStartY = starty >= ME_CAST_TO_IPLIMAGE(cvImg)->height-IterY ? ME_CAST_TO_IPLIMAGE(cvImg)->height-IterY-1 : starty;
+
+  int Value = 0;
+  unsigned char* ImageData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+
+  for (int x = NewStartX; x < NewStartX+IterX; x++)
+    for (int y = NewStartY; y < NewStartY+IterY; y++)
+  {
+    Value = ((int)ImageData[y*ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+x*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels]+
+             (int)ImageData[y*ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+x*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+1]+
+             (int)ImageData[y*ME_CAST_TO_IPLIMAGE(cvImg)->width*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+x*ME_CAST_TO_IPLIMAGE(cvImg)->nChannels+2]) / 3;
+
+    if (Value == 255)
+    {
+      Counter++;
+    }
+  }
+  return Counter;
+}
+
+
+void MEImage::GradientVector(bool smooth, int x, int y, int mask_size, int& result_x, int& result_y)
+{
+  int Results[8];
+  int DiagonalMaskSize = (int)((float)mask_size / sqrt(2));
+
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels > 1)
+  {
+    ConvertToGrayscale(g_OpenCV);
+  }
+  if (smooth)
+  {
+    SmoothAdvanced(s_Gaussian, mask_size*3-(mask_size*3-1) % 2);
+  }
+
+  Results[0] = (int)GrayscalePixel(x,y)-(int)GrayscalePixel(x,y-mask_size);
+  Results[1] = (int)GrayscalePixel(x,y)-(int)GrayscalePixel(x+DiagonalMaskSize,y-DiagonalMaskSize);
+  Results[2] = (int)GrayscalePixel(x,y)-(int)GrayscalePixel(x+mask_size,y);
+  Results[3] = (int)GrayscalePixel(x,y)-(int)GrayscalePixel(x+DiagonalMaskSize,y+DiagonalMaskSize);
+  Results[4] = (int)GrayscalePixel(x,y)-(int)GrayscalePixel(x,y+mask_size);
+  Results[5] = (int)GrayscalePixel(x,y)-(int)GrayscalePixel(x-DiagonalMaskSize,y+DiagonalMaskSize);
+  Results[6] = (int)GrayscalePixel(x,y)-(int)GrayscalePixel(x-mask_size,y);
+  Results[7] = (int)GrayscalePixel(x,y)-(int)GrayscalePixel(x+DiagonalMaskSize,y-DiagonalMaskSize);
+
+  result_x = (DiagonalMaskSize*Results[1]+mask_size*Results[2]+
+             DiagonalMaskSize*Results[3]-DiagonalMaskSize*Results[5]-
+             mask_size*Results[6]+DiagonalMaskSize*Results[7]) / 256;
+  result_y = (-mask_size*Results[0]-DiagonalMaskSize*Results[1]+
+             DiagonalMaskSize*Results[3]+mask_size*Results[4]+
+             DiagonalMaskSize*Results[5]-DiagonalMaskSize*Results[7]) / 256;
+}
+
+
+void MEImage::GradientVisualize(int vector_x, int vector_y)
+{
+  if (vector_x <= 0)
+  {
+    printf("vectorx: wrong parameter (%d <= 0)\n", vector_x);
+    return;
+  }
+  if (vector_y <= 0)
+  {
+    printf("vectory: wrong parameter (%d <= 0)\n", vector_y);
+    return;
+  }
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels > 1)
+  {
+    ConvertToGrayscale(g_OpenCV);
+  }
+
+  int masksize = (ME_CAST_TO_IPLIMAGE(cvImg)->width < ME_CAST_TO_IPLIMAGE(cvImg)->height) ?
+                 ME_CAST_TO_IPLIMAGE(cvImg)->width / (vector_x+1) :
+                 ME_CAST_TO_IPLIMAGE(cvImg)->height / (vector_y+1);
+
+  SmoothAdvanced(s_Gaussian, masksize*2-1);
+  for (int i = 1; i < vector_x; i++)
+    for (int i1 = 1; i1 < vector_y; i1++)
+  {
+    int Resultx = 0, Resulty = 0;
+    int x = (int)(((float)ME_CAST_TO_IPLIMAGE(cvImg)->width*i / (vector_x)));
+    int y = (int)(((float)ME_CAST_TO_IPLIMAGE(cvImg)->height*i1 / (vector_y)));
+
+    GradientVector(false, x, y, (int)(0.707*masksize), Resultx, Resulty);
+
+    CvPoint Point1;
+    CvPoint Point2;
+
+    Point1.x = x-Resultx / 2;
+    Point1.y = y-Resulty / 2;
+    Point2.x = x+Resultx / 2;
+    Point2.y = y+Resulty / 2;
+    cvLine(ME_CAST_TO_IPLIMAGE(cvImg), Point1, Point2, CV_RGB(255, 255, 255), 1, 8);
+  }
+}
+
+
+bool MEImage::_Copy(const MEImage& other_image)
+{
+  if (&other_image == this)
+    return true;
+
+  if (ME_CAST_TO_IPLIMAGE(cvImg))
+  {
+    ME_RELEASE_IPLIMAGE(cvImg);
+  }
+  cvImg = cvCloneImage((IplImage*)other_image.GetIplImage());
+  return true;
+}
+
+
+void MEImage::_Init(int width, int height, int layers)
+{
+  if (width < 1)
+  {
+    printf("Given width for the new image is too small (%d <= 0)\n", width);
+    return;
+  }
+  if (height < 1)
+  {
+    printf("Given height for the new image is (%d <= 0)\n", height);
+    return;
+  }
+  if ((layers != 1) && (layers != 3))
+  {
+    printf("Only one or three (%d != 1 or 3) layer allowed\n", layers);
+    return;
+  }
+
+  if (ME_CAST_TO_IPLIMAGE(cvImg))
+  {
+    ME_RELEASE_IPLIMAGE(cvImg);
+  }
+  cvImg = cvCreateImage(cvSize(width, height), 8, layers);
+}
+
+
+void MEImage::ComputeColorSpace(ColorSpaceConvertType mode)
+{
+  if (ME_CAST_TO_IPLIMAGE(cvImg)->nChannels != 3)
+  {
+    printf("Image has to have three color channels (%d != 3)\n", ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+    return;
+  }
+  IplImage* TempImg = cvCreateImage(cvSize(ME_CAST_TO_IPLIMAGE(cvImg)->width, ME_CAST_TO_IPLIMAGE(cvImg)->height), 8,
+                                    ME_CAST_TO_IPLIMAGE(cvImg)->nChannels);
+
+  for (int i = 0; i < 3; i++)
+    for (int i1 = 0; i1 < 3; i1++)
+  {
+    if (mode == csc_RGBtoYUV)
+      TransformMatrix[i][i1] = RGBtoYUVMatrix[i][i1];
+    if (mode == csc_RGBtoYIQ)
+      TransformMatrix[i][i1] = RGBtoYIQMatrix[i][i1];
+  }
+  float x = 0.0;
+  float y = 0.0;
+  float z = 0.0;
+  float xmin = 0.0;
+  float xmax = 0.0;
+  float ymin = 0.0;
+  float ymax = 0.0;
+  float zmin = 0.0;
+  float zmax = 0.0;
+
+  if (mode == csc_RGBtoYUV)
+  {
+    xmin = 0.0;
+    xmax = 255.0;
+    ymin = -111.18;
+    ymax = 111.18;
+    zmin = -156.825;
+    zmax = 156.825;
+  }
+  if (mode == csc_RGBtoYIQ)
+  {
+    xmin = 0.0;
+    xmax = 255.0;
+    ymin = -151.98;
+    ymax = 151.98;
+    zmin = -133.365;
+    zmax = 133.365;
+  }
+  unsigned char* SrcData = (unsigned char*)ME_CAST_TO_IPLIMAGE(cvImg)->imageData;
+  unsigned char* DstData = (unsigned char*)TempImg->imageData;
+
+  for (int i = ME_CAST_TO_IPLIMAGE(cvImg)->widthStep*ME_CAST_TO_IPLIMAGE(cvImg)->height-1; i >= 0; i-=3)
+  {
+    x = (float)SrcData[i]*TransformMatrix[0][0]+
+        (float)SrcData[i+1]*TransformMatrix[0][1]+
+        (float)SrcData[i+2]*TransformMatrix[0][2];
+    y = (float)SrcData[i]*TransformMatrix[1][0]+
+        (float)SrcData[i+1]*TransformMatrix[1][1]+
+        (float)SrcData[i+2]*TransformMatrix[1][2];
+    z = (float)SrcData[i]*TransformMatrix[2][0]+
+        (float)SrcData[i+1]*TransformMatrix[2][1]+
+        (float)SrcData[i+2]*TransformMatrix[2][2];
+
+    x = xmax-xmin != 0.0 ? 255.0 : (x-xmin) / (xmax-xmin)*255.0;
+    y = ymax-ymin != 0.0 ? 255.0 : (y-xmin) / (ymax-ymin)*255.0;
+    z = zmax-zmin != 0.0 ? 255.0 : (z-xmin) / (zmax-zmin)*255.0;
+
+    DstData[i] = (unsigned char)MEBound(0, (int)x, 255);
+    DstData[i+1] = (unsigned char)MEBound(0, (int)y, 255);
+    DstData[i+2] = (unsigned char)MEBound(0, (int)z, 255);
+  }
+  ME_RELEASE_IPLIMAGE(cvImg);
+  cvImg = TempImg;
+}
diff --git a/package_bgs/ck/MEImage.hpp b/package_bgs/ck/MEImage.hpp
new file mode 100644
index 0000000..41ada3b
--- /dev/null
+++ b/package_bgs/ck/MEImage.hpp
@@ -0,0 +1,999 @@
+/*
+ *  This file is part of the AiBO+ project
+ *
+ *  Copyright (C) 2005-2013 Csaba Kertész (csaba.kertesz@gmail.com)
+ *
+ *  AiBO+ is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  AiBO+ is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef MEImage_H
+#define MEImage_H
+
+/**
+ *  @addtogroup mindeye
+ *  @{
+ */
+
+/**
+ * MEImage
+ * @brief Basic image functions
+ */
+class MEImage
+{
+public:
+  /// Types of LBP operator
+  typedef enum {
+    lbp_Min = 0,          /*!< Minimum value */
+    lbp_Normal = lbp_Min, /*!< Normal LBP pattern */
+    lbp_Special,          /*!< Special LBP pattern */
+    lbp_Max = lbp_Special /*!< Maximum value */
+  } LBPType;
+
+  /// Types of image subtraction
+  typedef enum {
+    sub_Min = 0,          /*!< Minimum value */
+    sub_Normal = sub_Min, /*!< Normal */
+    sub_Absolut,          /*!< Absolut */
+    sub_Max = sub_Absolut /*!< Maximum value */
+  } SubtractModeType;
+
+  /// Types of image addition
+  typedef enum {
+    a_Min = 0,         /*!< Minimum value */
+    a_Average = a_Min, /*!< Average */
+    a_Union,           /*!< Union */
+    a_Max = a_Union    /*!< Maximum value */
+  } AdditionType;
+
+  /// Types of image multiplication
+  typedef enum {
+    m_Min = 0,              /*!< Minimum value */
+    m_Normal = m_Min,       /*!< Normal */
+    m_Neighbourhood,        /*!< Neighbourhood */
+    m_Max = m_Neighbourhood /*!< Maximum value */
+  } MultiplicationType;
+
+  /// Types of grayscale conversation
+  typedef enum {
+    g_Min = 0,         /*!< Minimum value */
+    g_Average = g_Min, /*!< Average */
+    g_OpenCV,          /*!< OpenCV */
+    g_Max = g_OpenCV   /*!< Maximum value */
+  } GrayscaleType;
+
+  /// Types of pixel neighbourhoods
+  typedef enum {
+    n_Min = 0,     /*!< Minimum value */
+    n_2x2 = n_Min, /*!< 2x2 */
+    n_3x2,         /*!< 3x2 */
+    n_3x3,         /*!< 3x3 */
+    n_5x5,         /*!< 5x5 */
+    n_7x7,         /*!< 7x7 */
+    n_Max = n_7x7  /*!< Maximum value */
+  } NeighbourhoodType;
+
+  /// Types of special pixels
+  typedef enum {
+    p_Min = 0,         /*!< Minimum value */
+    p_Minimum = p_Min, /*!< Minimum */
+    p_Maximum,         /*!< Maximum */
+    p_Counter,         /*!< Counter */
+    p_Max = p_Counter  /*!< Maximum value */
+  } PixelType;
+
+  /// Types of smooth operation
+  typedef enum {
+    s_Min = 0,       /*!< Minimum value */
+    s_Blur = s_Min,  /*!< Blur */
+    s_Gaussian,      /*!< Gaussian */
+    s_Median,        /*!< Medium */
+    s_Max = s_Median /*!< Maximum value */
+  } SmoothType;
+
+  /// Types of color space conversions
+  typedef enum {
+    csc_Min = 0,                  /*!< Minimum value */
+    csc_RGBtoXYZCIED65 = csc_Min, /*!< RGB to XYZCIED65 */
+    csc_XYZCIED65toRGB,           /*!< XYZCIED65 to RGB */
+    csc_RGBtoHSV,                 /*!< RGB to HSV */
+    csc_HSVtoRGB,                 /*!< HSV to RGB */
+    csc_RGBtoHLS,                 /*!< RGB to HLS */
+    csc_HLStoRGB,                 /*!< HLS to RGB */
+    csc_RGBtoCIELab,              /*!< RGB to CIELab */
+    csc_CIELabtoRGB,              /*!< CIELab to RGB */
+    csc_RGBtoCIELuv,              /*!< RGB to CIELuv */
+    csc_CIELuvtoRGB,              /*!< CIELuv to RGB */
+    csc_RGBtoYUV,                 /*!< RGB to YUV */
+    csc_RGBtoYIQ,                 /*!< RGB to YIQ */
+    csc_RGBtorgI,                 /*!< RGB to rgI */
+    csc_Max = csc_RGBtorgI        /*!< Maximum value */
+  } ColorSpaceConvertType;
+
+  /*!
+   * @brief Class constructor
+   *
+   * @param width Image width
+   * @param height Image height
+   * @param layers Layers
+   *
+   * Class constructor with the possibility to specify the image width,
+   * height and the layers. The default options are 16x16x1.
+   *
+   */
+
+  MEImage(int width = 16, int height = 16, int layers = 1);
+
+  /*!
+   * @brief Class constructor
+   *
+   * @param other Other image
+   *
+   * Class constructor with the possibility to specify the image width,
+   * height and the layers. The default options are 16x16x1.
+   *
+   */
+
+  MEImage(const MEImage& other);
+  /// Destructor of class
+  ~MEImage();
+
+  /*
+  -------------------------------------------------------------------
+                          Basic functions
+  -------------------------------------------------------------------
+  */
+
+  /*!
+   * @brief Clear image
+   *
+   * This function clears image by filling all image data with zero
+   * value.
+   *
+   */
+
+  void Clear();
+
+  /*!
+   * @brief Get an color layer of image
+   *
+   * @param new_layer new image of layer
+   * @param layernumber number of layer which will be copied
+   *
+   * Copy an image layer (R, G or B) to @a new_layer image. @a new_layer has to
+   * have only one color layer (greyscale). If @a new_layer is not
+   * greyscale or it has got different width or height like source image
+   * than function reallocates it with appropriate features before
+   * copying image data.
+   *
+   */
+
+  void GetLayer(MEImage& new_layer, int layernumber) const;
+
+  /*!
+   * @brief Copy a new color layer to image
+   *
+   * @param new_layer image data of new color layer
+   * @param layernumber number of layer where image data will copy
+   *
+   * Copy a new image layer from @a new_layer image. @a new_layer has to
+   * have only one color layer (greyscale). If @a new_layer is not
+   * greyscale or it has got different width or height like source image
+   * than function halts with an error message.
+   *
+   */
+
+  void SetLayer(MEImage& new_layer, int layernumber);
+
+  /*!
+   * @brief Copy image data to a pointer
+   *
+   * @param data pointer where image data will be copied
+   *
+   * Function in order to acquire image data to an external
+   * (unsigned char*) pointer.
+   *
+   */
+
+  void CopyImageData(unsigned char* data);
+
+  /*!
+   * @brief Get a pointer to the internal IplImage
+   *
+   * @return Pointer to the IplImage
+   *
+   * This function returns the internal IplImage of the class. The
+   * image data can not be modified.
+   *
+   */
+
+  void* GetIplImage() const;
+
+  /*!
+   * @brief Set the internal IplImage
+   *
+   * @param image Pointer to the IplImage
+   *
+   * This function sets the internal IplImage of the class.
+   *
+   */
+
+  void SetIplImage(void* image);
+
+  /*!
+   * @brief Handle operator == for MEImage
+   *
+   * @param image image to check
+   *
+   * @return true if the images are equal otherwise false.
+   *
+   * The operator checks the equality of two images.
+   *
+   */
+
+  bool operator==(const MEImage& image);
+
+  /*!
+   * @brief Handle operator != for MEImage
+   *
+   * @param image image to check
+   *
+   * @return true if the images are not equal otherwise false.
+   *
+   * The operator checks the non-equality of two images.
+   *
+   */
+
+  bool operator!=(const MEImage& image);
+
+  /*!
+   * @brief Handle operator = for MEImage
+   *
+   * @param other_image image to copy operation
+   *
+   * @return Reference to the actual instance.
+   *
+   * Copy image data to @a other_image image. Function calls only
+   * _Copy() directly.
+   *
+   */
+
+  MEImage& operator=(const MEImage& other_image);
+
+  /*!
+   * @brief Get the width of the image
+   *
+   * @return Width of the image
+   *
+   * Get the width of the image.
+   *
+   */
+
+  int GetWidth() const;
+
+  /*!
+   * @brief Get the height of the image
+   *
+   * @return Height of the image
+   *
+   * Get the height of the image.
+   */
+
+  int GetHeight() const;
+
+  /*!
+   * @brief Get the length of a pixel row of the image
+   *
+   * @return Length of a pixel row
+   *
+   * Get the row width of the image.
+   *
+   */
+
+  int GetRowWidth() const;
+
+  /*!
+   * @brief Get the number of color layers of the image
+   *
+   * @return Number of color layer of the image
+   *
+   * Get the number of color layer of the image.
+   *
+   */
+
+  int GetLayers() const;
+
+  /*!
+   * @brief Get the number of the image pixel data
+   *
+   * @return Number of the image pixel data
+   *
+   * Get the number of the image pixel data.
+   *
+   */
+
+  int GetPixelDataNumber() const;
+
+  /*!
+   * @brief Get the image data
+   *
+   * @return Pointer to the image data
+   *
+   * Get a pointer to the image.
+   *
+   */
+
+  unsigned char* GetImageData() const;
+
+  /*!
+   * @brief Set the image data
+   *
+   * @param image_data New image data
+   * @param width New image width
+   * @param height New image height
+   * @param channels New image color channels
+   *
+   * Get a pointer to the image.
+   *
+   */
+
+  void SetData(unsigned char* image_data, int width, int height, int channels);
+
+  /*!
+   * @brief Get ratio of image width and height
+   *
+   * @return float ratio of image dimensions
+   *
+   * Function calculates ratio of image width and height with
+   * following equation: ratio = height / width.
+   */
+
+  float GetRatio() const;
+
+  /*
+  -------------------------------------------------------------------
+                       Basic image manipulation
+  -------------------------------------------------------------------
+  */
+
+  /*!
+   * @brief Reallocate image data
+   *
+   * @param width New width of the image
+   * @param height New height of the image
+   *
+   * Image data will be reallocated with new dimensions @a width
+   * and @a height. Number of color channels is not changed.
+   *
+   */
+
+  void Realloc(int width, int height);
+
+  /*!
+   * @brief Reallocate image data
+   *
+   * @param width New width of the image
+   * @param height New height of the image
+   * @param layers Number of color channels of the image
+   *
+   * Image data will be reallocated with new dimensions @a width,
+   * @a height and new number of color channels @a layers.
+   *
+   */
+
+  void Realloc(int width, int height, int layers);
+
+  /*!
+   * @brief Resize image
+   *
+   * @param newwidth new width of image
+   * @param newheight new height of image
+   *
+   * Resize image to @a newwidth width and @a newheight
+   * height dimensions.
+   *
+   */
+
+  void Resize(int newwidth, int newheight);
+
+  /*!
+   * @brief Resize image with new width
+   *
+   * @param newwidth new width of image
+   *
+   * Image is resized with only new width information therefore
+   * fit to original ratio.
+   *
+   */
+
+  void ResizeScaleX(int newwidth);
+
+  /*!
+   * @brief Resize image with new height
+   *
+   * @param newheight new height of image
+   *
+   * Image is resized with only new height information therefore
+   * fit to original ratio.
+   *
+   */
+
+  void ResizeScaleY(int newheight);
+
+  /*!
+   * @brief Reverse image in horizontal direction
+   *
+   * Function makes a mirror transformation on image in horizontal
+   * direction.
+   *
+   */
+
+  void MirrorHorizontal();
+
+  /*!
+   * @brief Reverse image in vertical direction
+   *
+   * Function makes a mirror transformation on image in vertical
+   * direction.
+   *
+   */
+
+  void MirrorVertical();
+
+  /*!
+   * @brief Crop image
+   *
+   * @param x1, y1 coordinates of top-left point of rectangle
+   * @param x2, y2 coordinates of bottom-right point of rectangle
+   *
+   * Crop the image in a smaller piece whose dimensions are
+   * specified as a rectangle. Top-left and bottom-right
+   * coordinates of rectangle are (x1, y1) and (x2, y2) wherefrom
+   * comes that the width of the new image is x2-x1 and height is
+   * y2-y1.
+   *
+   */
+
+  void Crop(int x1, int y1, int x2, int y2);
+
+  /*!
+   * @brief Copy all image data from an other picture
+   *
+   * @param x0 x coordinate to paste the new image data
+   * @param y0 y coordinate to paste the new image data
+   * @param source_image source image
+   *
+   * Function copies all image data from @a source_image
+   * to the given coordinate (x0,y0).
+   *
+   */
+
+  void CopyImageInside(int x0, int y0, MEImage& source_image);
+
+  /*
+  -------------------------------------------------------------------
+                     Image processing functions
+  -------------------------------------------------------------------
+  */
+
+  /*!
+   * @brief Erode function
+   *
+   * @param iterations iterations of erode method
+   *
+   * Method makes an erode filter on an image @a iterations
+   * times with standard 3x3 matrix size.
+   *
+   */
+
+  void Erode(int iterations);
+
+  /*!
+   * @brief Dilate function
+   *
+   * @param iterations iterations of dilate method
+   *
+   * Method makes an dilate filter on an image
+   * @a iterations times with standard 3x3 matrix size.
+   *
+   */
+
+  void Dilate(int iterations);
+
+  /*!
+   * @brief Smooth function
+   *
+   * Method smooths with median filter and standard 3x3 matrix size.
+   * (Median filter works fine and fast.)
+   *
+   */
+
+  void Smooth();
+
+  /*!
+   * @brief Smooth function with defined parameters
+   *
+   * @param filtermode type of smooth method
+   * @param filtersize the size of the convolution matrix
+   *
+   * Method smooths with median filter and the given matrix
+   * size (@a filtersize x @a filtersize). There are more
+   * types of smooth function (@a filtermode):
+   *
+   * - s_Blur: Blur filter.
+   * - s_Gaussian: Gaussian filter.
+   * - s_Median: Median filter.
+   *
+   */
+
+  void SmoothAdvanced(SmoothType filtermode, int filtersize);
+
+  /*!
+   * @brief Canny function
+   *
+   * Canny operator is usable for edge detection. Function makes
+   * this operation with standard 3x3 matrix
+   * size. Canny has two threshold value which are set to zero
+   * in this function by default.
+   *
+   */
+
+  void Canny();
+
+  /*!
+   * @brief Laplace function
+   *
+   * Laplace operator is usable for edge detection like Canny.
+   * This function makes a laplace filter with
+   * standard 3x3 matrix size. After calculating destination image will
+   * be converted from 16 bit back to 8 bit.
+   *
+   */
+
+  void Laplace();
+
+  /*!
+   * @brief Image quantisation
+   *
+   * @param levels level of quantisation
+   *
+   * Quantize an image with @a levels level. It means by 16
+   * level color range 0-255 quantizes to 0-15, by 4 level to 0-63 etc.
+   *
+   */
+
+  void Quantize(int levels);
+
+  /*!
+   * @brief Threshold a picture
+   *
+   * @param threshold_limit limit for threshold
+   *
+   * Threshold an image with @a threshold_limit limit. Value range
+   * of @a threshold_limit is between 0-255. E.g. by value 160 functions
+   * will eliminate all color values under 160 with black color
+   * (color value zero).
+   *
+   */
+
+  void Threshold(int threshold_limit);
+
+  /*!
+   * @brief Adaptive threshold function
+   *
+   * This function does adaptive threshold function.
+   *
+   */
+
+  void AdaptiveThreshold();
+
+  /*!
+   * @brief Threshold a picture by a mask image
+   *
+   * @param mask_image mask image for thresholding
+   *
+   * Threshold an image with a mask image @a mask_image.
+   *
+   */
+
+  void ThresholdByMask(MEImage& mask_image);
+
+  /*!
+   * @brief Convert an image into a new color space
+   *
+   * @param transformation Definition of color transformation
+   *
+   * This function converts an image from a specified color space
+   * to an other.
+   * Current supported conversions (@a transformation):
+   * - csc_RGBtoXYZCIED65: RGB to XYZ (D65 reference light),
+   * - csc_XYZCIED65toRGB: XYZ to RGB (D65 reference light),
+   * - csc_RGBtoHSV: RGB to HSV,
+   * - csc_HSVtoRGB: HSV to RGB,
+   * - csc_RGBtoHLS: RGB to HSV,
+   * - csc_HLStoRGB: HSV to RGB,
+   * - csc_RGBtoCIELab: RGB to CIELab,
+   * - csc_CIELabtoRGB: CIELuv to RGB,
+   * - csc_RGBtoCIELuv: RGB to CIELuv,
+   * - csc_CIELuvtoRGB: CIELuv to RGB,
+   * - csc_RGBtoYUV: RGB to YUV color space,
+   * - csc_RGBtoYIQ: RGB to YIQ color space.
+   *
+   */
+
+  void ColorSpace(ColorSpaceConvertType transformation);
+
+  /*!
+   * @brief Convert an image to grayscale
+   *
+   * @param grayscale_mode mode of grayscale conversation
+   *
+   * The function converts the image to grayscale version
+   * (one color channel after the conversion). There is four
+   * different ways to convert the image to grayscale what we
+   * can define with @a grayscale_mode:
+   *
+   *  - g_Average: It computes the average grayscale
+   * values of the pixels with arithmetical average.
+   *  - g_OpenCV: It computes the average grayscale
+   * values by help of the values of the Y channel.
+   *
+   */
+
+  void ConvertToGrayscale(GrayscaleType grayscale_mode = g_OpenCV);
+
+  /*!
+   * @brief Convert a grayscale image to RGB
+   *
+   * The function converts the grayscale image to RGB version.
+   * (It copies the info from a single color channel to
+   * three color channel.)
+   *
+   */
+
+  void ConvertGrayscaleToRGB();
+
+  /*!
+   * @brief Change the red and blue components of every pixels
+   *
+   * Function changes the red component with the blue of
+   * every pixels. (Simple conversion from RGB->BGR.)
+   *
+   */
+
+  void ConvertBGRToRGB();
+
+  /*!
+   * @brief Compute an LBP filter on the image
+   *
+   * @param mode The LBP operator type
+   *
+   * The function converts the image to binary version over the
+   * threshold value.
+   *
+   */
+
+  void LBP(LBPType mode = lbp_Special);
+
+  /*!
+   * @brief Binarize an image
+   *
+   * @param threshold Threshold value
+   *
+   * The function converts the image to binary version over the
+   * threshold value.
+   *
+   */
+
+  void Binarize(int threshold);
+
+  /*!
+   * @brief Subtract an image from the internal picture
+   *
+   * @param source Source image for subtraction
+   * @param mode Calculation mode of difference feature
+   *
+   * Function generates a difference image between two image:
+   * the internal picture of this class and @a source_image.
+   * The calculation mode is determined by @a mode parameter.
+   * Function supports the following modes:
+   *
+   *  - sub_Normal: Simple subtraction between each
+   * correspondent pixel (per color channels). The result values
+   * are converted to absolute value and normalized to
+   * range 0-255.
+   *
+   */
+
+  void Subtract(MEImage& source, SubtractModeType mode);
+
+  /*!
+   * @brief Multiple an image with the internal picture
+   *
+   * @param source Second source image for multiplication
+   * @param mode Multiplication mode
+   *
+   * Function multiples an image with the internal image of this class and
+   * the result is stored in the internal image. The implemented calculation
+   * modes:
+   *
+   *  - m_Normal: It multiples the corresponding pixel values
+   * of the two images. The original pixel values are divided by 128 and
+   * multiplied together. If the result is at least 1 then the new pixel value
+   * is 255 otherwise 0.
+   *  - m_Neighbourhood: It multiples all pixel values of its
+   * 3x3 neighbourhood separately (see the method at MULTIPLICATION_NORMAL)
+   * and the new pixel value is 255 if at least two pixel is active in the
+   * 3x3 neighbourhood otherwise 0.
+   *
+   */
+
+  void Multiple(MEImage& source, MultiplicationType mode);
+
+  /*!
+   * @brief Addition of an image and the internal picture
+   *
+   * @param source second source image for addition method
+   * @param mode the declaration of the used addition mode
+   *
+   * Function makes an addition operation between an image and the internal
+   * image of this class and the result is stored in the internal image.
+   * Supported modes:
+   *
+   *  - a_Average: It sums the average of the corresponding pixels
+   * of each pictures.
+   *  - a_Union: It sums the union of the corresponding pixels
+   * of each pictures.
+   *
+   */
+
+  void Addition(MEImage& source, AdditionType mode);
+
+  /*!
+   * @brief Eliminate the single pixels from a binary image
+   *
+   * Function eliminates such a pixels which do not have neighbour pixels with
+   * 255 value in a 3x3 neighbourhood. The image should be converted to binary
+   * version.
+   *
+   */
+
+  void EliminateSinglePixels();
+
+  /*!
+   * @brief Calculate an area difference feature between two images
+   *
+   * @param reference Reference image
+   * @param difference Difference
+   *
+   * @return The percentage of image areas representing the conditions
+   *
+   * Function calculates a similarity feature between two pictures.
+   * Counts the number of the pixels whose intensity difference is
+   * higher than @a difference. (Range: 0..100)
+   *
+   */
+
+  float DifferenceAreas(MEImage& reference, int difference) const;
+
+  /*!
+   * @brief Calculate an average difference between two images
+   *
+   * @param reference Reference image
+   *
+   * @return Average difference of the pixels
+   *
+   * Function calculates a similarity feature between
+   * two images. It returns a simple sum of the absolute difference
+   * of each pixel in the two images and averaged by the pixel number.
+   * (Range: 0..255)
+   *
+   */
+
+  int AverageDifference(MEImage& reference) const;
+
+  /*!
+   * @brief Calculate minimum of image data
+   *
+   * @param image Second image
+   *
+   * Function calculates the minimum of current and given image.
+   *
+   */
+
+  void Minimum(MEImage& image);
+
+  /*!
+   * @brief Calculate average brightness level
+   *
+   * @return Brightness level in range 0-255.
+   *
+   * Function calculates the average brightness level of the image.
+   *
+   */
+
+  float AverageBrightnessLevel() const;
+
+  /*!
+   * @brief Check the equalization with a reference image
+   *
+   * @param reference Reference image
+   *
+   * @return true in case of binary equalization, otherwise false.
+   *
+   * Function calculates the binary difference between
+   * the image and the reference image.
+   *
+   */
+
+  bool Equal(const MEImage& reference) const;
+
+  /*!
+   * @brief Check the equalization with a reference image
+   *
+   * @param reference Reference image
+   * @param maxabsdiff Maximal absolute difference
+   *
+   * @return true in case of equalization, otherwise false.
+   *
+   * Function checks the difference between the image and
+   * the reference image. Two pixels are equal in a range of
+   * a maximal absolute difference.
+   *
+   */
+
+  bool Equal(const MEImage& reference, int maxabsdiff) const;
+
+  /*!
+   * @brief Get the grayscale value of a pixel
+   *
+   * @param x X coordinate of the pixel
+   * @param y Y coordinate of the pixel
+   *
+   * @return grayscale value of the pixel
+   *
+   * The method gives the grayscale value of a pixel back. If
+   * the image has 3 color channels (e.g. RGB) then Y value of
+   * YIQ/YUV color space will be calculated otherwise normal
+   * averaged grayscale value.
+   *
+   */
+
+  unsigned char GrayscalePixel(int x, int y) const;
+
+  /*!
+   * @brief Count the number of neighbourhood pixels with maximum intensity
+   *
+   * @param startx X coordinate of the top-left pixel
+   * @param starty Y coordinate of the top-left pixel
+   * @param neighbourhood Specific subset of pixels
+   *
+   * @return number of the pixels with maximum intensity.
+   *
+   * The method counts the number of the pixels with maximum
+   * intensity (255) in a specified subset of pixels.
+   * The grayscale values of the pixels are used in the counter
+   * process. The following neighbourhood forms are allowed with
+   * the @a neighbourhood parameter:
+   *
+   *  - n_2X2: Simple 2x2 matrix.
+   *  - n_3X3: Simple 3x3 matrix.
+   *  - n_3x2: Simple 3x2 matrix.
+   *
+   */
+
+  int NeighbourhoodCounter(int startx, int starty, NeighbourhoodType neighbourhood) const;
+
+  /*!
+   * @brief Calculate the gradient vector in a point
+   *
+   * @param smooth compute smooth filter
+   * @param x X coordinate of the point
+   * @param y Y coordinate of the point
+   * @param mask_size The mask size to calculate the gradient
+   *
+   * @param result_x X component of the calculated vector
+   * @param result_y Y component of the calculated vector
+   *
+   * The method calculates the gradient vector in a given point.
+   * The image is preprocessed with a Gauss filter to smooth the
+   * image content. The filter size of the Gauss filter depends on
+   * mask size of the gradient vector: filter size = mask size*3.
+   * Eight points are assigned to the initial point to compute
+   * a vector sum: (x, y-mask_size), (x+mask_size/√2, y-mask_size/√2),
+   * (x+mask_size, y), (x+mask_size/√2, y+mask_size/√2), (x, y+mask_size),
+   * (x-mask_size/√2, y+mask_size/√2), (x-mask_size, y), (x-mask_size/√2, y-mask_size/√2).
+   * The lengths of all vectors equalize with the mask size.
+   * After that each vector is multiplied with the gradient difference between
+   * its two end points. The results are summarized and normalized by
+   * the mask size.
+   *
+   */
+
+  void GradientVector(bool smooth, int x, int y, int mask_size, int& result_x, int& result_y);
+
+  /*!
+   * @brief Visualize gradient vectors
+   *
+   * @param vector_x Number of points horizontally
+   * @param vector_y Number of points vertically
+   *
+   * This function draws a wire (@a vector_x * @a vector_y) with
+   * gradient vectors.
+   *
+   */
+
+  void GradientVisualize(int vector_x, int vector_y);
+
+private:
+
+  /*
+  -------------------------------------------------------------------
+                          Internal methods
+  -------------------------------------------------------------------
+  */
+
+  /*!
+   * @brief Copy image data
+   *
+   * @param other_image Input image with new image data
+   *
+   * @return true if it is successful, otherwise false.
+   *
+   * Copy image data from @a other_image to MEImage image data.
+   *
+   */
+
+  bool _Copy(const MEImage& other_image);
+
+  /*!
+   * @brief Inherent initialization function
+   *
+   * @param width Width of the image
+   * @param height Height of the image
+   * @param layer Number of color channels of the image
+   *
+   * Initialization function of MEImage class which allocates
+   * memory to internal MEImage image and sets its properties.
+   *
+   */
+
+  void _Init(int width, int height, int layer);
+
+  /*!
+   * @brief Compute an image to a different color space
+   *
+   * @param mode Mode of the conversion
+   *
+   * Currently, the internal function allows to use a few
+   * mode to convert an image between color spaces.
+   * Current supported conversions (@a mode):
+   * - RGBtoYUV: RGB to YUV color space,
+   * - RGBtoYIQ: RGB to YIQ color space.
+   *
+   */
+
+  void ComputeColorSpace(ColorSpaceConvertType mode);
+
+private:
+  /// This matrix stores the matrix of the actual color space transform
+  float TransformMatrix[3][3];
+  /// The OpenCV image which contains the image data
+  void* cvImg;
+};
+
+/** @} */
+
+#endif
diff --git a/package_bgs/ck/MotionDetection.cpp b/package_bgs/ck/MotionDetection.cpp
new file mode 100644
index 0000000..9cb8e79
--- /dev/null
+++ b/package_bgs/ck/MotionDetection.cpp
@@ -0,0 +1,1425 @@
+/*
+ *  This file is part of the AiBO+ project
+ *
+ *  Copyright (C) 2005-2013 Csaba Kertész (csaba.kertesz@gmail.com)
+ *
+ *  AiBO+ is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  AiBO+ is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ *  Paper: Csaba, Kertész: Texture-Based Foreground Detection, International Journal of Signal Processing,
+ *  Image Processing and Pattern Recognition (IJSIP), Vol. 4, No. 4, 2011.
+ */
+
+#include "MotionDetection.hpp"
+
+#include "graph.h"
+
+#if defined(__MINGW32__) || defined(__MINGW64__)
+#include <cvaux.h>
+#else
+#include <opencv/cvaux.h>
+#endif
+
+#include "MEHistogram.hpp"
+#include "MEImage.hpp"
+
+// Pyramid picture for the tracking
+IplImage *HUOFPyramid;
+// Pyramid picture for the tracking
+IplImage *HUOFPrevPyramid;
+
+// Struct for histogram update data of a pixel
+struct MEPixelDataType
+{
+  float BackgroundRate;
+  int LifeCycle;
+  float *Weights;
+  bool *BackgroundHistogram;
+  float **Histograms;
+  float *PreviousHistogram;
+};
+
+MotionDetection::MotionDetection(DetectorType mode) :
+  MDMode(md_NotDefined), MDDataState(ps_Uninitialized), Frames(0), ReadyMask(false),
+  HUColorSpace(MEImage::csc_RGBtoCIELuv), HULBPMode(MEImage::lbp_Special),
+  HUHistogramsPerPixel(3), HUHistogramArea(5), HUHistogramBins(8),
+  HUImageWidth(-1), HUImageHeight(-1), HULBPPixelData(NULL),
+  HUPrThres(0.75), HUBackgrThres(0.95), HUHistLRate(0.01), HUWeightsLRate(0.01),
+  HUSamplePixels(-1), HUDesiredSamplePixels(-1), HUMinCutWeight(8.0),
+  HUOFDataState(ps_Uninitialized), HUOFPointsNumber(-1),
+  HUOFCamMovementX(0), MaxTrackedPoints(0), HUOFFrames(-1),
+  HUOFCamMovement(false)
+{
+  HUOFPyramid = NULL;
+  HUOFPrevPyramid = NULL;
+  HUOFPoints[0] = NULL;
+  HUOFPoints[1] = NULL;
+  SetMode(mode);
+}
+
+
+MotionDetection::~MotionDetection()
+{
+  if (MDMode != md_NotDefined)
+  {
+    ReleaseData();
+  }
+}
+
+
+void MotionDetection::SetMode(DetectorType newmode)
+{
+  if (MDMode != md_NotDefined && MDMode != newmode)
+  {
+    ReleaseData();
+    Frames = 0;
+    HUOFFrames = -1;
+    HUOFCamMovement = false;
+    HUOFCamMovementX = 0;
+    ReadyMask = false;
+  }
+
+  switch (newmode)
+  {
+    case md_LBPHistograms:
+      MDMode = md_LBPHistograms;
+      break;
+
+    case md_DLBPHistograms:
+      MDMode = md_DLBPHistograms;
+      break;
+
+    default:
+      MDMode = md_LBPHistograms;
+      break;
+  }
+}
+
+
+float MotionDetection::GetParameter(ParametersType param) const
+{
+  float ret = 0.0;
+
+  switch (param)
+  {
+    case mdp_HUProximityThreshold:
+      ret = (float)HUPrThres;
+      break;
+
+    case mdp_HUBackgroundThreshold:
+      ret = (float)HUBackgrThres;
+      break;
+
+    case mdp_HUHistogramLearningRate:
+      ret = (float)HUHistLRate;
+      break;
+
+    case mdp_HUWeightsLearningRate:
+      ret = (float)HUWeightsLRate;
+      break;
+
+    case mdp_HUMinCutWeight:
+      ret = (float)HUMinCutWeight;
+      break;
+
+    case mdp_HUDesiredSamplePixels:
+      ret = (float)HUDesiredSamplePixels;
+      break;
+
+    case mdp_HUHistogramsPerPixel:
+      ret = (float)HUHistogramsPerPixel;
+      break;
+
+    case mdp_HUHistogramArea:
+      ret = (float)HUHistogramArea;
+      break;
+
+    case mdp_HUHistogramBins:
+      ret = (float)HUHistogramBins;
+      break;
+
+    case mdp_HUColorSpace:
+      ret = (float)HUColorSpace;
+      break;
+
+    case mdp_HULBPMode:
+      ret = (float)HULBPMode;
+      break;
+
+    default:
+      break;
+  }
+  return ret;
+}
+
+
+void MotionDetection::SetParameter(ParametersType param, float value)
+{
+  switch (param)
+  {
+    case mdp_HUProximityThreshold:
+      HUPrThres = (float)value;
+      break;
+
+    case mdp_HUBackgroundThreshold:
+      HUBackgrThres = (float)value;
+      break;
+
+    case mdp_HUHistogramLearningRate:
+      HUHistLRate = (float)value;
+      break;
+
+    case mdp_HUWeightsLearningRate:
+      HUWeightsLRate = (float)value;
+      break;
+
+    case mdp_HUMinCutWeight:
+      HUMinCutWeight = (float)value;
+      break;
+
+    case mdp_HUDesiredSamplePixels:
+      HUDesiredSamplePixels = (int)value;
+      break;
+
+    case mdp_HUHistogramsPerPixel:
+      HUHistogramsPerPixel = (MDDataState == ps_Uninitialized) ? (int)value : HUHistogramsPerPixel;
+      break;
+
+    case mdp_HUHistogramArea:
+      HUHistogramArea = (MDDataState == ps_Uninitialized) ? (int)value : HUHistogramArea;
+      break;
+
+    case mdp_HUHistogramBins:
+      HUHistogramBins = (MDDataState == ps_Uninitialized) ? (int)value : HUHistogramBins;
+      break;
+
+    case mdp_HUColorSpace:
+      HUColorSpace = (MDDataState == ps_Uninitialized) ? (int)value : HUColorSpace;
+      break;
+
+    case mdp_HULBPMode:
+      HULBPMode = (MDDataState == ps_Uninitialized) ? (int)value : HULBPMode;
+      break;
+
+    default:
+      break;
+  }
+}
+
+
+void MotionDetection::DetectMotions(MEImage& image)
+{
+  switch (MDMode)
+  {
+    case md_LBPHistograms:
+    case md_DLBPHistograms:
+      DetectMotionsHU(image);
+      break;
+
+    default:
+      break;
+  }
+}
+
+
+void MotionDetection::GetMotionsMask(MEImage& mask_image)
+{
+  if (ReadyMask)
+  {
+     mask_image = MaskImage;
+  }
+
+  switch (MDMode)
+  {
+    case md_LBPHistograms:
+    case md_DLBPHistograms:
+      GetMotionsMaskHU(MaskImage);
+      break;
+
+    default:
+      break;
+  }
+
+  ReadyMask = true;
+  mask_image = MaskImage;
+}
+
+
+void MotionDetection::CalculateResults(MEImage& referenceimage, int& tnegatives, int& tpositives,
+                                         int& ttnegatives, int& ttpositives)
+{
+  if (MDDataState != ps_Successful)
+  {
+    printf("No data for calculation.\n");
+    return;
+  }
+
+  if (referenceimage.GetLayers() != 1)
+    referenceimage.ConvertToGrayscale(MEImage::g_OpenCV);
+
+  referenceimage.Binarize(1);
+
+  MEImage mask_image;
+
+  GetMotionsMask(mask_image);
+
+  if ((mask_image.GetWidth() != referenceimage.GetWidth()) ||
+       (mask_image.GetHeight() != referenceimage.GetHeight()))
+  {
+    printf("Different resolutions of mask<->reference image.\n");
+    return;
+  }
+
+  unsigned char* RefMaskImgData = referenceimage.GetImageData();
+  unsigned char* MaskImgData = mask_image.GetImageData();
+  int RowStart = 0;
+  int RowWidth = referenceimage.GetRowWidth();
+
+  int TrueNegatives = 0;
+  int TruePositives = 0;
+  int TotalTrueNegatives = 0;
+  int TotalTruePositives = 0;
+
+  int ImageFrame = 0;
+
+  if (MDMode == md_LBPHistograms || md_DLBPHistograms)
+  {
+    ImageFrame = HUHistogramArea / 2;
+  }
+
+  for (int y = referenceimage.GetHeight()-ImageFrame-1; y >= ImageFrame; --y)
+  {
+    for (int x = referenceimage.GetWidth()-ImageFrame-1; x >= ImageFrame; --x)
+    {
+      TrueNegatives +=
+          (RefMaskImgData[RowStart+x] == 0) &&
+          (MaskImgData[RowStart+x] == 0);
+      TotalTrueNegatives += (RefMaskImgData[RowStart+x] == 0);
+      TruePositives +=
+          (RefMaskImgData[RowStart+x] == 255) &&
+          (MaskImgData[RowStart+x] == 255);
+      TotalTruePositives += (RefMaskImgData[RowStart+x] == 255);
+    }
+    RowStart += RowWidth;
+  }
+
+  tnegatives = TrueNegatives;
+  ttnegatives = TotalTrueNegatives;
+  tpositives = TruePositives;
+  ttpositives = TotalTruePositives;
+}
+
+
+void MotionDetection::ReleaseData()
+{
+  if (MDMode == md_LBPHistograms || MDMode == md_DLBPHistograms)
+  {
+    ReleaseHUData();
+  }
+}
+
+
+void MotionDetection::InitHUData(int imagewidth, int imageheight)
+{
+  if ((HUImageWidth != imagewidth-HUHistogramArea+1) ||
+       (HUImageHeight != imageheight-HUHistogramArea+1) ||
+       (MDDataState == ps_Uninitialized))
+  {
+    if (MDDataState != ps_Uninitialized)
+    {
+      ReleaseHUData();
+    }
+
+    MDDataState = ps_Initialized;
+
+    HUImageWidth = imagewidth-HUHistogramArea+1;
+    HUImageHeight = imageheight-HUHistogramArea+1;
+
+    HULBPPixelData = new MEPixelDataType**[HUImageWidth / 2];
+
+    for (int i = 0; i < HUImageWidth / 2; ++i)
+    {
+      HULBPPixelData[i] = new MEPixelDataType*[HUImageHeight];
+    }
+
+    for (int i = 0; i < HUImageWidth / 2; ++i)
+      for (int i1 = 0; i1 < HUImageHeight; ++i1)
+    {
+      HULBPPixelData[i][i1] = new MEPixelDataType;
+      HULBPPixelData[i][i1]->Weights = new float[HUHistogramsPerPixel];
+      HULBPPixelData[i][i1]->BackgroundHistogram = new bool[HUHistogramsPerPixel];
+      HULBPPixelData[i][i1]->Histograms = new float*[HUHistogramsPerPixel];
+      for (int i2 = 0; i2 < HUHistogramsPerPixel; ++i2)
+        HULBPPixelData[i][i1]->Histograms[i2] = new float[HUHistogramBins];
+      HULBPPixelData[i][i1]->PreviousHistogram = new float[HUHistogramBins];
+    }
+
+    // Allocate auxiliary variables
+    HUMaskColumnAddDel = new int*[HUHistogramArea];
+    for (int i = 0; i < HUHistogramArea; ++i)
+      HUMaskColumnAddDel[i] = new int[2];
+
+    HUMaskRowAddDel = new int*[HUHistogramArea];
+    for (int i = 0; i < HUHistogramArea; ++i)
+      HUMaskRowAddDel[i] = new int[2];
+
+    // Generate sample mask
+    SetSampleMaskHU(sm_Circle, HUDesiredSamplePixels);
+
+    // Init HU optical flow data
+    if (MDMode == md_DLBPHistograms)
+      InitHUOFData(imagewidth, imageheight);
+
+    ClearHUData();
+  }
+}
+
+
+void MotionDetection::InitHUOFData(int imagewidth, int imageheight)
+{
+  if (HUOFDataState != ps_Uninitialized)
+  {
+    ReleaseHUOFData();
+  }
+
+  if (HUOFDataState == ps_Uninitialized)
+  {
+    HUOFPointsNumber = imagewidth*imageheight / 1000;
+    HUOFPyramid = cvCreateImage(cvSize(imagewidth, imageheight), 8, 1);
+    HUOFPrevPyramid = cvCreateImage(cvSize(imagewidth, imageheight), 8, 1);
+    HUOFPoints[0] = (CvPoint2D32f*)cvAlloc(HUOFPointsNumber*sizeof(HUOFPoints[0][0]));
+    HUOFPoints[1] = (CvPoint2D32f*)cvAlloc(HUOFPointsNumber*sizeof(HUOFPoints[1][0]));
+  }
+}
+
+
+void MotionDetection::ReleaseHUData()
+{
+  if (MDDataState != ps_Uninitialized)
+  {
+    for (int i = 0; i < HUImageWidth / 2; i++)
+      for (int i1 = 0; i1 < HUImageHeight; i1++)
+    {
+      delete[] HULBPPixelData[i][i1]->PreviousHistogram;
+      for (int i2 = 0; i2 < HUHistogramsPerPixel; ++i2)
+        delete[] HULBPPixelData[i][i1]->Histograms[i2];
+      delete[] HULBPPixelData[i][i1]->Histograms;
+      delete[] HULBPPixelData[i][i1]->BackgroundHistogram;
+      delete[] HULBPPixelData[i][i1]->Weights;
+      delete HULBPPixelData[i][i1];
+    }
+
+    for (int i = 0; i < HUImageWidth / 2; i++)
+    {
+      delete[] HULBPPixelData[i];
+    }
+    delete[] HULBPPixelData;
+
+    if (MDMode == md_DLBPHistograms)
+      ReleaseHUOFData();
+
+    HUImageWidth = -1;
+    HUImageHeight = -1;
+    HULBPPixelData = NULL;
+    MDDataState = ps_Uninitialized;
+
+    // Release auxiliary variables
+    for (int i = 0; i < HUHistogramArea; ++i)
+      delete[] HUMaskColumnAddDel[i];
+    delete[] HUMaskColumnAddDel;
+
+    for (int i = 0; i < HUHistogramArea; ++i)
+      delete[] HUMaskRowAddDel[i];
+    delete[] HUMaskRowAddDel;
+
+    HUMaskColumnAddDel = NULL;
+    HUMaskRowAddDel = NULL;
+  }
+}
+
+
+void MotionDetection::ReleaseHUOFData()
+{
+  if (MDDataState != ps_Uninitialized)
+  {
+    if (HUOFPyramid)
+    {
+      cvReleaseImage(&HUOFPyramid);
+      HUOFPyramid = NULL;
+    }
+    if (HUOFPrevPyramid)
+    {
+        cvReleaseImage(&HUOFPrevPyramid);
+        HUOFPrevPyramid = NULL;
+    }
+    if (HUOFPoints[0])
+    {
+        cvFree(&HUOFPoints[0]);
+        HUOFPoints[0] = NULL;
+    }
+    if (HUOFPoints[1])
+    {
+        cvFree(&HUOFPoints[1]);
+        HUOFPoints[1] = NULL;
+    }
+    HUOFDataState = ps_Uninitialized;
+  }
+}
+
+
+void MotionDetection::ClearHUData()
+{
+  if (MDDataState != ps_Uninitialized)
+  {
+    for (int i = (HUImageWidth / 2)-1; i >= 0; --i)
+      for (int i1 = HUImageHeight-1; i1 >= 0; --i1)
+    {
+      for (int i2 = HUHistogramsPerPixel-1; i2 >= 0; --i2)
+      {
+        memset(HULBPPixelData[i][i1]->Histograms[i2], 0,
+               HUHistogramBins*sizeof(float));
+        HULBPPixelData[i][i1]->Weights[i2] = 1.0 / HUHistogramsPerPixel;
+        HULBPPixelData[i][i1]->BackgroundHistogram[i2] = true;
+      }
+      HULBPPixelData[i][i1]->BackgroundRate = 1.0;
+      HULBPPixelData[i][i1]->LifeCycle = 0;
+    }
+    MDDataState = ps_Initialized;
+  }
+}
+
+
+void MotionDetection::DetectMotionsHU(MEImage& image)
+{
+  unsigned char *ImgData = NULL;
+  MEImage newimage = image;
+  float DiffAreas = 0;
+
+  // Init the histogram update data structures if needs be
+  if ((MDDataState == ps_Uninitialized) ||
+      (HUImageWidth != newimage.GetWidth()-HUHistogramArea+1) ||
+      (HUImageHeight != newimage.GetHeight()-HUHistogramArea+1))
+  {
+    InitHUData(newimage.GetWidth(), newimage.GetHeight());
+  }
+
+  if (newimage.GetLayers() == 1)
+  {
+    newimage.ConvertGrayscaleToRGB();
+  }
+
+  MEImage blueimage = newimage;
+  blueimage.ColorSpace(MEImage::csc_RGBtoCIELuv);
+
+  if (HUColorSpace != -1)
+  {
+    newimage.ColorSpace((MEImage::ColorSpaceConvertType)HUColorSpace);
+  }
+
+  if (Frames == 0)
+  {
+    MEImage BlueLayer;
+    blueimage.GetLayer(BlueLayer, 1);
+    BlueLayer.Resize(32, 24);
+    PreviousBlueLayer = BlueLayer;
+  }
+
+  Frames++;
+
+  // Detect the fast, big changes in the scene
+  MEImage BlueLayer;
+  blueimage.GetLayer(BlueLayer, 1);
+  BlueLayer.Resize(32, 24);
+  DiffAreas = BlueLayer.DifferenceAreas(PreviousBlueLayer, 12);
+
+  if (DiffAreas > 80)
+  {
+    MDDataState = ps_Initialized;
+    if (MDMode == md_DLBPHistograms)
+      HUOFDataState = ps_Initialized;
+    printf("Frame: %d - big changes in the scene (%f)", Frames, DiffAreas);
+    Frames = 1;
+    HUOFFrames = -1;
+  }
+  PreviousBlueLayer = BlueLayer;
+
+  if (Frames == 1)
+  {
+    CurrentImage = image;
+    PreviousImage = CurrentImage;
+  } else
+  if (Frames > 1)
+  {
+    PreviousImage = CurrentImage;
+    CurrentImage = image;
+    // Optical flow correction of the camera movements
+    if (MDMode == md_DLBPHistograms)
+    {
+      OpticalFlowCorrection();
+    }
+  }
+
+  newimage.ConvertToGrayscale(MEImage::g_OpenCV);
+
+  if (HULBPMode != -1)
+  {
+    newimage.LBP((MEImage::LBPType)HULBPMode);
+  }
+
+  // Set some auxiliary variables
+  ImgData = newimage.GetImageData();
+  int DivisionOperator = (int)(log(256 / HUHistogramBins) / log(2))+1;
+
+  // Downscale the image
+  for (int i = newimage.GetRowWidth()*newimage.GetHeight()-1; i >= 0; --i)
+  {
+    ImgData[i] >>= DivisionOperator;
+  }
+
+  UpdateModelHU(newimage, HULBPPixelData);
+
+  // Change the state of the HU data structures
+  if (MDDataState == ps_Initialized)
+  {
+    MDDataState = ps_Successful;
+  }
+  HUOFCamMovement = false;
+  ReadyMask = false;
+}
+
+
+void MotionDetection::UpdateModelHU(MEImage& image, MEPixelDataType*** model)
+{
+  float CurrentHistogram[HUHistogramBins], CurrentHistogram2[HUHistogramBins];
+  unsigned char *ImgData = image.GetImageData();
+  int RowWidth = image.GetRowWidth();
+  int RowStart = (HUImageHeight-1)*RowWidth;
+
+  memset(CurrentHistogram, 0, sizeof(CurrentHistogram));
+  // Calculate the first histogram
+  for (int y = HUHistogramArea-1; y >= 0; --y)
+  {
+    for (int x = HUHistogramArea-1; x >= 0; --x)
+    {
+      if ((HUMaskRowAddDel[y][1] > x) && (HUMaskRowAddDel[y][0] <= x) &&
+           (HUMaskColumnAddDel[x][1] > y) && (HUMaskColumnAddDel[x][0] <= y))
+      {
+        CurrentHistogram[ImgData[RowStart+HUImageWidth-1+x]]++;
+      }
+    }
+    RowStart += RowWidth;
+  }
+
+  // This cycle generates the last row of histograms
+  for (int y = HUImageHeight-1; y >= 0; --y)
+  {
+    if (HUImageHeight-1 > y)
+    {
+      // Delete and add a pixel column from the histogram data
+      for (int i = HUHistogramArea-1; i >= 0; --i)
+      {
+        if (HUMaskColumnAddDel[i][0] != -1)
+          CurrentHistogram[ImgData[RowWidth*(y+HUMaskColumnAddDel[i][0])+HUImageWidth-1+i]]++;
+        if (HUMaskColumnAddDel[i][1] != -1)
+          CurrentHistogram[ImgData[RowWidth*(y+HUMaskColumnAddDel[i][1])+HUImageWidth-1+i]]--;
+      }
+    }
+
+    if (y % 2 == HUImageWidth % 2)
+    {
+      MEPixelDataType* PixelData = model[(HUImageWidth-1) / 2][y];
+
+      // Allocate and initialize the pixel data if needs be
+      if (!PixelData)
+      {
+        // Memory allocation
+        PixelData = new MEPixelDataType;
+        PixelData->Weights = new float[HUHistogramsPerPixel];
+        PixelData->BackgroundHistogram = new bool[HUHistogramsPerPixel];
+        PixelData->Histograms = new float*[HUHistogramsPerPixel];
+        for (int i2 = 0; i2 < HUHistogramsPerPixel; ++i2)
+          PixelData->Histograms[i2] = new float[HUHistogramBins];
+        PixelData->PreviousHistogram = new float[HUHistogramBins];
+
+        for (int i = HUHistogramsPerPixel-1; i >= 0; --i)
+        {
+          memcpy(PixelData->Histograms[i], CurrentHistogram, sizeof(CurrentHistogram));
+          PixelData->Weights[i] = 1.0 / HUHistogramsPerPixel;
+          PixelData->BackgroundHistogram[i] = true;
+        }
+        PixelData->BackgroundRate = 1.0;
+        PixelData->LifeCycle = 0;
+        memcpy(PixelData->PreviousHistogram, CurrentHistogram, sizeof(CurrentHistogram));
+
+        model[(HUImageWidth-1) / 2][y] = PixelData;
+      } else {
+        bool InitHistograms = (MDDataState == ps_Initialized);
+
+        if (MDDataState != ps_Initialized && HUOFCamMovement)
+        {
+          // Histogram intersection between the previous and the current histogram
+          float Difference = 0.0;
+          for (int i1 = HUHistogramBins-1; i1 >= 0; --i1)
+          {
+            Difference += (float)(CurrentHistogram[i1] < PixelData->PreviousHistogram[i1] ?
+                CurrentHistogram[i1] : PixelData->PreviousHistogram[i1]);
+          }
+          Difference /= HUSamplePixels;
+
+          if (Difference < HUBackgrThres)
+            InitHistograms = true;
+        }
+        if (InitHistograms)
+        {
+          // Copy the histogram data to the HU data structures
+          for (int i = HUHistogramsPerPixel-1; i >= 0; --i)
+          {
+            memcpy(PixelData->Histograms[i], CurrentHistogram, sizeof(CurrentHistogram));
+            PixelData->Weights[i] = 1.0 / HUHistogramsPerPixel;
+            PixelData->BackgroundHistogram[i] = true;
+          }
+          memcpy(PixelData->PreviousHistogram, CurrentHistogram, sizeof(CurrentHistogram));
+          PixelData->BackgroundRate = 1.0;
+          PixelData->LifeCycle = 0;
+        } else {
+          // Update the HU data structures
+          UpdateHUPixelData(PixelData, CurrentHistogram);
+
+          if (MDMode == md_DLBPHistograms)
+          {
+            memcpy(PixelData->PreviousHistogram, CurrentHistogram, sizeof(CurrentHistogram));
+          }
+        }
+      }
+    }
+
+    // Copy the histogram
+    memcpy(CurrentHistogram2, CurrentHistogram, sizeof(CurrentHistogram));
+
+    // This cycle generates a column of histograms
+    for (int x = HUImageWidth-2; x >= 0; --x)
+    {
+      RowStart = RowWidth*y;
+
+      // Delete and add a pixel column from the histogram data
+      for (int i = HUHistogramArea-1; i >= 0; --i)
+      {
+        if (HUMaskRowAddDel[i][0] != -1)
+          CurrentHistogram2[ImgData[RowStart+x+HUMaskRowAddDel[i][0]]]++;
+        if (HUMaskRowAddDel[i][1] != -1)
+          CurrentHistogram2[ImgData[RowStart+x+HUMaskRowAddDel[i][1]]]--;
+
+        RowStart += RowWidth;
+      }
+      if (x % 2 == 0)
+      {
+        MEPixelDataType* PixelData = model[x / 2][y];
+
+        // Allocate and initialize the pixel data if needs be
+        if (!PixelData)
+        {
+          // Memory allocation
+          PixelData = new MEPixelDataType;
+          PixelData->Weights = new float[HUHistogramsPerPixel];
+          PixelData->BackgroundHistogram = new bool[HUHistogramsPerPixel];
+          PixelData->Histograms = new float*[HUHistogramsPerPixel];
+          for (int i2 = 0; i2 < HUHistogramsPerPixel; ++i2)
+            PixelData->Histograms[i2] = new float[HUHistogramBins];
+          PixelData->PreviousHistogram = new float[HUHistogramBins];
+
+          for (int i = HUHistogramsPerPixel-1; i >= 0; --i)
+          {
+            memcpy(PixelData->Histograms[i], CurrentHistogram2, sizeof(CurrentHistogram2));
+            PixelData->Weights[i] = 1.0 / HUHistogramsPerPixel;
+            PixelData->BackgroundHistogram[i] = true;
+          }
+          PixelData->BackgroundRate = 1.0;
+          PixelData->LifeCycle = 0;
+          model[x / 2][y] = PixelData;
+          memcpy(PixelData->PreviousHistogram, CurrentHistogram2, sizeof(CurrentHistogram2));
+        } else {
+          bool InitHistograms = (MDDataState == ps_Initialized);
+
+          if (MDDataState != ps_Initialized && HUOFCamMovement)
+          {
+            // Histogram intersection between the previous and the current histogram
+            float Difference = 0.0;
+            for (int i1 = HUHistogramBins-1; i1 >= 0; --i1)
+            {
+              Difference += (float)(CurrentHistogram2[i1] < PixelData->PreviousHistogram[i1] ?
+                  CurrentHistogram2[i1] : PixelData->PreviousHistogram[i1]);
+            }
+            Difference /= HUSamplePixels;
+
+            if (Difference < HUBackgrThres)
+              InitHistograms = true;
+          }
+          if (InitHistograms)
+          {
+            // Copy the histogram data to the HU data structures
+            for (int i = HUHistogramsPerPixel-1; i >= 0; --i)
+            {
+              memcpy(PixelData->Histograms[i], CurrentHistogram2, sizeof(CurrentHistogram2));
+              PixelData->Weights[i] = 1.0 / HUHistogramsPerPixel;
+              PixelData->BackgroundHistogram[i] = true;
+            }
+            memcpy(PixelData->PreviousHistogram, CurrentHistogram2, sizeof(CurrentHistogram2));
+            PixelData->BackgroundRate = 1.0;
+            PixelData->LifeCycle = 0;
+          } else {
+            // Update the HU data structures
+            UpdateHUPixelData(PixelData, CurrentHistogram2);
+
+            if (MDMode == md_DLBPHistograms)
+            {
+              memcpy(PixelData->PreviousHistogram, CurrentHistogram2, sizeof(CurrentHistogram2));
+            }
+          }
+        }
+      }
+
+    }
+  }
+}
+
+
+void MotionDetection::UpdateHUPixelData(MEPixelDataType* PixelData, const float *histogram)
+{
+  int MaxIndex = 0;
+  float MaxValue = -1;
+  bool Replace = true;
+  float IntersectionResults[HUHistogramsPerPixel];
+
+  PixelData->LifeCycle++;
+  PixelData->BackgroundRate = 0.0;
+
+  // Compute intersection between the currect and older histograms
+  for (int i = HUHistogramsPerPixel-1; i >= 0; --i)
+  {
+    // Histogram intersection
+    float Difference = 0.0;
+    for (int i1 = HUHistogramBins-1; i1 >= 0; --i1)
+    {
+      Difference += (float)histogram[i1] < PixelData->Histograms[i][i1] ?
+          (float)histogram[i1] : PixelData->Histograms[i][i1];
+    }
+
+    IntersectionResults[i] = (float)Difference / (float)(HUSamplePixels);
+
+    if (PixelData->BackgroundHistogram[i] &&
+        IntersectionResults[i] > PixelData->BackgroundRate)
+    {
+      PixelData->BackgroundRate = IntersectionResults[i];
+    }
+
+    if (MaxValue < IntersectionResults[i])
+    {
+      MaxValue = IntersectionResults[i];
+      MaxIndex = i;
+    }
+
+    Replace = Replace && (IntersectionResults[i] < HUPrThres);
+  }
+
+  // Replace the histogram with the lowest weight
+  if (Replace)
+  {
+    // Find the histogram with minimal weight
+    int MinIndex = 0;
+    float MinValue = PixelData->Weights[0];
+    for (int i1 = HUHistogramsPerPixel-1; i1 > 0; --i1)
+    {
+      if (MinValue > PixelData->Weights[i1])
+      {
+        MinValue = PixelData->Weights[i1];
+        MinIndex = i1;
+      }
+    }
+
+    PixelData->Weights[MinIndex] = 0.01;
+    for (int i1 = HUHistogramBins-1; i1 >= 0; --i1)
+      PixelData->Histograms[MinIndex][i1] = (float)histogram[i1];
+    PixelData->BackgroundHistogram[MinIndex] = 0;
+
+    // Normalize the weights
+    float sum = 0;
+    for (int i1 = HUHistogramsPerPixel-1; i1 >= 0; --i1)
+      sum += PixelData->Weights[i1];
+
+    for (int i1 = HUHistogramsPerPixel-1; i1 >= 0; --i1)
+      PixelData->Weights[i1] = PixelData->Weights[i1] / sum;
+
+    return;
+  }
+
+  float LearningRate = HUHistLRate;
+
+  if (PixelData->LifeCycle < 100)
+    LearningRate += (float)(100-PixelData->LifeCycle) / 100;
+  else
+  if (MDMode == md_DLBPHistograms && HUOFFrames != -1 && HUOFFrames < 40)
+    LearningRate += (HUOFFrames < 80 ? 0.05 : 0);
+
+  // Match was found -> Update the histogram of the best match
+  for (int i = HUHistogramBins-1; i >= 0; --i)
+  {
+    PixelData->Histograms[MaxIndex][i] *= (1.0-LearningRate);
+    PixelData->Histograms[MaxIndex][i] += LearningRate*(float)histogram[i];
+  }
+
+  LearningRate = HUWeightsLRate;
+  if (PixelData->LifeCycle < 100)
+    LearningRate += (float)(100-PixelData->LifeCycle) / 100;
+  else
+  if (MDMode == md_DLBPHistograms && HUOFFrames != -1 && HUOFFrames < 40)
+    LearningRate += (HUOFFrames < 80 ? 0.05 : 0);
+
+  // Update the weights of the histograms
+  for (int i = HUHistogramsPerPixel-1; i >= 0; --i)
+  {
+    PixelData->Weights[i] =
+        (LearningRate*(i == MaxIndex)+(1.0-LearningRate)*PixelData->Weights[i]);
+  }
+
+  // Order and select the background histograms
+  float Weights[HUHistogramsPerPixel][2];
+
+  for (int i = HUHistogramsPerPixel-1; i >= 0; --i)
+  {
+    Weights[i][0] = (float)i;
+    Weights[i][1] = PixelData->Weights[i];
+  }
+
+  for (int i1 = HUHistogramsPerPixel-1; i1 >= 2; --i1)
+    for (int i = i1; i >= 1; --i)
+  {
+    if (Weights[i][1] <= Weights[i-1][1])
+    {
+      float tmp = Weights[i][0];
+      float tmp2 = Weights[i][1];
+
+      Weights[i][0] = Weights[i-1][0];
+      Weights[i][1] = Weights[i-1][1];
+
+      Weights[i-1][0] = tmp;
+      Weights[i-1][1] = tmp2;
+    }
+  }
+
+  float Sum = 0;
+  int i = 0;
+
+  for (i = HUHistogramsPerPixel-1; i >= 0; --i)
+  {
+    Sum += Weights[i][1];
+    PixelData->BackgroundHistogram[(int)Weights[i][0]] = true;
+
+    if (Sum > HUBackgrThres)
+      break;
+  }
+  for (int i1 = i-1; i1 >= 0; --i1)
+  {
+    PixelData->BackgroundHistogram[(int)Weights[i1][0]] = false;
+  }
+}
+
+
+void MotionDetection::OpticalFlowCorrection()
+{
+  IplImage *PreviousGray = NULL, *CurrentGray = NULL;
+  char* PointsStatus = (char*)cvAlloc(HUOFPointsNumber);
+  int i = 0, i1 = 0;
+
+  if (HUOFFrames != -1)
+    HUOFFrames++;
+
+  // Convert the images into grayscale
+  if (CurrentImage.GetLayers() > 1)
+  {
+    CurrentGray = cvCreateImage(cvGetSize(CurrentImage.GetIplImage()), IPL_DEPTH_8U, 1);
+    cvCvtColor(CurrentImage.GetIplImage(), CurrentGray, CV_BGR2GRAY);
+  } else
+    CurrentGray = (IplImage*)CurrentImage.GetIplImage();
+  if (PreviousImage.GetLayers() > 1)
+  {
+    PreviousGray = cvCreateImage(cvGetSize(CurrentImage.GetIplImage()), IPL_DEPTH_8U, 1);
+    cvCvtColor(PreviousImage.GetIplImage(), PreviousGray, CV_BGR2GRAY);
+  } else
+    PreviousGray = (IplImage*)PreviousImage.GetIplImage();
+
+  if (HUOFDataState != ps_Successful)
+  {
+    printf("Search new corners\n");
+    IplImage* TempEig = cvCreateImage(cvGetSize(CurrentGray), 32, 1 );
+    IplImage* Temp = cvCreateImage(cvGetSize(CurrentGray), 32, 1 );
+    double MinDistance = (CurrentImage.GetWidth()+CurrentImage.GetHeight()) / 20;
+    HUOFPointsNumber = MaxTrackedPoints = CurrentImage.GetWidth()*CurrentImage.GetHeight() / 1000;
+
+    // Search good trackable points
+    cvGoodFeaturesToTrack(PreviousGray, TempEig, Temp,
+                          HUOFPoints[0], &HUOFPointsNumber,
+                          0.01, MinDistance, NULL, 3);
+    MaxTrackedPoints = HUOFPointsNumber;
+    // Release temporary images
+    cvReleaseImage(&TempEig);
+    cvReleaseImage(&Temp);
+    // Realloc the point status array
+    if (PointsStatus)
+    {
+      cvFree(&PointsStatus);
+      PointsStatus = NULL;
+    }
+
+    if (MaxTrackedPoints < 2)
+    {
+      HUOFDataState = ps_Initialized;
+      HUOFPointsNumber = CurrentImage.GetWidth()*CurrentImage.GetHeight() / 1000;
+      return;
+    } else
+      HUOFDataState = ps_Successful;
+      PointsStatus = (char*)cvAlloc(HUOFPointsNumber);
+  }
+
+  cvCalcOpticalFlowPyrLK(PreviousGray, CurrentGray, HUOFPrevPyramid, HUOFPyramid,
+                         HUOFPoints[0], HUOFPoints[1], HUOFPointsNumber,
+                         cvSize(10, 10), 3, PointsStatus, NULL,
+                         cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS, 5, 1), 0);
+
+  // Count the distances of the tracked points
+  int Distances[HUOFPointsNumber][3];
+  int DistanceMax = 0;
+  for (i = 0; i < HUOFPointsNumber; ++i)
+  {
+    int DiffX = (int)MERound(HUOFPoints[1][i].x-HUOFPoints[0][i].x);
+    int DiffY = (int)MERound(HUOFPoints[1][i].y-HUOFPoints[0][i].y);
+    if ((PointsStatus[i] == 1) && !((DiffX == 0) && (DiffY == 0)))
+    {
+      bool found = false;
+      // Create a list from the differences to count them
+      for (i1 = 0; i1 < DistanceMax; ++i1)
+      {
+        if ((Distances[i1][0] == DiffX) &&
+             (Distances[i1][1] == DiffY))
+        {
+          Distances[i1][2]++;
+          found = true;
+          break;
+        }
+      }
+      if ((!found) && !((DiffX == 0) && (DiffY == 0)))
+      {
+        Distances[DistanceMax][0] = (int)MERound(HUOFPoints[1][i].x-HUOFPoints[0][i].x);
+        Distances[DistanceMax][1] = (int)MERound(HUOFPoints[1][i].y-HUOFPoints[0][i].y);
+        Distances[DistanceMax][2] = 1;
+        DistanceMax++;
+      }
+    }
+  }
+
+  // Sort the results
+  for (int i1 = DistanceMax-1; i1 >= 2; --i1)
+    for (int i = i1; i >= 1; --i)
+  {
+    if ((Distances[i][2] > Distances[i-1][2]) ||
+         ((Distances[i][2] == Distances[i-1][2]) &&
+         (abs(Distances[i][0])+abs(Distances[i][1]) <
+          abs(Distances[i-1][0])+abs(Distances[i-1][1]))))
+    {
+      int tmp = Distances[i][0];
+      int tmp2 = Distances[i][1];
+      int tmp3 = Distances[i][2];
+
+      Distances[i][0] = Distances[i-1][0];
+      Distances[i][1] = Distances[i-1][1];
+      Distances[i][2] = Distances[i-1][2];
+
+      Distances[i-1][0] = tmp;
+      Distances[i-1][1] = tmp2;
+      Distances[i-1][2] = tmp3;
+    }
+  }
+
+  float MoveX = 0.0;
+  float MoveY = 0.0;
+  int SampleNums = 0;
+  float DistanceMeasure = 0.0;
+
+  // Calculate the final camera movement
+  for (i = 0; i < DistanceMax; ++i)
+  {
+    if ((Distances[i][2] <= MaxTrackedPoints / 10))
+      break;
+
+    if (i > 0)
+    {
+      DistanceMeasure += (Distances[i][0]-Distances[i-1][0])*(Distances[i][0]-Distances[i-1][0]);
+      DistanceMeasure += (Distances[i][1]-Distances[i-1][1])*(Distances[i][1]-Distances[i-1][1]);
+    }
+
+    MoveX += Distances[i][0]*Distances[i][2];
+    MoveY += Distances[i][1]*Distances[i][2];
+    SampleNums += Distances[i][2];
+  }
+
+  if (SampleNums > 0)
+  {
+    MoveX = MERound(MoveX / SampleNums);
+    MoveY = MERound(MoveY / SampleNums);
+  }
+
+  if (!((MoveX == 0) && (MoveY == 0)) &&
+        (SampleNums > MaxTrackedPoints / 2))
+  {
+    HUOFCamMovementX += (int)MoveX;
+    int HUOFCamMovementY = (int)MoveY;
+    int MaxX = (HUImageWidth / 2)-1;
+    int MaxY = HUImageHeight-1;
+/*
+    printf("-----------\n");
+
+    for (i = 0; i < DistanceMax; ++i)
+      printf("%d: %d,%d\n", Distances[i][2], Distances[i][0], Distances[i][1]);
+
+    printf("FINAL: %d,%d,%1.2f\n", (int)MoveX, (int)MoveY, DistanceMeasure);
+    printf("-----------\n");
+    printf("Camera movement: %d,%d,%d (max: %d, current: %d)\n",
+           SampleNums, HUOFCamMovementX, HUOFCamMovementY, MaxTrackedPoints, HUOFPointsNumber);
+*/
+    HUOFFrames = 0;
+    HUOFCamMovement = true;
+
+    if (!(HUOFCamMovementY == 0 && HUOFCamMovementX >= -1 && HUOFCamMovementX <= 1))
+    {
+      MEPixelDataType* PreviousData[MaxX+1][MaxY+1];
+
+      // Camera movement being happened
+      for (int y = MaxY; y >= 0; --y)
+        for (int x = MaxX; x >= 0; --x)
+      {
+        PreviousData[x][y] = NULL;
+      }
+
+      // Move the LBP data to new locations
+      for (int y = MaxY; y >= 0; --y)
+        for (int x = MaxX; x >= 0; --x)
+      {
+        int NewX = x+(HUOFCamMovementX / 2);
+        int NewY = y+HUOFCamMovementY;
+
+        if (NewX >= 0 && NewX <= MaxX &&
+             NewY >= 0 && NewY <= MaxY)
+        {
+          if (HULBPPixelData[NewX][NewY])
+          {
+            PreviousData[NewX][NewY] = HULBPPixelData[NewX][NewY];
+            HULBPPixelData[NewX][NewY] = NULL;
+            if (PreviousData[x][y])
+            {
+              HULBPPixelData[NewX][NewY] = PreviousData[x][y];
+              PreviousData[x][y] = NULL;
+            } else {
+              HULBPPixelData[NewX][NewY] = HULBPPixelData[x][y];
+              HULBPPixelData[x][y] = NULL;
+            }
+          } else {
+            if (PreviousData[x][y])
+            {
+              HULBPPixelData[NewX][NewY] = PreviousData[x][y];
+              PreviousData[x][y] = NULL;
+            } else {
+              HULBPPixelData[NewX][NewY] = HULBPPixelData[x][y];
+              HULBPPixelData[x][y] = NULL;
+            }
+          }
+        } else {
+          if (HULBPPixelData[x][y])
+          {
+            delete[] HULBPPixelData[x][y]->PreviousHistogram;
+            for (int i2 = 0; i2 < HUHistogramsPerPixel; ++i2)
+              delete[] HULBPPixelData[x][y]->Histograms[i2];
+            delete[] HULBPPixelData[x][y]->Histograms;
+            delete[] HULBPPixelData[x][y]->BackgroundHistogram;
+            delete[] HULBPPixelData[x][y]->Weights;
+            delete HULBPPixelData[x][y];
+            HULBPPixelData[x][y] = NULL;
+          }
+        }
+      }
+      // Release unused data
+      for (int y = MaxY; y >= 0; --y)
+        for (int x = MaxX; x >= 0; --x)
+      {
+        if (PreviousData[x][y])
+        {
+          delete[] PreviousData[x][y]->PreviousHistogram;
+          for (int i2 = 0; i2 < HUHistogramsPerPixel; ++i2)
+            delete[] PreviousData[x][y]->Histograms[i2];
+          delete[] PreviousData[x][y]->Histograms;
+          delete[] PreviousData[x][y]->BackgroundHistogram;
+          delete[] PreviousData[x][y]->Weights;
+          delete PreviousData[x][y];
+          PreviousData[x][y] = NULL;
+        }
+      }
+      HUOFCamMovementX = HUOFCamMovementX % 1;
+    }
+  }
+
+  i1 = 0;
+  // Throw the missed points away
+  for (i = 0; i < HUOFPointsNumber; ++i)
+  {
+    if (PointsStatus[i] == 1)
+    {
+      HUOFPoints[0][i1] = HUOFPoints[1][i];
+      i1++;
+    }
+  }
+  HUOFPointsNumber -= i+1-i1;
+
+  if (HUOFPointsNumber < MaxTrackedPoints / 2)
+  {
+    printf("Re-init the optical flow\n");
+    HUOFDataState = ps_Initialized;
+    HUOFPointsNumber = CurrentImage.GetWidth()*CurrentImage.GetHeight() / 1000;
+  }
+  // Free memory
+  if (PreviousGray != PreviousImage.GetIplImage())
+    cvReleaseImage(&PreviousGray);
+  if (CurrentGray != CurrentImage.GetIplImage())
+    cvReleaseImage(&CurrentGray);
+  cvFree(&PointsStatus);
+}
+
+
+void MotionDetection::GetMotionsMaskHU(MEImage& mask_image)
+{
+  if (MDDataState != ps_Successful)
+  {
+    mask_image.Clear();
+    return;
+  }
+
+  // Reallocate the mask image if needs be
+  if ((HUImageWidth+HUHistogramArea-1 != mask_image.GetWidth()) ||
+       (HUImageHeight+HUHistogramArea-1 != mask_image.GetHeight()) ||
+       (mask_image.GetLayers() != 1))
+  {
+    mask_image.Realloc(HUImageWidth+HUHistogramArea-1,
+                       HUImageHeight+HUHistogramArea-1, 1);
+  }
+  mask_image.Clear();
+  // Generate the mask image
+  unsigned char* MaskImgData = mask_image.GetImageData();
+  int RowStart = (mask_image.GetHeight()-HUHistogramArea / 2)*mask_image.GetRowWidth();
+  int RowWidth = mask_image.GetRowWidth();
+
+  // Generate a graph about the histogram data
+  Graph::node_id Nodes[HUImageWidth / 2][HUImageHeight];
+  Graph *LBPGraph = new Graph();
+
+  for (int x = (HUImageWidth / 2)-1; x >= 0; --x)
+    for (int y = HUImageHeight-1; y >= 0; --y)
+    {
+      Nodes[x][y] = LBPGraph->add_node();
+    }
+
+  for (int x = (HUImageWidth / 2)-1; x >= 0; --x)
+    for (int y = HUImageHeight-1; y >= 0; --y)
+    {
+      LBPGraph->set_tweights(Nodes[x][y], 1,
+                             (short int)(HUMinCutWeight*(1-HULBPPixelData[x][y]->BackgroundRate)));
+
+      if (x > 0 && y > 0)
+      {
+        LBPGraph->add_edge(Nodes[x][y], Nodes[x-1][y], 1, 1);
+        LBPGraph->add_edge(Nodes[x][y], Nodes[x][y-1], 1, 1);
+      }
+    }
+
+  LBPGraph->maxflow();
+
+  for (int x = (HUImageWidth / 2)-1; x >= 0; --x)
+    for (int y = HUImageHeight-1; y >= 0; --y)
+    {
+      if (LBPGraph->what_segment(Nodes[x][y]) == Graph::SINK)
+        HULBPPixelData[x][y]->BackgroundRate = 0.0;
+      else
+        HULBPPixelData[x][y]->BackgroundRate = 1.0;
+    }
+
+  delete LBPGraph;
+  LBPGraph = NULL;
+  for (int y = HUImageHeight-1; y >= 0; --y)
+  {
+    for (int x = HUImageWidth-1; x >= 0; --x)
+    {
+      if (y % 2 == (x+1) % 2)
+        MaskImgData[RowStart+x+(HUHistogramArea / 2)] =
+            (HULBPPixelData[x / 2][y]->BackgroundRate == 0.0) ? 255 : 0;
+      else {
+        MaskImgData[RowStart+x+(HUHistogramArea / 2)] =
+            ((int)(x > 1 && HULBPPixelData[(x / 2)-1][y]->BackgroundRate == 0.0)+
+            (int)(x < mask_image.GetWidth()-HUHistogramArea-1 &&
+                  HULBPPixelData[(x / 2)+1][y]->BackgroundRate == 0.0)+
+            (int)(y > 0 && HULBPPixelData[x / 2][y-1]->BackgroundRate == 0.0)+
+            (int)(y < mask_image.GetHeight()-HUHistogramArea &&
+                  HULBPPixelData[x / 2][y+1]->BackgroundRate == 0.0) > 1)
+            ? 255 : 0;
+      }
+    }
+    RowStart -= RowWidth;
+  }
+
+  cvFloodFill(mask_image.GetIplImage(), cvPoint(0, 0), cvScalar(128, 128, 128, 128),
+              cvScalar(0, 0, 0, 0), cvScalar(0, 0, 0, 0));
+  for (int i = ((IplImage*)mask_image.GetIplImage())->widthStep*((IplImage*)mask_image.GetIplImage())->height-1; i >= 0; --i)
+  {
+    if (MaskImgData[i] == 128)
+    {
+      MaskImgData[i] = 0;
+    } else
+    if (MaskImgData[i] == 0)
+    {
+      MaskImgData[i] = 255;
+    }
+  }
+  // Apply an erode operator
+  mask_image.Erode(1);
+}
+
+
+void MotionDetection::SetSampleMaskHU(SampleMaskType mask_type, int desiredarea)
+{
+  if (HUMaskColumnAddDel == NULL || HUMaskRowAddDel == NULL)
+  {
+    printf("Auxiliary variables are NULL\n");
+    return;
+  }
+
+  // Generate a mask for computing the histograms
+  IplImage *MaskImage = cvCreateImage(cvSize(HUHistogramArea, HUHistogramArea), 8, 1);
+  int DesiredArea = desiredarea <= 0 ? HUHistogramBins*2 : desiredarea;
+  int CalculationMask[HUHistogramArea][HUHistogramArea];
+  int SquareSide = (int)MERound(sqrt(DesiredArea));
+  int CircleRadius = (int)MERound(sqrt((float)DesiredArea / ME_PI_VALUE));
+  int EllipseA = (int)MERound(HUHistogramArea / 2+1);
+  int EllipseB = (int)MERound(DesiredArea / (EllipseA*1.2*ME_PI_VALUE));
+
+  cvSetZero(MaskImage);
+
+  switch (mask_type)
+  {
+    case sm_Circle:
+      cvCircle(MaskImage, cvPoint(HUHistogramArea / 2, HUHistogramArea / 2),
+               CircleRadius, CV_RGB(1, 1, 1), -1);
+      break;
+
+    case sm_Square:
+      cvRectangle(MaskImage,
+                  cvPoint(HUHistogramArea / 2-SquareSide / 2, HUHistogramArea / 2-SquareSide / 2),
+                  cvPoint(HUHistogramArea / 2+SquareSide / 2, HUHistogramArea / 2+SquareSide / 2),
+                  CV_RGB(1, 1, 1), -1);
+      break;
+
+    case sm_Ellipse:
+      cvEllipse(MaskImage, cvPoint(HUHistogramArea / 2, HUHistogramArea / 2),
+                cvSize(EllipseA, EllipseB), 45, 0, 360,
+                CV_RGB(1, 1, 1), -1);
+      break;
+
+    case sm_RandomPixels:
+      HUSamplePixels = 0;
+      while (HUSamplePixels != DesiredArea)
+      {
+        int i = rand() % HUHistogramArea;
+        int j = rand() % HUHistogramArea;
+
+        if (MaskImage->imageData[i*MaskImage->widthStep+j] == 0)
+        {
+          MaskImage->imageData[i*MaskImage->widthStep+j] = 1;
+          HUSamplePixels++;
+        }
+      }
+      break;
+
+    default:
+      cvCircle(MaskImage, cvPoint(HUHistogramArea / 2, HUHistogramArea / 2),
+               (int)MERound(sqrt((float)DesiredArea / ME_PI_VALUE)), CV_RGB(1, 1, 1), -1);
+      break;
+  }
+
+  HUSamplePixels = 0;
+  memset(CalculationMask, 0, sizeof(CalculationMask));
+
+  for (int i = 0; i < HUHistogramArea; ++i)
+    for (int i1 = 0; i1 < HUHistogramArea; ++i1)
+  {
+    if (MaskImage->imageData[i*MaskImage->widthStep+i1] != 0)
+    {
+      HUSamplePixels++;
+      CalculationMask[i][i1] = 1;
+    } else {
+      CalculationMask[i][i1] = 0;
+    }
+  }
+
+  // Fill an auxiliary variable for fast computing with data
+  for (int i = 0; i < HUHistogramArea; ++i)
+  {
+    HUMaskColumnAddDel[i][0] = -1;
+    for (int i1 = 0; i1 < HUHistogramArea; ++i1)
+    {
+      if (CalculationMask[i][i1] != 0)
+      {
+        HUMaskColumnAddDel[i][0] = i1;
+        break;
+      }
+    }
+    HUMaskColumnAddDel[i][1] = -1;
+    for (int i1 = HUHistogramArea-1; i1 >= 0; --i1)
+    {
+      if (CalculationMask[i][i1] != 0)
+      {
+        HUMaskColumnAddDel[i][1] = i1+1;
+        break;
+      }
+    }
+  }
+  // Fill an auxiliary variable for fast computing with data
+  for (int i = 0; i < HUHistogramArea; ++i)
+  {
+    HUMaskRowAddDel[i][0] = -1;
+    for (int i1 = 0; i1 < HUHistogramArea; ++i1)
+    {
+      if (CalculationMask[i1][i] != 0)
+      {
+        HUMaskRowAddDel[i][0] = i1;
+        break;
+      }
+    }
+    HUMaskRowAddDel[i][1] = -1;
+    for (int i1 = HUHistogramArea-1; i1 >= 0; --i1)
+    {
+      if (CalculationMask[i1][i] != 0)
+      {
+        HUMaskRowAddDel[i][1] = i1+1;
+        break;
+      }
+    }
+  }
+  // Freeing memory
+  cvReleaseImage(&MaskImage);
+}
+
diff --git a/package_bgs/ck/MotionDetection.hpp b/package_bgs/ck/MotionDetection.hpp
new file mode 100644
index 0000000..6e11521
--- /dev/null
+++ b/package_bgs/ck/MotionDetection.hpp
@@ -0,0 +1,401 @@
+/*
+ *  This file is part of the AiBO+ project
+ *
+ *  Copyright (C) 2005-2013 Csaba Kertész (csaba.kertesz@gmail.com)
+ *
+ *  AiBO+ is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  AiBO+ is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef MotionDetection_hpp
+#define MotionDetection_hpp
+
+/**
+ *  @addtogroup mindeye
+ *  @{
+ */
+
+#include "MEDefs.hpp"
+#include "MEImage.hpp"
+
+class CvBGStatModel;
+class CvPoint2D32f;
+
+// Struct for histogram update data of a pixel
+struct MEPixelDataType;
+
+/**
+ * MotionDetection
+ * @brief Extract moving objects from image sequence
+ */
+class MotionDetection
+{
+public:
+
+  /// Types of motion detection
+  typedef enum
+  {
+    md_Min = 0,               /*!< Minimum value */
+    md_NotDefined = md_Min,   /*!< Not defined */
+    md_DLBPHistograms,        /*!< Dynamic LBP */
+    md_LBPHistograms,         /*!< Normal LBP */
+    md_Max = md_LBPHistograms /*!< Maximum value */
+  } DetectorType;
+
+  /// Types of sample mask
+  typedef enum
+  {
+    sm_Min = 0,              /*!< Minimum value */
+    sm_Circle = sm_Min,      /*!< Circle */
+    sm_Square,               /*!< Square */
+    sm_Ellipse,              /*!< Ellipse */
+    sm_RandomPixels,         /*!< Random pixels */
+    sm_Max = sm_RandomPixels /*!< Maximum value */
+  } SampleMaskType;
+
+  /// Types of motion detection parameters
+  typedef enum
+  {
+    mdp_Min = 0,                         /*!< Minimum value */
+    mdp_HUProximityThreshold = mdp_Min,  /*!< Proximity threshold */
+    mdp_HUBackgroundThreshold,           /*!< Background threshold */
+    mdp_HUHistogramLearningRate,         /*!< Histogram learning rate */
+    mdp_HUWeightsLearningRate,           /*!< Weights learning rate */
+    mdp_HUMinCutWeight,                  /*!< Minimum cut weight */
+    mdp_HUDesiredSamplePixels,           /*!< Desired sample pixels */
+    mdp_HUHistogramsPerPixel,            /*!< Histogram per pixel */
+    mdp_HUHistogramArea,                 /*!< Histogram area */
+    mdp_HUHistogramBins,                 /*!< Histogram bins */
+    mdp_HUColorSpace,                    /*!< Color space */
+    mdp_HULBPMode,                       /*!< LBP mode */
+    mdp_Max = mdp_HULBPMode              /*!< Maximum value */
+  } ParametersType;
+
+  /*!
+   * @brief Class constructor
+   *
+   * @param mode Detection mode
+   *
+   * Class constructor with the possibility to specify the detection mode.
+   * The default is dynamic LBP.
+   *
+   */
+
+  MotionDetection(DetectorType mode = md_DLBPHistograms);
+  /// Destructor of class
+  ~MotionDetection();
+
+  /*
+  -------------------------------------------------------------------
+                           Motion methods
+  -------------------------------------------------------------------
+  */
+
+  /*!
+   * @brief Set the mode of the motion detection
+   *
+   * @param newmode New mode of detection
+   *
+   * Set the mode of the motion detection.
+   *
+   */
+
+  void SetMode(DetectorType newmode);
+
+  /*!
+   * @brief Get a parameter value of the motion detection
+   *
+   * @param param Parameter of the detection
+   *
+   * @return Queried value
+   *
+   * Get the value of a parameter of the motion detection.
+   *
+   */
+
+  float GetParameter(ParametersType param) const;
+
+  /*!
+   * @brief Set a parameter of the motion detection
+   *
+   * @param param Parameter of the detection
+   * @param value New value
+   *
+   * Set a new value to a parameter of the motion detection.
+   *
+   */
+
+  void SetParameter(ParametersType param, float value);
+
+  /*!
+   * @brief Detect the motions on an image
+   *
+   * @param image Image to process
+   *
+   * The function designed to search motions in image streams
+   * thus it needs to process the image sequence frame by frame.
+   * It processes an image from this sequence and searches moving blobs
+   * on that.
+   *
+   */
+
+  void DetectMotions(MEImage& image);
+
+  /*!
+   * @brief Get mask image with detected motions
+   *
+   * @param mask_image Result mask image
+   *
+   * The function creates a mask image on which the objects are
+   * indicated by white blobs.
+   *
+   */
+
+  void GetMotionsMask(MEImage& mask_image);
+
+  /*!
+   * @brief Calculate results of the motion detection
+   *
+   * @param referenceimage Reference mask image
+   * @param tnegatives True negative pixels
+   * @param tpositives True positive pixels
+   * @param ttnegatives Total true negative pixels
+   * @param ttpositives Total true positive pixels
+   *
+   * The function calculates the results of the motion detection
+   * between the current motion mask and a given reference mask
+   * image.
+   *
+   */
+
+  void CalculateResults(MEImage& referenceimage, int& tnegatives, int& tpositives,
+                        int& ttnegatives, int& ttpositives);
+
+private:
+
+  /*!
+   * @brief Release data structures
+   *
+   * Function releases the data structures.
+   *
+   */
+
+  void ReleaseData();
+
+  /*
+  -------------------------------------------------------------------
+                    Histogram update methods
+  -------------------------------------------------------------------
+  */
+
+  /*!
+   * @brief Init HU data structures
+   *
+   * @param imagewidth Image width for HU to process
+   * @param imageheight Image height for HU to process
+   *
+   * Function allocates/re-allocates the HU data structures and they
+   * are cleared if needs be.
+   *
+   */
+
+  void InitHUData(int imagewidth, int imageheight);
+
+  /*!
+   * @brief Init HU optical flow data structures
+   *
+   * @param imagewidth Image width for HU to process
+   * @param imageheight Image height for HU to process
+   *
+   * Function allocates/re-allocates the HU optical flow
+   * data structures.
+   *
+   */
+
+  void InitHUOFData(int imagewidth, int imageheight);
+
+  /*!
+   * @brief Release HU data structures
+   *
+   * Function releases the HU data structures.
+   *
+   */
+
+  void ReleaseHUData();
+
+  /*!
+   * @brief Release HU optical flow data structures
+   *
+   * Function releases the HU optical flow data structures.
+   *
+   */
+
+  void ReleaseHUOFData();
+
+  /*!
+   * @brief Clear HU data structures
+   *
+   * Function clears the HU data structures.
+   *
+   */
+
+  void ClearHUData();
+
+  /*!
+   * @brief Get mask image with detected motions by histogram update
+   *
+   * @param mask_image Result mask image
+   *
+   * The function creates a mask image on which the objects are
+   * indicated by white blobs.
+   *
+   */
+
+  void GetMotionsMaskHU(MEImage& mask_image);
+
+  /*!
+   * @brief Set the sample mask
+   *
+   * @param mask_type Type of the mask
+   * @param desiredarea The desired area size of the mask
+   *
+   * The function creates a sample mask with a desired form
+   * (square, circle, ellipse, random pixels) and size.
+   *
+   */
+
+  void SetSampleMaskHU(SampleMaskType mask_type, int desiredarea);
+
+  /*!
+   * @brief Detect the motions on an image with histogram update
+   *
+   * @param image Image to process
+   *
+   * The function designed to search motions in image streams
+   * thus it needs to process the image sequence frame by frame.
+   * It processes an image from this sequence and searches moving blobs
+   * on that. It uses histogram update method.
+   *
+   */
+
+  void DetectMotionsHU(MEImage& image);
+
+  /*!
+   * @brief Update a model
+   *
+   * @param image Image to process
+   * @param model Model to update
+   *
+   * The function updates a histogram model of the image.
+   *
+   */
+
+  void UpdateModelHU(MEImage& image, MEPixelDataType*** model);
+
+  /*!
+   * @brief Update the HU data structure for one pixel
+   *
+   * @param pixeldata Pixel data
+   * @param histogram Current histogram
+   *
+   * This method updates the HU data for one pixel.
+   *
+   */
+
+  void UpdateHUPixelData(MEPixelDataType* pixeldata, const float *histogram);
+
+  /*!
+   * @brief Optical flow correction of the camera movements
+   *
+   * The function trackes some points on the scene if a camera movement is
+   * detected, then the LBP pixel data is corrected.
+   *
+   */
+
+  void OpticalFlowCorrection();
+
+private:
+  // GENERAL VARIABLES
+  /// Motion detection type
+  DetectorType MDMode;
+  /// State of the data structures
+  MEProcessStateType MDDataState;
+  /// Processed number in the image sequence
+  int Frames;
+  /// Store the current image
+  MEImage CurrentImage;
+  /// Store the previous image
+  MEImage PreviousImage;
+  /// Store the current mask image
+  MEImage MaskImage;
+  /// Store the current mask image
+  bool ReadyMask;
+  // HISTOGRAM UPDATE VARIABLES
+  /// Color space (-1 = no conversion)
+  int HUColorSpace;
+  /// LBP calculation mode (-1 = no conversion)
+  int HULBPMode;
+  /// Histograms per pixel
+  int HUHistogramsPerPixel;
+  /// Histogram area
+  int HUHistogramArea;
+  /// Histogram bins
+  int HUHistogramBins;
+  /// Image width for histogram update
+  int HUImageWidth;
+  /// Image height for histogram update
+  int HUImageHeight;
+  /// Data of the LBP histograms
+  MEPixelDataType ***HULBPPixelData;
+  /// Store the previous blue layer
+  MEImage PreviousBlueLayer;
+  /// Histogram proximity threshold
+  float HUPrThres;
+  /// Background selection threshold
+  float HUBackgrThres;
+  /// Histogram learning rate
+  float HUHistLRate;
+  /// Weights learning rate
+  float HUWeightsLRate;
+  /// Pixel number used to calculate the histograms
+  int HUSamplePixels;
+  /// The desired pixel number used to calculate the histograms (-1 = Auto)
+  int HUDesiredSamplePixels;
+  /// Min cut weight
+  float HUMinCutWeight;
+  /// Auxiliary variable for computing the histograms in a column
+  int **HUMaskColumnAddDel;
+  /// Auxiliary variable for computing the histograms in a row
+  int **HUMaskRowAddDel;
+  // OPTICAL FLOW VARIABLES
+  /// State of the optical flow
+  MEProcessStateType HUOFDataState;
+  /// Number of the tracked points with optical flow
+  int HUOFPointsNumber;
+  /// Tracked points
+  CvPoint2D32f* HUOFPoints[2];
+  /// The rest x component of previous camera movement
+  int HUOFCamMovementX;
+  /// Maximum tracked points detected in one cycle
+  int MaxTrackedPoints;
+  /// Processed frame number with optical flow in the image sequence
+  int HUOFFrames;
+  /// Indicator of a new camera movement
+  bool HUOFCamMovement;
+};
+
+/** @} */
+
+#endif
diff --git a/package_bgs/ck/README.TXT b/package_bgs/ck/README.TXT
new file mode 100644
index 0000000..d76c6a3
--- /dev/null
+++ b/package_bgs/ck/README.TXT
@@ -0,0 +1,135 @@
+###################################################################
+#                                                                 #
+#    MAXFLOW - software for computing mincut/maxflow in a graph   #
+#                        Version 2.2                              #
+#    http://www.cs.cornell.edu/People/vnk/software.html           #
+#                                                                 #
+#    Yuri Boykov (yuri@csd.uwo.ca)                                #
+#    Vladimir Kolmogorov (vnk@cs.cornell.edu)                     #
+#    2001                                                         #
+#                                                                 #
+###################################################################
+
+1. Introduction.
+
+This software library implements the maxflow algorithm
+described in
+
+	An Experimental Comparison of Min-Cut/Max-Flow Algorithms
+	for Energy Minimization in Vision.
+	Yuri Boykov and Vladimir Kolmogorov.
+	In IEEE Transactions on Pattern Analysis and Machine Intelligence (PAMI), 
+	September 2004
+
+This algorithm was developed by Yuri Boykov and Vladimir Kolmogorov
+at Siemens Corporate Research. To make it available for public use,
+it was later reimplemented by Vladimir Kolmogorov based on open publications.
+
+If you use this software for research purposes, you should cite
+the aforementioned paper in any resulting publication.
+
+Tested under windows, Visual C++ 6.0 compiler and unix (SunOS 5.8
+and RedHat Linux 7.0, GNU c++ compiler).
+
+##################################################################
+
+2. License.
+
+    Copyright 2001 Vladimir Kolmogorov (vnk@cs.cornell.edu), Yuri Boykov (yuri@csd.uwo.ca).
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+##################################################################
+
+3. Graph representation.
+
+There are two versions of the algorithm using different
+graph representations (adjacency list and forward star).
+The former one uses more than twice as much memory as the
+latter one but is 10-20% faster.
+
+Memory allocation (assuming that all capacities are 'short' - 2 bytes):
+
+                 |   Nodes    |   Arcs
+------------------------------------------
+Adjacency list   | *24 bytes  | *14 bytes
+Forward star     | *28 bytes  |  6 bytes
+
+(* means that often it should be rounded up to be a multiple of 4
+- some compilers (e.g. Visual C++) seem to round up elements
+of arrays unless the are structures containing only char[].)
+
+Note that arcs are always added in pairs - in forward and reverse directions.
+Arcs between nodes and terminals (the source and the sink) are
+not stored as arcs, but rather as a part of nodes.
+
+The assumption for the forward star representation is that
+the maximum number of arcs per node (except the source
+and the sink) is much less than ARC_BLOCK_SIZE (1024 by default).
+
+Both versions have the same interface.
+
+##################################################################
+
+4. Example usage.
+
+This section shows how to use the library to compute
+a minimum cut on the following graph:
+
+		        SOURCE
+		       /       \
+		     1/         \2
+		     /      3    \
+		   node0 -----> node1
+		     |   <-----   |
+		     |      4     |
+		     \            /
+		     5\          /6
+		       \        /
+		          SINK
+
+///////////////////////////////////////////////////
+
+#include <stdio.h>
+#include "graph.h"
+
+void main()
+{
+	Graph::node_id nodes[2];
+	Graph *g = new Graph();
+
+	nodes[0] = g -> add_node();
+	nodes[1] = g -> add_node();
+	g -> set_tweights(nodes[0], 1, 5);
+	g -> set_tweights(nodes[1], 2, 6);
+	g -> add_edge(nodes[0], nodes[1], 3, 4);
+
+	Graph::flowtype flow = g -> maxflow();
+
+	printf("Flow = %d\n", flow);
+	printf("Minimum cut:\n");
+	if (g->what_segment(nodes[0]) == Graph::SOURCE)
+		printf("node0 is in the SOURCE set\n");
+	else
+		printf("node0 is in the SINK set\n");
+	if (g->what_segment(nodes[1]) == Graph::SOURCE)
+		printf("node1 is in the SOURCE set\n");
+	else
+		printf("node1 is in the SINK set\n");
+
+	delete g;
+}
+
+///////////////////////////////////////////////////
diff --git a/package_bgs/ck/block.h b/package_bgs/ck/block.h
new file mode 100644
index 0000000..a243ed1
--- /dev/null
+++ b/package_bgs/ck/block.h
@@ -0,0 +1,286 @@
+/* block.h */
+/*
+    Copyright 2001 Vladimir Kolmogorov (vnk@cs.cornell.edu), Yuri Boykov (yuri@csd.uwo.ca).
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+
+/*
+	Template classes Block and DBlock
+	Implement adding and deleting items of the same type in blocks.
+
+	If there there are many items then using Block or DBlock
+	is more efficient than using 'new' and 'delete' both in terms
+	of memory and time since
+	(1) On some systems there is some minimum amount of memory
+	    that 'new' can allocate (e.g., 64), so if items are
+	    small that a lot of memory is wasted.
+	(2) 'new' and 'delete' are designed for items of varying size.
+	    If all items has the same size, then an algorithm for
+	    adding and deleting can be made more efficient.
+	(3) All Block and DBlock functions are inline, so there are
+	    no extra function calls.
+
+	Differences between Block and DBlock:
+	(1) DBlock allows both adding and deleting items,
+	    whereas Block allows only adding items.
+	(2) Block has an additional operation of scanning
+	    items added so far (in the order in which they were added).
+	(3) Block allows to allocate several consecutive
+	    items at a time, whereas DBlock can add only a single item.
+
+	Note that no constructors or destructors are called for items.
+
+	Example usage for items of type 'MyType':
+
+	///////////////////////////////////////////////////
+	#include "block.h"
+	#define BLOCK_SIZE 1024
+	typedef struct { int a, b; } MyType;
+	MyType *ptr, *array[10000];
+
+	...
+
+	Block<MyType> *block = new Block<MyType>(BLOCK_SIZE);
+
+	// adding items
+	for (int i=0; i<sizeof(array); i++)
+	{
+		ptr = block -> New();
+		ptr -> a = ptr -> b = rand();
+	}
+
+	// reading items
+	for (ptr=block->ScanFirst(); ptr; ptr=block->ScanNext())
+	{
+		printf("%d %d\n", ptr->a, ptr->b);
+	}
+
+	delete block;
+
+	...
+
+	DBlock<MyType> *dblock = new DBlock<MyType>(BLOCK_SIZE);
+	
+	// adding items
+	for (int i=0; i<sizeof(array); i++)
+	{
+		array[i] = dblock -> New();
+	}
+
+	// deleting items
+	for (int i=0; i<sizeof(array); i+=2)
+	{
+		dblock -> Delete(array[i]);
+	}
+
+	// adding items
+	for (int i=0; i<sizeof(array); i++)
+	{
+		array[i] = dblock -> New();
+	}
+
+	delete dblock;
+
+	///////////////////////////////////////////////////
+
+	Note that DBlock deletes items by marking them as
+	empty (i.e., by adding them to the list of free items),
+	so that this memory could be used for subsequently
+	added items. Thus, at each moment the memory allocated
+	is determined by the maximum number of items allocated
+	simultaneously at earlier moments. All memory is
+	deallocated only when the destructor is called.
+*/
+
+#ifndef __BLOCK_H__
+#define __BLOCK_H__
+
+#include <stdlib.h>
+#include <stdio.h>
+
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+
+template <class Type> class Block
+{
+public:
+	/* Constructor. Arguments are the block size and
+	   (optionally) the pointer to the function which
+	   will be called if allocation failed; the message
+	   passed to this function is "Not enough memory!" */
+	Block(int size, void (*err_function)(char *) = NULL) { first = last = NULL; block_size = size; error_function = err_function; }
+
+	/* Destructor. Deallocates all items added so far */
+	~Block() { while (first) { block *next = first -> next; delete first; first = next; } }
+
+	/* Allocates 'num' consecutive items; returns pointer
+	   to the first item. 'num' cannot be greater than the
+	   block size since items must fit in one block */
+	Type *New(int num = 1)
+	{
+		Type *t;
+
+		if (!last || last->current + num > last->last)
+		{
+			if (last && last->next) last = last -> next;
+			else
+			{
+				block *next = (block *) new char [sizeof(block) + (block_size-1)*sizeof(Type)];
+                                if (!next) { fprintf(stderr, "Not enough memory!"); exit(1); }
+				if (last) last -> next = next;
+				else first = next;
+				last = next;
+				last -> current = & ( last -> data[0] );
+				last -> last = last -> current + block_size;
+				last -> next = NULL;
+			}
+		}
+
+		t = last -> current;
+		last -> current += num;
+		return t;
+	}
+
+	/* Returns the first item (or NULL, if no items were added) */
+	Type *ScanFirst()
+	{
+		scan_current_block = first;
+		if (!scan_current_block) return NULL;
+		scan_current_data = & ( scan_current_block -> data[0] );
+		return scan_current_data ++;
+	}
+
+	/* Returns the next item (or NULL, if all items have been read)
+	   Can be called only if previous ScanFirst() or ScanNext()
+	   call returned not NULL. */
+	Type *ScanNext()
+	{
+		if (scan_current_data >= scan_current_block -> current)
+		{
+			scan_current_block = scan_current_block -> next;
+			if (!scan_current_block) return NULL;
+			scan_current_data = & ( scan_current_block -> data[0] );
+		}
+		return scan_current_data ++;
+	}
+
+	/* Marks all elements as empty */
+	void Reset()
+	{
+		block *b;
+		if (!first) return;
+		for (b=first; ; b=b->next)
+		{
+			b -> current = & ( b -> data[0] );
+			if (b == last) break;
+		}
+		last = first;
+	}
+
+/***********************************************************************/
+
+private:
+
+	typedef struct block_st
+	{
+		Type					*current, *last;
+		struct block_st			*next;
+		Type					data[1];
+	} block;
+
+	int		block_size;
+	block	*first;
+	block	*last;
+
+	block	*scan_current_block;
+	Type	*scan_current_data;
+
+	void	(*error_function)(char *);
+};
+
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+
+template <class Type> class DBlock
+{
+public:
+	/* Constructor. Arguments are the block size and
+	   (optionally) the pointer to the function which
+	   will be called if allocation failed; the message
+	   passed to this function is "Not enough memory!" */
+	DBlock(int size, void (*err_function)(char *) = NULL) { first = NULL; first_free = NULL; block_size = size; error_function = err_function; }
+
+	/* Destructor. Deallocates all items added so far */
+	~DBlock() { while (first) { block *next = first -> next; delete first; first = next; } }
+
+	/* Allocates one item */
+	Type *New()
+	{
+		block_item *item;
+
+		if (!first_free)
+		{
+			block *next = first;
+			first = (block *) new char [sizeof(block) + (block_size-1)*sizeof(block_item)];
+			if (!first) { fprintf(stderr, "Not enough memory!"); exit(1); }
+			first_free = & (first -> data[0] );
+			for (item=first_free; item<first_free+block_size-1; item++)
+				item -> next_free = item + 1;
+			item -> next_free = NULL;
+			first -> next = next;
+		}
+
+		item = first_free;
+		first_free = item -> next_free;
+		return (Type *) item;
+	}
+
+	/* Deletes an item allocated previously */
+	void Delete(Type *t)
+	{
+		((block_item *) t) -> next_free = first_free;
+		first_free = (block_item *) t;
+	}
+
+/***********************************************************************/
+
+private:
+
+	typedef union block_item_st
+	{
+		Type			t;
+		block_item_st	*next_free;
+	} block_item;
+
+	typedef struct block_st
+	{
+		struct block_st			*next;
+		block_item				data[1];
+	} block;
+
+	int			block_size;
+	block		*first;
+	block_item	*first_free;
+
+	void	(*error_function)(char *);
+};
+
+
+#endif
+
diff --git a/package_bgs/ck/graph.cpp b/package_bgs/ck/graph.cpp
new file mode 100644
index 0000000..fb4cf9f
--- /dev/null
+++ b/package_bgs/ck/graph.cpp
@@ -0,0 +1,80 @@
+/* graph.cpp */
+/*
+    Copyright 2001 Vladimir Kolmogorov (vnk@cs.cornell.edu), Yuri Boykov (yuri@csd.uwo.ca).
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+
+#include <stdio.h>
+#include "graph.h"
+
+Graph::Graph(void (*err_function)(char *))
+{
+	error_function = err_function;
+	node_block = new Block<node>(NODE_BLOCK_SIZE, error_function);
+	arc_block  = new Block<arc>(NODE_BLOCK_SIZE, error_function);
+	flow = 0;
+}
+
+Graph::~Graph()
+{
+	delete node_block;
+	delete arc_block;
+}
+
+Graph::node_id Graph::add_node()
+{
+	node *i = node_block -> New();
+
+	i -> first = NULL;
+	i -> tr_cap = 0;
+
+	return (node_id) i;
+}
+
+void Graph::add_edge(node_id from, node_id to, captype cap, captype rev_cap)
+{
+	arc *a, *a_rev;
+
+	a = arc_block -> New(2);
+	a_rev = a + 1;
+
+	a -> sister = a_rev;
+	a_rev -> sister = a;
+	a -> next = ((node*)from) -> first;
+	((node*)from) -> first = a;
+	a_rev -> next = ((node*)to) -> first;
+	((node*)to) -> first = a_rev;
+	a -> head = (node*)to;
+	a_rev -> head = (node*)from;
+	a -> r_cap = cap;
+	a_rev -> r_cap = rev_cap;
+}
+
+void Graph::set_tweights(node_id i, captype cap_source, captype cap_sink)
+{
+	flow += (cap_source < cap_sink) ? cap_source : cap_sink;
+	((node*)i) -> tr_cap = cap_source - cap_sink;
+}
+
+void Graph::add_tweights(node_id i, captype cap_source, captype cap_sink)
+{
+	register captype delta = ((node*)i) -> tr_cap;
+	if (delta > 0) cap_source += delta;
+	else           cap_sink   -= delta;
+	flow += (cap_source < cap_sink) ? cap_source : cap_sink;
+	((node*)i) -> tr_cap = cap_source - cap_sink;
+}
diff --git a/package_bgs/ck/graph.h b/package_bgs/ck/graph.h
new file mode 100644
index 0000000..fdae566
--- /dev/null
+++ b/package_bgs/ck/graph.h
@@ -0,0 +1,180 @@
+/* graph.h */
+/*
+	This software library implements the maxflow algorithm
+	described in
+
+		An Experimental Comparison of Min-Cut/Max-Flow Algorithms
+		for Energy Minimization in Vision.
+		Yuri Boykov and Vladimir Kolmogorov.
+		In IEEE Transactions on Pattern Analysis and Machine Intelligence (PAMI), 
+		September 2004
+
+	This algorithm was developed by Yuri Boykov and Vladimir Kolmogorov
+	at Siemens Corporate Research. To make it available for public use,
+	it was later reimplemented by Vladimir Kolmogorov based on open publications.
+
+	If you use this software for research purposes, you should cite
+	the aforementioned paper in any resulting publication.
+*/
+	
+/*	
+	Copyright 2001 Vladimir Kolmogorov (vnk@cs.cornell.edu), Yuri Boykov (yuri@csd.uwo.ca).
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+
+/*
+	For description, example usage, discussion of graph representation
+	and memory usage see README.TXT.
+*/
+
+#ifndef __GRAPH_H__
+#define __GRAPH_H__
+
+#include "block.h"
+
+/*
+	Nodes, arcs and pointers to nodes are
+	added in blocks for memory and time efficiency.
+	Below are numbers of items in blocks
+*/
+#define NODE_BLOCK_SIZE 512
+#define ARC_BLOCK_SIZE 1024
+#define NODEPTR_BLOCK_SIZE 128
+
+class Graph
+{
+public:
+	typedef enum
+	{
+		SOURCE	= 0,
+		SINK	= 1
+	} termtype; /* terminals */
+
+	/* Type of edge weights.
+	   Can be changed to char, int, float, double, ... */
+	typedef short captype;
+	/* Type of total flow */
+	typedef int flowtype;
+
+	typedef void * node_id;
+
+	/* interface functions */
+
+	/* Constructor. Optional argument is the pointer to the
+	   function which will be called if an error occurs;
+	   an error message is passed to this function. If this
+	   argument is omitted, exit(1) will be called. */
+	Graph(void (*err_function)(char *) = NULL);
+
+	/* Destructor */
+	~Graph();
+
+	/* Adds a node to the graph */
+	node_id add_node();
+
+	/* Adds a bidirectional edge between 'from' and 'to'
+	   with the weights 'cap' and 'rev_cap' */
+	void add_edge(node_id from, node_id to, captype cap, captype rev_cap);
+
+	/* Sets the weights of the edges 'SOURCE->i' and 'i->SINK'
+	   Can be called at most once for each node before any call to 'add_tweights'.
+	   Weights can be negative */
+	void set_tweights(node_id i, captype cap_source, captype cap_sink);
+
+	/* Adds new edges 'SOURCE->i' and 'i->SINK' with corresponding weights
+	   Can be called multiple times for each node.
+	   Weights can be negative */
+	void add_tweights(node_id i, captype cap_source, captype cap_sink);
+
+	/* After the maxflow is computed, this function returns to which
+	   segment the node 'i' belongs (Graph::SOURCE or Graph::SINK) */
+	termtype what_segment(node_id i);
+
+	/* Computes the maxflow. Can be called only once. */
+	flowtype maxflow();
+
+/***********************************************************************/
+/***********************************************************************/
+/***********************************************************************/
+	
+private:
+	/* internal variables and functions */
+
+	struct arc_st;
+
+	/* node structure */
+	typedef struct node_st
+	{
+		arc_st			*first;		/* first outcoming arc */
+
+		arc_st			*parent;	/* node's parent */
+		node_st			*next;		/* pointer to the next active node
+									   (or to itself if it is the last node in the list) */
+		int				TS;			/* timestamp showing when DIST was computed */
+		int				DIST;		/* distance to the terminal */
+		short			is_sink;	/* flag showing whether the node is in the source or in the sink tree */
+
+		captype			tr_cap;		/* if tr_cap > 0 then tr_cap is residual capacity of the arc SOURCE->node
+									   otherwise         -tr_cap is residual capacity of the arc node->SINK */
+	} node;
+
+	/* arc structure */
+	typedef struct arc_st
+	{
+		node_st			*head;		/* node the arc points to */
+		arc_st			*next;		/* next arc with the same originating node */
+		arc_st			*sister;	/* reverse arc */
+
+		captype			r_cap;		/* residual capacity */
+	} arc;
+
+	/* 'pointer to node' structure */
+	typedef struct nodeptr_st
+	{
+		node_st			*ptr;
+		nodeptr_st		*next;
+	} nodeptr;
+
+	Block<node>			*node_block;
+	Block<arc>			*arc_block;
+	DBlock<nodeptr>		*nodeptr_block;
+
+	void	(*error_function)(char *);	/* this function is called if a error occurs,
+										   with a corresponding error message
+										   (or exit(1) is called if it's NULL) */
+
+	flowtype			flow;		/* total flow */
+
+/***********************************************************************/
+
+	node				*queue_first[2], *queue_last[2];	/* list of active nodes */
+	nodeptr				*orphan_first, *orphan_last;		/* list of pointers to orphans */
+	int					TIME;								/* monotonically increasing global counter */
+
+/***********************************************************************/
+
+	/* functions for processing active list */
+	void set_active(node *i);
+	node *next_active();
+
+	void maxflow_init();
+	void augment(arc *middle_arc);
+	void process_source_orphan(node *i);
+	void process_sink_orphan(node *i);
+};
+
+#endif
diff --git a/package_bgs/ck/maxflow.cpp b/package_bgs/ck/maxflow.cpp
new file mode 100644
index 0000000..8812a4a
--- /dev/null
+++ b/package_bgs/ck/maxflow.cpp
@@ -0,0 +1,514 @@
+/* maxflow.cpp */
+/*
+    Copyright 2001 Vladimir Kolmogorov (vnk@cs.cornell.edu), Yuri Boykov (yuri@csd.uwo.ca).
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+
+#include <stdio.h>
+#include "graph.h"
+
+/*
+	special constants for node->parent
+*/
+#define TERMINAL ( (arc *) 1 )		/* to terminal */
+#define ORPHAN   ( (arc *) 2 )		/* orphan */
+
+#define INFINITE_D 1000000000		/* infinite distance to the terminal */
+
+/***********************************************************************/
+
+/*
+	Functions for processing active list.
+	i->next points to the next node in the list
+	(or to i, if i is the last node in the list).
+	If i->next is NULL iff i is not in the list.
+
+	There are two queues. Active nodes are added
+	to the end of the second queue and read from
+	the front of the first queue. If the first queue
+	is empty, it is replaced by the second queue
+	(and the second queue becomes empty).
+*/
+
+inline void Graph::set_active(node *i)
+{
+	if (!i->next)
+	{
+		/* it's not in the list yet */
+		if (queue_last[1]) queue_last[1] -> next = i;
+		else               queue_first[1]        = i;
+		queue_last[1] = i;
+		i -> next = i;
+	}
+}
+
+/*
+	Returns the next active node.
+	If it is connected to the sink, it stays in the list,
+	otherwise it is removed from the list
+*/
+inline Graph::node * Graph::next_active()
+{
+	node *i;
+
+	while ( 1 )
+	{
+		if (!(i=queue_first[0]))
+		{
+			queue_first[0] = i = queue_first[1];
+			queue_last[0]  = queue_last[1];
+			queue_first[1] = NULL;
+			queue_last[1]  = NULL;
+			if (!i) return NULL;
+		}
+
+		/* remove it from the active list */
+		if (i->next == i) queue_first[0] = queue_last[0] = NULL;
+		else              queue_first[0] = i -> next;
+		i -> next = NULL;
+
+		/* a node in the list is active iff it has a parent */
+		if (i->parent) return i;
+	}
+}
+
+/***********************************************************************/
+
+void Graph::maxflow_init()
+{
+	node *i;
+
+	queue_first[0] = queue_last[0] = NULL;
+	queue_first[1] = queue_last[1] = NULL;
+	orphan_first = NULL;
+
+	for (i=node_block->ScanFirst(); i; i=node_block->ScanNext())
+	{
+		i -> next = NULL;
+		i -> TS = 0;
+		if (i->tr_cap > 0)
+		{
+			/* i is connected to the source */
+			i -> is_sink = 0;
+			i -> parent = TERMINAL;
+			set_active(i);
+			i -> TS = 0;
+			i -> DIST = 1;
+		}
+		else if (i->tr_cap < 0)
+		{
+			/* i is connected to the sink */
+			i -> is_sink = 1;
+			i -> parent = TERMINAL;
+			set_active(i);
+			i -> TS = 0;
+			i -> DIST = 1;
+		}
+		else
+		{
+			i -> parent = NULL;
+		}
+	}
+	TIME = 0;
+}
+
+/***********************************************************************/
+
+void Graph::augment(arc *middle_arc)
+{
+	node *i;
+	arc *a;
+	captype bottleneck;
+	nodeptr *np;
+
+
+	/* 1. Finding bottleneck capacity */
+	/* 1a - the source tree */
+	bottleneck = middle_arc -> r_cap;
+	for (i=middle_arc->sister->head; ; i=a->head)
+	{
+		a = i -> parent;
+		if (a == TERMINAL) break;
+		if (bottleneck > a->sister->r_cap) bottleneck = a -> sister -> r_cap;
+	}
+	if (bottleneck > i->tr_cap) bottleneck = i -> tr_cap;
+	/* 1b - the sink tree */
+	for (i=middle_arc->head; ; i=a->head)
+	{
+		a = i -> parent;
+		if (a == TERMINAL) break;
+		if (bottleneck > a->r_cap) bottleneck = a -> r_cap;
+	}
+	if (bottleneck > - i->tr_cap) bottleneck = - i -> tr_cap;
+
+
+	/* 2. Augmenting */
+	/* 2a - the source tree */
+	middle_arc -> sister -> r_cap += bottleneck;
+	middle_arc -> r_cap -= bottleneck;
+	for (i=middle_arc->sister->head; ; i=a->head)
+	{
+		a = i -> parent;
+		if (a == TERMINAL) break;
+		a -> r_cap += bottleneck;
+		a -> sister -> r_cap -= bottleneck;
+		if (!a->sister->r_cap)
+		{
+			/* add i to the adoption list */
+			i -> parent = ORPHAN;
+			np = nodeptr_block -> New();
+			np -> ptr = i;
+			np -> next = orphan_first;
+			orphan_first = np;
+		}
+	}
+	i -> tr_cap -= bottleneck;
+	if (!i->tr_cap)
+	{
+		/* add i to the adoption list */
+		i -> parent = ORPHAN;
+		np = nodeptr_block -> New();
+		np -> ptr = i;
+		np -> next = orphan_first;
+		orphan_first = np;
+	}
+	/* 2b - the sink tree */
+	for (i=middle_arc->head; ; i=a->head)
+	{
+		a = i -> parent;
+		if (a == TERMINAL) break;
+		a -> sister -> r_cap += bottleneck;
+		a -> r_cap -= bottleneck;
+		if (!a->r_cap)
+		{
+			/* add i to the adoption list */
+			i -> parent = ORPHAN;
+			np = nodeptr_block -> New();
+			np -> ptr = i;
+			np -> next = orphan_first;
+			orphan_first = np;
+		}
+	}
+	i -> tr_cap += bottleneck;
+	if (!i->tr_cap)
+	{
+		/* add i to the adoption list */
+		i -> parent = ORPHAN;
+		np = nodeptr_block -> New();
+		np -> ptr = i;
+		np -> next = orphan_first;
+		orphan_first = np;
+	}
+
+
+	flow += bottleneck;
+}
+
+/***********************************************************************/
+
+void Graph::process_source_orphan(node *i)
+{
+	node *j;
+	arc *a0, *a0_min = NULL, *a;
+	nodeptr *np;
+	int d, d_min = INFINITE_D;
+
+	/* trying to find a new parent */
+	for (a0=i->first; a0; a0=a0->next)
+	if (a0->sister->r_cap)
+	{
+		j = a0 -> head;
+		if (!j->is_sink && (a=j->parent))
+		{
+			/* checking the origin of j */
+			d = 0;
+			while ( 1 )
+			{
+				if (j->TS == TIME)
+				{
+					d += j -> DIST;
+					break;
+				}
+				a = j -> parent;
+				d ++;
+				if (a==TERMINAL)
+				{
+					j -> TS = TIME;
+					j -> DIST = 1;
+					break;
+				}
+				if (a==ORPHAN) { d = INFINITE_D; break; }
+				j = a -> head;
+			}
+			if (d<INFINITE_D) /* j originates from the source - done */
+			{
+				if (d<d_min)
+				{
+					a0_min = a0;
+					d_min = d;
+				}
+				/* set marks along the path */
+				for (j=a0->head; j->TS!=TIME; j=j->parent->head)
+				{
+					j -> TS = TIME;
+					j -> DIST = d --;
+				}
+			}
+		}
+	}
+
+	if ((i->parent = a0_min))
+	{
+		i -> TS = TIME;
+		i -> DIST = d_min + 1;
+	}
+	else
+	{
+		/* no parent is found */
+		i -> TS = 0;
+
+		/* process neighbors */
+		for (a0=i->first; a0; a0=a0->next)
+		{
+			j = a0 -> head;
+			if (!j->is_sink && (a=j->parent))
+			{
+				if (a0->sister->r_cap) set_active(j);
+				if (a!=TERMINAL && a!=ORPHAN && a->head==i)
+				{
+					/* add j to the adoption list */
+					j -> parent = ORPHAN;
+					np = nodeptr_block -> New();
+					np -> ptr = j;
+					if (orphan_last) orphan_last -> next = np;
+					else             orphan_first        = np;
+					orphan_last = np;
+					np -> next = NULL;
+				}
+			}
+		}
+	}
+}
+
+void Graph::process_sink_orphan(node *i)
+{
+	node *j;
+	arc *a0, *a0_min = NULL, *a;
+	nodeptr *np;
+	int d, d_min = INFINITE_D;
+
+	/* trying to find a new parent */
+	for (a0=i->first; a0; a0=a0->next)
+	if (a0->r_cap)
+	{
+		j = a0 -> head;
+		if (j->is_sink && (a=j->parent))
+		{
+			/* checking the origin of j */
+			d = 0;
+			while ( 1 )
+			{
+				if (j->TS == TIME)
+				{
+					d += j -> DIST;
+					break;
+				}
+				a = j -> parent;
+				d ++;
+				if (a==TERMINAL)
+				{
+					j -> TS = TIME;
+					j -> DIST = 1;
+					break;
+				}
+				if (a==ORPHAN) { d = INFINITE_D; break; }
+				j = a -> head;
+			}
+			if (d<INFINITE_D) /* j originates from the sink - done */
+			{
+				if (d<d_min)
+				{
+					a0_min = a0;
+					d_min = d;
+				}
+				/* set marks along the path */
+				for (j=a0->head; j->TS!=TIME; j=j->parent->head)
+				{
+					j -> TS = TIME;
+					j -> DIST = d --;
+				}
+			}
+		}
+	}
+
+	if ((i->parent = a0_min))
+	{
+		i -> TS = TIME;
+		i -> DIST = d_min + 1;
+	}
+	else
+	{
+		/* no parent is found */
+		i -> TS = 0;
+
+		/* process neighbors */
+		for (a0=i->first; a0; a0=a0->next)
+		{
+			j = a0 -> head;
+			if (j->is_sink && (a=j->parent))
+			{
+				if (a0->r_cap) set_active(j);
+				if (a!=TERMINAL && a!=ORPHAN && a->head==i)
+				{
+					/* add j to the adoption list */
+					j -> parent = ORPHAN;
+					np = nodeptr_block -> New();
+					np -> ptr = j;
+					if (orphan_last) orphan_last -> next = np;
+					else             orphan_first        = np;
+					orphan_last = np;
+					np -> next = NULL;
+				}
+			}
+		}
+	}
+}
+
+/***********************************************************************/
+
+Graph::flowtype Graph::maxflow()
+{
+	node *i, *j, *current_node = NULL;
+	arc *a;
+	nodeptr *np, *np_next;
+
+	maxflow_init();
+	nodeptr_block = new DBlock<nodeptr>(NODEPTR_BLOCK_SIZE, error_function);
+
+	while ( 1 )
+	{
+		if ((i=current_node))
+		{
+			i -> next = NULL; /* remove active flag */
+			if (!i->parent) i = NULL;
+		}
+		if (!i)
+		{
+			if (!(i = next_active())) break;
+		}
+
+		/* growth */
+		if (!i->is_sink)
+		{
+			/* grow source tree */
+			for (a=i->first; a; a=a->next)
+			if (a->r_cap)
+			{
+				j = a -> head;
+				if (!j->parent)
+				{
+					j -> is_sink = 0;
+					j -> parent = a -> sister;
+					j -> TS = i -> TS;
+					j -> DIST = i -> DIST + 1;
+					set_active(j);
+				}
+				else if (j->is_sink) break;
+				else if (j->TS <= i->TS &&
+				         j->DIST > i->DIST)
+				{
+					/* heuristic - trying to make the distance from j to the source shorter */
+					j -> parent = a -> sister;
+					j -> TS = i -> TS;
+					j -> DIST = i -> DIST + 1;
+				}
+			}
+		}
+		else
+		{
+			/* grow sink tree */
+			for (a=i->first; a; a=a->next)
+			if (a->sister->r_cap)
+			{
+				j = a -> head;
+				if (!j->parent)
+				{
+					j -> is_sink = 1;
+					j -> parent = a -> sister;
+					j -> TS = i -> TS;
+					j -> DIST = i -> DIST + 1;
+					set_active(j);
+				}
+				else if (!j->is_sink) { a = a -> sister; break; }
+				else if (j->TS <= i->TS &&
+				         j->DIST > i->DIST)
+				{
+					/* heuristic - trying to make the distance from j to the sink shorter */
+					j -> parent = a -> sister;
+					j -> TS = i -> TS;
+					j -> DIST = i -> DIST + 1;
+				}
+			}
+		}
+
+		TIME ++;
+
+		if (a)
+		{
+			i -> next = i; /* set active flag */
+			current_node = i;
+
+			/* augmentation */
+			augment(a);
+			/* augmentation end */
+
+			/* adoption */
+			while ((np=orphan_first))
+			{
+				np_next = np -> next;
+				np -> next = NULL;
+
+				while ((np=orphan_first))
+				{
+					orphan_first = np -> next;
+					i = np -> ptr;
+					nodeptr_block -> Delete(np);
+					if (!orphan_first) orphan_last = NULL;
+					if (i->is_sink) process_sink_orphan(i);
+					else            process_source_orphan(i);
+				}
+
+				orphan_first = np_next;
+			}
+			/* adoption end */
+		}
+		else current_node = NULL;
+	}
+
+	delete nodeptr_block;
+
+	return flow;
+}
+
+/***********************************************************************/
+
+Graph::termtype Graph::what_segment(node_id i)
+{
+	if (((node*)i)->parent && !((node*)i)->is_sink) return SOURCE;
+	return SINK;
+}
+
diff --git a/package_bgs/db/IndependentMultimodalBGS.cpp b/package_bgs/db/IndependentMultimodalBGS.cpp
new file mode 100644
index 0000000..c05ee5c
--- /dev/null
+++ b/package_bgs/db/IndependentMultimodalBGS.cpp
@@ -0,0 +1,54 @@
+#include "IndependentMultimodalBGS.h"
+
+IndependentMultimodalBGS::IndependentMultimodalBGS() : firstTime(true), fps(10), showOutput(true){
+  pIMBS = new BackgroundSubtractorIMBS(fps);
+}
+IndependentMultimodalBGS::~IndependentMultimodalBGS(){
+  delete pIMBS;
+}
+
+void IndependentMultimodalBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if (firstTime)
+    saveConfig();
+
+  //get the fgmask and update the background model
+  pIMBS->apply(img_input, img_foreground);
+  
+  //get background image
+  pIMBS->getBackgroundImage(img_background);
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+
+  if (showOutput)
+  {
+    cv::imshow("IMBS FG", img_foreground);
+    cv::imshow("IMBS BG", img_background);
+  }
+
+  firstTime = false;
+}
+
+void IndependentMultimodalBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/IndependentMultimodalBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void IndependentMultimodalBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/IndependentMultimodalBGS.xml", 0, CV_STORAGE_READ);
+
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/db/IndependentMultimodalBGS.h b/package_bgs/db/IndependentMultimodalBGS.h
new file mode 100644
index 0000000..b6f9a5d
--- /dev/null
+++ b/package_bgs/db/IndependentMultimodalBGS.h
@@ -0,0 +1,29 @@
+#pragma once
+
+#include <cv.h>
+#include <highgui.h>
+
+#include "imbs.hpp"
+
+#include "../IBGS.h"
+
+class IndependentMultimodalBGS : public IBGS
+{
+private:
+  BackgroundSubtractorIMBS* pIMBS;
+  int fps;
+  bool firstTime;
+  cv::Mat img_foreground;
+  cv::Mat img_background;
+  bool showOutput;
+  
+public:
+  IndependentMultimodalBGS();
+  ~IndependentMultimodalBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
\ No newline at end of file
diff --git a/package_bgs/db/imbs.cpp b/package_bgs/db/imbs.cpp
new file mode 100644
index 0000000..715d699
--- /dev/null
+++ b/package_bgs/db/imbs.cpp
@@ -0,0 +1,748 @@
+/*
+*  IMBS Background Subtraction Library 
+*
+*  This file imbs.hpp contains the C++ OpenCV based implementation for
+*  IMBS algorithm described in
+*  D. D. Bloisi and L. Iocchi
+*  "Independent Multimodal Background Subtraction"
+*  In Proc. of the Third Int. Conf. on Computational Modeling of Objects
+*  Presented in Images: Fundamentals, Methods and Applications, pp. 39-44, 2012.
+*  Please, cite the above paper if you use IMBS.
+*  
+*  This software is provided without any warranty about its usability. 
+*  It is for educational purposes and should be regarded as such.
+*
+*  Written by Domenico D. Bloisi
+*
+*  Please, report suggestions/comments/bugs to
+*  domenico.bloisi@gmail.com
+*
+*/
+
+#include "imbs.hpp"
+
+using namespace std;
+using namespace cv;
+
+BackgroundSubtractorIMBS::BackgroundSubtractorIMBS()
+{
+  fps = 0.;
+  fgThreshold = 15;
+  associationThreshold = 5;
+  samplingPeriod = 250.;//500.ms
+  minBinHeight = 2;
+  numSamples = 10; //30
+  alpha = 0.65;
+  beta = 1.15;
+  tau_s = 60.;
+  tau_h = 40.;
+  minArea = 30.;
+  persistencePeriod = samplingPeriod*numSamples/3.;//ms
+
+  initial_tick_count = (double)getTickCount();
+
+  //morphological Opening and closing
+  morphologicalFiltering = false;
+}
+
+BackgroundSubtractorIMBS::BackgroundSubtractorIMBS(
+  double fps,
+  unsigned int fgThreshold,
+  unsigned int associationThreshold,
+  double samplingPeriod,
+  unsigned int minBinHeight,
+  unsigned int numSamples,
+  double alpha,
+  double beta,
+  double tau_s,
+  double tau_h,
+  double minArea,
+  double persistencePeriod,
+  bool morphologicalFiltering)
+{
+  this->fps = fps;
+  this->fgThreshold = fgThreshold;
+  this->persistencePeriod = persistencePeriod;
+  if(minBinHeight <= 1){
+    this->minBinHeight = 1;
+  }
+  else {
+    this->minBinHeight = minBinHeight;
+  }
+  this->associationThreshold = associationThreshold;
+  this->samplingPeriod = samplingPeriod;//ms
+  this->minBinHeight = minBinHeight;
+  this->numSamples = numSamples;
+  this->alpha = alpha;
+  this->beta = beta;
+  this->tau_s = tau_s;
+  this->tau_h = tau_h;
+  this->minArea = minArea;
+
+  if(fps == 0.)
+    initial_tick_count = (double)getTickCount();
+  else
+    initial_tick_count = 0;
+
+  //morphological Opening and closing
+  this->morphologicalFiltering = morphologicalFiltering;
+}
+
+BackgroundSubtractorIMBS::~BackgroundSubtractorIMBS()
+{
+  delete[] bgBins;
+  delete[] bgModel;
+  delete[] persistenceMap;
+}
+
+void BackgroundSubtractorIMBS::initialize(Size frameSize, int frameType)
+{
+  /*cout << "INPUT: WIDTH " << frameSize.width << "  HEIGHT " << frameSize.height <<
+    "  FPS " << fps << endl;
+  cout << endl;*/
+
+  this->frameSize = frameSize;
+  this->frameType = frameType;
+  this->numPixels = frameSize.width*frameSize.height;
+
+  persistenceMap = new unsigned int[numPixels];
+  for(int i = 0; i < numPixels; i++) {
+    persistenceMap[i] = 0;
+  }
+
+  bgBins = new Bins[numPixels];
+  bgModel = new BgModel[numPixels];
+  maxBgBins = numSamples / minBinHeight;
+
+  timestamp = 0.;//ms
+  prev_timestamp = 0.;//ms
+  prev_bg_frame_time = 0;
+  bg_frame_counter = 0;
+  bg_reset = false;
+  prev_area = 0;
+  sudden_change = false;
+
+  SHADOW_LABEL = 80;
+  PERSISTENCE_LABEL = 180;
+  FOREGROUND_LABEL = 255;
+
+  fgmask.create(frameSize, CV_8UC1);
+  fgfiltered.create(frameSize, CV_8UC1);
+  persistenceImage = Mat::zeros(frameSize, CV_8UC1);
+  bgSample.create(frameSize, CV_8UC3);
+  bgImage = Mat::zeros(frameSize, CV_8UC3);
+
+  //initial message to be shown until the first fg mask is computed
+  initialMsgGray = Mat::zeros(frameSize, CV_8UC1);
+  putText(initialMsgGray, "Creating", Point(10,20), FONT_HERSHEY_SIMPLEX, 0.4, CV_RGB(255, 255, 255));
+  putText(initialMsgGray, "initial", Point(10,40), FONT_HERSHEY_SIMPLEX, 0.4, CV_RGB(255, 255, 255));
+  putText(initialMsgGray, "background...", Point(10,60), FONT_HERSHEY_SIMPLEX, 0.4, CV_RGB(255, 255, 255));
+
+  initialMsgRGB = Mat::zeros(frameSize, CV_8UC3);
+  putText(initialMsgRGB, "Creating", Point(10,20), FONT_HERSHEY_SIMPLEX, 0.4, CV_RGB(255, 255, 255));
+  putText(initialMsgRGB, "initial", Point(10,40), FONT_HERSHEY_SIMPLEX, 0.4, CV_RGB(255, 255, 255));
+  putText(initialMsgRGB, "background...", Point(10,60), FONT_HERSHEY_SIMPLEX, 0.4, CV_RGB(255, 255, 255));
+
+  if(minBinHeight <= 1){
+    minBinHeight = 1;
+  }
+
+  for(unsigned int p = 0; p < numPixels; ++p)
+  {
+    bgBins[p].binValues = new Vec3b[numSamples];
+    bgBins[p].binHeights = new uchar[numSamples];
+    bgBins[p].isFg = new bool[numSamples];
+
+    bgModel[p].values = new Vec3b[maxBgBins];
+    bgModel[p].isValid = new bool[maxBgBins];
+    bgModel[p].isValid[0] = false;
+    bgModel[p].isFg = new bool[maxBgBins];
+    bgModel[p].counter = new uchar[maxBgBins];
+  }
+}
+
+void BackgroundSubtractorIMBS::apply(InputArray _frame, OutputArray _fgmask, double learningRate)
+{
+  frame = _frame.getMat();
+
+  CV_Assert(frame.depth() == CV_8U);
+  CV_Assert(frame.channels() == 3);
+
+  bool needToInitialize = nframes == 0 || frame.type() != frameType;
+  if( needToInitialize ) {
+    initialize(frame.size(), frame.type());
+  }
+
+  _fgmask.create(frameSize, CV_8UC1);
+  fgmask = _fgmask.getMat();
+  fgmask = Scalar(0);
+
+  //get current time
+  prev_timestamp = timestamp;
+  if(fps == 0.) {
+    timestamp = getTimestamp();//ms
+  }
+  else {
+    timestamp += 1000./fps;//ms
+  }
+
+  //check for global changes
+  if(sudden_change) {
+    changeBg();
+  }
+
+  //wait for the first model to be generated
+  if(bgModel[0].isValid[0]) {
+    getFg();    	
+    hsvSuppression();
+    filterFg();
+  }	
+  //update the bg model
+  updateBg();
+
+  //show an initial message if the first bg is not yet ready
+  if(!bgModel[0].isValid[0]) {
+    initialMsgGray.copyTo(fgmask);
+    initialMsgRGB.copyTo(bgImage);
+  }
+  ++nframes;
+}
+
+void BackgroundSubtractorIMBS::updateBg() {
+  if(bg_reset) {
+    if(bg_frame_counter > numSamples - 1) {
+      bg_frame_counter = numSamples - 1;
+    }
+  }
+
+  if(prev_bg_frame_time > timestamp) {
+    prev_bg_frame_time = timestamp;
+  }
+
+  if(bg_frame_counter == numSamples - 1) {
+    createBg(bg_frame_counter);
+    bg_frame_counter = 0;
+  }
+  else { //bg_frame_counter < (numSamples - 1)
+
+    if((timestamp - prev_bg_frame_time) >= samplingPeriod)
+    {
+      //get a new sample for creating the bg model
+      prev_bg_frame_time = timestamp;
+      frame.copyTo(bgSample);
+      createBg(bg_frame_counter);
+      bg_frame_counter++;
+    }
+  }
+}
+
+double BackgroundSubtractorIMBS::getTimestamp() {
+  return ((double)getTickCount() - initial_tick_count)*1000./getTickFrequency();
+}
+
+void BackgroundSubtractorIMBS::hsvSuppression() {
+
+  uchar h_i, s_i, v_i;
+  uchar h_b, s_b, v_b;
+  float h_diff, s_diff, v_ratio;
+
+  Mat bgrPixel(cv::Size(1, 1), CV_8UC3);
+
+  vector<Mat> imHSV;
+  cv::split(convertImageRGBtoHSV(frame), imHSV);
+
+  for(unsigned int p = 0; p < numPixels; ++p) {
+    if(fgmask.data[p]) {
+
+      h_i = imHSV[0].data[p];
+      s_i = imHSV[1].data[p];
+      v_i = imHSV[2].data[p];
+
+      for(unsigned int n = 0; n < maxBgBins; ++n) {
+        if(!bgModel[p].isValid[n]) {
+          break;
+        }
+
+        if(bgModel[p].isFg[n]) {
+          continue;
+        }
+
+        bgrPixel.at<cv::Vec3b>(0,0) = bgModel[p].values[n];
+
+        cv::Mat hsvPixel = convertImageRGBtoHSV(bgrPixel);
+
+        h_b = hsvPixel.at<cv::Vec3b>(0,0)[0];
+        s_b = hsvPixel.at<cv::Vec3b>(0,0)[1];
+        v_b = hsvPixel.at<cv::Vec3b>(0,0)[2];
+
+        v_ratio = (float)v_i / (float)v_b;
+        s_diff = std::abs(s_i - s_b);
+        h_diff = std::min( std::abs(h_i - h_b), 255 - std::abs(h_i - h_b));
+
+        if(	h_diff <= tau_h &&
+          s_diff <= tau_s &&
+          v_ratio >= alpha &&
+          v_ratio < beta)
+        {
+          fgmask.data[p] = SHADOW_LABEL;
+          break;
+        }
+      }//for
+    }//if
+  }//numPixels
+}
+
+void BackgroundSubtractorIMBS::createBg(unsigned int bg_sample_number) {
+  if(!bgSample.data) {
+    //cerr << "createBg -- an error occurred: " <<
+    //		" unable to retrieve frame no. " << bg_sample_number << endl;
+
+    //TODO vedere gestione errori
+    abort();
+  }
+  //aux variable
+  Vec3b currentPixel;
+  //split bgSample in channels
+  cv::split(bgSample, bgSampleBGR);
+  //create a statistical model for each pixel (a set of bins of variable size)
+  for(unsigned int p = 0; p < numPixels; ++p) {
+    //create an initial bin for each pixel from the first sample (bg_sample_number = 0)
+    if(bg_sample_number == 0) {
+      for(int k = 0; k < 3; ++k) {
+        bgBins[p].binValues[0][k] = bgSampleBGR[k].data[p];
+      }
+      bgBins[p].binHeights[0] = 1;
+      for(unsigned int s = 1; s < numSamples; ++s)	{
+        bgBins[p].binHeights[s] = 0;
+      }
+      //if the sample pixel is from foreground keep track of that situation
+      if(fgmask.data[p] == FOREGROUND_LABEL) {
+        bgBins[p].isFg[0] = true;
+      }
+      else {
+        bgBins[p].isFg[0] = false;
+      }
+    }//if(bg_sample_number == 0)
+    else { //bg_sample_number > 0
+      for(int k = 0; k < 3; ++k) {
+        currentPixel[k] = bgSampleBGR[k].data[p];
+      }
+      int den = 0;
+      for(unsigned int s = 0; s < bg_sample_number; ++s) {
+        //try to associate the current pixel values to an existing bin
+        if( std::abs(currentPixel[2] - bgBins[p].binValues[s][2]) <= associationThreshold &&
+          std::abs(currentPixel[1] - bgBins[p].binValues[s][1]) <= associationThreshold &&
+          std::abs(currentPixel[0] - bgBins[p].binValues[s][0]) <= associationThreshold )
+        {
+          den = (bgBins[p].binHeights[s] + 1);
+          for(int k = 0; k < 3; ++k) {
+            bgBins[p].binValues[s][k] =
+              (bgBins[p].binValues[s][k] * bgBins[p].binHeights[s] + currentPixel[k]) / den;
+          }
+          bgBins[p].binHeights[s]++; //increment the height of the bin
+          if(fgmask.data[p] == FOREGROUND_LABEL) {
+            bgBins[p].isFg[s] = true;
+          }
+          break;
+        }
+        //if the association is not possible, create a new bin
+        else if(bgBins[p].binHeights[s] == 0)	{
+          bgBins[p].binValues[s] = currentPixel;
+          bgBins[p].binHeights[s]++;
+          if(fgmask.data[p] == FOREGROUND_LABEL) {
+            bgBins[p].isFg[s] = true;
+          }
+          else {
+            bgBins[p].isFg[s] = false;
+          }
+          break;
+        }
+        else continue;
+      }//for(unsigned int s = 0; s <= bg_sample_number; ++s)
+
+      //if all samples have been processed
+      //it is time to compute the fg mask
+      if(bg_sample_number == (numSamples - 1)) {
+        unsigned int index = 0;
+        int max_height = -1;
+        for(unsigned int s = 0; s < numSamples; ++s){
+          if(bgBins[p].binHeights[s] == 0) {
+            bgModel[p].isValid[index] = false;
+            break;
+          }
+          if(index == maxBgBins) {
+            break;
+          }
+          else if(bgBins[p].binHeights[s] >= minBinHeight) {
+            if(fgmask.data[p] == PERSISTENCE_LABEL) {
+              for(unsigned int n = 0; n < maxBgBins; n++) {
+                if(!bgModel[p].isValid[n]) {
+                  break;
+                }
+                unsigned int d = std::max((int)std::abs(bgModel[p].values[n][0] - bgBins[p].binValues[s][0]),
+                  std::abs(bgModel[p].values[n][1] - bgBins[p].binValues[s][1]) );
+                d = std::max((int)d, std::abs(bgModel[p].values[n][2] - bgBins[p].binValues[s][2]) );
+                if(d < fgThreshold){
+                  bgModel[p].isFg[n] = false;
+                  bgBins[p].isFg[s] = false;
+                }
+              }
+            }
+
+            if(bgBins[p].binHeights[s] > max_height) {
+              max_height = bgBins[p].binHeights[s];
+
+              for(int k = 0; k < 3; ++k) {
+                bgModel[p].values[index][k] = bgModel[p].values[0][k];
+              }
+              bgModel[p].isValid[index] = true;
+              bgModel[p].isFg[index] = bgModel[p].isFg[0];
+              bgModel[p].counter[index] = bgModel[p].counter[0];
+
+              for(int k = 0; k < 3; ++k) {
+                bgModel[p].values[0][k] = bgBins[p].binValues[s][k];
+              }
+              bgModel[p].isValid[0] = true;
+              bgModel[p].isFg[0] = bgBins[p].isFg[s];
+              bgModel[p].counter[0] = bgBins[p].binHeights[s];
+            }
+            else {
+              for(int k = 0; k < 3; ++k) {
+                bgModel[p].values[index][k] = bgBins[p].binValues[s][k];
+              }
+              bgModel[p].isValid[index] = true;
+              bgModel[p].isFg[index] = bgBins[p].isFg[s];
+              bgModel[p].counter[index] = bgBins[p].binHeights[s];
+            }
+            ++index;
+          }
+        } //for all numSamples
+      }//bg_sample_number == (numSamples - 1)
+    }//else --> if(frame_number == 0)
+  }//numPixels
+
+  if(bg_sample_number == (numSamples - 1)) {
+    //std::cout << "new bg created" << std::endl;		
+    persistenceImage = Scalar(0);
+
+    bg_reset = false;
+    if(sudden_change) {
+      numSamples *= 3.;
+      samplingPeriod *= 2.;
+      sudden_change = false;
+    }
+
+    for(int i = 0; i < numPixels; i++) {
+      persistenceMap[i] = 0;
+    }
+
+    unsigned int p = 0;
+    for(int i = 0; i < bgImage.rows; ++i) {
+      for(int j = 0; j < bgImage.cols; ++j, ++p) {
+        bgImage.at<cv::Vec3b>(i,j) = bgModel[p].values[0];
+      }
+    }
+  }
+}
+
+void BackgroundSubtractorIMBS::getFg() {
+  fgmask = Scalar(0);
+  cv::split(frame, frameBGR);
+
+  bool isFg = true;
+  bool conditionalUpdated = false;
+  unsigned int d = 0;
+  for(unsigned int p = 0; p < numPixels; ++p) {
+    isFg = true;
+    conditionalUpdated = false;
+    d = 0;
+    for(unsigned int n = 0; n < maxBgBins; ++n) {
+      if(!bgModel[p].isValid[n]) {
+        if(n == 0) {
+          isFg = false;
+        }
+        break;
+      }
+      else { //the model is valid
+        d = std::max(
+          (int)std::abs(bgModel[p].values[n][0] - frameBGR[0].data[p]),
+          std::abs(bgModel[p].values[n][1] - frameBGR[1].data[p]) );
+        d = std::max(
+          (int)d, std::abs(bgModel[p].values[n][2] - frameBGR[2].data[p]) );
+        if(d < fgThreshold){
+          //check if it is a potential background pixel
+          //from stationary object
+          if(bgModel[p].isFg[n]) {
+            conditionalUpdated = true;
+            break;
+          }
+          else {
+            isFg = false;
+            persistenceMap[p] = 0;
+          }
+        }
+      }
+    }
+    if(isFg) {
+      if(conditionalUpdated) {
+        fgmask.data[p] = PERSISTENCE_LABEL;
+        persistenceMap[p] += (timestamp - prev_timestamp);
+        if(persistenceMap[p] > persistencePeriod) {
+          for(unsigned int n = 0; n < maxBgBins; ++n) {
+            if(!bgModel[p].isValid[n]) {
+              break;
+            }
+            bgModel[p].isFg[n] = false;
+          }
+        }
+      }
+      else {
+        fgmask.data[p] = FOREGROUND_LABEL;
+        persistenceMap[p] = 0;
+      }
+    }
+  }
+}
+
+void BackgroundSubtractorIMBS::areaThresholding()
+{
+  double maxArea = 0.6 * numPixels;
+
+  std::vector < std::vector<Point> > contours;
+  Mat tmpBinaryImage = fgfiltered.clone();
+  findContours(tmpBinaryImage, contours, RETR_LIST, CHAIN_APPROX_NONE);
+
+  tmpBinaryImage = Scalar(0);
+
+  for (size_t contourIdx = 0; contourIdx < contours.size(); ++contourIdx)
+  {
+    Moments moms = moments(Mat(contours[contourIdx]));
+    double area = moms.m00;
+    if (area < minArea || area >= maxArea)
+      continue;
+    else {
+      drawContours( tmpBinaryImage, contours, contourIdx, Scalar(255), CV_FILLED );
+    }
+  }	
+  for(int i = 0; i < fgfiltered.rows; ++i) {
+    for(int j = 0; j < fgfiltered.cols; ++j) {
+      if(!tmpBinaryImage.at<uchar>(i,j)) {
+        fgfiltered.at<uchar>(i,j) = 0;
+      }
+    }
+  }
+}
+
+// Create a HSV image from the RGB image using the full 8-bits, since OpenCV only allows Hues up to 180 instead of 255.
+// ref: "http://cs.haifa.ac.il/hagit/courses/ist/Lectures/Demos/ColorApplet2/t_convert.html"
+// Remember to free the generated HSV image.
+Mat BackgroundSubtractorIMBS::convertImageRGBtoHSV(const Mat& imageRGB)
+{
+  float fR, fG, fB;
+  float fH, fS, fV;
+  const float FLOAT_TO_BYTE = 255.0f;
+  const float BYTE_TO_FLOAT = 1.0f / FLOAT_TO_BYTE;
+
+  // Create a blank HSV image
+  Mat imageHSV(imageRGB.size(), CV_8UC3);
+  //if (!imageHSV || imageRGB->depth != 8 || imageRGB->nChannels != 3) {
+  //printf("ERROR in convertImageRGBtoHSV()! Bad input image.\n");
+  //exit(1);
+  //}
+
+  int h = imageRGB.rows;		// Pixel height.
+  int w = imageRGB.cols;		// Pixel width.
+  //int rowSizeRGB = imageRGB->widthStep;	// Size of row in bytes, including extra padding.
+  //char *imRGB = imageRGB->imageData;	// Pointer to the start of the image pixels.
+  //int rowSizeHSV = imageHSV->widthStep;	// Size of row in bytes, including extra padding.
+  //char *imHSV = imageHSV->imageData;	// Pointer to the start of the image pixels.
+  for (int y = 0; y < h; ++y) {
+    for (int x = 0; x < w; ++x) {
+      // Get the RGB pixel components. NOTE that OpenCV stores RGB pixels in B,G,R order.
+      //uchar *pRGB = (uchar*)(imRGB + y*rowSizeRGB + x*3);
+      int bB = imageRGB.at<Vec3b>(y,x)[0]; //*(uchar*)(pRGB+0);	// Blue component
+      int bG = imageRGB.at<Vec3b>(y,x)[1]; //*(uchar*)(pRGB+1);	// Green component
+      int bR = imageRGB.at<Vec3b>(y,x)[2]; //*(uchar*)(pRGB+2);	// Red component
+
+      // Convert from 8-bit integers to floats.
+      fR = bR * BYTE_TO_FLOAT;
+      fG = bG * BYTE_TO_FLOAT;
+      fB = bB * BYTE_TO_FLOAT;
+
+      // Convert from RGB to HSV, using float ranges 0.0 to 1.0.
+      float fDelta;
+      float fMin, fMax;
+      int iMax;
+      // Get the min and max, but use integer comparisons for slight speedup.
+      if (bB < bG) {
+        if (bB < bR) {
+          fMin = fB;
+          if (bR > bG) {
+            iMax = bR;
+            fMax = fR;
+          }
+          else {
+            iMax = bG;
+            fMax = fG;
+          }
+        }
+        else {
+          fMin = fR;
+          fMax = fG;
+          iMax = bG;
+        }
+      }
+      else {
+        if (bG < bR) {
+          fMin = fG;
+          if (bB > bR) {
+            fMax = fB;
+            iMax = bB;
+          }
+          else {
+            fMax = fR;
+            iMax = bR;
+          }
+        }
+        else {
+          fMin = fR;
+          fMax = fB;
+          iMax = bB;
+        }
+      }
+      fDelta = fMax - fMin;
+      fV = fMax;				// Value (Brightness).
+      if (iMax != 0) {			// Make sure its not pure black.
+        fS = fDelta / fMax;		// Saturation.
+        float ANGLE_TO_UNIT = 1.0f / (6.0f * fDelta);	// Make the Hues between 0.0 to 1.0 instead of 6.0
+        if (iMax == bR) {		// between yellow and magenta.
+          fH = (fG - fB) * ANGLE_TO_UNIT;
+        }
+        else if (iMax == bG) {		// between cyan and yellow.
+          fH = (2.0f/6.0f) + ( fB - fR ) * ANGLE_TO_UNIT;
+        }
+        else {				// between magenta and cyan.
+          fH = (4.0f/6.0f) + ( fR - fG ) * ANGLE_TO_UNIT;
+        }
+        // Wrap outlier Hues around the circle.
+        if (fH < 0.0f)
+          fH += 1.0f;
+        if (fH >= 1.0f)
+          fH -= 1.0f;
+      }
+      else {
+        // color is pure Black.
+        fS = 0;
+        fH = 0;	// undefined hue
+      }
+
+      // Convert from floats to 8-bit integers.
+      int bH = (int)(0.5f + fH * 255.0f);
+      int bS = (int)(0.5f + fS * 255.0f);
+      int bV = (int)(0.5f + fV * 255.0f);
+
+      // Clip the values to make sure it fits within the 8bits.
+      if (bH > 255)
+        bH = 255;
+      if (bH < 0)
+        bH = 0;
+      if (bS > 255)
+        bS = 255;
+      if (bS < 0)
+        bS = 0;
+      if (bV > 255)
+        bV = 255;
+      if (bV < 0)
+        bV = 0;
+
+      // Set the HSV pixel components.
+      imageHSV.at<Vec3b>(y, x)[0] = bH;		// H component
+      imageHSV.at<Vec3b>(y, x)[1] = bS;		// S component
+      imageHSV.at<Vec3b>(y, x)[2] = bV;		// V component
+    }
+  }
+  return imageHSV;
+}
+
+void BackgroundSubtractorIMBS::getBackgroundImage(OutputArray backgroundImage) const
+{
+  bgImage.copyTo(backgroundImage);        
+}
+
+void BackgroundSubtractorIMBS::filterFg() {
+
+  unsigned int cnt = 0;
+  for(unsigned int p = 0; p < numPixels; ++p) {
+    if(fgmask.data[p] == (uchar)255) {
+      fgfiltered.data[p] = 255;
+      cnt++;
+    }
+    else {
+      fgfiltered.data[p] = 0;
+    }
+  }
+
+  if(cnt > numPixels*0.5) {
+    sudden_change = true;
+  }
+
+  if(morphologicalFiltering) {
+    cv::Mat element3(3,3,CV_8U,cv::Scalar(1));
+    cv::morphologyEx(fgfiltered, fgfiltered, cv::MORPH_OPEN, element3);
+    cv::morphologyEx(fgfiltered, fgfiltered, cv::MORPH_CLOSE, element3);
+  }
+
+  areaThresholding();
+
+  for(unsigned int p = 0; p < numPixels; ++p) {
+    if(fgmask.data[p] == PERSISTENCE_LABEL) {
+      fgfiltered.data[p] = PERSISTENCE_LABEL;
+    }
+    else if(fgmask.data[p] == SHADOW_LABEL) {
+      fgfiltered.data[p] = SHADOW_LABEL;
+    }
+  }
+
+  fgfiltered.copyTo(fgmask);
+}
+
+void BackgroundSubtractorIMBS::changeBg() {
+
+  std::cout << "\n\n\n\nWARNING: changeBg\n\n\n\n\n" << std::endl;
+
+  //samplingPeriod /= 2.;
+  //numSamples /= 2.;
+  //bg_reset = true;
+  //cout << "qua" << endl;
+
+  if(!bg_reset) {
+    numSamples /= 3.;
+    samplingPeriod /= 2.;
+    bg_frame_counter = 0;
+    bg_reset = true;
+  }
+}
+
+void BackgroundSubtractorIMBS::getBgModel(BgModel bgModel_copy[], int size) {
+  if(size != numPixels) {
+    return;
+  }
+  for(int i = 0; i < numPixels; ++i){
+    bgModel_copy[i].values = new Vec3b[maxBgBins];
+    bgModel_copy[i].isValid = new bool[maxBgBins];
+    bgModel_copy[i].isValid[0] = false;
+    bgModel_copy[i].isFg = new bool[maxBgBins];
+    bgModel_copy[i].counter = new uchar[maxBgBins];
+  }
+  for(unsigned int p = 0; p < numPixels; ++p) {
+    for(unsigned int n = 0; n < maxBgBins; ++n) {
+      if(!bgModel[p].isValid[n]) {
+        break;
+      }
+      bgModel_copy[p].values[n] = bgModel[p].values[n];
+      bgModel_copy[p].isValid[n] = bgModel[p].isValid[n];
+      bgModel_copy[p].isFg[n] = bgModel[p].isFg[n];
+      bgModel_copy[p].counter[n] = bgModel[p].counter[n];
+    }
+  }
+}
diff --git a/package_bgs/db/imbs.hpp b/package_bgs/db/imbs.hpp
new file mode 100644
index 0000000..fd7faf1
--- /dev/null
+++ b/package_bgs/db/imbs.hpp
@@ -0,0 +1,178 @@
+/*
+*  IMBS Background Subtraction Library 
+*
+*  This file imbs.hpp contains the C++ OpenCV based implementation for
+*  IMBS algorithm described in
+*  D. D. Bloisi and L. Iocchi
+*  "Independent Multimodal Background Subtraction"
+*  In Proc. of the Third Int. Conf. on Computational Modeling of Objects
+*  Presented in Images: Fundamentals, Methods and Applications, pp. 39-44, 2012.
+*  Please, cite the above paper if you use IMBS.
+*  
+*  This software is provided without any warranty about its usability. 
+*  It is for educational purposes and should be regarded as such.
+*
+*  Written by Domenico D. Bloisi
+*
+*  Please, report suggestions/comments/bugs to
+*  domenico.bloisi@gmail.com
+*
+*/
+
+#ifndef __IMBS_HPP__
+#define __IMBS_HPP__
+
+//OPENCV
+#include <opencv2/core/core.hpp>
+#include <opencv2/highgui/highgui.hpp>
+#include <opencv2/imgproc/imgproc.hpp>
+#include <opencv2/features2d/features2d.hpp>
+//C++
+#include <iostream>
+#include <vector>
+
+using namespace cv;
+using namespace std;
+
+class BackgroundSubtractorIMBS
+{
+public:
+  //! the default constructor
+  BackgroundSubtractorIMBS();
+  //! the full constructor
+  BackgroundSubtractorIMBS(double fps,
+    unsigned int fgThreshold=15,
+    unsigned int associationThreshold=5,
+    double samplingPeriod=500.,
+    unsigned int minBinHeight=2,
+    unsigned int numSamples=30,
+    double alpha=0.65,
+    double beta=1.15,
+    double tau_s=60.,
+    double tau_h=40.,
+    double minArea=30.,
+    double persistencePeriod=10000.,
+    bool morphologicalFiltering=false
+    );
+  //! the destructor
+  ~BackgroundSubtractorIMBS();
+  //! the update operator
+  void apply(InputArray image, OutputArray fgmask, double learningRate=-1.);
+
+  //! computes a background image which shows only the highest bin for each pixel
+  void getBackgroundImage(OutputArray backgroundImage) const;
+
+  //! re-initiaization method
+  void initialize(Size frameSize, int frameType);
+
+private:
+  //method for creating the background model
+  void createBg(unsigned int bg_sample_number);
+  //method for updating the background model
+  void updateBg();
+  //method for computing the foreground mask
+  void getFg();
+  //method for suppressing shadows and highlights
+  void hsvSuppression();    
+  //method for refining foreground mask
+  void filterFg();
+  //method for filtering out blobs smaller than a given area
+  void areaThresholding();
+  //method for getting the current time
+  double getTimestamp();
+  //method for converting from RGB to HSV
+  Mat convertImageRGBtoHSV(const Mat& imageRGB);
+  //method for changing the bg in case of sudden changes 
+  void changeBg();
+
+  //current input RGB frame
+  Mat frame;
+  vector<Mat> frameBGR;
+  //frame size
+  Size frameSize;
+  //frame type
+  int frameType;
+  //total number of pixels in frame
+  unsigned int numPixels;
+  //current background sample
+  Mat bgSample;
+  vector<Mat> bgSampleBGR;
+  //current background image which shows only the highest bin for each pixel
+  //(just for displaying purposes)
+  Mat bgImage;
+  //current foreground mask
+  Mat fgmask;
+
+  Mat fgfiltered;
+
+  //number of fps
+  double fps;
+  //time stamp in milliseconds (ms)
+  double timestamp;
+  //previous time stamp in milliseconds (ms)
+  double prev_timestamp;
+  double initial_tick_count;
+  //initial message to be shown until the first bg model is ready 
+  Mat initialMsgGray;
+  Mat initialMsgRGB;
+
+  //struct for modeling the background values for a single pixel
+  typedef struct {
+    Vec3b* binValues;
+    uchar* binHeights;
+    bool* isFg;
+  } Bins;
+
+  Bins* bgBins;
+public:
+  //struct for modeling the background values for the entire frame
+  typedef struct {
+    Vec3b* values;
+    bool* isValid;
+    bool* isFg;
+    uchar* counter;
+  } BgModel;
+private:
+  BgModel* bgModel;
+
+  //SHADOW SUPPRESSION PARAMETERS
+  float alpha;
+  float beta;
+  uchar tau_s;
+  uchar tau_h;
+
+  unsigned int minBinHeight;
+  unsigned int numSamples;
+  unsigned int samplingPeriod;
+  unsigned long prev_bg_frame_time;
+  unsigned int bg_frame_counter;
+  unsigned int associationThreshold;
+  unsigned int maxBgBins;
+  unsigned int nframes;
+
+  double minArea;
+  bool bg_reset;
+  unsigned int persistencePeriod;
+  bool prev_area;
+  bool sudden_change;
+  unsigned int fgThreshold;
+  uchar SHADOW_LABEL;
+  uchar PERSISTENCE_LABEL;
+  uchar FOREGROUND_LABEL;
+  //persistence map
+  unsigned int* persistenceMap;
+  Mat persistenceImage;
+
+  bool morphologicalFiltering;
+
+public:
+  unsigned int getMaxBgBins() {
+    return maxBgBins;
+  }
+  unsigned int getFgThreshold() {
+    return fgThreshold;
+  }
+  void getBgModel(BgModel bgModel_copy[], int size);
+};
+
+#endif //__IMBS_HPP__
diff --git a/package_bgs/dp/AdaptiveMedianBGS.cpp b/package_bgs/dp/AdaptiveMedianBGS.cpp
new file mode 100644
index 0000000..16b3988
--- /dev/null
+++ b/package_bgs/dp/AdaptiveMedianBGS.cpp
@@ -0,0 +1,140 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* AdaptiveMedianBGS.cpp
+*
+* Purpose: Implementation of the simple adaptive median background 
+*		  		 subtraction algorithm described in:
+*	  			 "Segmentation and tracking of piglets in images"
+* 						by McFarlane and Schofield
+*
+* Author: Donovan Parks, September 2007
+*
+******************************************************************************/
+
+#include <iostream>
+#include <stdlib.h>
+#include <cmath>
+
+#include "AdaptiveMedianBGS.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+void AdaptiveMedianBGS::Initalize(const BgsParams& param)
+{
+	m_params = (AdaptiveMedianParams&)param;
+
+	m_median = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 3);
+	cvSet(m_median.Ptr(), CV_RGB(BACKGROUND,BACKGROUND,BACKGROUND));
+}
+
+RgbImage* AdaptiveMedianBGS::Background()
+{
+	return &m_median;
+}
+
+void AdaptiveMedianBGS::InitModel(const RgbImage& data)
+{
+	// initialize the background model
+	for (unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{
+			m_median(r,c) = data(r,c);
+		}
+	}
+}
+
+void AdaptiveMedianBGS::Update(int frame_num, const RgbImage& data,  const BwImage& update_mask)
+{
+	if(frame_num % m_params.SamplingRate() == 1)
+	{
+		// update background model
+		for (unsigned int r = 0; r < m_params.Height(); ++r)
+		{
+			for(unsigned int c = 0; c < m_params.Width(); ++c)
+			{
+				// perform conditional updating only if we are passed the learning phase
+				if(update_mask(r,c) == BACKGROUND || frame_num < m_params.LearningFrames())
+				{
+					for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+					{
+						if(data(r,c,ch) > m_median(r,c,ch))
+						{
+							m_median(r,c,ch)++;
+						}
+						else if(data(r,c,ch) < m_median(r,c,ch))
+						{
+							m_median(r,c,ch)--;
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+void AdaptiveMedianBGS::SubtractPixel(int r, int c, const RgbPixel& pixel, 
+																			unsigned char& low_threshold, unsigned char& high_threshold)
+{
+	// perform background subtraction
+	low_threshold = high_threshold = FOREGROUND;
+	
+	int diffR = abs(pixel(0) - m_median(r,c,0));
+	int diffG = abs(pixel(1) - m_median(r,c,1));
+	int diffB = abs(pixel(2) - m_median(r,c,2));
+	
+	if(diffR <= m_params.LowThreshold() && diffG <= m_params.LowThreshold() &&  diffB <= m_params.LowThreshold())
+	{
+		low_threshold = BACKGROUND;
+	}
+
+	if(diffR <= m_params.HighThreshold() && diffG <= m_params.HighThreshold() &&  diffB <= m_params.HighThreshold())
+	{
+		high_threshold = BACKGROUND;
+	}
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Input:
+//  data - a pointer to the image data
+//Output:
+//  output - a pointer to the data of a gray value image
+//					(the memory should already be reserved) 
+//					values: 255-foreground, 0-background
+///////////////////////////////////////////////////////////////////////////////
+void AdaptiveMedianBGS::Subtract(int frame_num, const RgbImage& data, 
+																	BwImage& low_threshold_mask, BwImage& high_threshold_mask)
+{
+	unsigned char low_threshold, high_threshold;
+
+	// update each pixel of the image
+	for(unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{	
+			// perform background subtraction
+			SubtractPixel(r, c, data(r,c), low_threshold, high_threshold);
+
+			// setup silhouette mask
+			low_threshold_mask(r,c) = low_threshold;
+			high_threshold_mask(r,c) = high_threshold;
+		}
+	}
+}
+
diff --git a/package_bgs/dp/AdaptiveMedianBGS.h b/package_bgs/dp/AdaptiveMedianBGS.h
new file mode 100644
index 0000000..3ea25af
--- /dev/null
+++ b/package_bgs/dp/AdaptiveMedianBGS.h
@@ -0,0 +1,89 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* AdaptiveMedianBGS.hpp
+*
+* Purpose: Implementation of the simple adaptive median background 
+*		  		 subtraction algorithm described in:
+*	  			 "Segmentation and tracking of piglets in images"
+* 						by McFarlane and Schofield
+*
+* Author: Donovan Parks, September 2007
+
+Example:
+		Algorithms::BackgroundSubtraction::AdaptiveMedianParams params;
+		params.SetFrameSize(width, height);
+		params.LowThreshold() = 40;
+		params.HighThreshold() = 2*params.LowThreshold();
+		params.SamplingRate() = 7;
+		params.LearningFrames() = 30;
+
+		Algorithms::BackgroundSubtraction::AdaptiveMedianBGS bgs;
+		bgs.Initalize(params);
+******************************************************************************/
+
+#include "Bgs.h"
+
+namespace Algorithms
+{
+	namespace BackgroundSubtraction
+	{
+		// --- Parameters used by the Adaptive Median BGS algorithm ---
+		class AdaptiveMedianParams : public BgsParams
+		{
+		public:
+			unsigned char &LowThreshold() { return m_low_threshold; }
+			unsigned char &HighThreshold() { return m_high_threshold; }
+
+			int &SamplingRate() { return m_samplingRate; }
+			int &LearningFrames() { return m_learning_frames; }
+
+		private:
+			unsigned char m_low_threshold;
+			unsigned char m_high_threshold;
+
+			int m_samplingRate;
+			int m_learning_frames;
+		};
+
+
+		// --- Adaptive Median BGS algorithm ---
+		class AdaptiveMedianBGS : public Bgs 
+		{
+		public:
+			virtual ~AdaptiveMedianBGS() {}
+
+			void Initalize(const BgsParams& param);
+
+			void InitModel(const RgbImage& data);
+			void Subtract(int frame_num, const RgbImage& data,  
+											BwImage& low_threshold_mask, BwImage& high_threshold_mask);	
+			void Update(int frame_num, const RgbImage& data,  const BwImage& update_mask);
+
+			RgbImage* Background();
+
+		private:	
+			void SubtractPixel(int r, int c, const RgbPixel& pixel, 
+													unsigned char& low_threshold, unsigned char& high_threshold);
+
+			AdaptiveMedianParams m_params;
+
+			RgbImage m_median;
+		};
+	};
+};
diff --git a/package_bgs/dp/Bgs.h b/package_bgs/dp/Bgs.h
new file mode 100644
index 0000000..c1ae23c
--- /dev/null
+++ b/package_bgs/dp/Bgs.h
@@ -0,0 +1,67 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* Bgs.hpp
+*
+* Purpose: Base class for BGS algorithms.
+*
+* Author: Donovan Parks, October 2007
+*
+******************************************************************************/
+
+#ifndef BGS_H_
+#define BGS_H_
+
+#include "Image.h"
+#include "BgsParams.h"
+
+namespace Algorithms
+{
+	namespace BackgroundSubtraction
+	{
+		class Bgs
+		{
+		public:
+			static const int BACKGROUND = 0;
+			static const int FOREGROUND = 255;
+
+			virtual ~Bgs() {}
+
+			// Initialize any data required by the BGS algorithm. Should be called once before calling
+			// any of the following functions.
+			virtual void Initalize(const BgsParams& param) = 0;
+
+			// Initialize the background model. Typically, the background model is initialized using the first
+			// frame of the incoming video stream, but alternatives are possible.
+			virtual void InitModel(const RgbImage& data) = 0;
+
+			// Subtract the current frame from the background model and produce a binary foreground mask using
+			// both a low and high threshold value.
+			virtual void Subtract(int frame_num, const RgbImage& data,  
+															BwImage& low_threshold_mask, BwImage& high_threshold_mask) = 0;	
+
+			// Update the background model. Only pixels set to background in update_mask are updated.
+			virtual void Update(int frame_num, const RgbImage& data,  const BwImage& update_mask) = 0;
+
+			// Return the current background model.
+			virtual RgbImage *Background() = 0;
+		};
+	};
+};
+
+#endif
\ No newline at end of file
diff --git a/package_bgs/dp/BgsParams.h b/package_bgs/dp/BgsParams.h
new file mode 100644
index 0000000..c3bad83
--- /dev/null
+++ b/package_bgs/dp/BgsParams.h
@@ -0,0 +1,59 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* BgsParams.hpp
+*
+* Purpose: Base class for BGS parameters. Any parameters common to all BGS
+*					 algorithms should be specified directly in this class.
+*
+* Author: Donovan Parks, May 2008
+*
+******************************************************************************/
+
+#ifndef BGS_PARAMS_H_
+#define BGS_PARAMS_H_
+
+namespace Algorithms
+{
+	namespace BackgroundSubtraction
+	{
+		class BgsParams
+		{
+		public:
+			virtual ~BgsParams() {}
+
+			virtual void SetFrameSize(unsigned int width, unsigned int height)
+			{
+				m_width = width;
+				m_height = height;
+				m_size = width*height;
+			}
+
+			unsigned int &Width() { return m_width; }
+			unsigned int &Height() { return m_height; }
+			unsigned int &Size() { return m_size; }
+
+		protected:
+			unsigned int m_width;
+			unsigned int m_height;
+			unsigned int m_size;
+		};
+	};
+};
+
+#endif
\ No newline at end of file
diff --git a/package_bgs/dp/DPAdaptiveMedianBGS.cpp b/package_bgs/dp/DPAdaptiveMedianBGS.cpp
new file mode 100644
index 0000000..d7ebcd1
--- /dev/null
+++ b/package_bgs/dp/DPAdaptiveMedianBGS.cpp
@@ -0,0 +1,104 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "DPAdaptiveMedianBGS.h"
+
+DPAdaptiveMedianBGS::DPAdaptiveMedianBGS() : firstTime(true), frameNumber(0), showOutput(true), threshold(40), samplingRate(7), learningFrames(30)
+{
+  std::cout << "DPAdaptiveMedianBGS()" << std::endl;
+}
+
+DPAdaptiveMedianBGS::~DPAdaptiveMedianBGS()
+{
+  std::cout << "~DPAdaptiveMedianBGS()" << std::endl;
+}
+
+void DPAdaptiveMedianBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold;
+    params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+    params.SamplingRate() = samplingRate;
+    params.LearningFrames() = learningFrames;
+    
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("Adaptive Median (McFarlane&Schofield)", foreground);
+  
+  foreground.copyTo(img_output);
+
+  delete frame;
+  firstTime = false;
+  frameNumber++;
+}
+
+void DPAdaptiveMedianBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPAdaptiveMedianBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "samplingRate", samplingRate);
+  cvWriteInt(fs, "learningFrames", learningFrames);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void DPAdaptiveMedianBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPAdaptiveMedianBGS.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadIntByName(fs, 0, "threshold", 40);
+  samplingRate = cvReadIntByName(fs, 0, "samplingRate", 7);
+  learningFrames = cvReadIntByName(fs, 0, "learningFrames", 30);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/dp/DPAdaptiveMedianBGS.h b/package_bgs/dp/DPAdaptiveMedianBGS.h
new file mode 100644
index 0000000..05ac9c3
--- /dev/null
+++ b/package_bgs/dp/DPAdaptiveMedianBGS.h
@@ -0,0 +1,56 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "AdaptiveMedianBGS.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class DPAdaptiveMedianBGS : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage* frame;
+  RgbImage frame_data;
+
+  AdaptiveMedianParams params;
+  AdaptiveMedianBGS bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  int threshold;
+  int samplingRate;
+  int learningFrames;
+  bool showOutput;
+
+public:
+  DPAdaptiveMedianBGS();
+  ~DPAdaptiveMedianBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/dp/DPEigenbackgroundBGS.cpp b/package_bgs/dp/DPEigenbackgroundBGS.cpp
new file mode 100644
index 0000000..6d2c6ba
--- /dev/null
+++ b/package_bgs/dp/DPEigenbackgroundBGS.cpp
@@ -0,0 +1,106 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "DPEigenbackgroundBGS.h"
+
+DPEigenbackgroundBGS::DPEigenbackgroundBGS() : firstTime(true), frameNumber(0), showOutput(true), threshold(225), historySize(20), embeddedDim(10)
+{
+  std::cout << "DPEigenbackgroundBGS()" << std::endl;
+}
+
+DPEigenbackgroundBGS::~DPEigenbackgroundBGS()
+{
+  std::cout << "~DPEigenbackgroundBGS()" << std::endl;
+}
+
+void DPEigenbackgroundBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold; //15*15;
+    params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+    //params.HistorySize() = 100;
+    params.HistorySize() = historySize;
+    //params.EmbeddedDim() = 20;
+    params.EmbeddedDim() = embeddedDim;
+
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("Eigenbackground (Oliver)", foreground);
+
+  foreground.copyTo(img_output);
+
+  delete frame;
+  firstTime = false;
+  frameNumber++;
+}
+
+void DPEigenbackgroundBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPEigenbackgroundBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "historySize", historySize);
+  cvWriteInt(fs, "embeddedDim", embeddedDim);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void DPEigenbackgroundBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPEigenbackgroundBGS.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadIntByName(fs, 0, "threshold", 225);
+  historySize = cvReadIntByName(fs, 0, "historySize", 20);
+  embeddedDim = cvReadIntByName(fs, 0, "embeddedDim", 10);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/dp/DPEigenbackgroundBGS.h b/package_bgs/dp/DPEigenbackgroundBGS.h
new file mode 100644
index 0000000..df558fe
--- /dev/null
+++ b/package_bgs/dp/DPEigenbackgroundBGS.h
@@ -0,0 +1,56 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "Eigenbackground.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class DPEigenbackgroundBGS : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage* frame;
+  RgbImage frame_data;
+
+  EigenbackgroundParams params;
+  Eigenbackground bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  int threshold;
+  int historySize;
+  int embeddedDim;
+  bool showOutput;
+
+public:
+  DPEigenbackgroundBGS();
+  ~DPEigenbackgroundBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/dp/DPGrimsonGMMBGS.cpp b/package_bgs/dp/DPGrimsonGMMBGS.cpp
new file mode 100644
index 0000000..0d6ad42
--- /dev/null
+++ b/package_bgs/dp/DPGrimsonGMMBGS.cpp
@@ -0,0 +1,105 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "DPGrimsonGMMBGS.h"
+
+DPGrimsonGMMBGS::DPGrimsonGMMBGS() : firstTime(true), frameNumber(0), showOutput(true), threshold(9.0), alpha(0.01), gaussians(3)
+{
+  std::cout << "DPGrimsonGMMBGS()" << std::endl;
+}
+
+DPGrimsonGMMBGS::~DPGrimsonGMMBGS()
+{
+  std::cout << "~DPGrimsonGMMBGS()" << std::endl;
+}
+
+void DPGrimsonGMMBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold; //3.0f*3.0f;
+    params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+    //params.Alpha() = 0.001f;
+    params.Alpha() = alpha; //0.01f;
+    params.MaxModes() = gaussians; //3;
+
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("GMM (Grimson)", foreground);
+  
+  foreground.copyTo(img_output);
+
+  delete frame;
+  firstTime = false;
+  frameNumber++;
+}
+
+void DPGrimsonGMMBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPGrimsonGMMBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteReal(fs, "threshold", threshold);
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteInt(fs, "gaussians", gaussians);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void DPGrimsonGMMBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPGrimsonGMMBGS.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadRealByName(fs, 0, "threshold", 9.0);
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.01);
+  gaussians = cvReadIntByName(fs, 0, "gaussians", 3);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/dp/DPGrimsonGMMBGS.h b/package_bgs/dp/DPGrimsonGMMBGS.h
new file mode 100644
index 0000000..37e2a33
--- /dev/null
+++ b/package_bgs/dp/DPGrimsonGMMBGS.h
@@ -0,0 +1,56 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "GrimsonGMM.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class DPGrimsonGMMBGS : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage* frame;
+  RgbImage frame_data;
+
+  GrimsonParams params;
+  GrimsonGMM bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  double threshold;
+  double alpha;
+  int gaussians;
+  bool showOutput;
+
+public:
+  DPGrimsonGMMBGS();
+  ~DPGrimsonGMMBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/dp/DPMeanBGS.cpp b/package_bgs/dp/DPMeanBGS.cpp
new file mode 100644
index 0000000..13260b4
--- /dev/null
+++ b/package_bgs/dp/DPMeanBGS.cpp
@@ -0,0 +1,105 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "DPMeanBGS.h"
+
+DPMeanBGS::DPMeanBGS() : firstTime(true), frameNumber(0), threshold(2700), alpha(1e-6f), learningFrames(30), showOutput(true)
+{
+  std::cout << "DPMeanBGS()" << std::endl;
+}
+
+DPMeanBGS::~DPMeanBGS()
+{
+  std::cout << "~DPMeanBGS()" << std::endl;
+}
+
+void DPMeanBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold; //3*30*30; // 2700
+    params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+    //params.Alpha() = 1e-6f;
+    params.Alpha() = alpha;
+    params.LearningFrames() = learningFrames;//30;
+
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("Temporal Mean (Donovan Parks)", foreground);
+
+  foreground.copyTo(img_output);
+
+  delete frame;
+  firstTime = false;
+  frameNumber++;
+}
+
+void DPMeanBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPMeanBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteInt(fs, "learningFrames", learningFrames);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void DPMeanBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPMeanBGS.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadIntByName(fs, 0, "threshold", 2700);
+  alpha = cvReadRealByName(fs, 0, "alpha", 1e-6f);
+  learningFrames = cvReadIntByName(fs, 0, "learningFrames", 30);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/dp/DPMeanBGS.h b/package_bgs/dp/DPMeanBGS.h
new file mode 100644
index 0000000..b119ac4
--- /dev/null
+++ b/package_bgs/dp/DPMeanBGS.h
@@ -0,0 +1,56 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "MeanBGS.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class DPMeanBGS : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage* frame;
+  RgbImage frame_data;
+
+  MeanParams params;
+  MeanBGS bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  int threshold;
+  double alpha;
+  int learningFrames;
+  bool showOutput;
+
+public:
+  DPMeanBGS();
+  ~DPMeanBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/dp/DPPratiMediodBGS.cpp b/package_bgs/dp/DPPratiMediodBGS.cpp
new file mode 100644
index 0000000..65c3ef3
--- /dev/null
+++ b/package_bgs/dp/DPPratiMediodBGS.cpp
@@ -0,0 +1,107 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "DPPratiMediodBGS.h"
+
+DPPratiMediodBGS::DPPratiMediodBGS() : firstTime(true), frameNumber(0), threshold(30), samplingRate(5), historySize(16), weight(5), showOutput(true)
+{
+  std::cout << "DPPratiMediodBGS()" << std::endl;
+}
+
+DPPratiMediodBGS::~DPPratiMediodBGS()
+{
+  std::cout << "~DPPratiMediodBGS()" << std::endl;
+}
+
+void DPPratiMediodBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold;
+    params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+    params.SamplingRate() = samplingRate;
+    params.HistorySize() = historySize;
+    params.Weight() = weight;
+
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("Temporal Median (Cucchiara&Calderara)", foreground);
+
+  foreground.copyTo(img_output);
+
+  delete frame;
+  firstTime = false;
+  frameNumber++;
+}
+
+void DPPratiMediodBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPPratiMediodBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "threshold", threshold);
+  cvWriteInt(fs, "samplingRate", samplingRate);
+  cvWriteInt(fs, "historySize", historySize);
+  cvWriteInt(fs, "weight", weight);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void DPPratiMediodBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPPratiMediodBGS.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadIntByName(fs, 0, "threshold", 30);
+  samplingRate = cvReadIntByName(fs, 0, "samplingRate", 5);
+  historySize = cvReadIntByName(fs, 0, "historySize", 16);
+  weight = cvReadIntByName(fs, 0, "weight", 5);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/dp/DPPratiMediodBGS.h b/package_bgs/dp/DPPratiMediodBGS.h
new file mode 100644
index 0000000..657dc1b
--- /dev/null
+++ b/package_bgs/dp/DPPratiMediodBGS.h
@@ -0,0 +1,57 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "PratiMediodBGS.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class DPPratiMediodBGS : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage* frame;
+  RgbImage frame_data;
+
+  PratiParams params;
+  PratiMediodBGS bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  int threshold;
+  int samplingRate;
+  int historySize;
+  int weight;
+  bool showOutput;
+
+public:
+  DPPratiMediodBGS();
+  ~DPPratiMediodBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/dp/DPTextureBGS.cpp b/package_bgs/dp/DPTextureBGS.cpp
new file mode 100644
index 0000000..2d34342
--- /dev/null
+++ b/package_bgs/dp/DPTextureBGS.cpp
@@ -0,0 +1,156 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "DPTextureBGS.h"
+
+DPTextureBGS::DPTextureBGS() : firstTime(true), showOutput(true)
+  //, enableFiltering(true)
+{
+  std::cout << "DPTextureBGS()" << std::endl;
+}
+
+DPTextureBGS::~DPTextureBGS()
+{
+  delete[] bgModel; // ~10Kb (25.708-15.968)
+  delete[] modeArray;
+  delete[] curTextureHist; // ~10Kb (16-6.396)
+  //cvReleaseStructuringElement(&dilateElement);
+  //cvReleaseStructuringElement(&erodeElement);
+  image.ReleaseImage();
+  fgMask.ReleaseImage();
+  tempMask.ReleaseImage();
+  texture.ReleaseImage();
+  std::cout << "~DPTextureBGS()" << std::endl;
+}
+
+void DPTextureBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+  {
+    width	= img_input.size().width;
+    height = img_input.size().height;
+    size = width * height;
+
+    // input image
+    image = cvCreateImage(cvSize(width, height), 8, 3);
+    cvCopy(frame, image.Ptr());	
+
+    // foreground masks
+    fgMask = cvCreateImage(cvSize(width, height), 8, 1);
+    tempMask = cvCreateImage(cvSize(width, height), 8, 1);
+    cvZero(fgMask.Ptr());
+    cvZero(tempMask.Ptr());
+    
+    // create background model
+    bgModel = new TextureArray[size];
+    texture = cvCreateImage(cvSize(width, height), 8, 3);
+    cvZero(texture.Ptr());
+    modeArray = new unsigned char[size];
+    curTextureHist = new TextureHistogram[size];
+
+    // initialize background model
+    bgs.LBP(image, texture);
+    bgs.Histogram(texture, curTextureHist);
+    for(int y = REGION_R+TEXTURE_R; y < height-REGION_R-TEXTURE_R; ++y)
+    {
+      for(int x = REGION_R+TEXTURE_R; x < width-REGION_R-TEXTURE_R; ++x)
+      {
+        int index = x+y*width;
+      
+        for(int m = 0; m < NUM_MODES; ++m)
+        {
+          for(int i = 0; i < NUM_BINS; ++i)
+          {			
+            bgModel[index].mode[m].r[i] = curTextureHist[index].r[i];
+            bgModel[index].mode[m].g[i] = curTextureHist[index].g[i];
+            bgModel[index].mode[m].b[i] = curTextureHist[index].b[i];
+          }
+        }
+      }
+    }
+
+    //dilateElement = cvCreateStructuringElementEx(7, 7, 3, 3,	CV_SHAPE_RECT);
+    //erodeElement = cvCreateStructuringElementEx(3, 3, 1, 1,	CV_SHAPE_RECT);
+
+    saveConfig();
+    firstTime = false;
+  }
+  
+  cvCopy(frame, image.Ptr());	
+
+  // perform background subtraction
+  bgs.LBP(image, texture);
+  bgs.Histogram(texture, curTextureHist);
+  bgs.BgsCompare(bgModel, curTextureHist, modeArray, THRESHOLD, fgMask);
+  
+  //if(enableFiltering)
+  //{
+  //  // size filtering
+  //  ConnectedComponents cc;
+  //  CBlobResult largeBlobs;
+  //  cc.SetImage(&fgMask);
+  //  cc.Find(127);
+  //  cc.FilterMinArea(size/30, largeBlobs);
+  //  fgMask.Clear();
+  //  cc.ColorBlobs(fgMask.Ptr(), largeBlobs, CV_RGB(255,255,255));
+  //  largeBlobs.ClearBlobs();
+
+  //  // morphological operators
+  //  cvDilate(fgMask.Ptr(), fgMask.Ptr(), dilateElement, 1);
+  //  cvErode(fgMask.Ptr(), fgMask.Ptr(), erodeElement, 1);
+  //}
+
+  cv::Mat foreground(fgMask.Ptr());
+  if(!foreground.empty())
+    foreground.copyTo(img_output);
+  
+  if(showOutput)
+    cv::imshow("Texture BGS (Donovan Parks)", foreground);
+
+  // update background subtraction		
+  bgs.UpdateModel(fgMask, bgModel, curTextureHist, modeArray);
+  
+  delete frame;
+}
+
+void DPTextureBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPTextureBGS.xml", 0, CV_STORAGE_WRITE);
+
+  //cvWriteReal(fs, "alpha", alpha);
+  //cvWriteInt(fs, "enableFiltering", enableFiltering);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void DPTextureBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPTextureBGS.xml", 0, CV_STORAGE_READ);
+  
+  //alpha = cvReadRealByName(fs, 0, "alpha", 1e-6f);
+  //enableFiltering = cvReadIntByName(fs, 0, "enableFiltering", true);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/dp/DPTextureBGS.h b/package_bgs/dp/DPTextureBGS.h
new file mode 100644
index 0000000..daa6a55
--- /dev/null
+++ b/package_bgs/dp/DPTextureBGS.h
@@ -0,0 +1,60 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "TextureBGS.h"
+//#include "ConnectedComponents.h"
+
+class DPTextureBGS : public IBGS
+{
+private:
+  bool firstTime;
+  bool showOutput;
+
+  int width;
+  int height;
+  int size;
+  TextureBGS bgs;
+  IplImage* frame;
+  RgbImage image;
+  BwImage fgMask;
+  BwImage tempMask;
+  TextureArray* bgModel;
+  RgbImage texture;
+  unsigned char* modeArray;
+  TextureHistogram* curTextureHist;
+  //ConnectedComponents cc;
+  //CBlobResult largeBlobs;
+  //IplConvKernel* dilateElement;
+  //IplConvKernel* erodeElement;
+  //bool enableFiltering;
+
+public:
+  DPTextureBGS();
+  ~DPTextureBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
diff --git a/package_bgs/dp/DPWrenGABGS.cpp b/package_bgs/dp/DPWrenGABGS.cpp
new file mode 100644
index 0000000..d7241b1
--- /dev/null
+++ b/package_bgs/dp/DPWrenGABGS.cpp
@@ -0,0 +1,105 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "DPWrenGABGS.h"
+
+DPWrenGABGS::DPWrenGABGS() : firstTime(true), frameNumber(0), threshold(12.25f), alpha(0.005f), learningFrames(30), showOutput(true)
+{
+  std::cout << "DPWrenGABGS()" << std::endl;
+}
+
+DPWrenGABGS::~DPWrenGABGS()
+{
+  std::cout << "~DPWrenGABGS()" << std::endl;
+}
+
+void DPWrenGABGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold; //3.5f*3.5f;
+    params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+    params.Alpha() = alpha; //0.005f;
+    params.LearningFrames() = learningFrames; //30;
+
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("Gaussian Average (Wren)", foreground);
+  
+  foreground.copyTo(img_output);
+
+  delete frame;
+  firstTime = false;
+  frameNumber++;
+}
+
+void DPWrenGABGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPWrenGABGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteReal(fs, "threshold", threshold);
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteInt(fs, "learningFrames", learningFrames);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void DPWrenGABGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPWrenGABGS.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadRealByName(fs, 0, "threshold", 12.25f);
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.005f);
+  learningFrames = cvReadIntByName(fs, 0, "learningFrames", 30);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
+
diff --git a/package_bgs/dp/DPWrenGABGS.h b/package_bgs/dp/DPWrenGABGS.h
new file mode 100644
index 0000000..7e545c5
--- /dev/null
+++ b/package_bgs/dp/DPWrenGABGS.h
@@ -0,0 +1,56 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "WrenGA.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class DPWrenGABGS : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage* frame;
+  RgbImage frame_data;
+
+  WrenParams params;
+  WrenGA bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  double threshold;
+  double alpha;
+  int learningFrames;
+  bool showOutput;
+
+public:
+  DPWrenGABGS();
+  ~DPWrenGABGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/dp/DPZivkovicAGMMBGS.cpp b/package_bgs/dp/DPZivkovicAGMMBGS.cpp
new file mode 100644
index 0000000..16f991c
--- /dev/null
+++ b/package_bgs/dp/DPZivkovicAGMMBGS.cpp
@@ -0,0 +1,104 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "DPZivkovicAGMMBGS.h"
+
+DPZivkovicAGMMBGS::DPZivkovicAGMMBGS() : firstTime(true), frameNumber(0), showOutput(true), threshold(25.0f), alpha(0.001f), gaussians(3)
+{
+  std::cout << "DPZivkovicAGMMBGS()" << std::endl;
+}
+
+DPZivkovicAGMMBGS::~DPZivkovicAGMMBGS()
+{
+  std::cout << "~DPZivkovicAGMMBGS()" << std::endl;
+}
+
+void DPZivkovicAGMMBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold; //5.0f*5.0f;
+    params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+    params.Alpha() = alpha; //0.001f;
+    params.MaxModes() = gaussians; //3;
+
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("Gaussian Mixture Model (Zivkovic)", foreground);
+  
+  foreground.copyTo(img_output);
+
+  delete frame;
+  firstTime = false;
+  frameNumber++;
+}
+
+void DPZivkovicAGMMBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPZivkovicAGMMBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteReal(fs, "threshold", threshold);
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteInt(fs, "gaussians", gaussians);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void DPZivkovicAGMMBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/DPZivkovicAGMMBGS.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadRealByName(fs, 0, "threshold", 25.0f);
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.001f);
+  gaussians = cvReadIntByName(fs, 0, "gaussians", 3);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/dp/DPZivkovicAGMMBGS.h b/package_bgs/dp/DPZivkovicAGMMBGS.h
new file mode 100644
index 0000000..d213341
--- /dev/null
+++ b/package_bgs/dp/DPZivkovicAGMMBGS.h
@@ -0,0 +1,56 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "ZivkovicAGMM.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class DPZivkovicAGMMBGS : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage* frame;
+  RgbImage frame_data;
+
+  ZivkovicParams params;
+  ZivkovicAGMM bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  double threshold;
+  double alpha;
+  int gaussians;
+  bool showOutput;
+
+public:
+  DPZivkovicAGMMBGS();
+  ~DPZivkovicAGMMBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/dp/Eigenbackground.cpp b/package_bgs/dp/Eigenbackground.cpp
new file mode 100644
index 0000000..2d2c3ef
--- /dev/null
+++ b/package_bgs/dp/Eigenbackground.cpp
@@ -0,0 +1,190 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* Eigenbackground.cpp
+*
+* Purpose: Implementation of the Eigenbackground background subtraction 
+*					 algorithm developed by Oliver et al.
+*
+* Author: Donovan Parks, September 2007
+*
+* "A Bayesian Computer Vision System for Modeling Human Interactions"
+*   Nuria Oliver, Barbara Rosario, Alex P. Pentland 2000
+*
+******************************************************************************/
+
+#include "Eigenbackground.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+Eigenbackground::Eigenbackground()
+{
+	m_pcaData = NULL;
+	m_pcaAvg = NULL;
+	m_eigenValues = NULL;
+	m_eigenVectors = NULL;
+}
+
+Eigenbackground::~Eigenbackground()
+{
+	if(m_pcaData != NULL) cvReleaseMat(&m_pcaData);
+	if(m_pcaAvg != NULL) cvReleaseMat(&m_pcaAvg);
+	if(m_eigenValues != NULL) cvReleaseMat(&m_eigenValues);
+	if(m_eigenVectors != NULL) cvReleaseMat(&m_eigenVectors);
+}
+
+void Eigenbackground::Initalize(const BgsParams& param)
+{
+	m_params = (EigenbackgroundParams&)param;
+	
+	m_background = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 3);
+	m_background.Clear();
+}
+
+void Eigenbackground::InitModel(const RgbImage& data)
+{
+	if(m_pcaData != NULL) cvReleaseMat(&m_pcaData);
+	if(m_pcaAvg != NULL) cvReleaseMat(&m_pcaAvg);
+	if(m_eigenValues != NULL) cvReleaseMat(&m_eigenValues);
+	if(m_eigenVectors != NULL) cvReleaseMat(&m_eigenVectors);
+
+	m_pcaData = cvCreateMat(m_params.HistorySize(), m_params.Size()*3, CV_8UC1);
+
+	m_background.Clear();
+}
+
+void Eigenbackground::Update(int frame_num, const RgbImage& data,  const BwImage& update_mask)
+{
+	// the eigenbackground model is not updated (serious limitation!)
+}
+
+void Eigenbackground::Subtract(int frame_num, const RgbImage& data,  
+																BwImage& low_threshold_mask, BwImage& high_threshold_mask)
+{
+	// create eigenbackground
+	if(frame_num == m_params.HistorySize())
+	{
+		// create the eigenspace
+		m_pcaAvg = cvCreateMat( 1, m_pcaData->cols, CV_32F );
+		m_eigenValues = cvCreateMat( m_pcaData->rows, 1, CV_32F ); 
+		m_eigenVectors = cvCreateMat( m_pcaData->rows, m_pcaData->cols, CV_32F );
+		cvCalcPCA(m_pcaData, m_pcaAvg, m_eigenValues, m_eigenVectors, CV_PCA_DATA_AS_ROW);
+
+		int index = 0;
+		for(unsigned int r = 0; r < m_params.Height(); ++r)
+		{
+			for(unsigned int c = 0; c < m_params.Width(); ++c)
+			{
+				for(int ch = 0; ch < m_background.Ptr()->nChannels; ++ch)
+				{
+					m_background(r,c,0) = static_cast<unsigned char>(cvmGet(m_pcaAvg,0,index)+0.5);
+					index++;
+				}
+			}
+		}
+	}
+
+	if(frame_num >= m_params.HistorySize())
+	{
+		// project new image into the eigenspace
+		int w = data.Ptr()->width;
+		int h = data.Ptr()->height;
+		int ch = data.Ptr()->nChannels;
+		CvMat* dataPt = cvCreateMat(1, w*h*ch, CV_8UC1); 
+		CvMat data_row;
+		cvGetRow(dataPt, &data_row, 0);
+		cvReshape(&data_row, &data_row, 3, data.Ptr()->height); 
+		cvCopy(data.Ptr(), &data_row); 
+
+		CvMat* proj = cvCreateMat(1, m_params.EmbeddedDim(), CV_32F);
+		cvProjectPCA(dataPt, m_pcaAvg, m_eigenVectors, proj);
+
+		// reconstruct point
+		CvMat* result = cvCreateMat(1, m_pcaData->cols, CV_32F);
+		cvBackProjectPCA(proj, m_pcaAvg, m_eigenVectors, result);
+
+		// calculate Euclidean distance between new image and its eigenspace projection
+		int index = 0;
+		for(unsigned int r = 0; r < m_params.Height(); ++r)
+		{
+			for(unsigned int c = 0; c < m_params.Width(); ++c)
+			{
+				double dist = 0;
+				bool bgLow = true;
+				bool bgHigh = true;
+				for(int ch = 0; ch < 3; ++ch)
+				{
+					dist = (data(r,c,ch) - cvmGet(result,0,index))*(data(r,c,ch) - cvmGet(result,0,index));
+					if(dist > m_params.LowThreshold())
+						bgLow = false;
+					if(dist > m_params.HighThreshold())
+						bgHigh = false;
+					index++;
+				}
+				
+				if(!bgLow)
+				{
+					low_threshold_mask(r,c) = FOREGROUND;
+				}
+				else
+				{
+					low_threshold_mask(r,c) = BACKGROUND;
+				}
+
+				if(!bgHigh)
+				{
+					high_threshold_mask(r,c) = FOREGROUND;
+				}
+				else
+				{
+					high_threshold_mask(r,c) = BACKGROUND;
+				}
+			}
+		}
+		
+		cvReleaseMat(&result);
+		cvReleaseMat(&proj);		
+		cvReleaseMat(&dataPt);
+	}
+	else 
+	{
+		// set entire image to background since there is not enough information yet
+		// to start performing background subtraction
+		for(unsigned int r = 0; r < m_params.Height(); ++r)
+		{
+			for(unsigned int c = 0; c < m_params.Width(); ++c)
+			{
+				low_threshold_mask(r,c) = BACKGROUND;
+				high_threshold_mask(r,c) = BACKGROUND;
+			}
+		}
+	}
+
+	UpdateHistory(frame_num, data);
+}
+
+void Eigenbackground::UpdateHistory(int frame_num, const RgbImage& new_frame)
+{
+	if(frame_num < m_params.HistorySize())
+	{
+		CvMat src_row;
+		cvGetRow(m_pcaData, &src_row, frame_num);
+		cvReshape(&src_row, &src_row, 3, new_frame.Ptr()->height);
+		cvCopy(new_frame.Ptr(), &src_row);
+	}
+}
diff --git a/package_bgs/dp/Eigenbackground.h b/package_bgs/dp/Eigenbackground.h
new file mode 100644
index 0000000..b86ac92
--- /dev/null
+++ b/package_bgs/dp/Eigenbackground.h
@@ -0,0 +1,101 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* Eigenbackground.hpp
+*
+* Purpose: Implementation of the Eigenbackground background subtraction 
+*					 algorithm developed by Oliver et al.
+*
+* Author: Donovan Parks, September 2007
+*
+* "A Bayesian Computer Vision System for Modeling Human Interactions"
+*   Nuria Oliver, Barbara Rosario, Alex P. Pentland 2000
+
+Example:
+Algorithms::BackgroundSubtraction::EigenbackgroundParams params;
+params.SetFrameSize(width, height);
+params.LowThreshold() = 15*15;
+params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+params.HistorySize() = 100;
+params.EmbeddedDim() = 20;
+
+Algorithms::BackgroundSubtraction::Eigenbackground bgs;
+bgs.Initalize(params);
+******************************************************************************/
+
+#ifndef _ELGAMMAL_H_
+#define _ELGAMMAL_H_
+
+#include "Bgs.h"
+
+namespace Algorithms
+{
+  namespace BackgroundSubtraction
+  {
+    // --- Parameters used by the Mean BGS algorithm ---
+    class EigenbackgroundParams : public BgsParams
+    {
+    public:
+      float &LowThreshold() { return m_low_threshold; }
+      float &HighThreshold() { return m_high_threshold; }
+
+      int &HistorySize() { return m_history_size; }
+      int &EmbeddedDim() { return m_dim; }
+
+    private:
+      // A pixel will be classified as foreground if the squared distance of any
+      // color channel is greater than the specified threshold
+      float m_low_threshold;
+      float m_high_threshold;
+
+      int m_history_size;			// number frames used to create eigenspace
+      int m_dim;							// eigenspace dimensionality
+    };
+
+    // --- Eigenbackground BGS algorithm ---
+    class Eigenbackground : public Bgs
+    {
+    public:
+      Eigenbackground();
+      ~Eigenbackground();
+
+      void Initalize(const BgsParams& param);
+
+      void InitModel(const RgbImage& data);
+      void Subtract(int frame_num, const RgbImage& data,  
+        BwImage& low_threshold_mask, BwImage& high_threshold_mask);	
+      void Update(int frame_num, const RgbImage& data,  const BwImage& update_mask);
+
+      RgbImage* Background() { return &m_background; }
+
+    private:
+      void UpdateHistory(int frameNum, const RgbImage& newFrame);
+
+      EigenbackgroundParams m_params;
+
+      CvMat* m_pcaData;
+      CvMat* m_pcaAvg;
+      CvMat* m_eigenValues; 
+      CvMat* m_eigenVectors;
+
+      RgbImage m_background;
+    };
+  };
+};
+
+#endif
\ No newline at end of file
diff --git a/package_bgs/dp/Error.cpp b/package_bgs/dp/Error.cpp
new file mode 100644
index 0000000..1bd87db
--- /dev/null
+++ b/package_bgs/dp/Error.cpp
@@ -0,0 +1,57 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* Error.cpp
+*
+* Purpose:  Error checking routines.
+*
+* Author: Donovan Parks, July 2007
+*
+******************************************************************************/
+
+#include <iostream> 
+#include <fstream>
+
+#include "Error.h"
+
+using namespace std;
+
+ofstream traceFile;
+
+bool Error(const char* msg, const char* code, int data)
+{
+  cerr << code << ": " << msg << endl;
+
+  return false;
+}
+
+bool TraceInit(const char* filename)
+{
+  traceFile.open(filename);
+  return traceFile.is_open();
+}
+
+void Trace(const char* msg)
+{
+  traceFile << msg << endl;
+}
+
+void TraceClose()
+{
+  traceFile.close();
+}
diff --git a/package_bgs/dp/Error.h b/package_bgs/dp/Error.h
new file mode 100644
index 0000000..cdbb222
--- /dev/null
+++ b/package_bgs/dp/Error.h
@@ -0,0 +1,36 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* Error.h
+*
+* Purpose:  Error checking routines.
+*
+* Author: Donovan Parks, July 2007
+*
+******************************************************************************/
+
+#ifndef ERROR_H
+#define ERROR_H
+
+bool Error(const char* msg, const char* code, int data);
+
+bool TraceInit(const char* filename);
+void Trace(const char* msg);
+void TraceClose();
+
+#endif
diff --git a/package_bgs/dp/GrimsonGMM.cpp b/package_bgs/dp/GrimsonGMM.cpp
new file mode 100644
index 0000000..5788dc9
--- /dev/null
+++ b/package_bgs/dp/GrimsonGMM.cpp
@@ -0,0 +1,332 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* GrimsonGMM.cpp
+*
+* Purpose: Implementation of the Gaussian mixture model (GMM) background 
+*		  		 subtraction described in:
+*	  			 "Adaptive background mixture models for real-time tracking"
+* 						by Chris Stauffer and W.E.L Grimson
+*
+* Author: Donovan Parks, September 2007
+*
+* This code is based on code by Z. Zivkovic's written for his enhanced GMM
+* background subtraction algorithm: 
+*
+*	"Improved adaptive Gausian mixture model for background subtraction"
+*		Z.Zivkovic 
+*		International Conference Pattern Recognition, UK, August, 2004
+*
+*
+* "Efficient Adaptive Density Estimapion per Image Pixel for the 
+*			Task of Background Subtraction"
+*		Z.Zivkovic, F. van der Heijden 
+*		Pattern Recognition Letters, vol. 27, no. 7, pages 773-780, 2006.
+*
+* Zivkovic's code can be obtained at: www.zoranz.net
+******************************************************************************/
+
+#include "GrimsonGMM.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+int compareGMM(const void* _gmm1, const void* _gmm2)
+{
+	GMM gmm1 = *(GMM*)_gmm1;
+	GMM gmm2 = *(GMM*)_gmm2;
+
+	if(gmm1.significants < gmm2.significants)
+		return 1;
+	else if(gmm1.significants == gmm2.significants)
+		return 0;
+	else
+		return -1;
+}
+
+GrimsonGMM::GrimsonGMM()
+{
+	m_modes = NULL;
+}
+
+GrimsonGMM::~GrimsonGMM()
+{
+	if(m_modes != NULL) 
+		delete[] m_modes;
+}
+
+void GrimsonGMM::Initalize(const BgsParams& param)
+{
+	m_params = (GrimsonParams&)param;
+
+	// Tbf - the threshold
+	m_bg_threshold = 0.75f;	// 1-cf from the paper 
+
+	// Tgenerate - the threshold
+	m_variance = 36.0f;		// sigma for the new mode
+
+	// GMM for each pixel
+	m_modes = new GMM[m_params.Size()*m_params.MaxModes()];
+
+	// used modes per pixel
+	m_modes_per_pixel = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 1);
+
+	m_background = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 3);
+}
+
+RgbImage* GrimsonGMM::Background()
+{
+	return &m_background;
+}
+
+void GrimsonGMM::InitModel(const RgbImage& data)
+{
+	m_modes_per_pixel.Clear();
+
+	for(unsigned int i = 0; i < m_params.Size()*m_params.MaxModes(); ++i)
+	{
+		m_modes[i].weight = 0;
+		m_modes[i].variance = 0;
+		m_modes[i].muR = 0;
+		m_modes[i].muG = 0;
+		m_modes[i].muB = 0;
+		m_modes[i].significants = 0;
+	}
+}
+
+void GrimsonGMM::Update(int frame_num, const RgbImage& data,  const BwImage& update_mask)
+{
+	// it doesn't make sense to have conditional updates in the GMM framework
+}
+
+void GrimsonGMM::SubtractPixel(long posPixel, const RgbPixel& pixel, unsigned char& numModes, 
+																	unsigned char& low_threshold, unsigned char& high_threshold)
+{
+	// calculate distances to the modes (+ sort???)
+	// here we need to go in descending order!!!
+	long pos;
+	bool bFitsPDF=false;
+	bool bBackgroundLow=false;
+	bool bBackgroundHigh=false;
+
+	float fOneMinAlpha = 1-m_params.Alpha();
+
+	float totalWeight = 0.0f;
+
+	// calculate number of Gaussians to include in the background model
+	int backgroundGaussians = 0;
+	double sum = 0.0;
+	for(int i = 0; i < numModes; ++i)
+	{
+		if(sum < m_bg_threshold)
+		{
+			backgroundGaussians++;
+			sum += m_modes[posPixel+i].weight;
+		}
+		else
+		{
+			break;
+		}
+	}
+
+	// update all distributions and check for match with current pixel
+	for (int iModes=0; iModes < numModes; iModes++)
+	{
+		pos=posPixel+iModes;
+		float weight = m_modes[pos].weight;
+
+		// fit not found yet
+		if (!bFitsPDF)
+		{
+			//check if it belongs to some of the modes
+			//calculate distance
+			float var = m_modes[pos].variance;
+			float muR = m_modes[pos].muR;
+			float muG = m_modes[pos].muG;
+			float muB = m_modes[pos].muB;
+		
+			float dR=muR - pixel(0);
+			float dG=muG - pixel(1);
+			float dB=muB - pixel(2);
+
+			// calculate the squared distance
+			float dist = (dR*dR + dG*dG + dB*dB);
+
+			if(dist < m_params.HighThreshold()*var && iModes < backgroundGaussians)
+				bBackgroundHigh = true;
+			
+			// a match occurs when the pixel is within sqrt(fTg) standard deviations of the distribution
+			if(dist < m_params.LowThreshold()*var)
+			{
+				bFitsPDF=true;
+
+				// check if this Gaussian is part of the background model
+				if(iModes < backgroundGaussians) 
+					bBackgroundLow = true;
+
+				//update distribution
+				float k = m_params.Alpha()/weight;
+				weight = fOneMinAlpha*weight + m_params.Alpha();
+				m_modes[pos].weight = weight;
+				m_modes[pos].muR = muR - k*(dR);
+				m_modes[pos].muG = muG - k*(dG);
+				m_modes[pos].muB = muB - k*(dB);
+
+				//limit the variance
+				float sigmanew = var + k*(dist-var);
+				m_modes[pos].variance = sigmanew < 4 ? 4 : sigmanew > 5*m_variance ? 5*m_variance : sigmanew;
+				m_modes[pos].significants = m_modes[pos].weight / sqrt(m_modes[pos].variance);
+			}
+			else
+			{
+				weight = fOneMinAlpha*weight;
+				if (weight < 0.0)
+				{
+					weight=0.0;
+					numModes--;
+				}
+
+				m_modes[pos].weight = weight;
+				m_modes[pos].significants = m_modes[pos].weight / sqrt(m_modes[pos].variance);
+			}
+		}
+		else
+		{
+			weight = fOneMinAlpha*weight;
+			if (weight < 0.0)
+			{
+				weight=0.0;
+				numModes--;
+			}
+			m_modes[pos].weight = weight;
+			m_modes[pos].significants = m_modes[pos].weight / sqrt(m_modes[pos].variance);
+		}
+
+		totalWeight += weight;
+	}
+
+	// renormalize weights so they add to one
+	double invTotalWeight = 1.0 / totalWeight;
+	for (int iLocal = 0; iLocal < numModes; iLocal++)
+	{
+		m_modes[posPixel + iLocal].weight *= (float)invTotalWeight;
+		m_modes[posPixel + iLocal].significants = m_modes[posPixel + iLocal].weight 
+																								/ sqrt(m_modes[posPixel + iLocal].variance);
+	}
+
+	// Sort significance values so they are in desending order. 
+	qsort(&m_modes[posPixel],  numModes, sizeof(GMM), compareGMM);
+
+	// make new mode if needed and exit
+	if (!bFitsPDF)
+	{
+		if (numModes < m_params.MaxModes())
+		{
+			numModes++;
+		}
+		else
+		{
+			// the weakest mode will be replaced
+		}
+
+		pos = posPixel + numModes-1;
+		
+		m_modes[pos].muR = pixel.ch[0];
+		m_modes[pos].muG = pixel.ch[1];
+		m_modes[pos].muB = pixel.ch[2];
+		m_modes[pos].variance = m_variance;
+		m_modes[pos].significants = 0;			// will be set below
+
+    if (numModes==1)
+			m_modes[pos].weight = 1;
+		else
+			m_modes[pos].weight = m_params.Alpha();
+
+		//renormalize weights
+		int iLocal;
+		float sum = 0.0;
+		for (iLocal = 0; iLocal < numModes; iLocal++)
+		{
+			sum += m_modes[posPixel+ iLocal].weight;
+		}
+
+		double invSum = 1.0/sum;
+		for (iLocal = 0; iLocal < numModes; iLocal++)
+		{
+			m_modes[posPixel + iLocal].weight *= (float)invSum;
+			m_modes[posPixel + iLocal].significants = m_modes[posPixel + iLocal].weight 
+																								/ sqrt(m_modes[posPixel + iLocal].variance);
+
+		}
+	}
+
+	// Sort significance values so they are in desending order. 
+	qsort(&(m_modes[posPixel]), numModes, sizeof(GMM), compareGMM);
+
+	if(bBackgroundLow)
+	{
+		low_threshold = BACKGROUND;
+	}
+	else
+	{
+		low_threshold = FOREGROUND;
+	}
+
+	if(bBackgroundHigh)
+	{
+		high_threshold = BACKGROUND;
+	}
+	else
+	{
+		high_threshold = FOREGROUND;
+	}
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Input:
+//  data - a pointer to the data of a RGB image of the same size
+//Output:
+//  output - a pointer to the data of a gray value image of the same size 
+//					(the memory should already be reserved) 
+//					values: 255-foreground, 125-shadow, 0-background
+///////////////////////////////////////////////////////////////////////////////
+void GrimsonGMM::Subtract(int frame_num, const RgbImage& data,  
+														BwImage& low_threshold_mask, BwImage& high_threshold_mask)
+{
+	unsigned char low_threshold, high_threshold;
+	long posPixel;
+
+	// update each pixel of the image
+	for(unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{		
+			// update model + background subtract
+			posPixel=(r*m_params.Width()+c)*m_params.MaxModes();
+			
+			SubtractPixel(posPixel, data(r,c), m_modes_per_pixel(r,c), low_threshold, high_threshold);
+			
+			low_threshold_mask(r,c) = low_threshold;
+			high_threshold_mask(r,c) = high_threshold;
+
+			m_background(r,c,0) = (unsigned char)m_modes[posPixel].muR;
+			m_background(r,c,1) = (unsigned char)m_modes[posPixel].muG;
+			m_background(r,c,2) = (unsigned char)m_modes[posPixel].muB;
+		}
+	}
+}
+
diff --git a/package_bgs/dp/GrimsonGMM.h b/package_bgs/dp/GrimsonGMM.h
new file mode 100644
index 0000000..2d11a28
--- /dev/null
+++ b/package_bgs/dp/GrimsonGMM.h
@@ -0,0 +1,150 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* GrimsonGMM.cpp
+*
+* Purpose: Implementation of the Gaussian mixture model (GMM) background 
+*		  		 subtraction described in:
+*	  			 "Adaptive background mixture models for real-time tracking"
+* 						by Chris Stauffer and W.E.L Grimson
+*
+* Author: Donovan Parks, September 2007
+*
+* This code is based on code by Z. Zivkovic's written for his enhanced GMM
+* background subtraction algorithm: 
+*
+*	"Improved adaptive Gausian mixture model for background subtraction"
+*		Z.Zivkovic 
+*		International Conference Pattern Recognition, UK, August, 2004
+*
+*
+* "Efficient Adaptive Density Estimapion per Image Pixel for the 
+*			Task of Background Subtraction"
+*		Z.Zivkovic, F. van der Heijden 
+*		Pattern Recognition Letters, vol. 27, no. 7, pages 773-780, 2006.
+*
+* Zivkovic's code can be obtained at: www.zoranz.net
+
+Example:
+		Algorithms::BackgroundSubtraction::GrimsonParams params;
+		params.SetFrameSize(width, height);
+		params.LowThreshold() = 3.0f*3.0f;
+		params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+		params.Alpha() = 0.001f;
+		params.MaxModes() = 3;
+
+		Algorithms::BackgroundSubtraction::GrimsonGMM bgs;
+		bgs.Initalize(params);
+******************************************************************************/
+
+#ifndef GRIMSON_GMM_
+#define GRIMSON_GMM_
+
+#include "Bgs.h"
+
+namespace Algorithms
+{
+	namespace BackgroundSubtraction
+	{
+		typedef struct GMMGaussian
+		{
+			float variance;
+			float muR;
+			float muG;
+			float muB;
+			float weight;
+			float significants;		// this is equal to weight / standard deviation and is used to
+														// determine which Gaussians should be part of the background model
+		} GMM;
+
+		// --- User adjustable parameters used by the Grimson GMM BGS algorithm ---
+		class GrimsonParams : public BgsParams
+		{
+		public:
+			float &LowThreshold() { return m_low_threshold; }
+			float &HighThreshold() { return m_high_threshold; }
+
+			float &Alpha() { return m_alpha; }
+			int &MaxModes() { return m_max_modes; }
+
+		private:
+			// Threshold on the squared dist. to decide when a sample is close to an existing 
+			// components. If it is not close to any a new component will be generated. 
+			// Smaller threshold values lead to more generated components and higher threshold values 
+			// lead to a small number of components but they can grow too large.
+			//
+			// It is usual easiest to think of these thresholds as being the number of variances away
+			// from the mean of a pixel before it is considered to be from the foreground.
+			float m_low_threshold;
+			float m_high_threshold;
+
+			// alpha - speed of update - if the time interval you want to average over is T
+			// set alpha=1/T. 
+			float m_alpha;
+
+			// Maximum number of modes (Gaussian components) that will be used per pixel
+			int m_max_modes;
+		};
+
+		// --- Grimson GMM BGS algorithm ---
+		class GrimsonGMM : public Bgs
+		{
+		public:
+			GrimsonGMM();
+			~GrimsonGMM();
+
+			void Initalize(const BgsParams& param);
+
+			void InitModel(const RgbImage& data);
+			void Subtract(int frame_num, const RgbImage& data,  
+											BwImage& low_threshold_mask, BwImage& high_threshold_mask);	
+			void Update(int frame_num, const RgbImage& data,  const BwImage& update_mask);
+
+			RgbImage* Background();
+
+		private:	
+			void SubtractPixel(long posPixel, const RgbPixel& pixel, unsigned char& numModes, 
+													unsigned char& lowThreshold, unsigned char& highThreshold);
+
+			// User adjustable parameters
+			GrimsonParams m_params;
+
+			// Threshold when the component becomes significant enough to be included into
+			// the background model. It is the TB = 1-cf from the paper. So I use cf=0.1 => TB=0.9
+			// For alpha=0.001 it means that the mode should exist for approximately 105 frames before
+			// it is considered foreground
+			float m_bg_threshold; //1-cf from the paper
+
+			// Initial variance for the newly generated components. 
+			// It will will influence the speed of adaptation. A good guess should be made. 
+			// A simple way is to estimate the typical standard deviation from the images.
+			float m_variance;
+
+			// Dynamic array for the mixture of Gaussians
+			GMM* m_modes;
+
+			// Number of Gaussian components per pixel
+			BwImage m_modes_per_pixel;
+
+			// Current background model
+			RgbImage m_background;
+		};
+	};
+};
+
+#endif
diff --git a/package_bgs/dp/Image.cpp b/package_bgs/dp/Image.cpp
new file mode 100644
index 0000000..f00febd
--- /dev/null
+++ b/package_bgs/dp/Image.cpp
@@ -0,0 +1,76 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* Image.hpp
+*
+* Purpose:  C++ wrapper for OpenCV IplImage which supports simple and 
+*						efficient access to the image data
+*
+* Author: Donovan Parks, September 2007
+*
+* Based on code from: 
+*  http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.hpptml
+******************************************************************************/
+
+#include "Image.h"
+
+ImageBase::~ImageBase()
+{ 
+  if(imgp != NULL && m_bReleaseMemory)
+    cvReleaseImage(&imgp);
+  imgp = NULL;	
+}
+
+void DensityFilter(BwImage& image, BwImage& filtered, int minDensity, unsigned char fgValue)
+{
+  for(int r = 1; r < image.Ptr()->height-1; ++r)
+  {
+    for(int c = 1; c < image.Ptr()->width-1; ++c)
+    {
+      int count = 0;
+      if(image(r,c) == fgValue)
+      {
+        if(image(r-1,c-1) == fgValue)
+          count++;
+        if(image(r-1,c) == fgValue)
+          count++;
+        if(image(r-1,c+1) == fgValue)
+          count++;
+        if(image(r,c-1) == fgValue)
+          count++;
+        if(image(r,c+1) == fgValue)
+          count++;
+        if(image(r+1,c-1) == fgValue)
+          count++;
+        if(image(r+1,c) == fgValue)
+          count++;
+        if(image(r+1,c+1) == fgValue)
+          count++;
+
+        if(count < minDensity)
+          filtered(r,c) = 0;
+        else
+          filtered(r,c) = fgValue;
+      }
+      else
+      {
+        filtered(r,c) = 0;
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/package_bgs/dp/Image.h b/package_bgs/dp/Image.h
new file mode 100644
index 0000000..40d327b
--- /dev/null
+++ b/package_bgs/dp/Image.h
@@ -0,0 +1,364 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* Image.h
+*
+* Purpose:  C++ wrapper for OpenCV IplImage which supports simple and 
+*						efficient access to the image data
+*
+* Author: Donovan Parks, September 2007
+*
+* Based on code from: 
+*  http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html
+******************************************************************************/
+
+#ifndef _IMAGE_H_
+#define _IMAGE_H_
+
+#include <cv.h>
+#include <cxcore.h>
+
+// --- Image Iterator ---------------------------------------------------------
+
+template <class T>
+class ImageIterator 
+{
+public: 
+  ImageIterator(IplImage* image, int x=0, int y=0, int dx= 0, int dy=0) :
+    i(x), j(y), i0(0) 
+  {    
+    data = reinterpret_cast<T*>(image->imageData);
+    step = image->widthStep / sizeof(T);
+
+    nl= image->height;
+    if ((y+dy)>0 && (y+dy) < nl) 
+      nl= y+dy;
+
+    if (y<0) 
+      j=0;
+
+    data += step*j;
+
+    nc = image->width;
+    if ((x+dx) > 0 && (x+dx) < nc) 
+      nc = x+dx;
+
+    nc *= image->nChannels;
+    if (x>0) 
+      i0 = x*image->nChannels;
+    i = i0;
+
+    nch = image->nChannels;
+  }
+
+
+  /* has next ? */
+  bool operator!() const { return j < nl; }
+
+  /* next pixel */
+  ImageIterator& operator++() 
+  {
+    i++;
+    if (i >= nc) 
+    { 
+      i=i0; 
+      j++; 
+      data += step; 
+    }
+    return *this;
+  }
+
+  ImageIterator& operator+=(int s) 
+  {
+    i+=s;
+    if (i >= nc) 
+    { 
+      i=i0; 
+      j++; 
+      data += step; 
+    }
+    return *this;
+  }
+
+  /* pixel access */
+  T& operator*() { return data[i]; }
+
+  const T operator*() const { return data[i]; }
+
+  const T neighbor(int dx, int dy) const
+  { 
+    return *(data+dy*step+i+dx); 
+  }
+
+  T* operator&() const { return data+i; }
+
+  /* current pixel coordinates */
+  int column() const { return i/nch; }
+  int line() const { return j; }
+
+private:
+  int i, i0,j;
+  T* data;
+  int step;
+  int nl, nc;
+  int nch;
+};
+
+// --- Constants --------------------------------------------------------------
+
+const unsigned char NUM_CHANNELS = 3;
+
+// --- Pixel Types ------------------------------------------------------------
+
+class RgbPixel
+{
+public:
+  RgbPixel() {;}
+  RgbPixel(unsigned char _r, unsigned char _g, unsigned char _b)
+  {
+    ch[0] = _r; ch[1] = _g; ch[2] = _b;
+  }
+
+  RgbPixel& operator=(const RgbPixel& rhs)
+  {
+    ch[0] = rhs.ch[0]; ch[1] = rhs.ch[1]; ch[2] = rhs.ch[2];
+    return *this;
+  }
+
+  inline unsigned char& operator()(const int _ch)
+  {
+    return ch[_ch];
+  }
+
+  inline unsigned char operator()(const int _ch) const
+  {
+    return ch[_ch];
+  }
+
+  unsigned char ch[3];
+};
+
+class RgbPixelFloat
+{
+public:
+  RgbPixelFloat() {;}
+  RgbPixelFloat(float _r, float _g, float _b)
+  {
+    ch[0] = _r; ch[1] = _g; ch[2] = _b;
+  }
+
+  RgbPixelFloat& operator=(const RgbPixelFloat& rhs)
+  {
+    ch[0] = rhs.ch[0]; ch[1] = rhs.ch[1]; ch[2] = rhs.ch[2];
+    return *this;
+  }
+
+  inline float& operator()(const int _ch)
+  {
+    return ch[_ch];
+  }
+
+  inline float operator()(const int _ch) const
+  {
+    return ch[_ch];
+  }
+
+  float ch[3];
+};
+
+// --- Image Types ------------------------------------------------------------
+
+class ImageBase
+{
+public:
+  ImageBase(IplImage* img = NULL) { imgp = img; m_bReleaseMemory = true; }
+  ~ImageBase();
+
+  void ReleaseMemory(bool b) { m_bReleaseMemory = b; }
+
+  IplImage* Ptr() { return imgp; }
+  const IplImage* Ptr() const { return imgp; }
+
+  void ReleaseImage()
+  {
+    cvReleaseImage(&imgp);
+  }
+
+  void operator=(IplImage* img) 
+  { 
+    imgp = img;
+  }
+
+  // copy-constructor
+  ImageBase(const ImageBase& rhs)
+  {	
+    // it is very inefficent if this copy-constructor is called
+    assert(false);
+  }
+
+  // assignment operator
+  ImageBase& operator=(const ImageBase& rhs)
+  {
+    // it is very inefficent if operator= is called
+    assert(false);
+
+    return *this;
+  }
+
+  virtual void Clear() = 0;
+
+protected:
+  IplImage* imgp;
+  bool m_bReleaseMemory;
+};
+
+class RgbImage : public ImageBase
+{
+public:
+  RgbImage(IplImage* img = NULL) : ImageBase(img) { ; }
+
+  virtual void Clear()
+  {
+    cvZero(imgp);
+  }
+
+  void operator=(IplImage* img) 
+  { 
+    imgp = img;
+  }
+
+  // channel-level access using image(row, col, channel)
+  inline unsigned char& operator()(const int r, const int c, const int ch)
+  {
+    return (unsigned char &)imgp->imageData[r*imgp->widthStep+c*imgp->nChannels+ch];
+  }
+
+  inline const unsigned char& operator()(const int r, const int c, const int ch) const
+  {
+    return (unsigned char &)imgp->imageData[r*imgp->widthStep+c*imgp->nChannels+ch];
+  }
+
+  // RGB pixel-level access using image(row, col)
+  inline RgbPixel& operator()(const int r, const int c) 
+  {
+    return (RgbPixel &)imgp->imageData[r*imgp->widthStep+c*imgp->nChannels];
+  }
+
+  inline const RgbPixel& operator()(const int r, const int c) const
+  {
+    return (RgbPixel &)imgp->imageData[r*imgp->widthStep+c*imgp->nChannels];
+  }
+};
+
+class RgbImageFloat : public ImageBase
+{
+public:
+  RgbImageFloat(IplImage* img = NULL) : ImageBase(img) { ; }
+
+  virtual void Clear()
+  {
+    cvZero(imgp);
+  }
+
+  void operator=(IplImage* img) 
+  { 
+    imgp = img;
+  }
+
+  // channel-level access using image(row, col, channel)
+  inline float& operator()(const int r, const int c, const int ch)
+  {
+    return (float &)imgp->imageData[r*imgp->widthStep+(c*imgp->nChannels+ch)*sizeof(float)];
+  }
+
+  inline float operator()(const int r, const int c, const int ch) const
+  {
+    return (float)imgp->imageData[r*imgp->widthStep+(c*imgp->nChannels+ch)*sizeof(float)];
+  }
+
+  // RGB pixel-level access using image(row, col)
+  inline RgbPixelFloat& operator()(const int r, const int c) 
+  {
+    return (RgbPixelFloat &)imgp->imageData[r*imgp->widthStep+c*imgp->nChannels*sizeof(float)];
+  }
+
+  inline const RgbPixelFloat& operator()(const int r, const int c) const
+  {
+    return (RgbPixelFloat &)imgp->imageData[r*imgp->widthStep+c*imgp->nChannels*sizeof(float)];
+  }
+};
+
+class BwImage : public ImageBase
+{
+public:
+  BwImage(IplImage* img = NULL) : ImageBase(img) { ; }
+
+  virtual void Clear()
+  {
+    cvZero(imgp);
+  }
+
+  void operator=(IplImage* img) 
+  { 
+    imgp = img;
+  }
+
+  // pixel-level access using image(row, col)
+  inline unsigned char& operator()(const int r, const int c)
+  {
+    return (unsigned char &)imgp->imageData[r*imgp->widthStep+c];
+  }
+
+  inline unsigned char operator()(const int r, const int c) const
+  {
+    return (unsigned char)imgp->imageData[r*imgp->widthStep+c];
+  }
+};
+
+class BwImageFloat : public ImageBase
+{
+public:
+  BwImageFloat(IplImage* img = NULL) : ImageBase(img) { ; }
+
+  virtual void Clear()
+  {
+    cvZero(imgp);
+  }
+
+  void operator=(IplImage* img) 
+  { 
+    imgp = img;
+  }
+
+  // pixel-level access using image(row, col)
+  inline float& operator()(const int r, const int c)
+  {
+    return (float &)imgp->imageData[r*imgp->widthStep+c*sizeof(float)];
+  }
+
+  inline float operator()(const int r, const int c) const
+  {
+    return (float)imgp->imageData[r*imgp->widthStep+c*sizeof(float)];
+  }
+};
+
+// --- Image Functions --------------------------------------------------------
+
+void DensityFilter(BwImage& image, BwImage& filtered, int minDensity, unsigned char fgValue);
+
+#endif
\ No newline at end of file
diff --git a/package_bgs/dp/MeanBGS.cpp b/package_bgs/dp/MeanBGS.cpp
new file mode 100644
index 0000000..b8df895
--- /dev/null
+++ b/package_bgs/dp/MeanBGS.cpp
@@ -0,0 +1,131 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* MeanBGS.h
+*
+* Purpose: Implementation of a simple temporal mean background 
+*		  		 subtraction algorithm.
+*
+* Author: Donovan Parks, September 2007
+*
+******************************************************************************/
+
+#include "MeanBGS.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+void MeanBGS::Initalize(const BgsParams& param)
+{
+	m_params = (MeanParams&)param;
+
+	m_mean = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_32F, 3);
+	m_background = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 3);
+}
+
+void MeanBGS::InitModel(const RgbImage& data)
+{
+	for (unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{
+			for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+			{
+				m_mean(r,c,ch) = (float)data(r,c,ch);
+			}
+		}
+	}
+}
+
+void MeanBGS::Update(int frame_num, const RgbImage& data,  const BwImage& update_mask)
+{
+	// update background model
+	for (unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{
+			// perform conditional updating only if we are passed the learning phase
+			if(update_mask(r,c) == BACKGROUND || frame_num < m_params.LearningFrames())
+			{
+				// update B/G model
+				float mean;
+				for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+				{
+					mean = m_params.Alpha() * m_mean(r,c,ch) + (1.0f-m_params.Alpha()) * data(r,c,ch);
+					m_mean(r,c,ch) = mean;
+					m_background(r,c,ch) = (unsigned char)(mean + 0.5);
+				}
+			}
+		}
+	}
+}
+
+void MeanBGS::SubtractPixel(int r, int c, const RgbPixel& pixel, 
+															unsigned char& low_threshold, 
+															unsigned char& high_threshold)
+{
+	// calculate distance to sample point
+	float dist = 0;
+	for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+	{
+		dist += (pixel(ch)-m_mean(r,c,ch))*(pixel(ch)-m_mean(r,c,ch));
+	}
+
+	// determine if sample point is F/G or B/G pixel
+	low_threshold = BACKGROUND;
+	if(dist > m_params.LowThreshold())
+	{
+		low_threshold = FOREGROUND;
+	}
+
+	high_threshold = BACKGROUND;
+	if(dist > m_params.HighThreshold())
+	{
+		high_threshold = FOREGROUND;
+	}
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Input:
+//  data - a pointer to the data of a RGB image of the same size
+//Output:
+//  output - a pointer to the data of a gray value image of the same size 
+//					values: 255-foreground, 0-background
+///////////////////////////////////////////////////////////////////////////////
+void MeanBGS::Subtract(int frame_num, const RgbImage& data, 
+												BwImage& low_threshold_mask, BwImage& high_threshold_mask)
+{
+	unsigned char low_threshold, high_threshold;
+
+	// update each pixel of the image
+	for(unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{	
+			// perform background subtraction + update background model
+			SubtractPixel(r, c, data(r,c), low_threshold, high_threshold);
+
+			// setup silhouette mask
+			low_threshold_mask(r,c) = low_threshold;
+			high_threshold_mask(r,c) = high_threshold;
+		}
+	}
+}
+
+
+
+
diff --git a/package_bgs/dp/MeanBGS.h b/package_bgs/dp/MeanBGS.h
new file mode 100644
index 0000000..881beb7
--- /dev/null
+++ b/package_bgs/dp/MeanBGS.h
@@ -0,0 +1,98 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* MeanBGS.hpp
+*
+* Purpose: Implementation of a simple temporal mean background 
+*		  		 subtraction algorithm.
+*
+* Author: Donovan Parks, September 2007
+*
+
+Example:
+Algorithms::BackgroundSubtraction::MeanParams params;
+params.SetFrameSize(width, height);
+params.LowThreshold() = 3*30*30;
+params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+params.Alpha() = 1e-6f;
+params.LearningFrames() = 30;
+
+Algorithms::BackgroundSubtraction::MeanBGS bgs;
+bgs.Initalize(params);
+******************************************************************************/
+
+#include "Bgs.h"
+
+namespace Algorithms
+{
+  namespace BackgroundSubtraction
+  {
+
+    // --- Parameters used by the Mean BGS algorithm ---
+    class MeanParams : public BgsParams
+    {
+    public:
+      unsigned int &LowThreshold() { return m_low_threshold; }
+      unsigned int &HighThreshold() { return m_high_threshold; }
+
+      float &Alpha() { return m_alpha; }
+      int &LearningFrames() { return m_learning_frames; }
+
+    private:
+      // A pixel is considered to be from the background if the squared distance between 
+      // it and the background model is less than the threshold.
+      unsigned int m_low_threshold;
+      unsigned int m_high_threshold;
+
+      float m_alpha;
+      int m_learning_frames;
+    };
+
+
+    // --- Mean BGS algorithm ---
+    class MeanBGS : public Bgs
+    {
+    public:
+      virtual ~MeanBGS() {}
+
+      void Initalize(const BgsParams& param);
+
+      void InitModel(const RgbImage& data);
+      void Subtract(int frame_num, const RgbImage& data,  
+        BwImage& low_threshold_mask, BwImage& high_threshold_mask);	
+      void Update(int frame_num, const RgbImage& data,  const BwImage& update_mask);
+
+      RgbImage* Background() { return &m_background; }
+
+    private:	
+      void SubtractPixel(int r, int c, const RgbPixel& pixel, 
+        unsigned char& lowThreshold, unsigned char& highThreshold);
+
+      MeanParams m_params;
+
+      RgbImageFloat m_mean;
+      RgbImage m_background;
+    };
+
+  };
+};
+
+
+
+
+
diff --git a/package_bgs/dp/PratiMediodBGS.cpp b/package_bgs/dp/PratiMediodBGS.cpp
new file mode 100644
index 0000000..2ef44c0
--- /dev/null
+++ b/package_bgs/dp/PratiMediodBGS.cpp
@@ -0,0 +1,276 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* PratiMediodBGS.h
+*
+* Purpose: Implementation of the temporal median background 
+*		  		 subtraction algorithm described in:
+*
+* [1] "Detecting Moving Objects, Shosts, and Shadows in Video Stream"
+* 			by R. Cucchiara et al (2003)
+*
+* [2] "Reliable Background Suppression for Complex Scenes"
+*				by S. Calderara et al (2006)
+*
+* Author: Donovan Parks, September 2007
+*
+* Please note that this is not an implementation of the complete system 
+* given in the above papers. It simply implements the temporal media background
+* subtraction algorithm.
+******************************************************************************/
+
+#include "PratiMediodBGS.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+PratiMediodBGS::PratiMediodBGS()
+{
+	m_median_buffer = NULL;
+}
+
+PratiMediodBGS::~PratiMediodBGS()
+{
+	if(m_median_buffer != NULL)
+		delete[] m_median_buffer;
+}
+
+void PratiMediodBGS::Initalize(const BgsParams& param)
+{
+	m_params = (PratiParams&)param;
+
+	m_mask_low_threshold = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 1);
+	m_mask_high_threshold = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 1);
+
+	m_background = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 3);
+
+	m_median_buffer = new MEDIAN_BUFFER[m_params.Size()];
+}
+
+void PratiMediodBGS::InitModel(const RgbImage& data)
+{
+	// there is no need to initialize the mode since it needs a buffer of frames
+	// before it can performing background subtraction
+}
+
+void PratiMediodBGS::Update(int frame_num, const RgbImage& data,  const BwImage& update_mask)
+{
+	// update the image buffer with the new frame and calculate new median values
+	if(frame_num % m_params.SamplingRate() == 0)
+	{
+		if(m_median_buffer[0].dist.size() == m_params.HistorySize())
+		{
+			// subtract distance to sample being removed from all distances
+			for(unsigned int r = 0; r < m_params.Height(); ++r)
+			{
+				for(unsigned int c = 0; c < m_params.Width(); ++c)
+				{	
+					int i = r*m_params.Width()+c;
+
+					if(update_mask(r,c) == BACKGROUND)
+					{
+						int oldPos = m_median_buffer[i].pos;
+						for(unsigned int s = 0; s < m_median_buffer[i].pixels.size(); ++s)
+						{
+							int maxDist = 0;
+							for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+							{
+								int tempDist = abs(m_median_buffer[i].pixels.at(oldPos)(ch) 
+																		- m_median_buffer[i].pixels.at(s)(ch));
+								if(tempDist > maxDist)
+									maxDist = tempDist;
+							}
+
+							m_median_buffer[i].dist.at(s) -= maxDist;
+						}
+				
+						int dist;
+						UpdateMediod(r, c, data, dist);
+						m_median_buffer[i].dist.at(oldPos) = dist;
+						m_median_buffer[i].pixels.at(oldPos) = data(r,c);
+						m_median_buffer[i].pos++;
+						if(m_median_buffer[i].pos >= m_params.HistorySize())
+							m_median_buffer[i].pos = 0;
+					}
+				}
+			}
+		}
+		else
+		{
+			// calculate sum of L-inf distances for new point and 
+			// add distance from each sample point to this point to their L-inf sum
+			int dist;
+			for(unsigned int r = 0; r < m_params.Height(); ++r)
+			{
+				for(unsigned int c = 0; c < m_params.Width(); ++c)
+				{	
+					int index = r*m_params.Width()+c;
+					UpdateMediod(r, c, data, dist);
+					m_median_buffer[index].dist.push_back(dist);
+					m_median_buffer[index].pos = 0;
+					m_median_buffer[index].pixels.push_back(data(r,c)); 
+				}
+			}
+		}
+	}
+}
+
+void PratiMediodBGS::UpdateMediod(int r, int c, const RgbImage& new_frame, int& dist)
+{
+	// calculate sum of L-inf distances for new point and 
+	// add distance from each sample point to this point to their L-inf sum
+	unsigned int i = (r*m_params.Width()+c);
+
+	m_median_buffer[i].medianDist = INT_MAX;
+
+	int L_inf_dist = 0;
+	for(unsigned int s = 0; s < m_median_buffer[i].dist.size(); ++s)
+	{
+		int maxDist = 0;
+		for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+		{
+			int tempDist = abs(m_median_buffer[i].pixels.at(s)(ch) - new_frame(r,c,ch));
+			if(tempDist > maxDist)
+				maxDist = tempDist;
+		}
+
+		// check if point from this frame in the image buffer is the median
+		m_median_buffer[i].dist.at(s) += maxDist;
+		if(m_median_buffer[i].dist.at(s) < m_median_buffer[i].medianDist)
+		{
+			m_median_buffer[i].medianDist = m_median_buffer[i].dist.at(s);
+			m_median_buffer[i].median = m_median_buffer[i].pixels.at(s);
+		}
+
+		L_inf_dist += maxDist;
+	}
+
+	dist = L_inf_dist;
+
+	// check if the new point is the median
+	if(L_inf_dist < m_median_buffer[i].medianDist)
+	{
+		m_median_buffer[i].medianDist = L_inf_dist;
+		m_median_buffer[i].median = new_frame(r,c);
+	}
+}
+
+void PratiMediodBGS::Combine(const BwImage& low_mask, const BwImage& high_mask, BwImage& output)
+{
+	for(unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{
+			output(r,c) = BACKGROUND;
+
+			if(r == 0 || c == 0 || r == m_params.Height()-1 || c == m_params.Width()-1)
+				continue;	
+			
+			if(high_mask(r,c) == FOREGROUND)
+			{
+				output(r,c) = FOREGROUND;
+			}
+			else if(low_mask(r,c) == FOREGROUND)
+			{
+				// consider the pixel to be a F/G pixel if it is 8-connected to
+				// a F/G pixel in the high mask
+				// check if there is an 8-connected foreground pixel
+				if(high_mask(r-1,c-1))	
+					output(r,c) = FOREGROUND;
+				else if(high_mask(r-1,c))	
+					output(r,c) = FOREGROUND;
+				else if(high_mask(r-1,c+1))	
+					output(r,c) = FOREGROUND;
+				else if(high_mask(r,c-1))	
+					output(r,c) = FOREGROUND;
+				else if(high_mask(r,c+1))	
+					output(r,c) = FOREGROUND;
+				else if(high_mask(r+1,c-1))	
+					output(r,c) = FOREGROUND;
+				else if(high_mask(r+1,c))	
+					output(r,c) = FOREGROUND;
+				else if(high_mask(r+1,c+1))	
+					output(r,c) = FOREGROUND;
+			}
+		}
+	}
+}
+
+void PratiMediodBGS::CalculateMasks(int r, int c, const RgbPixel& pixel)
+{
+	int pos = r*m_params.Width()+c;
+
+	// calculate l-inf distance between current value and median value
+	unsigned char dist = 0;
+	for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+	{
+		int tempDist = abs(pixel(ch) - m_median_buffer[pos].median(ch));
+		if(tempDist > dist)
+			dist = tempDist;
+	}
+	m_background(r,c) = m_median_buffer[pos].median;
+
+	// check if pixel is a B/G or F/G pixel according to the low threshold B/G model
+	m_mask_low_threshold(r,c) = BACKGROUND;
+	if(dist > m_params.LowThreshold())
+	{
+		m_mask_low_threshold(r,c) = FOREGROUND;
+	}
+
+	// check if pixel is a B/G or F/G pixel according to the high threshold B/G model
+	m_mask_high_threshold(r,c)= BACKGROUND;
+	if(dist > m_params.HighThreshold())
+	{
+		m_mask_high_threshold(r,c) = FOREGROUND;
+	}
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Input:
+//  data - a pointer to the data of a RGB image of the same size
+//Output:
+//  output - a pointer to the data of a gray value image of the same size 
+//					values: 255-foreground, 0-background
+///////////////////////////////////////////////////////////////////////////////
+void PratiMediodBGS::Subtract(int frame_num, const RgbImage& data, 
+																BwImage& low_threshold_mark, BwImage& high_threshold_mark)
+{
+	if(frame_num < m_params.HistorySize())
+	{
+		low_threshold_mark.Clear();
+		high_threshold_mark.Clear();
+		return;
+	}
+
+	// update each pixel of the image
+	for(unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{	
+			// need at least one frame of data before we can start calculating the masks
+			CalculateMasks(r, c, data(r,c));
+		}
+	}
+
+	// combine low and high threshold masks
+	Combine(m_mask_low_threshold, m_mask_high_threshold, low_threshold_mark);
+	Combine(m_mask_low_threshold, m_mask_high_threshold, high_threshold_mark);
+}
+
+
+
+
diff --git a/package_bgs/dp/PratiMediodBGS.h b/package_bgs/dp/PratiMediodBGS.h
new file mode 100644
index 0000000..0b373d7
--- /dev/null
+++ b/package_bgs/dp/PratiMediodBGS.h
@@ -0,0 +1,142 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* PratiMediodBGS.hpp
+*
+* Purpose: Implementation of the temporal median background 
+*		  		 subtraction algorithm described in:
+*
+* [1] "Detecting Moving Objects, Shosts, and Shadows in Video Stream"
+* 			by R. Cucchiara et al (2003)
+*
+* [2] "Reliable Background Suppression for Complex Scenes"
+*				by S. Calderara et al (2006)
+*
+* Author: Donovan Parks, September 2007
+*
+* Please note that this is not an implementation of the complete system 
+* given in the above papers. It simply implements the temporal media background
+* subtraction algorithm.
+
+Example:
+Algorithms::BackgroundSubtraction::PratiParams params;
+params.SetFrameSize(width, height);
+params.LowThreshold() = 30;
+params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+params.SamplingRate() = 5;
+params.HistorySize() = 16;
+params.Weight() = 5;
+
+Algorithms::BackgroundSubtraction::PratiMediodBGS bgs;
+bgs.Initalize(params);
+******************************************************************************/
+
+#ifndef PRATI_MEDIA_BGS_H
+#define PRATI_MEDIA_BGS_H
+
+#include <vector>
+#include "Bgs.h"
+
+namespace Algorithms
+{
+  namespace BackgroundSubtraction
+  {
+    // --- Parameters used by the Prati Mediod BGS algorithm ---
+    class PratiParams : public BgsParams
+    {
+    public:
+      unsigned int &LowThreshold() { return m_low_threshold; }
+      unsigned int &HighThreshold() { return m_high_threshold; }
+
+      int &Weight() { return m_weight; }
+      int &SamplingRate() { return m_sampling_rate; }
+      int &HistorySize() { return m_history_size; }
+
+    private:
+      // The low threshold is used to supress noise. The high thresohld is used 
+      // to find pixels highly likely to be foreground. This implementation uses an L-inf 
+      // distance measure and a pixel p is considered F/G if D(I(p), B(p)) > threshold. 
+      // The two threshold maps are combined as in [2].
+      unsigned int m_low_threshold;
+      unsigned int m_high_threshold;
+
+      // The weight parameter controls the amount of influence given to previous background samples
+      // see w_b in equation (2) of [1]
+      // in [2] this value is set to 1
+      int m_weight;
+
+      // Number of samples to consider when calculating temporal mediod value
+      int m_history_size;
+
+      // Rate at which to obtain new samples
+      int m_sampling_rate;
+    };
+
+    // --- Prati Mediod BGS algorithm ---
+    class PratiMediodBGS : public Bgs 
+    {
+    private:	
+      // sum of L-inf distances from a sample point to all other sample points
+      struct MEDIAN_BUFFER
+      {
+        std::vector<RgbPixel> pixels;		// vector of pixels at give location in image
+        std::vector<int> dist;					// distance from pixel to all other pixels
+        int pos;												// current position in circular buffer
+
+        RgbPixel median;								// median at this pixel location
+        int medianDist;									// distance from median pixel to all other pixels
+      };
+
+    public:
+      PratiMediodBGS();
+      ~PratiMediodBGS();
+
+      void Initalize(const BgsParams& param);
+
+      void InitModel(const RgbImage& data);
+      void Subtract(int frame_num, const RgbImage& data,  
+        BwImage& low_threshold_mask, BwImage& high_threshold_mask);	
+      void Update(int frame_num, const RgbImage& data,  const BwImage& update_mask);
+
+      RgbImage* Background() { return &m_background; }
+
+    private:	
+      MEDIAN_BUFFER* m_median_buffer;
+
+      void CalculateMasks(int r, int c, const RgbPixel& pixel);
+      void Combine(const BwImage& low_mask, const BwImage& high_mask, BwImage& output);
+      void UpdateMediod(int r, int c, const RgbImage& new_frame, int& dist);
+
+      PratiParams m_params;
+
+      RgbImage m_background;
+
+      BwImage m_mask_low_threshold;
+      BwImage m_mask_high_threshold;
+    };
+
+  };
+};
+
+#endif
+
+
+
+
+
+
diff --git a/package_bgs/dp/TextureBGS.cpp b/package_bgs/dp/TextureBGS.cpp
new file mode 100644
index 0000000..7ccac37
--- /dev/null
+++ b/package_bgs/dp/TextureBGS.cpp
@@ -0,0 +1,153 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "TextureBGS.h"
+
+TextureBGS::TextureBGS(){}
+TextureBGS::~TextureBGS(){}
+
+void TextureBGS::LBP(RgbImage& image, RgbImage& texture)
+{
+  for(int y = TEXTURE_R; y < image.Ptr()->height-TEXTURE_R; ++y)
+  {
+    for(int x = TEXTURE_R; x < image.Ptr()->width-TEXTURE_R; ++x)
+    {		
+      for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+      {
+        unsigned char textureCode = 0;
+        int centerValue = (int)image(y, x, ch);
+
+        // this only works for a texture radius of 2
+        if(centerValue - (int)image(y-2, x, ch) + HYSTERSIS >= 0)
+          textureCode += 1;
+
+        if(centerValue - (int)image(y-1, x-2, ch) + HYSTERSIS >= 0)
+          textureCode += 2;
+
+        if(centerValue - (int)image(y-1, x+2, ch) + HYSTERSIS >= 0)
+          textureCode += 4;
+
+        if(centerValue - (int)image(y+1, x-2, ch) + HYSTERSIS >= 0)
+          textureCode += 8;
+
+        if(centerValue - (int)image(y+1, x+2, ch) + HYSTERSIS >= 0)
+          textureCode += 16;
+
+        if(centerValue - (int)image(y+2, x, ch) + HYSTERSIS >= 0)
+          textureCode += 32;
+
+        texture(y,x,ch) = textureCode;
+      }
+    }
+  }
+}
+
+void TextureBGS::Histogram(RgbImage& texture, TextureHistogram* curTextureHist)
+{
+  // calculate histogram within a 2*REGION_R square
+  for(int y = REGION_R+TEXTURE_R; y < texture.Ptr()->height-REGION_R-TEXTURE_R; ++y)
+  {
+    for(int x = REGION_R+TEXTURE_R; x < texture.Ptr()->width-REGION_R-TEXTURE_R; ++x)
+    {	
+      int index = x+y*(texture.Ptr()->width);
+
+      // clear histogram
+      for(int i = 0; i < NUM_BINS; ++i)
+      {
+        curTextureHist[index].r[i] = 0;
+        curTextureHist[index].g[i] = 0;
+        curTextureHist[index].b[i] = 0;
+      }
+
+      // calculate histogram
+      for(int j = -REGION_R; j <= REGION_R; ++j)
+      {
+        for(int i = -REGION_R; i <= REGION_R; ++i)
+        {
+          curTextureHist[index].r[texture(y+j,x+i,2)]++;
+          curTextureHist[index].g[texture(y+j,x+i,1)]++;
+          curTextureHist[index].b[texture(y+j,x+i,0)]++;
+        }
+      }
+    }
+  }
+}
+
+int TextureBGS::ProximityMeasure(TextureHistogram& bgTexture, TextureHistogram& curTextureHist)
+{
+  int proximity = 0;	
+  for(int i = 0; i < NUM_BINS; ++i)
+  {
+    proximity += std::min(bgTexture.r[i], curTextureHist.r[i]);
+    proximity += std::min(bgTexture.g[i], curTextureHist.g[i]);
+    proximity += std::min(bgTexture.b[i], curTextureHist.b[i]);
+  }
+
+  return proximity;	
+}
+
+void TextureBGS::BgsCompare(TextureArray* bgModel, TextureHistogram* curTextureHist, 
+                unsigned char* modeArray, float threshold, BwImage& fgMask)
+{
+  cvZero(fgMask.Ptr());
+
+  for(int y = REGION_R+TEXTURE_R; y < fgMask.Ptr()->height-REGION_R-TEXTURE_R; ++y)
+  {
+    for(int x = REGION_R+TEXTURE_R; x < fgMask.Ptr()->width-REGION_R-TEXTURE_R; ++x)
+    {	
+      int index = x+y*(fgMask.Ptr()->width);
+
+      // find closest matching texture in background model
+      int maxProximity = -1;
+
+      for(int m = 0; m < NUM_MODES; ++m)
+      {
+        int proximity = ProximityMeasure(bgModel[index].mode[m], curTextureHist[index]);
+
+        if(proximity > maxProximity)
+        {
+          maxProximity = proximity;
+          modeArray[index] = m;
+        }
+      }
+
+      if(maxProximity < threshold)
+        fgMask(y,x) = 255;
+    }
+  }
+}
+
+void TextureBGS::UpdateModel(BwImage& fgMask, TextureArray* bgModel, 
+                 TextureHistogram* curTextureHist, unsigned char* modeArray)
+{
+  for(int y = REGION_R+TEXTURE_R; y < fgMask.Ptr()->height-REGION_R-TEXTURE_R; ++y)
+  {
+    for(int x = REGION_R+TEXTURE_R; x < fgMask.Ptr()->width-REGION_R-TEXTURE_R; ++x)
+    {		
+      int index = x+y*(fgMask.Ptr()->width);
+
+      if(fgMask(x,y) == 0)
+      {
+        for(int i = 0; i < NUM_BINS; ++i)
+        {
+          bgModel[index].mode[modeArray[index]].r[i]
+          = (unsigned char)(ALPHA*curTextureHist[index].r[i]
+          + (1-ALPHA)*bgModel[index].mode[modeArray[index]].r[i] + 0.5);
+        }
+      }				
+    }
+  }	
+}
diff --git a/package_bgs/dp/TextureBGS.h b/package_bgs/dp/TextureBGS.h
new file mode 100644
index 0000000..573e6f9
--- /dev/null
+++ b/package_bgs/dp/TextureBGS.h
@@ -0,0 +1,55 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include <math.h>
+#include "Image.h"
+
+const int REGION_R = 5;			// Note: the code currently assumes this value is <= 7
+const int TEXTURE_POINTS = 6;	// Note: the code currently assumes this value is 6
+const int TEXTURE_R = 2;		// Note: the code currently assumes this value is 2
+const int NUM_BINS = 64;		// 2^TEXTURE_POINTS
+const int HYSTERSIS = 3;
+const double ALPHA = 0.05f;
+const double THRESHOLD = 0.5*(REGION_R+REGION_R+1)*(REGION_R+REGION_R+1)*NUM_CHANNELS;
+const int NUM_MODES = 1;		// The paper describes how multiple modes can be maintained,
+// but this implementation does not fully support more than one
+
+struct TextureHistogram
+{
+  unsigned char r[NUM_BINS];	// histogram for red channel
+  unsigned char g[NUM_BINS];	// histogram for green channel
+  unsigned char b[NUM_BINS];	// histogram for blue channel
+};
+
+struct TextureArray
+{
+  TextureHistogram mode[NUM_MODES];
+};
+
+class TextureBGS
+{
+public:
+  TextureBGS();
+  ~TextureBGS();
+
+  void LBP(RgbImage& image, RgbImage& texture);
+  void Histogram(RgbImage& texture, TextureHistogram* curTextureHist);
+  int ProximityMeasure(TextureHistogram& bgTexture, TextureHistogram& curTextureHist);
+  void BgsCompare(TextureArray* bgModel, TextureHistogram* curTextureHist, 
+                unsigned char* modeArray, float threshold, BwImage& fgMask);
+  void UpdateModel(BwImage& fgMask, TextureArray* bgModel, 
+                 TextureHistogram* curTextureHist, unsigned char* modeArray);
+};
diff --git a/package_bgs/dp/WrenGA.cpp b/package_bgs/dp/WrenGA.cpp
new file mode 100644
index 0000000..8ae10dd
--- /dev/null
+++ b/package_bgs/dp/WrenGA.cpp
@@ -0,0 +1,174 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* WrenGA.h
+*
+* Purpose: Implementation of the running Gaussian average background 
+*		  		 subtraction algorithm described in:
+*	  			 "Pfinder: real-time tracking of the human body"
+* 						by C. Wren et al (1997)
+*
+* Author: Donovan Parks, September 2007
+*
+* Please note that this is not an implementation of Pfinder. It implements
+* a simple background subtraction algorithm where each pixel is represented
+* by a single Gaussian and update using a simple weighting function.
+******************************************************************************/
+
+#include "WrenGA.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+WrenGA::WrenGA()
+{
+	m_gaussian = NULL;
+}
+
+WrenGA::~WrenGA()
+{
+	if(m_gaussian != NULL)
+		delete[] m_gaussian;
+}
+
+void WrenGA::Initalize(const BgsParams& param)
+{
+	m_params = (WrenParams&)param;
+
+	m_variance = 36.0f;
+
+	// GMM for each pixel
+	m_gaussian = new GAUSSIAN[m_params.Size()];
+	for(unsigned int i = 0; i < m_params.Size(); ++i)
+	{
+		for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+		{
+			m_gaussian[i].mu[ch] = 0;
+			m_gaussian[i].var[ch] = 0;
+		}
+	}
+
+	m_background = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 3);
+}
+
+void WrenGA::InitModel(const RgbImage& data)
+{
+	int pos = 0;
+
+	for(unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{
+			for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+			{	
+				m_gaussian[pos].mu[ch] = data(r,c,ch);
+				m_gaussian[pos].var[ch] = m_variance;
+			}
+
+			pos++;
+		}
+	}
+}
+
+void WrenGA::Update(int frame_num, const RgbImage& data,  const BwImage& update_mask)
+{
+	int pos = 0;
+
+	for(unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{
+			// perform conditional updating only if we are passed the learning phase
+			if(update_mask(r,c) == BACKGROUND || frame_num < m_params.LearningFrames())
+			{
+				float dR = m_gaussian[pos].mu[0] - data(r,c,0);
+				float dG = m_gaussian[pos].mu[1] - data(r,c,1);
+				float dB = m_gaussian[pos].mu[2] - data(r,c,2);
+
+				float dist = (dR*dR + dG*dG + dB*dB);
+
+				m_gaussian[pos].mu[0] -= m_params.Alpha()*(dR);
+				m_gaussian[pos].mu[1] -= m_params.Alpha()*(dG);
+				m_gaussian[pos].mu[2] -= m_params.Alpha()*(dB);
+
+				float sigmanew = m_gaussian[pos].var[0] + m_params.Alpha()*(dist-m_gaussian[pos].var[0]);
+				m_gaussian[pos].var[0] = sigmanew < 4 ? 4 : sigmanew > 5*m_variance ? 5*m_variance : sigmanew;
+
+				m_background(r, c, 0) = (unsigned char)(m_gaussian[pos].mu[0] + 0.5);
+				m_background(r, c, 1) = (unsigned char)(m_gaussian[pos].mu[1] + 0.5);
+				m_background(r, c, 2) = (unsigned char)(m_gaussian[pos].mu[2] + 0.5);
+			}
+
+			pos++;
+		}
+	}
+}
+
+void WrenGA::SubtractPixel(int r, int c, const RgbPixel& pixel, 
+															unsigned char& low_threshold, 
+															unsigned char& high_threshold)
+{
+	unsigned int pos = r*m_params.Width()+c;
+
+	// calculate distance between model and pixel
+	float mu[NUM_CHANNELS];
+	float var[1];
+	float delta[NUM_CHANNELS];
+	float dist = 0;
+	for(int ch = 0; ch < NUM_CHANNELS; ++ch)
+	{
+		mu[ch] = m_gaussian[pos].mu[ch];
+		var[0] = m_gaussian[pos].var[0];
+		delta[ch] = mu[ch] - pixel(ch);
+		dist += delta[ch]*delta[ch];
+	}
+
+	// calculate the squared distance and see if pixel fits the B/G model
+	low_threshold = BACKGROUND;
+	high_threshold = BACKGROUND;
+
+	if(dist > m_params.LowThreshold()*var[0])
+		low_threshold = FOREGROUND;
+	if(dist > m_params.HighThreshold()*var[0])
+		high_threshold = FOREGROUND;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Input:
+//  data - a pointer to the data of a RGB image of the same size
+//Output:
+//  output - a pointer to the data of a gray value image of the same size 
+//					(the memory should already be reserved) 
+//					values: 255-foreground, 125-shadow, 0-background
+///////////////////////////////////////////////////////////////////////////////
+void WrenGA::Subtract(int frame_num, const RgbImage& data, 
+												BwImage& low_threshold_mask, BwImage& high_threshold_mask)
+{
+	unsigned char low_threshold, high_threshold;
+
+	// update each pixel of the image
+	for(unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{
+			SubtractPixel(r, c, data(r,c), low_threshold, high_threshold);
+			low_threshold_mask(r,c) = low_threshold;
+			high_threshold_mask(r,c) = high_threshold;
+		}
+	}
+}
+
diff --git a/package_bgs/dp/WrenGA.h b/package_bgs/dp/WrenGA.h
new file mode 100644
index 0000000..d623e20
--- /dev/null
+++ b/package_bgs/dp/WrenGA.h
@@ -0,0 +1,120 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* WrenGA.hpp
+*
+* Purpose: Implementation of the running Gaussian average background 
+*		  		 subtraction algorithm described in:
+*	  			 "Pfinder: real-time tracking of the human body"
+* 						by C. Wren et al (1997)
+*
+* Author: Donovan Parks, September 2007
+*
+* Please note that this is not an implementation of Pfinder. It implements
+* a simple background subtraction algorithm where each pixel is represented
+* by a single Gaussian and update using a simple weighting function.
+
+Example:
+Algorithms::BackgroundSubtraction::WrenParams params;
+params.SetFrameSize(width, height);
+params.LowThreshold() = 3.5f*3.5f;
+params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+params.Alpha() = 0.005f;
+params.LearningFrames() = 30;
+
+Algorithms::BackgroundSubtraction::WrenGA bgs;
+bgs.Initalize(params);
+******************************************************************************/
+
+#ifndef WREN_GA_H
+#define WREN_GA_H
+
+#include "Bgs.h"
+
+namespace Algorithms
+{
+  namespace BackgroundSubtraction
+  {
+    // --- Parameters used by the Mean BGS algorithm ---
+    class WrenParams : public BgsParams
+    {
+    public:
+      float &LowThreshold() { return m_low_threshold; }
+      float &HighThreshold() { return m_high_threshold; }
+
+      float &Alpha() { return m_alpha; }
+      int &LearningFrames() { return m_learning_frames; }
+
+    private:
+      // The threshold indicates the number of variances (not standard deviations) away
+      // from the mean before a pixel is considered to be from the foreground.
+      float m_low_threshold;
+      float m_high_threshold;
+
+      float m_alpha;
+      int m_learning_frames;
+    };
+
+
+    // --- Mean BGS algorithm ---
+    class WrenGA : public Bgs
+    {
+    private:	
+      struct GAUSSIAN
+      {
+        float mu[NUM_CHANNELS];
+        float var[NUM_CHANNELS];
+      };
+
+    public:
+      WrenGA();
+      ~WrenGA();
+
+      void Initalize(const BgsParams& param);
+
+      void InitModel(const RgbImage& data);
+      void Subtract(int frame_num, const RgbImage& data,  
+        BwImage& low_threshold_mask, BwImage& high_threshold_mask);	
+      void Update(int frame_num, const RgbImage& data,  const BwImage& update_mask);
+
+      RgbImage* Background() { return &m_background; }
+
+    private:	
+      void SubtractPixel(int r, int c, const RgbPixel& pixel, 
+        unsigned char& lowThreshold, unsigned char& highThreshold);
+
+      WrenParams m_params;
+
+      // Initial variance for the newly generated components. 
+      float m_variance;
+
+      // dynamic array for the mixture of Gaussians
+      GAUSSIAN* m_gaussian;
+
+      RgbImage m_background;
+    };
+  };
+};
+
+#endif
+
+
+
+
+
+
diff --git a/package_bgs/dp/ZivkovicAGMM.cpp b/package_bgs/dp/ZivkovicAGMM.cpp
new file mode 100644
index 0000000..c260132
--- /dev/null
+++ b/package_bgs/dp/ZivkovicAGMM.cpp
@@ -0,0 +1,411 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* ZivkovicAGMM.cpp
+*
+* Purpose: Implementation of the Gaussian mixture model (GMM) background 
+*		  		 subtraction algorithm developed by Z. Zivkovic.
+*
+* Author: Donovan Parks, September 2007
+*
+* This code is based on code by Z. Zivkovic's. I have changed it from a pure
+* C implementation to a cleaner (IMHO) C++ implementation. It is based on the
+* following papers:
+*
+*	"Improved adaptive Gausian mixture model for background subtraction"
+*		Z.Zivkovic 
+*		International Conference Pattern Recognition, UK, August, 2004
+*
+*
+* "Efficient Adaptive Density Estimapion per Image Pixel for the 
+*			Task of Background Subtraction"
+*		Z.Zivkovic, F. van der Heijden 
+*		Pattern Recognition Letters, vol. 27, no. 7, pages 773-780, 2006.
+*
+* Zivkovic's code can be obtained at: www.zoranz.net
+******************************************************************************/
+
+#include "ZivkovicAGMM.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+ZivkovicAGMM::ZivkovicAGMM()
+{
+	m_modes = NULL;
+	m_modes_per_pixel = NULL;
+}
+
+ZivkovicAGMM::~ZivkovicAGMM()
+{
+	if(m_modes != NULL)
+		delete[] m_modes;
+
+	if(m_modes_per_pixel != NULL)
+		delete[] m_modes_per_pixel;
+}
+
+void ZivkovicAGMM::Initalize(const BgsParams& param)
+{
+	m_params = (ZivkovicParams&)param;
+
+	m_num_bands = 3;							//always 3 - not implemented for other values!
+	m_bg_threshold = 0.75f;				//1-cf from the paper 
+	m_variance = 36.0f;						// variance for the new mode
+	m_complexity_prior = 0.05f;		// complexity reduction prior constant
+
+	// GMM for each pixel
+	m_modes = new GMM[m_params.Size()*m_params.MaxModes()];
+
+	// used modes per pixel
+	m_modes_per_pixel = new unsigned char[m_params.Size()];
+
+	m_background = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 3);
+}
+
+void ZivkovicAGMM::InitModel(const RgbImage& data)
+{
+	for(unsigned int i = 0; i < m_params.Size(); ++i)
+	{
+		m_modes_per_pixel[i] = 0;
+	}
+
+	for(unsigned int i = 0; i < m_params.Size()*m_params.MaxModes(); ++i)
+	{
+		m_modes[i].weight = 0;
+		m_modes[i].sigma = 0;
+		m_modes[i].muR = 0;
+		m_modes[i].muG = 0;
+		m_modes[i].muB = 0;
+	}
+}
+
+void ZivkovicAGMM::Update(int frame_num, const RgbImage& data,  const BwImage& update_mask)
+{
+	// it doesn't make sense to have conditional updates in the GMM framework
+}
+
+void ZivkovicAGMM::SubtractPixel(long posPixel, const RgbPixel& pixel, unsigned char* pModesUsed, 
+																	unsigned char& low_threshold, unsigned char& high_threshold)
+{
+	//calculate distances to the modes (+ sort???)
+	//here we need to go in descending order!!!
+	long pos;
+	bool bFitsPDF=0;
+	bool bBackgroundLow=false;
+	bool bBackgroundHigh=false;
+
+	float fOneMinAlpha = 1-m_params.Alpha();
+
+	float prune = -m_params.Alpha()*m_complexity_prior;
+
+	int nModes =* pModesUsed;
+	float totalWeight = 0.0f;
+
+	// calculate number of Gaussians to include in the background model
+	int backgroundGaussians = 0;
+	double sum = 0.0;
+	for(int i = 0; i < nModes; ++i)
+	{
+		if(sum < m_bg_threshold)
+		{
+			backgroundGaussians++;
+			sum += m_modes[posPixel+i].weight;
+		}
+		else
+		{
+			break;
+		}
+	}
+
+	// update all distributions and check for match with current pixel
+	for (int iModes = 0; iModes < nModes; iModes++)
+	{
+		pos=posPixel+iModes;
+		float weight = m_modes[pos].weight;
+
+		//fit not found yet
+		if (!bFitsPDF)
+		{
+			//check if it belongs to some of the modes
+			//calculate distance
+			float var = m_modes[pos].sigma;
+			float muR = m_modes[pos].muR;
+			float muG = m_modes[pos].muG;
+			float muB = m_modes[pos].muB;
+		
+			float dR=muR - pixel(0);
+			float dG=muG - pixel(1);
+			float dB=muB - pixel(2);
+			
+			// calculate the squared distance
+			float dist = (dR*dR + dG*dG + dB*dB);
+
+			if(dist < m_params.HighThreshold()*var && iModes < backgroundGaussians)
+				bBackgroundHigh = true;
+			
+			//check fit
+			if (dist < m_params.LowThreshold()*var)
+			{
+				/////
+				//belongs to the mode
+				bFitsPDF = true;
+
+				// check if this Gaussian is part of the background model
+				if(iModes < backgroundGaussians) 
+					bBackgroundLow = true;
+
+				//update distribution
+				float k = m_params.Alpha()/weight;
+				weight = fOneMinAlpha*weight+prune;
+				weight += m_params.Alpha();
+				m_modes[pos].weight = weight;
+				m_modes[pos].muR = muR - k*(dR);
+				m_modes[pos].muG = muG - k*(dG);
+				m_modes[pos].muB = muB - k*(dB);
+
+				//limit update speed for cov matrice
+				//not needed
+				//k=k>20*m_m_params.Alpha()?20*m_m_params.Alpha():k;
+				//float sigmanew = var + k*((0.33*(dR*dR+dG*dG+dB*dB))-var);
+				//float sigmanew = var + k*((dR*dR+dG*dG+dB*dB)-var);
+				//float sigmanew = var + k*((0.33*dist)-var);
+				float sigmanew = var + k*(dist-var);
+
+				//limit the variance
+				m_modes[pos].sigma = sigmanew < 4 ? 4 : sigmanew > 5*m_variance ? 5*m_variance : sigmanew;
+
+				// Sort weights so they are in desending order. Note that only the weight for this
+				// mode will increase and that the weight for all modes that were previously larger than
+				// this one have already been modified and will not be modified again. Thus, we just need to 
+				// the correct position of this mode in the already sorted list.
+
+				// Zivkovic implementation has been modified for clarity, but the results are equivalent
+				/*
+				for (int iLocal = iModes;iLocal>0;iLocal--)
+				{
+					long posLocal=posPixel + iLocal;
+					if (weight < (m_modes[posLocal-1].weight))
+					{
+						break;
+					}
+					else
+					{
+						//swap
+						GMM temp = m_modes[posLocal];
+						m_modes[posLocal] = m_modes[posLocal-1];
+						m_modes[posLocal-1] = temp;
+					}
+				}
+				*/
+
+				for (int iLocal = iModes; iLocal > 0; iLocal--)
+				{
+					long posLocal = posPixel + iLocal;
+					if (m_modes[posLocal].weight > m_modes[posLocal-1].weight)
+					{
+						//swap
+						GMM temp = m_modes[posLocal];
+						m_modes[posLocal] = m_modes[posLocal-1];
+						m_modes[posLocal-1] = temp;
+					}
+					else
+					{
+						break;
+					}
+				}
+			}
+			else
+			{
+				weight = fOneMinAlpha*weight+prune;
+				//check prune
+				if (weight < -prune)
+				{
+					weight=0.0;
+					nModes--;
+				}
+				m_modes[pos].weight = weight;
+			}
+			//check if it fits the current mode (2.5 sigma)
+			///////
+		}
+		//fit not found yet
+		/////
+		else
+		{
+			weight = fOneMinAlpha*weight + prune;
+			//check prune
+			if (weight < -prune)
+			{
+				weight=0.0;
+				nModes--;
+			}
+			m_modes[pos].weight = weight;
+		}
+		totalWeight += weight;
+	}
+
+	//renormalize weights so they sum to 1
+	for (int iLocal = 0; iLocal < nModes; iLocal++)
+	{
+		m_modes[posPixel+ iLocal].weight = m_modes[posPixel+ iLocal].weight/totalWeight;
+	}
+	
+	//make new mode if needed and exit
+	if (!bFitsPDF)
+	{
+		if (nModes == m_params.MaxModes())
+		{
+			//replace the weakest
+		}
+		else
+		{
+			nModes++;
+		}
+		pos = posPixel + nModes-1;
+
+    if (nModes==1)
+			m_modes[pos].weight=1;
+		else
+			m_modes[pos].weight=m_params.Alpha();
+
+		// Zivkovic implementation changes as this will not result in the
+		// weights adding to 1
+		/*
+		int iLocal;
+		for (iLocal = 0; iLocal < m_params.MaxModes()odes-1; iLocal++)
+		{
+			m_modes[posPixel+ iLocal].weight *= fOneMinAlpha;
+		}
+		*/
+
+		// Revised implementation:
+		//renormalize weights
+		int iLocal;
+		float sum = 0.0;
+		for (iLocal = 0; iLocal < nModes; iLocal++)
+		{
+			sum += m_modes[posPixel+ iLocal].weight;
+		}
+
+		float invSum = 1.0f/sum;
+		for (iLocal = 0; iLocal < nModes; iLocal++)
+		{
+			m_modes[posPixel+ iLocal].weight *= invSum;
+		}
+
+		m_modes[pos].muR=pixel(0);
+		m_modes[pos].muG=pixel(1);
+		m_modes[pos].muB=pixel(2);
+		m_modes[pos].sigma=m_variance;
+
+		// Zivkovic implementation to sort GMM so they are sorted in descending order according to their weight.
+		// It has been revised for clarity, but the results are equivalent
+		/*
+		for (iLocal = m_params.MaxModes()odes-1; iLocal > 0; iLocal--)
+		{
+			long posLocal = posPixel + iLocal;
+			if (m_params.Alpha() < (m_modes[posLocal-1].weight))
+			{
+				break;
+			}
+			else
+			{
+				//swap
+				GMM temp = m_modes[posLocal];
+				m_modes[posLocal] = m_modes[posLocal-1];
+				m_modes[posLocal-1] = temp;
+			}
+		}
+		*/
+
+		// sort GMM so they are sorted in descending order according to their weight
+		for (iLocal = nModes-1; iLocal > 0; iLocal--)
+		{
+			long posLocal = posPixel + iLocal;
+			if (m_modes[posLocal].weight > m_modes[posLocal-1].weight)
+			{
+				//swap
+				GMM temp = m_modes[posLocal];
+				m_modes[posLocal] = m_modes[posLocal-1];
+				m_modes[posLocal-1] = temp;
+			}
+			else
+			{
+				break;
+			}
+		}
+	}
+
+	//set the number of modes
+	*pModesUsed=nModes;
+
+	if(bBackgroundLow)
+	{
+		low_threshold = BACKGROUND;
+	}
+	else
+	{
+		low_threshold = FOREGROUND;
+	}
+
+	if(bBackgroundHigh)
+	{
+		high_threshold = BACKGROUND;
+	}
+	else
+	{
+		high_threshold = FOREGROUND;
+	}
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+//Input:
+//  data - a pointer to the data of a RGB image of the same size
+//Output:
+//  output - a pointer to the data of a gray value image of the same size 
+//					(the memory should already be reserved) 
+//					values: 255-foreground, 125-shadow, 0-background
+///////////////////////////////////////////////////////////////////////////////
+void ZivkovicAGMM::Subtract(int frame_num, const RgbImage& data,  
+															BwImage& low_threshold_mask, BwImage& high_threshold_mask)
+{
+	unsigned char low_threshold, high_threshold;
+
+	// update each pixel of the image
+	long posPixel;
+	unsigned char* pUsedModes=m_modes_per_pixel;
+	for(unsigned int r = 0; r < m_params.Height(); ++r)
+	{
+		for(unsigned int c = 0; c < m_params.Width(); ++c)
+		{
+			//update model+ background subtract
+			posPixel=(r*m_params.Width()+c)*m_params.MaxModes();
+			SubtractPixel(posPixel, data(r,c), pUsedModes, low_threshold, high_threshold);
+			low_threshold_mask(r,c) = low_threshold;
+			high_threshold_mask(r,c) = high_threshold;
+
+			m_background(r,c,0) = (unsigned char)m_modes[posPixel].muR;
+			m_background(r,c,1) = (unsigned char)m_modes[posPixel].muG;
+			m_background(r,c,2) = (unsigned char)m_modes[posPixel].muB;
+
+			pUsedModes++;
+		}
+	}
+}
+
diff --git a/package_bgs/dp/ZivkovicAGMM.h b/package_bgs/dp/ZivkovicAGMM.h
new file mode 100644
index 0000000..c58fac4
--- /dev/null
+++ b/package_bgs/dp/ZivkovicAGMM.h
@@ -0,0 +1,160 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* ZivkovicAGMM.hpp
+*
+* Purpose: Implementation of the Gaussian mixture model (GMM) background 
+*		  		 subtraction algorithm developed by Z. Zivkovic.
+*
+* Author: Donovan Parks, September 2007
+*
+* This code is based on code by Z. Zivkovic's. I have changed it from a pure
+* C implementation to a cleaner (IMHO) C++ implementation. It is based on the
+* following papers:
+*
+*	"Improved adaptive Gausian mixture model for background subtraction"
+*		Z.Zivkovic 
+*		International Conference Pattern Recognition, UK, August, 2004
+*
+*
+* "Efficient Adaptive Density Estimapion per Image Pixel for the 
+*			Task of Background Subtraction"
+*		Z.Zivkovic, F. van der Heijden 
+*		Pattern Recognition Letters, vol. 27, no. 7, pages 773-780, 2006.
+*
+* Zivkovic's code can be obtained at: www.zoranz.net
+
+Example:
+Algorithms::BackgroundSubtraction::ZivkovicParams params;
+params.SetFrameSize(width, height);
+params.LowThreshold() = 5.0f*5.0f;
+params.HighThreshold() = 2*params.LowThreshold();	// Note: high threshold is used by post-processing 
+params.Alpha() = 0.001f;
+params.MaxModes() = 3;
+
+Algorithms::BackgroundSubtraction::ZivkovicAGMM bgs;
+bgs.Initalize(params);
+******************************************************************************/
+
+#ifndef ZIVKOVIC_AGMM_H
+#define ZIVKOVIC_AGMM_H
+
+#include "Bgs.h"
+
+namespace Algorithms
+{
+  namespace BackgroundSubtraction
+  {
+    // --- User adjustable parameters used by the Grimson GMM BGS algorithm ---
+    class ZivkovicParams : public BgsParams
+    {
+    public:
+      float &LowThreshold() { return m_low_threshold; }
+      float &HighThreshold() { return m_high_threshold; }
+
+      float &Alpha() { return m_alpha; }
+      int &MaxModes() { return m_max_modes; }
+
+    private:
+      // Threshold on the squared dist. to decide when a sample is close to an existing 
+      // components. If it is not close to any a new component will be generated. 
+      // Smaller threshold values lead to more generated components and higher threshold values 
+      // lead to a small number of components but they can grow too large.
+      //
+      // It is usual easiest to think of these thresholds as being the number of variances (not standard deviations) 
+      // away from the mean of a pixel before it is considered to be from the foreground.
+      float m_low_threshold;
+      float m_high_threshold;
+
+      // alpha - speed of update - if the time interval you want to average over is T
+      // set alpha=1/T. 
+      float m_alpha;
+
+      // Maximum number of modes (Gaussian components) that will be used per pixel
+      int m_max_modes;
+    };
+
+    // --- Zivkovic AGMM BGS algorithm ---
+    class ZivkovicAGMM : public Bgs
+    {
+    private:
+      struct GMM
+      {
+        float sigma;
+        float muR;
+        float muG;
+        float muB;
+        float weight;
+      };
+
+    public:
+      ZivkovicAGMM();
+      ~ZivkovicAGMM();
+
+      void Initalize(const BgsParams& param);
+
+      void InitModel(const RgbImage& data);
+      void Subtract(int frame_num, const RgbImage& data,  
+        BwImage& low_threshold_mask, BwImage& high_threshold_mask);	
+      void Update(int frame_num, const RgbImage& data,  const BwImage& update_mask);
+
+      RgbImage* Background() { return &m_background; }
+
+    private:
+      void SubtractPixel(long posPixel, const RgbPixel& pixel, unsigned char* pModesUsed, 
+        unsigned char& lowThreshold, unsigned char& highThreshold);
+
+      // User adjustable parameters
+      ZivkovicParams m_params;
+
+      // Threshold when the component becomes significant enough to be included into
+      // the background model. It is the TB = 1-cf from the paper. So I use cf=0.1 => TB=0.9
+      // For alpha=0.001 it means that the mode should exist for approximately 105 frames before
+      // it is considered foreground
+      float m_bg_threshold; //1-cf from the paper
+
+      // Initial variance for the newly generated components. 
+      // It will will influence the speed of adaptation. A good guess should be made. 
+      // A simple way is to estimate the typical standard deviation from the images.
+      float m_variance;
+
+      // This is related to the number of samples needed to accept that a component
+      // actually exists. 
+      float m_complexity_prior;
+
+      //data
+      int m_num_bands;	//only RGB now ==3
+
+      // dynamic array for the mixture of Gaussians
+      GMM* m_modes;
+
+      RgbImage m_background;
+
+      //number of Gaussian components per pixel
+      unsigned char* m_modes_per_pixel;
+    };
+  };
+};
+
+#endif
+
+
+
+
+
+
diff --git a/package_bgs/jmo/BGS.h b/package_bgs/jmo/BGS.h
new file mode 100644
index 0000000..1fc0e44
--- /dev/null
+++ b/package_bgs/jmo/BGS.h
@@ -0,0 +1,216 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+#if !defined(_BGS_H_)
+#define _BGS_H_
+
+#include <cv.h>
+
+
+// TODO check these defines are not used (or not redundant with real params)
+#define MAX_LBP_MODE_NUM	5
+
+#define ROBUST_COLOR_OFFSET	6.0f
+
+#define LOW_INITIAL_MODE_WEIGHT	0.01f
+
+#define MODE_UPDATING_LEARN_RATE	0.01f
+#define WEIGHT_UPDATING_LEARN_RATE	0.01f
+
+#define COLOR_MAX_MIN_OFFSET		5
+
+#define BACKGROUND_MODEL_PERCENT	0.6f
+
+#define PATTERN_COLOR_DIST_BACKGROUND_THRESHOLD	0.2f
+
+#define PATTERN_DIST_SMOOTH_NEIG_HALF_SIZE	6
+#define PATTERN_DIST_CONV_GAUSSIAN_SIGMA	2.5f
+
+#define ROBUST_SHADOW_RATE	0.6f
+#define ROBUST_HIGHLIGHT_RATE	1.20f
+
+#define BINARY_PATTERM_ELEM(c1, c2, offset)	\
+  ((float)(c2)-(float)(c1)+offset>0)
+
+/*		
+#define BINARY_PATTERM_ELEM(c1, c2, offset)	\
+( fabsf((float)(c2)-(float)(c1)) <= offset ? 1 : (float)(c2)-(float)(c1) >=0 )
+*/
+
+#ifndef PI
+#define PI 3.141592653589793f
+#endif
+
+/************************************************************************/
+/* some data structures for multi-level LBP (local binary pattern)      */
+/* texture feature for background subtraction                           */
+/************************************************************************/
+typedef struct _LBP
+{
+  float* bg_pattern;			/* the average local binary pattern of background mode */
+  float* bg_intensity;			/* the average color intensity of background mode */
+  float* max_intensity;			/* the maximal color intensity of background mode */
+  float* min_intensity;			/* the minimal color intensity of background mode */
+  float weight;				/* the weight of background mode, i.e. probability that the background mode belongs to background */
+  float max_weight;			/* the maximal weight of background mode */
+  int bg_layer_num;			/* the background layer number of background mode */
+  unsigned long first_time;				/* the first time of background mode appearing */
+  unsigned long last_time;				/* the last time of background model appearing */
+  int freq;				/* the appearing frequency */
+  //long mnrl;				/* maximum negative run-length */
+  unsigned long layer_time;				/* the first time of background mode becoming a background layer */
+}
+LBPStruct;
+
+typedef struct _PixelLBP
+{
+  LBPStruct* LBPs;			/* the background modes */
+  unsigned short* lbp_idxes;		/* the indices of background modes */
+  unsigned int cur_bg_layer_no;
+  unsigned int num;			/* the total number of background modes */
+  unsigned int bg_num;			/* the number of the first background modes for foreground detection */
+  unsigned char* cur_intensity;		/* the color intensity of current pixel */
+  float* cur_pattern;			/* the local binary pattern of current pixel */
+  float matched_mode_first_time;		/* the index of currently matched pixel mode */
+}
+PixelLBPStruct;
+
+/*********************************************************************************/
+/* should replace the above structure using class in the future (not finished)   */
+/*********************************************************************************/
+
+class BG_PIXEL_MODE
+{
+public:
+  float* bg_lbp_pattern;			/* the average local binary pattern of background mode */
+  float* bg_intensity;			/* the average color intensity of background mode */
+  float* max_intensity;			/* the maximal color intensity of background mode */
+  float* min_intensity;			/* the minimal color intensity of background mode */
+  float weight;				/* the weight of background mode, i.e. probability that the background mode belongs to background */
+  float max_weight;			/* the maximal weight of background mode */
+  int bg_layer_num;			/* the background layer number of background mode */
+
+  int lbp_pattern_length;
+  int color_channel;
+
+  BG_PIXEL_MODE(int _lbp_pattern_length, int _color_channel=3) {
+    lbp_pattern_length = _lbp_pattern_length;
+    color_channel = _color_channel;
+
+    bg_lbp_pattern = new float[lbp_pattern_length];
+    bg_intensity = new float[color_channel];
+    max_intensity = new float[color_channel];
+    min_intensity = new float[color_channel];
+  };
+
+  virtual ~BG_PIXEL_MODE() {
+    delete [] bg_lbp_pattern;
+    delete [] bg_intensity;
+    delete [] max_intensity;
+    delete [] min_intensity;
+  };
+};
+
+class BG_PIXEL_PATTERN
+{
+public:
+  BG_PIXEL_MODE** pixel_MODEs;		/* the background modes */
+  unsigned short* lbp_pattern_idxes;	/* the indices of background modes */
+  unsigned int cur_bg_layer_no;
+  unsigned int num;			/* the total number of background modes */
+  unsigned int bg_num;			/* the number of the first background modes for foreground detection */
+  unsigned char* cur_intensity;		/* the color intensity of current pixel */
+  float* cur_lbp_pattern;			/* the local binary pattern of current pixel */
+
+  int lbp_pattern_length;
+  int color_channel;
+  int pixel_mode_num;
+
+  BG_PIXEL_PATTERN(int _pixel_mode_num, int _lbp_pattern_length, int _color_channel=3) {
+    pixel_mode_num = _pixel_mode_num;
+    lbp_pattern_length = _lbp_pattern_length;
+    color_channel = _color_channel;
+
+    pixel_MODEs = new BG_PIXEL_MODE*[pixel_mode_num];
+
+    for ( int i = 0 ; i < pixel_mode_num ; i++ ) {
+      pixel_MODEs[i] = new BG_PIXEL_MODE(_lbp_pattern_length, _color_channel);
+    }
+
+    lbp_pattern_idxes = new unsigned short[pixel_mode_num];
+    cur_intensity = new unsigned char[color_channel];
+    cur_lbp_pattern = new float[lbp_pattern_length];
+  };
+
+  virtual ~BG_PIXEL_PATTERN() {
+    delete [] lbp_pattern_idxes;
+    delete [] cur_intensity;
+    delete [] cur_lbp_pattern;
+
+    for ( int i = 0 ; i < pixel_mode_num ; i++ )
+      delete pixel_MODEs[i];
+    delete [] pixel_MODEs;
+  };
+};
+
+class IMAGE_BG_MODEL
+{
+  int pixel_length;
+
+  BG_PIXEL_PATTERN** pixel_PATTERNs;
+
+  IMAGE_BG_MODEL(int _pixel_length, int _pixel_mode_num, int _lbp_pattern_length, int _color_channel=3) {
+    pixel_length = _pixel_length;
+
+    pixel_PATTERNs = new BG_PIXEL_PATTERN*[pixel_length];
+    for ( int i = 0 ; i < pixel_length ; i++ ) 
+      pixel_PATTERNs[i] = new BG_PIXEL_PATTERN(_pixel_mode_num, _lbp_pattern_length, _color_channel);
+  }
+  virtual ~IMAGE_BG_MODEL() {
+    for ( int i = 0 ; i < pixel_length ; i++ )
+      delete pixel_PATTERNs[i];
+    delete [] pixel_PATTERNs;
+  }
+};
+
+
+#endif // !defined(_BGS_H_)
diff --git a/package_bgs/jmo/BackgroundSubtractionAPI.h b/package_bgs/jmo/BackgroundSubtractionAPI.h
new file mode 100644
index 0000000..7d01d69
--- /dev/null
+++ b/package_bgs/jmo/BackgroundSubtractionAPI.h
@@ -0,0 +1,158 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+//////////////////////////////////////////////////////////////////////
+//
+// BackgroundSubtractionAPI.h: 
+//   interface for the BackgroundSubtractionAPI class.
+//
+// A background subtraction algorithm takes as input
+// an RGB image and provide as ouput a Binary mask
+// with a value of 0 for points belonging to the 
+// background, and non zero for points belonging
+// to the foreground.
+//
+//
+//
+// To add:
+//  - a function indicating the valid input and ouput
+//    images 
+//     e.g. RGB  image (default) or greylevel image for the input
+//          char image for the output
+//
+//////////////////////////////////////////////////////////////////////
+
+
+#if !defined(_BACKGROUND_SUBTRACTION_API_H_)
+#define _BACKGROUND_SUBTRACTION_API_H_
+
+#include "cv.h"
+
+class CBackgroundSubtractionAPI  
+{
+public:
+  //CBackgroundSubtractionAPI(){};
+  //virtual ~CBackgroundSubtractionAPI(){};
+
+  //-------------------------------------------------------------
+  // TO CALL AT INITIALISATION: DEFINES THE SIZE OF THE INPUT IMAGES
+  // NORMALLY, UNNECESSARY IF A CONFIGURATION FILE IS LOADED
+  void   Init(int width,int height);
+
+  //-------------------------------------------------------------
+  // PROVIDE A MASK TO DEFINE THE SET OF POINTS WHERE BACKGROUND 
+  // SUBTRACTION DOES NOT NEED TO BE PERFORMED
+  // 
+  //  mode is useful to specify if the points to remove from 
+  //  processing are in addition to the ones potentially
+  //  removed according to the configuration file,
+  //  or if they are the only ones to be removed 
+  // 
+  // mode=0 : provided points need to be removed
+  //          in addition to those already removed
+  // mode=1 : the provided points are the only one to remove
+  //          from processing
+  // Note:  maskImage(li,co)=0 indicate the points to remove
+  //       from background processing
+  void   SetValidPointMask(IplImage* maskImage, int mode);
+
+  //-------------------------------------------------------------
+  // 
+  //   set the frame rate, to adjust the update parameters
+  //   to the actual frame rate.
+  //   Can be called only once at initialisation,
+  //   but in online cases, can be used to indicate
+  //   the time interval during the last processed frame 
+  //
+  //   frameDuration is in millisecond
+  void   SetFrameRate(float    frameDuration);
+
+  //-------------------------------------------------------------
+  //   PROVIDE A POINTER TO THE INPUT IMAGE
+  //   -> INDICATE WHERE THE NEW IMAGE TO PROCESS IS STORED
+  //
+  //   Here assumes that the input image will contain RGB images.
+  //   The memory of this image is handled by the caller.
+  //
+  //    The return value indicate whether the actual Background 
+  //    Subtraction algorithm handles RGB images (1) or not (0).
+  //   
+  int  SetRGBInputImage(IplImage  *  inputImage);
+
+  //-------------------------------------------------------------
+  //   PROVIDE A POINTER TO THE RESULT IMAGE
+  //   INDICATE WHERE THE BACKGROUND RESULT NEED TO BE STORED
+  //  
+  //   The return value is 1 if correct image format is provided,
+  //   otherwise the return value is 0.
+  //   e.g. fg_mask_img = cvCreateImage(imgSize, IPL_DEPTH_8U, 1);
+  int  SetForegroundMaskImage(IplImage *fg_mask_img);
+
+  //   The return value is 1 if the function is implemented 
+  //   with correct format, otherwise the return value is 0
+  //   e.g. fg_prob_img = cvCreateImage(imgSize, IPL_DEPTH_32F, 1);
+  int  SetForegroundProbImage(IplImage *fg_prob_img);
+
+  //-------------------------------------------------------------
+  // This function should be called each time a new image is 
+  // available in the input image.
+  // 
+  // The return value is 1 if everything goes well,
+  // otherwise the return value is 0.  
+  //
+  int   Process();
+
+  //-------------------------------------------------------------
+  // this function should save parameters and information of the model
+  // (e.g. after a training of the model, or in such a way
+  // that the model can be reload to process the next frame
+  // type of save:
+  void   Save(char   *bg_model_fn);
+
+  //-------------------------------------------------------------
+  // this function should load the parameters necessary
+  // for the processing of the background subtraction or 
+  // load background model information
+  void   Load(char  *bg_model_fn);
+};
+
+#endif // !defined(_BACKGROUND_SUBTRACTION_API_H_)
diff --git a/package_bgs/jmo/BlobExtraction.cpp b/package_bgs/jmo/BlobExtraction.cpp
new file mode 100644
index 0000000..04560b9
--- /dev/null
+++ b/package_bgs/jmo/BlobExtraction.cpp
@@ -0,0 +1,1490 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+//***********************************************************//
+//* Blob analysis package  8 August 2003                    *//
+//* Version 1.0                                             *//
+//* Input: IplImage* binary image                           *//
+//* Output: attributes of each connected region             *//
+//* Author: Dave Grossman                                   *//
+//* Modifications: Francesc Pinyol and Ricard Borras		*//
+//* Email: dgrossman@cdr.stanford.edu                       *//
+//* Email: fpinyol@cvc.uab.es rborras@cvc.uab.es            *//
+//* Acknowledgement: the algorithm has been around > 20 yrs *//
+//***********************************************************//
+
+//! Indica si la connectivitat es a 8 (si es desactiva es a 4)
+#define B_CONNECTIVITAT_8
+
+//! si la imatge �s c�clica verticalment (els blobs que toquen
+//! les vores superior i inferior no es consideren externs)
+#define IMATGE_CICLICA_VERTICAL		1
+//! si la imatge �s c�clica horitzontalment (els blobs que toquen
+//! les vores dreta i esquerra no es consideren externs)
+#define IMATGE_CICLICA_HORITZONTAL	0
+
+#define PERIMETRE_DIAGONAL (1.41421356237310 - 2)
+#define SQRT2	1.41421356237310
+// color dels p�xels de la m�scara per ser exteriors
+#define PIXEL_EXTERIOR 0
+
+
+#include "BlobResult.h"
+#include "BlobExtraction.h"
+
+namespace Blob
+{
+
+/**
+- FUNCI�: BlobAnalysis
+- FUNCIONALITAT: Extreu els blobs d'una imatge d'un sol canal
+- PAR�METRES:
+- inputImage: Imatge d'entrada. Ha de ser d'un sol canal
+- threshold: Nivell de gris per considerar un pixel blanc o negre
+- maskImage: Imatge de m�scara fora de la cual no es calculen els blobs. A m�s,
+els blobs que toquen els pixels de la m�scara a 0, s�n considerats
+externs
+- borderColor: Color del marc de la imatge (0=black or 1=white)
+- findmoments: calcula els moments dels blobs o no
+- RegionData: on es desar� el resultat
+- RESULTAT:
+- retorna true si tot ha anat b�, false si no. Deixa el resultat a blobs.
+- RESTRICCIONS:
+- La imatge d'entrada ha de ser d'un sol canal
+- AUTOR: dgrossman@cdr.stanford.edu
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+- fpinyol@cvc.uab.es, rborras@cvc.uab.es: adaptaci� a les OpenCV
+*/
+bool BlobAnalysis(	IplImage* inputImage,
+  uchar threshold,
+  IplImage* maskImage,
+  bool borderColor,
+  bool findmoments,
+  blob_vector &RegionData )	
+{
+  // dimensions of input image taking in account the ROI
+  int Cols, Rows, startCol, startRow;
+
+  if( inputImage->roi )
+  {
+    CvRect imageRoi = cvGetImageROI( inputImage );
+    startCol = imageRoi.x;
+    startRow = imageRoi.y;
+    Cols = imageRoi.width;
+    Rows = imageRoi.height;
+  }
+  else
+  {
+    startCol = 0;
+    startRow = 0; 
+    Cols = inputImage->width;
+    Rows = inputImage->height;
+  }
+
+  int Trans = Cols;				// MAX trans in any row
+  char* pMask = NULL;
+  char* pImage;
+
+  // Convert image array into transition array. In each row
+  // the transition array tells which columns have a color change
+  int iCol,iRow,iTran, Tran;				// Data for a given run
+  bool ThisCell, LastCell;		// Contents (colors (0 or 1)) within this row
+  int TransitionOffset = 0;		// Performance booster to avoid multiplication
+
+  // row 0 and row Rows+1 represent the border
+  int i;
+  int *Transition;				// Transition Matrix
+
+  int nombre_pixels_mascara = 0;
+  //! Imatge amb el perimetre extern de cada pixel
+  IplImage *imatgePerimetreExtern;
+
+  // input images must have only 1-channel and be an image
+  if( !CV_IS_IMAGE( inputImage ) || (inputImage->nChannels != 1) )
+  {
+    return false;
+  }
+  if( maskImage != NULL )
+  {
+    // input image and mask are a valid image?
+    if( !CV_IS_IMAGE( inputImage ) || !CV_IS_IMAGE( maskImage )) 
+      return false;
+
+    // comprova que la m�scara tingui les mateixes dimensions que la imatge
+    if( inputImage->width != maskImage->width || inputImage->height != maskImage->height )
+    {
+      return false;
+    }
+
+    // comprova que la m�scara sigui una imatge d'un sol canal (grayscale)
+    if( maskImage->nChannels != 1 )
+    {
+      return false;
+    }
+
+  }
+
+  // Initialize Transition array
+  Transition=new int[(Rows + 2)*(Cols + 2)];
+  memset(Transition,0,(Rows + 2) * (Cols + 2)*sizeof(int));
+  Transition[0] = Transition[(Rows + 1) * (Cols + 2)] = Cols + 2;
+
+  // Start at the beginning of the image (startCol, startRow)
+  pImage = inputImage->imageData + startCol - 1 + startRow * inputImage->widthStep;
+
+  /*
+  Paral�lelitzaci� del c�lcul de la matriu de transicions
+  Fem que cada iteraci� del for el faci un thread o l'altre ( tenim 2 possibles threads )	
+  */
+  if(maskImage == NULL)
+  {
+    imatgePerimetreExtern = NULL;
+
+    //Fill Transition array
+    for(iRow = 1; iRow < Rows + 1; iRow++)		// Choose a row of Bordered image
+    {
+      TransitionOffset = iRow*(Cols + 2); //per a que sigui paral�litzable
+      iTran = 0;					// Index into Transition array
+      Tran = 0;					// No transitions at row start
+      LastCell = borderColor;
+
+      for(iCol = 0; iCol < Cols + 2; iCol++)	// Scan that row of Bordered image
+      {
+        if(iCol == 0 || iCol == Cols+1) 
+          ThisCell = borderColor;
+        else
+          ThisCell = ((unsigned char) *(pImage)) > threshold;
+
+        if(ThisCell != LastCell)
+        {
+          Transition[TransitionOffset + iTran] = Tran;	// Save completed Tran
+          iTran++;						// Prepare new index
+          LastCell = ThisCell;			// With this color
+        }
+
+        Tran++;	// Tran continues
+        pImage++;
+      }
+
+      Transition[TransitionOffset + iTran] = Tran;	// Save completed run
+      if ( (TransitionOffset + iTran + 1) < (Rows + 1)*(Cols + 2) )
+      {
+        Transition[TransitionOffset + iTran + 1] = -1;
+      }
+      //jump to next row (beginning from (startCol, startRow))
+      pImage = inputImage->imageData - 1 + startCol + (iRow+startRow)*inputImage->widthStep;
+    }
+  }
+  else
+  {
+    //maskImage not NULL: Cal rec�rrer la m�scara tamb� per calcular la matriu de transicions
+
+    char perimeter;
+    char *pPerimetre;
+
+    // creem la imatge que contindr� el perimetre extern de cada pixel
+    imatgePerimetreExtern = cvCreateImage( cvSize(maskImage->width, maskImage->height), IPL_DEPTH_8U, 1);
+    cvSetZero( imatgePerimetreExtern );
+
+    pMask = maskImage->imageData - 1;
+
+    //Fill Transition array
+    for(iRow = 1; iRow < Rows + 1; iRow++)		// Choose a row of Bordered image
+    {
+      TransitionOffset = iRow*(Cols + 2);
+      iTran = 0;					// Index into Transition array
+      Tran = 0;					// No transitions at row start
+      LastCell = borderColor;
+
+      pPerimetre = imatgePerimetreExtern->imageData + (iRow - 1) * imatgePerimetreExtern->widthStep;
+      //pMask = maskImage->imageData + (iRow-1) * maskImage->widthStep;
+
+      for(iCol = 0; iCol < Cols + 2; iCol++)	// Scan that row of Bordered image
+      {
+        if(iCol == 0 || iCol == Cols+1 || ((unsigned char) *pMask) == PIXEL_EXTERIOR) 
+          ThisCell = borderColor;
+        else
+          ThisCell = ((unsigned char) *(pImage)) > threshold;
+
+        if(ThisCell != LastCell)
+        {
+          Transition[TransitionOffset + iTran] = Tran;	// Save completed Tran
+          iTran++;						// Prepare new index
+          LastCell = ThisCell;			// With this color
+        }
+
+        /*////////////////////////////////////////////////////////////////////////
+        Calcul de la imatge amb els pixels externs
+        ////////////////////////////////////////////////////////////////////////*/
+        // pels pixels externs no cal calcular res pq no hi accedir-hem
+        if( (iCol > 0) && (iCol < Cols) )
+        {
+          if( *pMask == PIXEL_EXTERIOR )
+          {
+            *pPerimetre = 0;
+          }
+          else
+          {
+            perimeter = 0;
+
+            // pixels al nord de l'actual
+            if(iRow>1)
+            {
+              if( *(pMask - maskImage->widthStep ) == PIXEL_EXTERIOR) perimeter++;
+            }
+
+            // pixels a l'est i oest de l'actual
+            if( iRow < imatgePerimetreExtern->height )
+            {
+              if( (iCol>0) && (*(pMask-1) == PIXEL_EXTERIOR) ) perimeter++;
+
+              if( ( iCol < imatgePerimetreExtern->width - 1) && (*(pMask+1) == PIXEL_EXTERIOR) ) perimeter++;
+            }
+
+            // pixels al sud de l'actual
+            if( iRow < imatgePerimetreExtern->height - 1)
+            {
+              if( (*(pMask+maskImage->widthStep) == PIXEL_EXTERIOR) ) perimeter++;
+            }
+
+            *pPerimetre = perimeter;
+          }
+        }
+
+        Tran++;	// Tran continues
+        pImage++;
+        pMask++;
+        pPerimetre++;
+      }
+      Transition[TransitionOffset + iTran] = Tran;	// Save completed run
+
+      if ( (TransitionOffset + iTran + 1) < (Rows + 1)*(Cols + 2) )
+      {
+        Transition[TransitionOffset + iTran + 1] = -1;
+      }
+
+
+      //jump to next row (beginning from (startCol, startRow))
+      pImage = inputImage->imageData - 1 + startCol + (iRow+startRow)*inputImage->widthStep;
+      //the mask should be the same size as image Roi, so don't take into account the offset
+      pMask = maskImage->imageData - 1 + iRow*maskImage->widthStep;
+    }
+  }
+
+  // Process transition code depending on Last row and This row
+  //
+  // Last ---++++++--+++++++++++++++-----+++++++++++++++++++-----++++++-------+++---
+  // This -----+++-----++++----+++++++++----+++++++---++------------------++++++++--
+  //
+  // There are various possibilities:
+  //
+  // Case     1       2       3       4       5       6       7       8
+  // Last |xxx    |xxxxoo |xxxxxxx|xxxxxxx|ooxxxxx|ooxxx  |ooxxxxx|    xxx|
+  // This |    yyy|    yyy|  yyyy |  yyyyy|yyyyyyy|yyyyyyy|yyyy   |yyyy   |
+  // Here o is optional
+  // 
+  // Here are the primitive tests to distinguish these 6 cases:
+  //   A) Last end < This start - 1 OR NOT		Note: -1
+  //   B) This end < Last start OR NOT
+  //   C) Last start < This start OR NOT
+  //   D) This end < Last end OR NOT
+  //   E) This end = Last end OR NOT
+  //
+  // Here is how to use these tests to determine the case:
+  //   Case 1 = A [=> NOT B AND C AND NOT D AND NOT E]
+  //   Case 2 = C AND NOT D AND NOT E [AND NOT A AND NOT B]
+  //   Case 3 = C AND D [=> NOT E] [AND NOT A AND NOT B]
+  //   Case 4 = C AND NOT D AND E [AND NOT A AND NOT B]
+  //   Case 5 = NOT C AND E [=> NOT D] [AND NOT A AND NOT B]
+  //   Case 6 = NOT C AND NOT D AND NOT E [AND NOT A AND NOT B]
+  //   Case 7 = NOT C AND D [=> NOT E] [AND NOT A AND NOT B]
+  //   Case 8 = B [=> NOT A AND NOT C AND D AND NOT E]
+  //
+  // In cases 2,3,4,5,6,7 the following additional test is needed:
+  //   Match) This color = Last color OR NOT
+  //
+  // In cases 5,6,7 the following additional test is needed:
+  //   Known) This region was already matched OR NOT
+  //
+  // Here are the main tests and actions:
+  //   Case 1: LastIndex++;
+  //   Case 2: if(Match) {y = x;}
+  //           LastIndex++;
+  //   Case 3: if(Match) {y = x;}
+  //           else {y = new}
+  //           ThisIndex++;
+  //   Case 4: if(Match) {y = x;}
+  //           else {y = new}
+  //           LastIndex++;
+  //           ThisIndex++;
+  //   Case 5: if(Match AND NOT Known) {y = x}
+  //           else if(Match AND Known) {Subsume(x,y)}
+  //           LastIndex++;ThisIndex++
+  //   Case 6: if(Match AND NOT Known) {y = x}
+  //           else if(Match AND Known) {Subsume(x,y)}
+  //           LastIndex++;
+  //   Case 7: if(Match AND NOT Known) {y = x}
+  //           else if(Match AND Known) {Subsume(x,y)}
+  //           ThisIndex++;
+  //   Case 8: ThisIndex++;
+
+  int *SubsumedRegion = NULL;			
+
+  double ThisParent;	// These data can change when the line is current
+  double ThisArea;
+  double ThisPerimeter;
+  double ThisSumX = 0;
+  double ThisSumY = 0;
+  double ThisSumXX = 0;
+  double ThisSumYY = 0;
+  double ThisSumXY = 0;
+  double ThisMinX;
+  double ThisMaxX;
+  double ThisMinY;
+  double ThisMaxY;
+  double LastPerimeter;	// This is the only data for retroactive change
+  double ThisExternPerimeter;
+
+  int HighRegionNum = 0;
+  //int RegionNum = 0;
+  int ErrorFlag = 0;
+
+  int LastRow, ThisRow;			// Row number
+  int LastStart, ThisStart;		// Starting column of run
+  int LastEnd, ThisEnd;			// Ending column of run
+  int LastColor, ThisColor;		// Color of run
+
+  int LastIndex, ThisIndex;		// Which run are we up to
+  int LastIndexCount, ThisIndexCount;	// Out of these runs
+  int LastRegionNum, ThisRegionNum;	// Which assignment
+  int *LastRegion;				// Row assignment of region number
+  int *ThisRegion;		// Row assignment of region number
+
+  int LastOffset = -(Trans + 2);	// For performance to avoid multiplication
+  int ThisOffset = 0;				// For performance to avoid multiplication
+  int ComputeData;
+
+  CvPoint actualedge;
+  uchar imagevalue;
+  bool CandidatExterior = false;
+
+  // apuntadors als blobs de la regi� actual i last
+  CBlob *regionDataThisRegion, *regionDataLastRegion;
+
+  LastRegion=new int[Cols+2];
+  ThisRegion=new int[Cols+2];
+
+  for(i = 0; i < Cols + 2; i++)	// Initialize result arrays
+  {
+    LastRegion[i] = -1;
+    ThisRegion[i] = -1;
+  }
+
+  //create the external blob
+  RegionData.push_back( new CBlob() );
+  SubsumedRegion = NewSubsume(SubsumedRegion,0);
+  RegionData[0]->parent = -1;
+  RegionData[0]->area = (double) Transition[0];
+  RegionData[0]->perimeter = (double) (2 + 2 * Transition[0]);
+
+  ThisIndexCount = 1;
+  ThisRegion[0] = 0;	// Border region
+
+  // beginning of the image 
+  // en cada linia, pimage apunta al primer pixel de la fila
+  pImage = inputImage->imageData - 1 + startCol + startRow * inputImage->widthStep;
+  //the mask should be the same size as image Roi, so don't take into account the offset
+  if(maskImage!=NULL) pMask = maskImage->imageData - 1;
+
+  char *pImageAux, *pMaskAux = NULL;
+
+  // Loop over all rows
+  for(ThisRow = 1; ThisRow < Rows + 2; ThisRow++)
+  {
+    //cout << "========= THIS ROW = " << ThisRow << endl;	// for debugging
+    ThisOffset += Trans + 2;
+    ThisIndex = 0;
+    LastOffset += Trans + 2;;
+    LastRow = ThisRow - 1;
+    LastIndexCount = ThisIndexCount;
+    LastIndex = 0;
+
+    int EndLast = 0;
+    int EndThis = 0;
+
+    for(int j = 0; j < Trans + 2; j++)
+    {
+      int Index = ThisOffset + j;
+      int TranVal = Transition[Index];
+      if(TranVal > 0) ThisIndexCount = j + 1;	// stop at highest 
+
+      if(ThisRegion[j] == -1)  { EndLast = 1; }
+      if(TranVal < 0) { EndThis = 1; }
+
+      if(EndLast > 0 && EndThis > 0) { break; }
+
+      LastRegion[j] = ThisRegion[j];
+      ThisRegion[j] = -1;		// Flag indicates region is not initialized
+    }
+
+    int MaxIndexCount = LastIndexCount;
+    if(ThisIndexCount > MaxIndexCount) MaxIndexCount = ThisIndexCount;
+
+    // Main loop over runs within Last and This rows
+    while (LastIndex < LastIndexCount && ThisIndex < ThisIndexCount)
+    {
+      ComputeData = 0;
+
+      if(LastIndex == 0) LastStart = 0;
+      else LastStart = Transition[LastOffset + LastIndex - 1];
+      LastEnd = Transition[LastOffset + LastIndex] - 1;
+      LastColor = LastIndex - 2 * (LastIndex / 2);
+      LastRegionNum = LastRegion[LastIndex];
+
+      regionDataLastRegion = RegionData[LastRegionNum];
+
+
+      if(ThisIndex == 0) ThisStart = 0;
+      else ThisStart = Transition[ThisOffset + ThisIndex - 1];
+      ThisEnd = Transition[ThisOffset + ThisIndex] - 1;
+      ThisColor = ThisIndex - 2 * (ThisIndex / 2);
+      ThisRegionNum = ThisRegion[ThisIndex];
+
+      if( ThisRegionNum >= 0 )
+        regionDataThisRegion = RegionData[ThisRegionNum];
+      else
+        regionDataThisRegion = NULL;
+
+
+      // blobs externs
+      CandidatExterior = false;
+      if( 
+#if !IMATGE_CICLICA_VERTICAL
+        ThisRow == 1 || ThisRow == Rows ||
+#endif
+#if !IMATGE_CICLICA_HORITZONTAL
+        ThisStart <= 1 || ThisEnd >= Cols || 
+#endif				
+        GetExternPerimeter( ThisStart, ThisEnd, ThisRow, inputImage->width, inputImage->height, imatgePerimetreExtern )
+        )
+      {
+        CandidatExterior = true;
+      }
+
+      int TestA = (LastEnd < ThisStart - 1);	// initially false
+      int TestB = (ThisEnd < LastStart);		// initially false
+      int TestC = (LastStart < ThisStart);	// initially false
+      int TestD = (ThisEnd < LastEnd);
+      int TestE = (ThisEnd == LastEnd);
+
+      int TestMatch = (ThisColor == LastColor);		// initially true
+      int TestKnown = (ThisRegion[ThisIndex] >= 0);	// initially false
+
+      int Case = 0;
+      if(TestA) Case = 1;
+      else if(TestB) Case = 8;
+      else if(TestC)
+      {
+        if(TestD) Case = 3;
+        else if(!TestE) Case = 2;
+        else Case = 4;
+      }
+      else
+      {
+        if(TestE) Case = 5;
+        else if(TestD) Case = 7;
+        else Case = 6;
+      }
+
+      // Initialize common variables
+      ThisArea = (float) 0.0;
+
+      if(findmoments)
+      {
+        ThisSumX = ThisSumY = (float) 0.0;
+        ThisSumXX = ThisSumYY = ThisSumXY = (float) 0.0;
+      }
+      ThisMinX = ThisMinY = (float) 1000000.0;
+      ThisMaxX = ThisMaxY = (float) -1.0;
+
+      LastPerimeter = ThisPerimeter = (float) 0.0;
+      ThisParent = (float) -1;
+      ThisExternPerimeter = 0.0;
+
+      // Determine necessary action and take it
+      switch (Case)
+      { 
+      case 1: //|xxx    |
+        //|    yyy|
+
+        ThisRegion[ThisIndex] = ThisRegionNum;
+        LastRegion[LastIndex] = LastRegionNum;
+        LastIndex++;
+
+        //afegim la cantonada a LastRegion
+        actualedge.x = ThisEnd;
+        actualedge.y = ThisRow - 1;
+        cvSeqPush(regionDataLastRegion->edges,&actualedge);
+
+        //afegim la cantonada a ThisRegion
+        actualedge.x = ThisStart - 1;
+        actualedge.y = ThisRow - 1;
+        cvSeqPush(regionDataThisRegion->edges,&actualedge);
+
+        break;
+
+
+      case 2: //|xxxxoo |
+        //|    yyy|
+
+        if(TestMatch)	// Same color
+        {
+          ThisRegionNum = LastRegionNum;
+          regionDataThisRegion = regionDataLastRegion;
+
+          ThisArea = ThisEnd - ThisStart + 1;
+          LastPerimeter = LastEnd - ThisStart + 1;	// to subtract
+          ThisPerimeter = 2 + 2 * ThisArea - LastPerimeter +
+            PERIMETRE_DIAGONAL*2;
+
+          if( CandidatExterior )
+          {
+            ThisExternPerimeter = GetExternPerimeter( ThisStart, ThisEnd, ThisRow, 
+              inputImage->width, inputImage->height, 
+              imatgePerimetreExtern );
+            ThisExternPerimeter += PERIMETRE_DIAGONAL*2;
+          }
+          ComputeData = 1;
+        }
+
+        //afegim la cantonada a ThisRegion
+        if(ThisRegionNum!=-1)
+        {
+          // afegim dos vertexs si s�n diferents, nom�s
+          if(ThisStart - 1 != ThisEnd)
+          {
+            actualedge.x = ThisStart - 1;
+            actualedge.y = ThisRow - 1;
+            cvSeqPush(regionDataThisRegion->edges,&actualedge);
+          }
+          actualedge.x = ThisEnd;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataThisRegion->edges,&actualedge);
+        }
+        //afegim la cantonada a ThisRegion
+        if(LastRegionNum!=-1 && LastRegionNum != ThisRegionNum )
+        {
+          // afegim dos vertexs si s�n diferents, nom�s
+          if(ThisStart - 1 != ThisEnd)
+          {
+            actualedge.x = ThisStart - 1;
+            actualedge.y = ThisRow - 1;
+            cvSeqPush(regionDataLastRegion->edges,&actualedge);
+          }
+        }
+
+        ThisRegion[ThisIndex] = ThisRegionNum;
+        LastRegion[LastIndex] = LastRegionNum;
+        LastIndex++;
+        break;
+
+
+      case 3: //|xxxxxxx|
+        //|  yyyy |
+
+        if(TestMatch)	// Same color
+        {
+          ThisRegionNum = LastRegionNum;
+          regionDataThisRegion = regionDataLastRegion;
+
+          ThisArea = ThisEnd - ThisStart + 1;
+          LastPerimeter = ThisArea;	// to subtract
+          ThisPerimeter = 2 + ThisArea + PERIMETRE_DIAGONAL*2;
+          if( CandidatExterior )
+          {
+            ThisExternPerimeter = GetExternPerimeter( ThisStart, ThisEnd, ThisRow, 
+              inputImage->width, inputImage->height, 
+              imatgePerimetreExtern );
+
+            ThisExternPerimeter += PERIMETRE_DIAGONAL * 2;
+          }
+        }
+        else		// Different color => New region
+        {
+          ThisParent = LastRegionNum;
+          ThisRegionNum = ++HighRegionNum;
+          ThisArea = ThisEnd - ThisStart + 1;
+          ThisPerimeter = 2 + 2 * ThisArea;
+          RegionData.push_back( new CBlob() );
+          regionDataThisRegion = RegionData.back();
+
+          SubsumedRegion = NewSubsume(SubsumedRegion,HighRegionNum);
+          if( CandidatExterior )
+            ThisExternPerimeter = GetExternPerimeter( ThisStart, ThisEnd, ThisRow, 
+            inputImage->width, inputImage->height, 
+            imatgePerimetreExtern );
+
+        }
+
+        if(ThisRegionNum!=-1)
+        {
+          //afegim la cantonada a la regio
+          actualedge.x = ThisStart - 1;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataThisRegion->edges,&actualedge);
+          //afegim la cantonada a la regio
+          actualedge.x = ThisEnd;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataThisRegion->edges,&actualedge);
+        }
+        // si hem creat un nou blob, afegim tb a l'anterior
+        if(!TestMatch && LastRegionNum!=-1 && LastRegionNum != ThisRegionNum )
+        {
+          //afegim la cantonada a la regio
+          actualedge.x = ThisStart - 1;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataLastRegion->edges,&actualedge);
+          //afegim la cantonada a la regio
+          actualedge.x = ThisEnd;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataLastRegion->edges,&actualedge);
+        }
+
+        ThisRegion[ThisIndex] = ThisRegionNum;
+        LastRegion[LastIndex] = LastRegionNum;
+        ComputeData = 1;
+        ThisIndex++;
+        break;
+
+
+      case 4:	//|xxxxxxx|
+        //|  yyyyy|
+
+        if(TestMatch)	// Same color
+        {
+          ThisRegionNum = LastRegionNum;
+          regionDataThisRegion = regionDataLastRegion;
+          ThisArea = ThisEnd - ThisStart + 1;
+          LastPerimeter = ThisArea;	// to subtract
+          ThisPerimeter = 2 + ThisArea + PERIMETRE_DIAGONAL;
+          if( CandidatExterior )
+          {
+            ThisExternPerimeter = GetExternPerimeter( ThisStart, ThisEnd, ThisRow, 
+              inputImage->width, inputImage->height, 
+              imatgePerimetreExtern );
+
+            ThisExternPerimeter += PERIMETRE_DIAGONAL;
+          }
+        }
+        else		// Different color => New region
+        {
+          ThisParent = LastRegionNum;
+          ThisRegionNum = ++HighRegionNum;
+          ThisArea = ThisEnd - ThisStart + 1;
+          ThisPerimeter = 2 + 2 * ThisArea;
+          RegionData.push_back( new CBlob() );
+          regionDataThisRegion = RegionData.back();
+          SubsumedRegion = NewSubsume(SubsumedRegion,HighRegionNum);
+          if( CandidatExterior )
+            ThisExternPerimeter = GetExternPerimeter( ThisStart, ThisEnd, ThisRow, 
+            inputImage->width, inputImage->height, 
+            imatgePerimetreExtern );
+
+        }
+
+        if(ThisRegionNum!=-1)
+        {
+          //afegim la cantonada a la regio
+          actualedge.x = ThisStart - 1;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataThisRegion->edges,&actualedge);
+          actualedge.x = ThisEnd;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataThisRegion->edges,&actualedge);
+        }
+        // si hem creat un nou blob, afegim tb a l'anterior
+        if(!TestMatch && LastRegionNum!=-1 && LastRegionNum != ThisRegionNum )
+        {
+          actualedge.x = ThisStart - 1;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataLastRegion->edges,&actualedge);
+          actualedge.x = ThisEnd;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataLastRegion->edges,&actualedge);
+        }
+
+        ThisRegion[ThisIndex] = ThisRegionNum;
+        LastRegion[LastIndex] = LastRegionNum;
+        ComputeData = 1;
+
+#ifdef B_CONNECTIVITAT_8
+        if( TestMatch )
+        {
+          LastIndex++;
+          ThisIndex++;
+        }
+        else
+        {
+          LastIndex++;	
+        }
+#else
+        LastIndex++;
+        ThisIndex++;
+#endif					
+        break;
+
+
+      case 5:	//|ooxxxxx|
+        //|yyyyyyy|
+
+        if(!TestMatch && !TestKnown)	// Different color and unknown => new region
+        {
+          ThisParent = LastRegionNum;
+          ThisRegionNum = ++HighRegionNum;
+          ThisArea = ThisEnd - ThisStart + 1;
+          ThisPerimeter = 2 + 2 * ThisArea;
+          RegionData.push_back( new CBlob() );
+          regionDataThisRegion = RegionData.back();
+          SubsumedRegion = NewSubsume(SubsumedRegion,HighRegionNum);
+          if( CandidatExterior )
+            ThisExternPerimeter = GetExternPerimeter( ThisStart, ThisEnd, ThisRow, 
+            inputImage->width, inputImage->height, 
+            imatgePerimetreExtern );
+
+        }
+        else if(TestMatch && !TestKnown)	// Same color and unknown
+        {
+          ThisRegionNum = LastRegionNum;
+          regionDataThisRegion = regionDataLastRegion;
+          ThisArea = ThisEnd - ThisStart + 1;
+          LastPerimeter = LastEnd - LastStart + 1;	// to subtract
+          ThisPerimeter = 2 + 2 * ThisArea - LastPerimeter 
+            + PERIMETRE_DIAGONAL * (LastStart != ThisStart);
+          if( CandidatExterior )
+          {
+            ThisExternPerimeter = GetExternPerimeter( ThisStart, ThisEnd, ThisRow, 
+              inputImage->width, inputImage->height, 
+              imatgePerimetreExtern );
+
+
+            ThisExternPerimeter += PERIMETRE_DIAGONAL * (LastStart != ThisStart);
+          }
+          ComputeData = 1;
+        }
+        else if(TestMatch && TestKnown)	// Same color and known
+        {
+          LastPerimeter = LastEnd - LastStart + 1;	// to subtract
+          //ThisPerimeter = - LastPerimeter;
+          ThisPerimeter = - 2 * LastPerimeter 
+            + PERIMETRE_DIAGONAL * (LastStart != ThisStart);
+
+          if(ThisRegionNum > LastRegionNum)
+          {
+            Subsume(RegionData, HighRegionNum, SubsumedRegion, regionDataThisRegion, regionDataLastRegion, 
+              findmoments, ThisRegionNum, LastRegionNum );
+            for(int iOld = 0; iOld < MaxIndexCount; iOld++)
+            {
+              if(ThisRegion[iOld] == ThisRegionNum) ThisRegion[iOld] = LastRegionNum;
+              if(LastRegion[iOld] == ThisRegionNum) LastRegion[iOld] = LastRegionNum;
+            }					
+            ThisRegionNum = LastRegionNum;
+          }
+          else if(ThisRegionNum < LastRegionNum)
+          {
+            Subsume(RegionData, HighRegionNum, SubsumedRegion, regionDataLastRegion, regionDataThisRegion, 
+              findmoments, LastRegionNum, ThisRegionNum );
+
+            for(int iOld = 0; iOld < MaxIndexCount; iOld++)
+            {
+              if(ThisRegion[iOld] == LastRegionNum) ThisRegion[iOld] = ThisRegionNum;
+              if(LastRegion[iOld] == LastRegionNum) LastRegion[iOld] = ThisRegionNum;
+            }					
+            LastRegionNum = ThisRegionNum;
+          }
+        }
+
+
+        if(ThisRegionNum!=-1)
+        {
+          actualedge.x = ThisEnd;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataThisRegion->edges,&actualedge);
+
+          if( ThisStart - 1 != LastEnd )
+          {
+            //afegim la cantonada a la regio
+            actualedge.x = ThisStart - 1;
+            actualedge.y = ThisRow - 1;
+            cvSeqPush(regionDataThisRegion->edges,&actualedge);
+          }
+        }
+        // si hem creat un nou blob, afegim tb a l'anterior
+        if(!TestMatch && LastRegionNum!=-1 && LastRegionNum != ThisRegionNum )
+        {
+          actualedge.x = ThisEnd;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataLastRegion->edges,&actualedge);
+        }
+
+        ThisRegion[ThisIndex] = ThisRegionNum;
+        LastRegion[LastIndex] = LastRegionNum;
+
+#ifdef B_CONNECTIVITAT_8
+        if( TestMatch )
+        {
+          LastIndex++;
+          ThisIndex++;
+        }
+        else
+        {
+          LastIndex++;	
+        }
+#else
+        LastIndex++;
+        ThisIndex++;
+#endif	
+        break;
+
+
+      case 6:	//|ooxxx  |
+        //|yyyyyyy|
+
+        if(TestMatch && !TestKnown)
+        {
+          ThisRegionNum = LastRegionNum;
+          regionDataThisRegion = regionDataLastRegion;
+          ThisArea = ThisEnd - ThisStart + 1;
+          LastPerimeter = LastEnd - LastStart + 1;	// to subtract
+          ThisPerimeter = 2 + 2 * ThisArea - LastPerimeter
+            + PERIMETRE_DIAGONAL + PERIMETRE_DIAGONAL * (ThisStart!=LastStart);
+          if( CandidatExterior )
+          {
+            ThisExternPerimeter = GetExternPerimeter( ThisStart, ThisEnd, ThisRow, 
+              inputImage->width, inputImage->height, 
+              imatgePerimetreExtern );
+
+
+            ThisExternPerimeter += PERIMETRE_DIAGONAL + PERIMETRE_DIAGONAL * (ThisStart!=LastStart);
+          }
+          ComputeData = 1;
+        }
+        else if(TestMatch && TestKnown)
+        {
+          LastPerimeter = LastEnd - LastStart + 1;	// to subtract
+          //ThisPerimeter = - LastPerimeter;
+          ThisPerimeter = - 2 * LastPerimeter
+            + PERIMETRE_DIAGONAL + PERIMETRE_DIAGONAL * (ThisStart!=LastStart);
+
+          if(ThisRegionNum > LastRegionNum)
+          {
+            Subsume(RegionData, HighRegionNum, SubsumedRegion, regionDataThisRegion, regionDataLastRegion, 
+              findmoments, ThisRegionNum, LastRegionNum );
+            for(int iOld = 0; iOld < MaxIndexCount; iOld++)
+            {
+              if(ThisRegion[iOld] == ThisRegionNum) ThisRegion[iOld] = LastRegionNum;
+              if(LastRegion[iOld] == ThisRegionNum) LastRegion[iOld] = LastRegionNum;
+            }					
+            ThisRegionNum = LastRegionNum;
+          }
+          else if(ThisRegionNum < LastRegionNum)
+          {
+            Subsume(RegionData, HighRegionNum, SubsumedRegion, regionDataLastRegion, regionDataThisRegion, 
+              findmoments, LastRegionNum, ThisRegionNum );
+            for(int iOld = 0; iOld < MaxIndexCount; iOld++)
+            {
+              if(ThisRegion[iOld] == LastRegionNum) ThisRegion[iOld] = ThisRegionNum;
+              if(LastRegion[iOld] == LastRegionNum) LastRegion[iOld] = ThisRegionNum;
+            }					
+            LastRegionNum = ThisRegionNum;
+          }
+        }
+
+
+        if(ThisRegionNum!=-1)
+        {
+          //afegim la cantonada a la regio
+          actualedge.x = ThisEnd;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataThisRegion->edges,&actualedge);
+          if( ThisStart - 1 != LastEnd )
+          {
+            actualedge.x = ThisStart - 1;
+            actualedge.y = ThisRow - 1;
+            cvSeqPush(regionDataThisRegion->edges,&actualedge);
+          }
+        }
+        // si hem creat un nou blob, afegim tb a l'anterior
+        if(!TestMatch && LastRegionNum!=-1 && LastRegionNum != ThisRegionNum )
+        {
+          //afegim la cantonada a la regio
+          if( ThisStart - 1 != LastEnd )
+          {
+            actualedge.x = ThisStart - 1;
+            actualedge.y = ThisRow - 1;
+            cvSeqPush(regionDataThisRegion->edges,&actualedge);
+          }
+        }					
+
+        ThisRegion[ThisIndex] = ThisRegionNum;
+        LastRegion[LastIndex] = LastRegionNum;
+        LastIndex++;
+        break;
+
+
+      case 7:	//|ooxxxxx|
+        //|yyyy   |
+
+        if(!TestMatch && !TestKnown)	// Different color and unknown => new region
+        {
+          ThisParent = LastRegionNum;
+          ThisRegionNum = ++HighRegionNum;
+          ThisArea = ThisEnd - ThisStart + 1;
+          ThisPerimeter = 2 + 2 * ThisArea;
+          RegionData.push_back( new CBlob() );
+          regionDataThisRegion = RegionData.back();
+          SubsumedRegion = NewSubsume(SubsumedRegion,HighRegionNum);
+          if( CandidatExterior )
+            ThisExternPerimeter = GetExternPerimeter( ThisStart, ThisEnd, ThisRow, 
+            inputImage->width, inputImage->height, 
+            imatgePerimetreExtern );
+
+        }
+        else if(TestMatch && !TestKnown)
+        {
+          ThisRegionNum = LastRegionNum;
+          regionDataThisRegion = regionDataLastRegion;
+          ThisArea = ThisEnd - ThisStart + 1;
+          ThisPerimeter = 2 + ThisArea;
+          LastPerimeter = ThisEnd - LastStart + 1;
+          ThisPerimeter = 2 + 2 * ThisArea - LastPerimeter
+            + PERIMETRE_DIAGONAL + PERIMETRE_DIAGONAL * (ThisStart!=LastStart);
+          if( CandidatExterior )
+          {
+            ThisExternPerimeter = GetExternPerimeter( ThisStart, ThisEnd, ThisRow, 
+              inputImage->width, inputImage->height, 
+              imatgePerimetreExtern );
+
+            ThisExternPerimeter += PERIMETRE_DIAGONAL + PERIMETRE_DIAGONAL * (ThisStart!=LastStart);
+          }
+          ComputeData = 1;
+        }
+        else if(TestMatch && TestKnown)
+        {
+          LastPerimeter = ThisEnd - LastStart + 1;	// to subtract
+          //ThisPerimeter = - LastPerimeter;
+          ThisPerimeter = - 2 * LastPerimeter
+            + PERIMETRE_DIAGONAL + PERIMETRE_DIAGONAL * (ThisStart!=LastStart);
+
+          if(ThisRegionNum > LastRegionNum)
+          {
+            Subsume(RegionData, HighRegionNum, SubsumedRegion, regionDataThisRegion, regionDataLastRegion, 
+              findmoments, ThisRegionNum, LastRegionNum );
+            for(int iOld = 0; iOld < MaxIndexCount; iOld++)
+            {
+              if(ThisRegion[iOld] == ThisRegionNum) ThisRegion[iOld] = LastRegionNum;
+              if(LastRegion[iOld] == ThisRegionNum) LastRegion[iOld] = LastRegionNum;
+            }					
+            ThisRegionNum = LastRegionNum;
+          }
+          else if(ThisRegionNum < LastRegionNum)
+          {
+            Subsume(RegionData, HighRegionNum, SubsumedRegion, regionDataLastRegion, regionDataThisRegion, 
+              findmoments, LastRegionNum, ThisRegionNum );
+            for(int iOld = 0; iOld < MaxIndexCount; iOld++)
+            {
+              if(ThisRegion[iOld] == LastRegionNum) ThisRegion[iOld] = ThisRegionNum;
+              if(LastRegion[iOld] == LastRegionNum) LastRegion[iOld] = ThisRegionNum;
+            }					
+            LastRegionNum = ThisRegionNum;
+          }
+        }
+
+        if(ThisRegionNum!=-1)
+        {
+          //afegim la cantonada a la regio
+          actualedge.x = ThisEnd;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataThisRegion->edges,&actualedge);
+          if( ThisStart - 1 != LastEnd )
+          {
+            actualedge.x = ThisStart - 1;
+            actualedge.y = ThisRow - 1;
+            cvSeqPush(regionDataThisRegion->edges,&actualedge);
+          }
+        }
+        // si hem creat un nou blob, afegim tb a l'anterior
+        if(!TestMatch && LastRegionNum!=-1 && LastRegionNum != ThisRegionNum )
+        {
+          //afegim la cantonada a la regio
+          actualedge.x = ThisEnd;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataLastRegion->edges,&actualedge);
+          if( ThisStart - 1 != LastEnd )
+          {
+            actualedge.x = ThisStart - 1;
+            actualedge.y = ThisRow - 1;
+            cvSeqPush(regionDataThisRegion->edges,&actualedge);
+          }
+        }
+
+        ThisRegion[ThisIndex] = ThisRegionNum;
+        LastRegion[LastIndex] = LastRegionNum;
+        ThisIndex++;
+        break;
+
+      case 8:	//|    xxx|
+        //|yyyy   |
+
+#ifdef B_CONNECTIVITAT_8					
+        // fusionem blobs
+        if( TestMatch )
+        {
+          if(ThisRegionNum > LastRegionNum)
+          {
+            Subsume(RegionData, HighRegionNum, SubsumedRegion, regionDataThisRegion, regionDataLastRegion, 
+              findmoments, ThisRegionNum, LastRegionNum );
+            for(int iOld = 0; iOld < MaxIndexCount; iOld++)
+            {
+              if(ThisRegion[iOld] == ThisRegionNum) ThisRegion[iOld] = LastRegionNum;
+              if(LastRegion[iOld] == ThisRegionNum) LastRegion[iOld] = LastRegionNum;
+            }					
+            ThisRegionNum = LastRegionNum;
+          }
+          else if(ThisRegionNum < LastRegionNum)
+          {
+            Subsume(RegionData, HighRegionNum, SubsumedRegion, regionDataLastRegion, regionDataThisRegion, 
+              findmoments, LastRegionNum, ThisRegionNum );
+            for(int iOld = 0; iOld < MaxIndexCount; iOld++)
+            {
+              if(ThisRegion[iOld] == LastRegionNum) ThisRegion[iOld] = ThisRegionNum;
+              if(LastRegion[iOld] == LastRegionNum) LastRegion[iOld] = ThisRegionNum;
+            }					
+            LastRegionNum = ThisRegionNum;
+          }
+
+          regionDataThisRegion->perimeter = regionDataThisRegion->perimeter + PERIMETRE_DIAGONAL*2;
+        }
+#endif
+
+        if(ThisRegionNum!=-1)
+        {
+          //afegim la cantonada a la regio
+          actualedge.x = ThisStart - 1;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataThisRegion->edges,&actualedge);
+        }
+#ifdef B_CONNECTIVITAT_8					
+        // si hem creat un nou blob, afegim tb a l'anterior
+        if(!TestMatch && LastRegionNum!=-1 && LastRegionNum != ThisRegionNum )
+        {
+#endif					
+          //afegim la cantonada a la regio
+          actualedge.x = ThisStart - 1;
+          actualedge.y = ThisRow - 1;
+          cvSeqPush(regionDataLastRegion->edges,&actualedge);
+#ifdef B_CONNECTIVITAT_8
+        }
+#endif
+
+        ThisRegion[ThisIndex] = ThisRegionNum;
+        LastRegion[LastIndex] = LastRegionNum;
+        ThisIndex++;
+#ifdef B_CONNECTIVITAT_8					
+        LastIndex--;
+#endif
+        break;
+
+      default:
+        ErrorFlag = -1;
+      }	// end switch case
+
+      // calculate the blob moments and mean gray level of the current blob (ThisRegionNum)
+      if(ComputeData > 0)
+      {
+        // compute blob moments if necessary
+        if(findmoments)
+        {
+          float ImageRow = (float) (ThisRow - 1);
+
+          for(int k = ThisStart; k <= ThisEnd; k++)
+          {
+            ThisSumX += (float) (k - 1);
+            ThisSumXX += (float) (k - 1) * (k - 1);
+          }
+
+          ThisSumXY = ThisSumX * ImageRow;
+          ThisSumY = ThisArea * ImageRow;
+          ThisSumYY = ThisSumY * ImageRow;
+
+        }
+
+        // compute the mean gray level and its std deviation 
+        if(ThisRow <= Rows )
+        {
+          pImageAux = pImage + ThisStart;
+          if(maskImage!=NULL) pMaskAux = pMask + ThisStart;
+          for(int k = ThisStart; k <= ThisEnd; k++)
+          {
+            if((k>0) && (k <= Cols))
+            {
+              if( maskImage!= NULL)
+              {
+                // nom�s es t� en compte el valor del p�xel de la
+                // imatge que queda dins de la m�scara
+                // (de pas, comptem el nombre de p�xels de la m�scara)
+                if( ((unsigned char) *pMaskAux) != PIXEL_EXTERIOR )
+                {
+                  imagevalue = (unsigned char) (*pImageAux);
+                  regionDataThisRegion->mean+=imagevalue;
+                  regionDataThisRegion->stddev+=imagevalue*imagevalue;
+                }
+                else
+                {
+                  nombre_pixels_mascara++;
+                }
+              }
+              else
+              {
+                imagevalue = (unsigned char) (*pImageAux);
+                regionDataThisRegion->mean+=imagevalue;
+                regionDataThisRegion->stddev+=imagevalue*imagevalue;
+
+              }
+            }
+            pImageAux++;
+            if(maskImage!=NULL) pMaskAux++;
+          }
+        }
+
+        // compute the min and max values of X and Y
+        if(ThisStart - 1 < (int) ThisMinX) ThisMinX = (float) (ThisStart - 1);
+        if(ThisMinX < (float) 0.0) ThisMinX = (float) 0.0;
+        if(ThisEnd > (int) ThisMaxX) ThisMaxX = (float) ThisEnd;
+
+        if(ThisRow - 1 < ThisMinY) ThisMinY = ThisRow - 1;
+        if(ThisMinY < (float) 0.0) ThisMinY = (float) 0.0;
+        if(ThisRow > ThisMaxY) ThisMaxY = ThisRow;
+      }
+
+      // put the current results into RegionData
+      if(ThisRegionNum >= 0)
+      {
+        if(ThisParent >= 0) { regionDataThisRegion->parent = (int) ThisParent; }
+        regionDataThisRegion->etiqueta = ThisRegionNum;
+        regionDataThisRegion->area += ThisArea;
+        regionDataThisRegion->perimeter += ThisPerimeter;
+        regionDataThisRegion->externPerimeter += ThisExternPerimeter;
+
+        if(ComputeData > 0)
+        {
+          if(findmoments)
+          {
+            regionDataThisRegion->sumx += ThisSumX;
+            regionDataThisRegion->sumy += ThisSumY;
+            regionDataThisRegion->sumxx += ThisSumXX;
+            regionDataThisRegion->sumyy += ThisSumYY;
+            regionDataThisRegion->sumxy += ThisSumXY;
+          }
+          regionDataThisRegion->perimeter -= LastPerimeter;
+          regionDataThisRegion->minx=MIN(regionDataThisRegion->minx,ThisMinX);
+          regionDataThisRegion->maxx=MAX(regionDataThisRegion->maxx,ThisMaxX);
+          regionDataThisRegion->miny=MIN(regionDataThisRegion->miny,ThisMinY);
+          regionDataThisRegion->maxy=MAX(regionDataThisRegion->maxy,ThisMaxY);
+        }
+        // blobs externs
+        if( CandidatExterior )
+        {
+          regionDataThisRegion->exterior = true;
+        }
+
+      }
+    }	// end Main loop
+
+    if(ErrorFlag != 0) return false;
+    // ens situem al primer pixel de la seguent fila
+    pImage = inputImage->imageData - 1 + startCol + (ThisRow+startRow) * inputImage->widthStep;
+
+    if(maskImage!=NULL)
+      pMask = maskImage->imageData - 1 + ThisRow * maskImage->widthStep;
+  }	// end Loop over all rows
+
+  // eliminem l'�rea del marc
+  // i tamb� els p�xels de la m�scara
+  // ATENCIO: PERFER: el fet de restar el nombre_pixels_mascara del
+  // blob 0 nom�s ser� cert si la m�scara t� contacte amb el marc.
+  // Si no, s'haur� de trobar quin �s el blob que cont� m�s p�xels del
+  // compte.
+  RegionData[0]->area -= ( Rows + 1 + Cols + 1 )*2 + nombre_pixels_mascara;
+
+  // eliminem el per�metre de m�s:
+  // - sense marc: 2m+2n (per�metre extern)
+  // - amb marc:   2(m+2)+2(n+2) = 2m+2n + 8
+  // (segurament no �s del tot acurat)
+  // (i amb les m�scares encara menys...)
+  RegionData[0]->perimeter -= 8.0;
+
+  // Condense the list
+  blob_vector::iterator itNew, itOld, iti;
+  CBlob *blobActual;
+
+  itNew = RegionData.begin();
+  itOld = RegionData.begin();
+  int iNew = 0;
+  for(int iOld = 0; iOld <= HighRegionNum; iOld++, itOld++)
+  {
+    if(SubsumedRegion[iOld] < 1)	// This number not subsumed
+    {
+      // Move data from old region number to new region number
+      //*RegionData[iNew] = *RegionData[iOld];
+      **itNew = **itOld;
+
+      // Update and parent pointer if necessary
+      iti = RegionData.begin();
+      for(int i = 0; i <= HighRegionNum; i++)
+      {
+        //if(RegionData[i]->parent == iOld) { RegionData[i]->parent = iNew; }
+        if((*iti)->parent == iOld) { (*iti)->parent = iNew; }
+
+        iti++;
+      }
+      iNew++;
+      itNew++;
+    }	
+  }
+
+
+  HighRegionNum = iNew - 1;				// Update where the data ends
+  RegionData[HighRegionNum]->parent = -1;	// and set end of array flag
+
+
+  if(findmoments)
+  {
+    iti = RegionData.begin();
+    // Normalize summation fields into moments 
+    for(ThisRegionNum = 0; ThisRegionNum <= HighRegionNum; ThisRegionNum++, iti++)
+    {
+      blobActual = *iti;
+
+      // Get averages
+      blobActual->sumx /= blobActual->area;
+      blobActual->sumy /= blobActual->area;
+      blobActual->sumxx /= blobActual->area;
+      blobActual->sumyy /= blobActual->area;
+      blobActual->sumxy /= blobActual->area;
+
+      // Create moments
+      blobActual->sumxx -= blobActual->sumx * blobActual->sumx;
+      blobActual->sumyy -= blobActual->sumy * blobActual->sumy;
+      blobActual->sumxy -= blobActual->sumx * blobActual->sumy;
+      if(blobActual->sumxy > -1.0E-14 && blobActual->sumxy < 1.0E-14)
+      {
+        blobActual->sumxy = (float) 0.0; // Eliminate roundoff error
+      }
+
+    }
+  }
+
+  //Get the real mean and std deviation
+  iti = RegionData.begin();
+  for(ThisRegionNum = 0; ThisRegionNum <= HighRegionNum; ThisRegionNum++, iti++)
+  {
+    blobActual = *iti;
+    if(blobActual->area > 1)
+    {
+      blobActual->stddev =
+        sqrt(
+        (
+        blobActual->stddev * blobActual->area -
+        blobActual->mean * blobActual->mean 
+        )/
+        (blobActual->area*(blobActual->area-1))
+        );
+    }
+    else
+      blobActual->stddev=0;
+
+    if(blobActual->area > 0)
+      blobActual->mean/=blobActual->area;
+    else
+      blobActual->mean = 0;
+
+  }
+  // eliminem els blobs subsumats
+  blob_vector::iterator itBlobs = RegionData.begin() + HighRegionNum + 1;
+  while( itBlobs != RegionData.end() )
+  {
+    delete *itBlobs;
+    //RegionData.erase( itBlobs );
+    itBlobs++;
+  }
+  RegionData.erase( RegionData.begin() + HighRegionNum + 1, RegionData.end() );
+
+  //free(RegionData);
+  free(SubsumedRegion);
+  delete Transition;
+  delete ThisRegion;
+  delete LastRegion;
+
+  if( imatgePerimetreExtern ) cvReleaseImage(&imatgePerimetreExtern);
+
+  return true;
+}
+
+
+int *NewSubsume(int *subsumed, int index_subsume)
+{
+  if( index_subsume == 0 )
+  {
+    subsumed = (int*)malloc(sizeof(int));
+  }
+  else
+  {
+    subsumed = (int*)realloc(subsumed,(index_subsume+1)*sizeof(int));
+  }
+  subsumed[index_subsume]=0;
+  return subsumed;
+}
+
+/**
+Fusiona dos blobs i afegeix el blob les caracter�stiques del blob RegionData[HiNum]
+al blob RegionData[LoNum]. Al final allibera el blob de RegionData[HiNum]
+*/
+void Subsume(blob_vector &RegionData,
+  int HighRegionNum,
+  int* SubsumedRegion,
+  CBlob* blobHi,
+  CBlob* blobLo,
+  bool findmoments,
+  int HiNum,
+  int LoNum)
+{
+  // cout << "\nSubsuming " << HiNum << " into " << LoNum << endl; // for debugging
+
+  int i;
+
+  blobLo->minx=MIN(blobHi->minx,blobLo->minx);
+  blobLo->miny=MIN(blobHi->miny,blobLo->miny);
+  blobLo->maxx=MAX(blobHi->maxx,blobLo->maxx);
+  blobLo->maxy=MAX(blobHi->maxy,blobLo->maxy);
+  blobLo->area+=blobHi->area;	
+  blobLo->perimeter+=blobHi->perimeter;
+  blobLo->externPerimeter += blobHi->externPerimeter;
+  blobLo->exterior = blobLo->exterior || blobHi->exterior;
+  blobLo->mean += blobHi->mean;
+  blobLo->stddev += blobHi->stddev;	
+
+  if( findmoments )
+  {
+    blobLo->sumx+=blobHi->sumx;	
+    blobLo->sumy+=blobHi->sumy;	
+    blobLo->sumxx+=blobHi->sumxx;	
+    blobLo->sumyy+=blobHi->sumyy;	
+    blobLo->sumxy+=blobHi->sumxy;
+  }
+  // Make sure no region still has subsumed region as parent
+  blob_vector::iterator it = (RegionData.begin() + HiNum + 1);
+
+  for(i = HiNum + 1; i <= HighRegionNum; i++, it++)
+  {
+    if((*it)->parent == (float) HiNum) { (*it)->parent = LoNum; }
+  }
+
+  // Mark dead region number for future compression
+  SubsumedRegion[HiNum] = 1;
+  // marquem el blob com a lliure
+  blobHi->etiqueta=-1;
+
+  // Atenci�!!!! abans d'eliminar els edges 
+  // s'han de traspassar del blob HiNum al blob LoNum
+  blobHi->CopyEdges( *blobLo );
+  blobHi->ClearEdges();
+}
+
+/**
+- FUNCI�: GetExternPerimeter
+- FUNCIONALITAT: Retorna el perimetre extern d'una run lenght
+- PAR�METRES:
+- start: columna d'inici del run
+- end: columna final del run
+- row: fila del run
+- maskImage: m�scara pels pixels externs
+- RESULTAT:
+- quantitat de perimetre extern d'un run, suposant que �s un blob 
+d'una �nica fila d'al�ada
+- RESTRICCIONS:
+- AUTOR: 
+- DATA DE CREACI�: 2006/02/27
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+double GetExternPerimeter( int start, int end, int row, int width, int height, IplImage *imatgePerimetreExtern )
+{
+  double perimeter = 0.0f;
+  char *pPerimetre;
+
+
+  // comprovem les dimensions de la imatge
+  perimeter += ( start <= 0 ) + ( end >= width - 1 );
+  if(row <= 1 ) perimeter+= start - end;
+  if(row >= height - 1 ) perimeter+= start - end;
+
+
+  // comprovem els pixels que toquen a la m�scara (si s'escau)
+  if( imatgePerimetreExtern != NULL )
+  {
+    if( row <= 0 || row >= height ) return perimeter;
+
+    if( start < 0 ) start = 1;
+    if( end >= width ) end = width - 2;
+
+    pPerimetre = imatgePerimetreExtern->imageData + (row - 1) * imatgePerimetreExtern->widthStep + start;
+    for (int x = start - 1; x <= end; x++ )
+    {
+      perimeter += *pPerimetre;
+      pPerimetre++;
+    }
+  }
+
+  return perimeter;
+}
+
+}
diff --git a/package_bgs/jmo/BlobExtraction.h b/package_bgs/jmo/BlobExtraction.h
new file mode 100644
index 0000000..157ee58
--- /dev/null
+++ b/package_bgs/jmo/BlobExtraction.h
@@ -0,0 +1,76 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+//***********************************************************//
+//* Blob analysis package  8 August 2003                    *//
+//* Version 1.0                                             *//
+//* Input: IplImage* binary image                           *//
+//* Output: attributes of each connected region             *//
+//* Author: Dave Grossman                                   *//
+//* Email: dgrossman@cdr.stanford.edu                       *//
+//* Acknowledgement: the algorithm has been around > 20 yrs *//
+//***********************************************************//
+
+
+#if !defined(_CLASSE_BLOBEXTRACTION_INCLUDED)
+#define _CLASSE_BLOBEXTRACTION_INCLUDED
+
+namespace Blob
+{
+
+//! Extreu els blobs d'una imatge
+bool BlobAnalysis(IplImage* inputImage, uchar threshold, IplImage* maskImage,
+  bool borderColor, bool findmoments, blob_vector &RegionData );
+
+
+// FUNCIONS AUXILIARS
+
+//! Fusiona dos blobs
+void Subsume(blob_vector &RegionData, int, int*, CBlob*, CBlob*, bool, int, int );
+//! Reallocata el vector auxiliar de blobs subsumats
+int *NewSubsume(int *SubSumedRegion, int elems_inbuffer);
+//! Retorna el perimetre extern d'una run lenght
+double GetExternPerimeter( int start, int end, int row, int width, int height, IplImage *maskImage );
+}
+
+#endif //_CLASSE_BLOBEXTRACTION_INCLUDED
+
diff --git a/package_bgs/jmo/BlobLibraryConfiguration.h b/package_bgs/jmo/BlobLibraryConfiguration.h
new file mode 100644
index 0000000..48119f7
--- /dev/null
+++ b/package_bgs/jmo/BlobLibraryConfiguration.h
@@ -0,0 +1,62 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+/************************************************************************
+BlobLibraryConfiguration.h
+
+FUNCIONALITAT: Configuraci� del comportament global de la llibreria
+AUTOR: Inspecta S.L.
+MODIFICACIONS (Modificaci�, Autor, Data):
+
+FUNCTIONALITY: Global configuration of the library
+AUTHOR: Inspecta S.L.
+MODIFICATIONS (Modification, Author, Date):
+
+**************************************************************************/
+
+//! Indica si es volen fer servir les MatrixCV o no
+//! Use/Not use the MatrixCV class
+//#define MATRIXCV_ACTIU
+
+// Uses/not use the blob object factory
+//#define BLOB_OBJECT_FACTORY
+
diff --git a/package_bgs/jmo/BlobResult.cpp b/package_bgs/jmo/BlobResult.cpp
new file mode 100644
index 0000000..fbd312a
--- /dev/null
+++ b/package_bgs/jmo/BlobResult.cpp
@@ -0,0 +1,920 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+/************************************************************************
+BlobResult.cpp
+
+FUNCIONALITAT: Implementaci� de la classe CBlobResult
+AUTOR: Inspecta S.L.
+MODIFICACIONS (Modificaci�, Autor, Data):
+
+**************************************************************************/
+
+#include <limits.h>
+#include <stdio.h>
+#include <functional>
+#include <algorithm>
+#include "BlobResult.h"
+#include "BlobExtraction.h"
+#ifdef _DEBUG
+#include <afx.h>			//suport per a CStrings
+#include <afxwin.h>			//suport per a AfxMessageBox
+#endif
+
+/**************************************************************************
+Constructors / Destructors
+**************************************************************************/
+
+namespace Blob
+{
+
+/**
+- FUNCI�: CBlobResult
+- FUNCIONALITAT: Constructor estandard.
+- PAR�METRES:
+- RESULTAT:
+- Crea un CBlobResult sense cap blob
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 20-07-2004.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlobResult
+- FUNCTIONALITY: Standard constructor
+- PARAMETERS:
+- RESULT:
+- creates an empty set of blobs
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlobResult::CBlobResult()
+{
+  m_blobs = blob_vector();
+}
+
+/**
+- FUNCI�: CBlobResult
+- FUNCIONALITAT: Constructor a partir d'una imatge. Inicialitza la seq��ncia de blobs 
+amb els blobs resultants de l'an�lisi de blobs de la imatge.
+- PAR�METRES:
+- source: imatge d'on s'extreuran els blobs
+- mask: m�scara a aplicar. Nom�s es calcularan els blobs on la m�scara sigui 
+diferent de 0. Els blobs que toquin a un pixel 0 de la m�scara seran 
+considerats exteriors.
+- threshold: llindar que s'aplicar� a la imatge source abans de calcular els blobs
+- findmoments: indica si s'han de calcular els moments de cada blob
+- RESULTAT:
+- objecte CBlobResult amb els blobs de la imatge source
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlob
+- FUNCTIONALITY: Constructor from an image. Fills an object with all the blobs in
+the image
+- PARAMETERS:
+- source: image to extract the blobs from
+- mask: optional mask to apply. The blobs will be extracted where the mask is
+not 0. All the neighbouring blobs where the mask is 0 will be extern blobs
+- threshold: threshold level to apply to the image before computing blobs
+- findmoments: true to calculate the blob moments (slower)
+- RESULT:
+- object with all the blobs in the image. It throws an EXCEPCIO_CALCUL_BLOBS
+if some error appears in the BlobAnalysis function
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlobResult::CBlobResult(IplImage *source, IplImage *mask, int threshold, bool findmoments)
+{
+  bool success;
+
+  try
+  {
+    // cridem la funci� amb el marc a true=1=blanc (aix� no unir� els blobs externs)
+    success = BlobAnalysis(source,(uchar)threshold,mask,true,findmoments, m_blobs );
+  }
+  catch(...)
+  {
+    success = false;
+  }
+
+  if( !success ) throw EXCEPCIO_CALCUL_BLOBS;
+}
+
+/**
+- FUNCI�: CBlobResult
+- FUNCIONALITAT: Constructor de c�pia. Inicialitza la seq��ncia de blobs 
+amb els blobs del par�metre.
+- PAR�METRES:
+- source: objecte que es copiar�
+- RESULTAT:
+- objecte CBlobResult amb els blobs de l'objecte source
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlobResult
+- FUNCTIONALITY: Copy constructor
+- PARAMETERS:
+- source: object to copy
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlobResult::CBlobResult( const CBlobResult &source )
+{
+  m_blobs = blob_vector( source.GetNumBlobs() );
+
+  // creem el nou a partir del passat com a par�metre
+  m_blobs = blob_vector( source.GetNumBlobs() );
+  // copiem els blobs de l'origen a l'actual
+  blob_vector::const_iterator pBlobsSrc = source.m_blobs.begin();
+  blob_vector::iterator pBlobsDst = m_blobs.begin();
+
+  while( pBlobsSrc != source.m_blobs.end() )
+  {
+    // no podem cridar a l'operador = ja que blob_vector �s un 
+    // vector de CBlob*. Per tant, creem un blob nou a partir del
+    // blob original
+    *pBlobsDst = new CBlob(**pBlobsSrc);
+    pBlobsSrc++;
+    pBlobsDst++;
+  }
+}
+
+
+
+/**
+- FUNCI�: ~CBlobResult
+- FUNCIONALITAT: Destructor estandard.
+- PAR�METRES:
+- RESULTAT:
+- Allibera la mem�ria reservada de cadascun dels blobs de la classe
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: ~CBlobResult
+- FUNCTIONALITY: Destructor
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlobResult::~CBlobResult()
+{
+  ClearBlobs();
+}
+
+/**************************************************************************
+Operadors / Operators
+**************************************************************************/
+
+
+/**
+- FUNCI�: operador =
+- FUNCIONALITAT: Assigna un objecte source a l'actual
+- PAR�METRES:
+- source: objecte a assignar
+- RESULTAT:
+- Substitueix els blobs actuals per els de l'objecte source
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: Assigment operator
+- FUNCTIONALITY: 
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlobResult& CBlobResult::operator=(const CBlobResult& source)
+{
+  // si ja s�n el mateix, no cal fer res
+  if (this != &source)
+  {
+    // alliberem el conjunt de blobs antic
+    for( int i = 0; i < GetNumBlobs(); i++ )
+    {
+      delete m_blobs[i];
+    }
+    m_blobs.clear();
+    // creem el nou a partir del passat com a par�metre
+    m_blobs = blob_vector( source.GetNumBlobs() );
+    // copiem els blobs de l'origen a l'actual
+    blob_vector::const_iterator pBlobsSrc = source.m_blobs.begin();
+    blob_vector::iterator pBlobsDst = m_blobs.begin();
+
+    while( pBlobsSrc != source.m_blobs.end() )
+    {
+      // no podem cridar a l'operador = ja que blob_vector �s un 
+      // vector de CBlob*. Per tant, creem un blob nou a partir del
+      // blob original
+      *pBlobsDst = new CBlob(**pBlobsSrc);
+      pBlobsSrc++;
+      pBlobsDst++;
+    }
+  }
+  return *this;
+}
+
+
+/**
+- FUNCI�: operador +
+- FUNCIONALITAT: Concatena els blobs de dos CBlobResult
+- PAR�METRES:
+- source: d'on s'agafaran els blobs afegits a l'actual
+- RESULTAT:
+- retorna un nou CBlobResult amb els dos CBlobResult concatenats
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- NOTA: per la implementaci�, els blobs del par�metre es posen en ordre invers
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: + operator
+- FUNCTIONALITY: Joins the blobs in source with the current ones
+- PARAMETERS:
+- source: object to copy the blobs
+- RESULT:
+- object with the actual blobs and the source blobs
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlobResult CBlobResult::operator+( const CBlobResult& source )
+{	
+  //creem el resultat a partir dels blobs actuals
+  CBlobResult resultat( *this );
+
+  // reservem mem�ria per als nous blobs
+  resultat.m_blobs.resize( resultat.GetNumBlobs() + source.GetNumBlobs() );
+
+  // declarem els iterador per rec�rrer els blobs d'origen i desti
+  blob_vector::const_iterator pBlobsSrc = source.m_blobs.begin();
+  blob_vector::iterator pBlobsDst = resultat.m_blobs.end();
+
+  // insertem els blobs de l'origen a l'actual
+  while( pBlobsSrc != source.m_blobs.end() )
+  {
+    pBlobsDst--;
+    *pBlobsDst = new CBlob(**pBlobsSrc);
+    pBlobsSrc++;
+  }
+
+  return resultat;
+}
+
+/**************************************************************************
+Operacions / Operations
+**************************************************************************/
+
+/**
+- FUNCI�: AddBlob
+- FUNCIONALITAT: Afegeix un blob al conjunt
+- PAR�METRES:
+- blob: blob a afegir
+- RESULTAT:
+- modifica el conjunt de blobs actual
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 2006/03/01
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+void CBlobResult::AddBlob( CBlob *blob )
+{
+  if( blob != NULL )
+    m_blobs.push_back( new CBlob( blob ) );
+}
+
+
+#ifdef MATRIXCV_ACTIU
+
+/**
+- FUNCI�: GetResult
+- FUNCIONALITAT: Calcula el resultat especificat sobre tots els blobs de la classe
+- PAR�METRES:
+- evaluador: Qualsevol objecte derivat de COperadorBlob
+- RESULTAT:
+- Retorna un array de double's amb el resultat per cada blob
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: GetResult
+- FUNCTIONALITY: Computes the function evaluador on all the blobs of the class
+and returns a vector with the result
+- PARAMETERS:
+- evaluador: function to apply to each blob (any object derived from the 
+COperadorBlob class )
+- RESULT:
+- vector with all the results in the same order as the blobs
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double_vector CBlobResult::GetResult( funcio_calculBlob *evaluador ) const
+{
+  if( GetNumBlobs() <= 0 )
+  {
+    return double_vector();
+  }
+
+  // definim el resultat
+  double_vector result = double_vector( GetNumBlobs() );
+  // i iteradors sobre els blobs i el resultat
+  double_vector::iterator itResult = result.GetIterator();
+  blob_vector::const_iterator itBlobs = m_blobs.begin();
+
+  // avaluem la funci� en tots els blobs
+  while( itBlobs != m_blobs.end() )
+  {
+    *itResult = (*evaluador)(**itBlobs);
+    itBlobs++;
+    itResult++;
+  }
+  return result;
+}
+#endif
+
+/**
+- FUNCI�: GetSTLResult
+- FUNCIONALITAT: Calcula el resultat especificat sobre tots els blobs de la classe
+- PAR�METRES:
+- evaluador: Qualsevol objecte derivat de COperadorBlob
+- RESULTAT:
+- Retorna un array de double's STL amb el resultat per cada blob
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: GetResult
+- FUNCTIONALITY: Computes the function evaluador on all the blobs of the class
+and returns a vector with the result
+- PARAMETERS:
+- evaluador: function to apply to each blob (any object derived from the 
+COperadorBlob class )
+- RESULT:
+- vector with all the results in the same order as the blobs
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double_stl_vector CBlobResult::GetSTLResult( funcio_calculBlob *evaluador ) const
+{
+  if( GetNumBlobs() <= 0 )
+  {
+    return double_stl_vector();
+  }
+
+  // definim el resultat
+  double_stl_vector result = double_stl_vector( GetNumBlobs() );
+  // i iteradors sobre els blobs i el resultat
+  double_stl_vector::iterator itResult = result.begin();
+  blob_vector::const_iterator itBlobs = m_blobs.begin();
+
+  // avaluem la funci� en tots els blobs
+  while( itBlobs != m_blobs.end() )
+  {
+    *itResult = (*evaluador)(**itBlobs);
+    itBlobs++;
+    itResult++;
+  }
+  return result;
+}
+
+/**
+- FUNCI�: GetNumber
+- FUNCIONALITAT: Calcula el resultat especificat sobre un �nic blob de la classe
+- PAR�METRES:
+- evaluador: Qualsevol objecte derivat de COperadorBlob
+- indexblob: n�mero de blob del que volem calcular el resultat.
+- RESULTAT:
+- Retorna un double amb el resultat
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: GetNumber
+- FUNCTIONALITY: Computes the function evaluador on a blob of the class
+- PARAMETERS:
+- indexBlob: index of the blob to compute the function
+- evaluador: function to apply to each blob (any object derived from the 
+COperadorBlob class )
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobResult::GetNumber( int indexBlob, funcio_calculBlob *evaluador ) const
+{
+  if( indexBlob < 0 || indexBlob >= GetNumBlobs() )
+    RaiseError( EXCEPTION_BLOB_OUT_OF_BOUNDS );
+  return (*evaluador)( *m_blobs[indexBlob] );
+}
+
+/////////////////////////// FILTRAT DE BLOBS ////////////////////////////////////
+
+/**
+- FUNCI�: Filter
+- FUNCIONALITAT: Filtra els blobs de la classe i deixa el resultat amb nom�s 
+els blobs que han passat el filtre.
+El filtrat es basa en especificar condicions sobre un resultat dels blobs
+i seleccionar (o excloure) aquells blobs que no compleixen una determinada
+condicio
+- PAR�METRES:
+- dst: variable per deixar els blobs filtrats
+- filterAction:	acci� de filtrat. Incloure els blobs trobats (B_INCLUDE),
+o excloure els blobs trobats (B_EXCLUDE)
+- evaluador: Funci� per evaluar els blobs (qualsevol objecte derivat de COperadorBlob
+- Condition: tipus de condici� que ha de superar la mesura (FilterType) 
+sobre cada blob per a ser considerat.
+B_EQUAL,B_NOT_EQUAL,B_GREATER,B_LESS,B_GREATER_OR_EQUAL,
+B_LESS_OR_EQUAL,B_INSIDE,B_OUTSIDE
+- LowLimit:  valor num�ric per a la comparaci� (Condition) de la mesura (FilterType)
+- HighLimit: valor num�ric per a la comparaci� (Condition) de la mesura (FilterType)
+(nom�s t� sentit per a aquelles condicions que tenen dos valors 
+(B_INSIDE, per exemple).
+- RESULTAT:
+- Deixa els blobs resultants del filtrat a destination
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: Filter
+- FUNCTIONALITY: Get some blobs from the class based on conditions on measures
+of the blobs. 
+- PARAMETERS:
+- dst: where to store the selected blobs
+- filterAction:	B_INCLUDE: include the blobs which pass the filter in the result 
+B_EXCLUDE: exclude the blobs which pass the filter in the result 
+- evaluador: Object to evaluate the blob
+- Condition: How to decide if  the result returned by evaluador on each blob
+is included or not. It can be:
+B_EQUAL,B_NOT_EQUAL,B_GREATER,B_LESS,B_GREATER_OR_EQUAL,
+B_LESS_OR_EQUAL,B_INSIDE,B_OUTSIDE
+- LowLimit:  numerical value to evaluate the Condition on evaluador(blob)
+- HighLimit: numerical value to evaluate the Condition on evaluador(blob).
+Only useful for B_INSIDE and B_OUTSIDE
+- RESULT:
+- It returns on dst the blobs that accomplish (B_INCLUDE) or discards (B_EXCLUDE)
+the Condition on the result returned by evaluador on each blob
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+void CBlobResult::Filter(CBlobResult &dst, 
+  int filterAction, 
+  funcio_calculBlob *evaluador, 
+  int condition, 
+  double lowLimit, double highLimit /*=0*/)
+
+{
+  int i, numBlobs;
+  bool resultavaluacio;
+  double_stl_vector avaluacioBlobs;
+  double_stl_vector::iterator itavaluacioBlobs;
+
+  if( GetNumBlobs() <= 0 ) return;
+  if( !evaluador ) return;
+  //avaluem els blobs amb la funci� pertinent	
+  avaluacioBlobs = GetSTLResult(evaluador);
+  itavaluacioBlobs = avaluacioBlobs.begin();
+  numBlobs = GetNumBlobs();
+  switch(condition)
+  {
+  case B_EQUAL:
+    for(i=0;i<numBlobs;i++, itavaluacioBlobs++)
+    {
+      resultavaluacio= *itavaluacioBlobs == lowLimit;
+      if( ( resultavaluacio && filterAction == B_INCLUDE ) ||
+        ( !resultavaluacio && filterAction == B_EXCLUDE ))
+      {
+        dst.m_blobs.push_back( new CBlob( GetBlob( i ) ));
+      }				
+    }
+    break;
+  case B_NOT_EQUAL:
+    for(i=0;i<numBlobs;i++, itavaluacioBlobs++)
+    {
+      resultavaluacio = *itavaluacioBlobs != lowLimit;
+      if( ( resultavaluacio && filterAction == B_INCLUDE ) ||
+        ( !resultavaluacio && filterAction == B_EXCLUDE ))
+      {
+        dst.m_blobs.push_back( new CBlob( GetBlob( i ) ));
+      }
+    }
+    break;
+  case B_GREATER:
+    for(i=0;i<numBlobs;i++, itavaluacioBlobs++)
+    {
+      resultavaluacio= *itavaluacioBlobs > lowLimit;
+      if( ( resultavaluacio && filterAction == B_INCLUDE ) ||
+        ( !resultavaluacio && filterAction == B_EXCLUDE ))
+      {
+        dst.m_blobs.push_back( new CBlob( GetBlob( i ) ));
+      }
+    }
+    break;
+  case B_LESS:
+    for(i=0;i<numBlobs;i++, itavaluacioBlobs++)
+    {
+      resultavaluacio= *itavaluacioBlobs < lowLimit;
+      if( ( resultavaluacio && filterAction == B_INCLUDE ) ||
+        ( !resultavaluacio && filterAction == B_EXCLUDE ))
+      {
+        dst.m_blobs.push_back( new CBlob( GetBlob( i ) ));
+      }
+    }
+    break;
+  case B_GREATER_OR_EQUAL:
+    for(i=0;i<numBlobs;i++, itavaluacioBlobs++)
+    {
+      resultavaluacio= *itavaluacioBlobs>= lowLimit;
+      if( ( resultavaluacio && filterAction == B_INCLUDE ) ||
+        ( !resultavaluacio && filterAction == B_EXCLUDE ))
+      {
+        dst.m_blobs.push_back( new CBlob( GetBlob( i ) ));
+      }
+    }
+    break;
+  case B_LESS_OR_EQUAL:
+    for(i=0;i<numBlobs;i++, itavaluacioBlobs++)
+    {
+      resultavaluacio= *itavaluacioBlobs <= lowLimit;
+      if( ( resultavaluacio && filterAction == B_INCLUDE ) ||
+        ( !resultavaluacio && filterAction == B_EXCLUDE ))
+      {
+        dst.m_blobs.push_back( new CBlob( GetBlob( i ) ));
+      }
+    }
+    break;
+  case B_INSIDE:
+    for(i=0;i<numBlobs;i++, itavaluacioBlobs++)
+    {
+      resultavaluacio=( *itavaluacioBlobs >= lowLimit) && ( *itavaluacioBlobs <= highLimit); 
+      if( ( resultavaluacio && filterAction == B_INCLUDE ) ||
+        ( !resultavaluacio && filterAction == B_EXCLUDE ))
+      {
+        dst.m_blobs.push_back( new CBlob( GetBlob( i ) ));
+      }
+    }
+    break;
+  case B_OUTSIDE:
+    for(i=0;i<numBlobs;i++, itavaluacioBlobs++)
+    {
+      resultavaluacio=( *itavaluacioBlobs < lowLimit) || ( *itavaluacioBlobs > highLimit); 
+      if( ( resultavaluacio && filterAction == B_INCLUDE ) ||
+        ( !resultavaluacio && filterAction == B_EXCLUDE ))
+      {
+        dst.m_blobs.push_back( new CBlob( GetBlob( i ) ));
+      }
+    }
+    break;
+  }
+
+
+  // en cas de voler filtrar un CBlobResult i deixar-ho en el mateix CBlobResult
+  // ( operacio inline )
+  if( &dst == this ) 
+  {
+    // esborrem els primers blobs ( que s�n els originals )
+    // ja que els tindrem replicats al final si passen el filtre
+    blob_vector::iterator itBlobs = m_blobs.begin();
+    for( int i = 0; i < numBlobs; i++ )
+    {
+      delete *itBlobs;
+      itBlobs++;
+    }
+    m_blobs.erase( m_blobs.begin(), itBlobs );
+  }
+}
+
+
+/**
+- FUNCI�: GetBlob
+- FUNCIONALITAT: Retorna un blob si aquest existeix (index != -1)
+- PAR�METRES:
+- indexblob: index del blob a retornar
+- RESULTAT:
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/*
+- FUNCTION: GetBlob
+- FUNCTIONALITY: Gets the n-th blob (without ordering the blobs)
+- PARAMETERS:
+- indexblob: index in the blob array
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlob CBlobResult::GetBlob(int indexblob) const
+{	
+  if( indexblob < 0 || indexblob >= GetNumBlobs() )
+    RaiseError( EXCEPTION_BLOB_OUT_OF_BOUNDS );
+
+  return *m_blobs[indexblob];
+}
+CBlob *CBlobResult::GetBlob(int indexblob)
+{	
+  if( indexblob < 0 || indexblob >= GetNumBlobs() )
+    RaiseError( EXCEPTION_BLOB_OUT_OF_BOUNDS );
+
+  return m_blobs[indexblob];
+}
+
+/**
+- FUNCI�: GetNthBlob
+- FUNCIONALITAT: Retorna l'en�ssim blob segons un determinat criteri
+- PAR�METRES:
+- criteri: criteri per ordenar els blobs (objectes derivats de COperadorBlob)
+- nBlob: index del blob a retornar
+- dst: on es retorna el resultat
+- RESULTAT:
+- retorna el blob nBlob a dst ordenant els blobs de la classe segons el criteri
+en ordre DESCENDENT. Per exemple, per obtenir el blob major:
+GetNthBlob( CBlobGetArea(), 0, blobMajor );
+GetNthBlob( CBlobGetArea(), 1, blobMajor ); (segon blob m�s gran)
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/*
+- FUNCTION: GetNthBlob
+- FUNCTIONALITY: Gets the n-th blob ordering first the blobs with some criteria
+- PARAMETERS:
+- criteri: criteria to order the blob array
+- nBlob: index of the returned blob in the ordered blob array
+- dst: where to store the result
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+void CBlobResult::GetNthBlob( funcio_calculBlob *criteri, int nBlob, CBlob &dst ) const
+{
+  // verifiquem que no estem accedint fora el vector de blobs
+  if( nBlob < 0 || nBlob >= GetNumBlobs() )
+  {
+    //RaiseError( EXCEPTION_BLOB_OUT_OF_BOUNDS );
+    dst = CBlob();
+    return;
+  }
+
+  double_stl_vector avaluacioBlobs, avaluacioBlobsOrdenat;
+  double valorEnessim;
+
+  //avaluem els blobs amb la funci� pertinent	
+  avaluacioBlobs = GetSTLResult(criteri);
+
+  avaluacioBlobsOrdenat = double_stl_vector( GetNumBlobs() );
+
+  // obtenim els nBlob primers resultats (en ordre descendent)
+  std::partial_sort_copy( avaluacioBlobs.begin(), 
+    avaluacioBlobs.end(),
+    avaluacioBlobsOrdenat.begin(), 
+    avaluacioBlobsOrdenat.end(),
+    std::greater<double>() );
+
+  valorEnessim = avaluacioBlobsOrdenat[nBlob];
+
+  // busquem el primer blob que t� el valor n-ssim
+  double_stl_vector::const_iterator itAvaluacio = avaluacioBlobs.begin();
+
+  bool trobatBlob = false;
+  int indexBlob = 0;
+  while( itAvaluacio != avaluacioBlobs.end() && !trobatBlob )
+  {
+    if( *itAvaluacio == valorEnessim )
+    {
+      trobatBlob = true;
+      dst = CBlob( GetBlob(indexBlob));
+    }
+    itAvaluacio++;
+    indexBlob++;
+  }
+}
+
+/**
+- FUNCI�: ClearBlobs
+- FUNCIONALITAT: Elimina tots els blobs de l'objecte
+- PAR�METRES:
+- RESULTAT: 
+- Allibera tota la mem�ria dels blobs
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s Navarra
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/*
+- FUNCTION: ClearBlobs
+- FUNCTIONALITY: Clears all the blobs from the object and releases all its memory
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+void CBlobResult::ClearBlobs()
+{
+  /*for( int i = 0; i < GetNumBlobs(); i++ )
+  {
+  delete m_blobs[i];
+  }*/
+  blob_vector::iterator itBlobs = m_blobs.begin();
+  while( itBlobs != m_blobs.end() )
+  {
+    delete *itBlobs;
+    itBlobs++;
+  }
+
+  m_blobs.clear();
+}
+
+/**
+- FUNCI�: RaiseError
+- FUNCIONALITAT: Funci� per a notificar errors al l'usuari (en debug) i llen�a
+les excepcions
+- PAR�METRES:
+- errorCode: codi d'error
+- RESULTAT: 
+- Ensenya un missatge a l'usuari (en debug) i llen�a una excepci�
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s Navarra
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/*
+- FUNCTION: RaiseError
+- FUNCTIONALITY: Error handling function
+- PARAMETERS:
+- errorCode: reason of the error
+- RESULT:
+- in _DEBUG version, shows a message box with the error. In release is silent.
+In both cases throws an exception with the error.
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+void CBlobResult::RaiseError(const int errorCode) const
+{
+  // estem en mode debug?
+#ifdef _DEBUG
+  CString msg, format = "Error en CBlobResult: %s";
+
+  switch (errorCode)
+  {
+  case EXCEPTION_BLOB_OUT_OF_BOUNDS:
+    msg.Format(format, "Intentant accedir a un blob no existent");
+    break;
+  default:
+    msg.Format(format, "Codi d'error desconegut");
+    break;
+  }
+
+  AfxMessageBox(msg);
+
+#endif
+  throw errorCode;
+}
+
+
+
+/**************************************************************************
+Auxiliars / Auxiliary functions
+**************************************************************************/
+
+
+/**
+- FUNCI�: PrintBlobs
+- FUNCIONALITAT: Escriu els par�metres (�rea, per�metre, exterior, mitjana) 
+de tots els blobs a un fitxer.
+- PAR�METRES:
+- nom_fitxer: path complet del fitxer amb el resultat
+- RESULTAT:
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/*
+- FUNCTION: PrintBlobs
+- FUNCTIONALITY: Prints some blob features in an ASCII file
+- PARAMETERS:
+- nom_fitxer: full path + filename to generate
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+void CBlobResult::PrintBlobs( char *nom_fitxer ) const
+{
+  double_stl_vector area, /*perimetre,*/ exterior, mitjana, compacitat, longitud, 
+    externPerimeter, perimetreConvex, perimetre;
+  int i;
+  FILE *fitxer_sortida;
+
+  area      = GetSTLResult( CBlobGetArea());
+  perimetre = GetSTLResult( CBlobGetPerimeter());
+  exterior  = GetSTLResult( CBlobGetExterior());
+  mitjana   = GetSTLResult( CBlobGetMean());
+  compacitat = GetSTLResult(CBlobGetCompactness());
+  longitud  = GetSTLResult( CBlobGetLength());
+  externPerimeter = GetSTLResult( CBlobGetExternPerimeter());
+  perimetreConvex = GetSTLResult( CBlobGetHullPerimeter());
+
+  fitxer_sortida = fopen( nom_fitxer, "w" );
+
+  for(i=0; i<GetNumBlobs(); i++)
+  {
+    fprintf( fitxer_sortida, "blob %d ->\t a=%7.0f\t p=%8.2f (%8.2f extern)\t pconvex=%8.2f\t ext=%.0f\t m=%7.2f\t c=%3.2f\t l=%8.2f\n",
+      i, area[i], perimetre[i], externPerimeter[i], perimetreConvex[i], exterior[i], mitjana[i], compacitat[i], longitud[i] );
+  }
+  fclose( fitxer_sortida );
+
+}
+
+}
diff --git a/package_bgs/jmo/BlobResult.h b/package_bgs/jmo/BlobResult.h
new file mode 100644
index 0000000..ef1fd40
--- /dev/null
+++ b/package_bgs/jmo/BlobResult.h
@@ -0,0 +1,213 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+ * Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+/************************************************************************
+  			BlobResult.h
+  			
+FUNCIONALITAT: Definici� de la classe CBlobResult
+AUTOR: Inspecta S.L.
+MODIFICACIONS (Modificaci�, Autor, Data):
+
+FUNCTIONALITY: Definition of the CBlobResult class
+AUTHOR: Inspecta S.L.
+MODIFICATIONS (Modification, Author, Date):
+
+**************************************************************************/
+
+
+#if !defined(_CLASSE_BLOBRESULT_INCLUDED)
+#define _CLASSE_BLOBRESULT_INCLUDED
+
+#if _MSC_VER > 1000 
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "BlobLibraryConfiguration.h"
+#include <math.h>
+#include "cxcore.h"
+
+#ifdef MATRIXCV_ACTIU
+	#include "matrixCV.h"
+#else
+	// llibreria STL
+	#include "vector"
+	//! Vector de doubles
+	typedef std::vector<double> double_stl_vector;
+#endif
+
+#include <vector>		// vectors de la STL
+#include <functional>
+#include "blob.h"
+
+/**************************************************************************
+	Filtres / Filters
+**************************************************************************/
+
+//! accions que es poden fer amb els filtres
+//! Actions performed by a filter (include or exclude blobs)
+#define B_INCLUDE				1L
+#define B_EXCLUDE				2L
+
+//! condicions sobre els filtres
+//! Conditions to apply the filters
+#define B_EQUAL					3L
+#define B_NOT_EQUAL				4L
+#define B_GREATER				5L
+#define B_LESS					6L
+#define B_GREATER_OR_EQUAL		7L
+#define B_LESS_OR_EQUAL			8L
+#define B_INSIDE			    9L
+#define B_OUTSIDE			    10L
+
+
+/**************************************************************************
+	Excepcions / Exceptions
+**************************************************************************/
+
+//! Excepcions llen�ades per les funcions:
+#define EXCEPTION_BLOB_OUT_OF_BOUNDS	1000
+#define EXCEPCIO_CALCUL_BLOBS			1001
+
+namespace Blob
+{
+
+//! definici� de que es un vector de blobs
+typedef std::vector<CBlob*>	blob_vector;
+
+/** 
+	Classe que cont� un conjunt de blobs i permet extreure'n propietats 
+	o filtrar-los segons determinats criteris.
+	Class to calculate the blobs of an image and calculate some properties 
+	on them. Also, the class provides functions to filter the blobs using
+	some criteria.
+*/
+class CBlobResult  
+{
+public:
+
+	//! constructor estandard, crea un conjunt buit de blobs
+	//! Standard constructor, it creates an empty set of blobs
+	CBlobResult();
+	//! constructor a partir d'una imatge
+	//! Image constructor, it creates an object with the blobs of the image
+	CBlobResult(IplImage *source, IplImage *mask, int threshold, bool findmoments);
+	//! constructor de c�pia
+	//! Copy constructor
+	CBlobResult( const CBlobResult &source );
+	//! Destructor
+	virtual ~CBlobResult();
+
+	//! operador = per a fer assignacions entre CBlobResult
+	//! Assigment operator
+	CBlobResult& operator=(const CBlobResult& source);
+	//! operador + per concatenar dos CBlobResult
+	//! Addition operator to concatenate two sets of blobs
+	CBlobResult operator+( const CBlobResult& source );
+	
+	//! Afegeix un blob al conjunt
+	//! Adds a blob to the set of blobs
+	void AddBlob( CBlob *blob );
+
+#ifdef MATRIXCV_ACTIU
+	//! Calcula un valor sobre tots els blobs de la classe retornant una MatrixCV
+	//! Computes some property on all the blobs of the class
+	double_vector GetResult( funcio_calculBlob *evaluador ) const;
+#endif
+	//! Calcula un valor sobre tots els blobs de la classe retornant un std::vector<double>
+	//! Computes some property on all the blobs of the class
+	double_stl_vector GetSTLResult( funcio_calculBlob *evaluador ) const;
+	
+	//! Calcula un valor sobre un blob de la classe
+	//! Computes some property on one blob of the class
+	double GetNumber( int indexblob, funcio_calculBlob *evaluador ) const;
+
+	//! Retorna aquells blobs que compleixen les condicions del filtre en el destination 
+	//! Filters the blobs of the class using some property
+	void Filter(CBlobResult &dst,
+				int filterAction, funcio_calculBlob *evaluador, 
+				int condition, double lowLimit, double highLimit = 0 );
+			
+	//! Retorna l'en�ssim blob segons un determinat criteri
+	//! Sorts the blobs of the class acording to some criteria and returns the n-th blob
+	void GetNthBlob( funcio_calculBlob *criteri, int nBlob, CBlob &dst ) const;
+	
+	//! Retorna el blob en�ssim
+	//! Gets the n-th blob of the class ( without sorting )
+	CBlob GetBlob(int indexblob) const;
+	CBlob *GetBlob(int indexblob);
+	
+	//! Elimina tots els blobs de l'objecte
+	//! Clears all the blobs of the class
+	void ClearBlobs();
+
+	//! Escriu els blobs a un fitxer
+	//! Prints some features of all the blobs in a file
+	void PrintBlobs( char *nom_fitxer ) const;
+
+
+//Metodes GET/SET
+
+	//! Retorna el total de blobs
+	//! Gets the total number of blobs
+	int GetNumBlobs() const 
+	{ 
+		return(m_blobs.size()); 
+	}
+
+
+private:
+
+	//! Funci� per gestionar els errors
+	//! Function to manage the errors
+	void RaiseError(const int errorCode) const;
+
+protected:
+
+	//! Vector amb els blobs
+	//! Vector with all the blobs
+	blob_vector		m_blobs;
+};
+
+}
+
+#endif // !defined(_CLASSE_BLOBRESULT_INCLUDED)
+
diff --git a/package_bgs/jmo/CMultiLayerBGS.cpp b/package_bgs/jmo/CMultiLayerBGS.cpp
new file mode 100644
index 0000000..134a24c
--- /dev/null
+++ b/package_bgs/jmo/CMultiLayerBGS.cpp
@@ -0,0 +1,2128 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+// BackgroundSubtraction.cpp: implementation of the CMultiLayerBGS class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "CMultiLayerBGS.h"
+
+#include <ctime>						// clock
+#include <cstdlib>						// C standard library
+#include <cstdio>						// C I/O (for sscanf)
+#include <cstring>						// string manipulation
+#include <fstream>						// file I/O
+#include <cmath>						// math includes
+#include <iostream>                                             // I/O streams
+
+using namespace Blob;
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CMultiLayerBGS::CMultiLayerBGS() {
+  m_nMaxLBPModeNum = MAX_LBP_MODE_NUM;
+
+  m_fModeUpdatingLearnRate = MODE_UPDATING_LEARN_RATE;
+  m_f1_ModeUpdatingLearnRate = 1.0f - m_fModeUpdatingLearnRate;
+
+  m_fWeightUpdatingLearnRate = WEIGHT_UPDATING_LEARN_RATE;
+  m_f1_WeightUpdatingLearnRate = 1.0f - m_fWeightUpdatingLearnRate;
+
+  m_fRobustColorOffset = ROBUST_COLOR_OFFSET;
+
+  m_fLowInitialModeWeight = LOW_INITIAL_MODE_WEIGHT;
+
+  m_fPatternColorDistBgThreshold = PATTERN_COLOR_DIST_BACKGROUND_THRESHOLD;
+  m_fPatternColorDistBgUpdatedThreshold = PATTERN_COLOR_DIST_BACKGROUND_THRESHOLD;
+
+  m_fBackgroundModelPercent = BACKGROUND_MODEL_PERCENT;
+
+  m_nPatternDistSmoothNeigHalfSize = PATTERN_DIST_SMOOTH_NEIG_HALF_SIZE;
+  m_fPatternDistConvGaussianSigma = PATTERN_DIST_CONV_GAUSSIAN_SIGMA;
+
+  m_fRobustShadowRate = ROBUST_SHADOW_RATE;
+  m_fRobustHighlightRate = ROBUST_HIGHLIGHT_RATE;
+
+  m_nCurImgFrameIdx = 0;
+
+  m_pBkMaskImg = NULL;
+
+  m_bUsedColorLBP = false;
+  m_bUsedGradImage = false;
+
+  m_fMinLBPBinaryProb = 0.1f;
+  m_f1_MinLBPBinaryProb = 1.0f - m_fMinLBPBinaryProb;
+
+  m_pOrgImg = m_pFgImg = m_pBgImg = m_pFgMaskImg = m_pBgDistImg = m_pEdgeImg = NULL;
+  m_ppOrgLBPImgs = NULL;
+
+  m_disableLearning = false;
+  m_fSigmaS = 3.0f;
+  m_fSigmaR = 0.1f;
+
+  m_fTextureWeight = 0.5f;
+  m_fColorWeight = 1.0f - m_fTextureWeight;
+
+  m_fWeightUpdatingConstant = 5.0f;
+
+  m_fReliableBackgroundModeWeight = 0.9f;
+
+  //m_fMinBgLayerWeight = m_fLowInitialModeWeight/50.0f;
+  m_fMinBgLayerWeight = 0.0001f;
+  //m_fMinBgLayerWeight = 0.88f;
+
+  m_fMinNoisedAngle = 3.0f / 180.0f * PI;
+  m_fMinNoisedAngleSine = sinf(m_fMinNoisedAngle);
+
+  m_fFrameDuration = 1.0f / 25.0f; /* 25 frames per second */
+
+  m_fModeUpdatingLearnRatePerSecond = 0.2f;
+  m_fWeightUpdatingLearnRatePerSecond = 0.2f;
+
+  m_pROI = NULL;
+}
+
+CMultiLayerBGS::~CMultiLayerBGS() {
+  int img_length = m_cvImgSize.height * m_cvImgSize.width;
+  PixelLBPStruct* PLBP = m_pPixelLBPs;
+  for (int yx = 0; yx < img_length; yx++) {
+    delete (*PLBP).cur_intensity;
+    delete (*PLBP).cur_pattern;
+    delete (*PLBP).lbp_idxes;
+    for (int a = 0; a < m_nMaxLBPModeNum; a++) {
+      delete (*PLBP).LBPs[a].bg_intensity;
+      delete (*PLBP).LBPs[a].max_intensity;
+      delete (*PLBP).LBPs[a].min_intensity;
+      delete (*PLBP).LBPs[a].bg_pattern;
+    }
+    delete (*PLBP).LBPs;
+    PLBP++;
+  }
+  delete m_pPixelLBPs;
+
+  /* release memories */
+  if (m_pFgImg != NULL)
+    cvReleaseImage(&m_pFgImg);
+  if (m_pBgImg != NULL)
+    cvReleaseImage(&m_pBgImg);
+  if (m_pBgDistImg != NULL)
+    cvReleaseImage(&m_pBgDistImg);
+  if (m_ppOrgLBPImgs != NULL) {
+    int a;
+    for (a = 0; a < m_nLBPImgNum; a++)
+      cvReleaseImage(&m_ppOrgLBPImgs[a]);
+    delete [] m_ppOrgLBPImgs;
+  }
+  if (m_pEdgeImg)
+    cvReleaseImage(&m_pEdgeImg);
+}
+
+void CMultiLayerBGS::ResetAllParameters() {
+  m_f1_ModeUpdatingLearnRate = 1.0f - m_fModeUpdatingLearnRate;
+  m_f1_WeightUpdatingLearnRate = 1.0f - m_fWeightUpdatingLearnRate;
+  m_f1_MinLBPBinaryProb = 1.0f - m_fMinLBPBinaryProb;
+
+  m_fColorWeight = 1.0f - m_fTextureWeight;
+
+  m_fMinNoisedAngleSine = sinf(m_fMinNoisedAngle);
+
+  //m_fMinBgLayerWeight = m_fLowInitialModeWeight/50.0f;
+  m_fMinBgLayerWeight = 0.0001f;
+
+  m_cLBP.m_fRobustWhiteNoise = m_fRobustColorOffset;
+}
+
+void CMultiLayerBGS::MergeImages(int num, ...) {
+  if (num < 1 || num > 9) {
+    printf("Error: the number %d of merging images.\n", num);
+    exit(0);
+  }
+
+  int nCols = 0, nRows = 0;
+  switch (num) {
+  case 1: nCols = nRows = 1;
+    break;
+  case 2: nCols = 1;
+    nRows = 2;
+    break;
+  case 3:
+  case 4: nCols = 2;
+    nRows = 2;
+    break;
+  case 5:
+  case 6: nCols = 3;
+    nRows = 2;
+    break;
+  case 7:
+  case 8:
+  case 9: nCols = 3;
+    nRows = 3;
+    break;
+  }
+
+  int a, b;
+
+  IplImage** ppIplImg = new IplImage*[num + 1];
+
+  va_list arg_ptr;
+  va_start(arg_ptr, num);
+  for (a = 0; a < num + 1; a++)
+    ppIplImg[a] = va_arg(arg_ptr, IplImage*);
+  va_end(arg_ptr);
+
+  CvRect imgROIRect;
+  CvSize imgSize = cvGetSize(ppIplImg[0]);
+  if (ppIplImg[num] == NULL) { // for the output video
+    ppIplImg[num] = cvCreateImage(cvSize(imgSize.width*nCols, imgSize.height * nRows), IPL_DEPTH_8U, ppIplImg[0]->nChannels);
+  }
+
+  int img_idx = 0;
+  for (a = 0; a < nRows; a++)
+    for (b = 0; b < nCols; b++) {
+      if (img_idx >= num)
+        break;
+
+      imgROIRect = cvRect(b * imgSize.width, a * imgSize.height, imgSize.width, imgSize.height);
+
+      cvSetImageROI(ppIplImg[num], imgROIRect);
+      cvCopyImage(ppIplImg[img_idx++], ppIplImg[num]);
+      cvResetImageROI(ppIplImg[num]);
+    }
+
+    delete [] ppIplImg;
+}
+
+void CMultiLayerBGS::Update_MAX_MIN_Intensity(unsigned char *cur_intensity, float *max_intensity, float *min_intensity) {
+  int a;
+  float curI;
+  for (a = 0; a < m_nChannel; a++) {
+    curI = (float) cur_intensity[a];
+
+    min_intensity[a] = MIN(curI, min_intensity[a]);
+    max_intensity[a] = MAX(curI, max_intensity[a]);
+  }
+}
+
+void CMultiLayerBGS::UpdateBgPixelColor(unsigned char *cur_intensity, float* bg_intensity) {
+  int a;
+  for (a = 0; a < m_nChannel; a++)
+    bg_intensity[a] = m_f1_ModeUpdatingLearnRate * bg_intensity[a] + m_fModeUpdatingLearnRate * (float) cur_intensity[a];
+}
+
+void CMultiLayerBGS::UpdateBgPixelPattern(float *cur_pattern, float *bg_pattern) {
+  int a;
+  for (a = 0; a < m_nLBPLength; a++)
+    bg_pattern[a] = m_f1_ModeUpdatingLearnRate * bg_pattern[a] + m_fModeUpdatingLearnRate * cur_pattern[a];
+}
+
+/* sort everything inbetween `low' <-> `high' */
+void CMultiLayerBGS::QuickSort(float *pData, unsigned short *pIdxes, long low, long high, bool bAscent) {
+  long i = low;
+  long j = high;
+  float y = 0;
+  int idx = 0;
+
+  /* compare value */
+  float z = pData[(low + high) / 2];
+
+  /* partition */
+  do {
+    if (bAscent) {
+      /* find member above ... */
+      while (pData[i] < z) i++;
+
+      /* find element below ... */
+      while (pData[j] > z) j--;
+    } else {
+      /* find member below ... */
+      while (pData[i] > z) i++;
+
+      /* find element above ... */
+      while (pData[j] < z) j--;
+    }
+
+    if (i <= j) {
+      /* swap two elements */
+      y = pData[i];
+      pData[i] = pData[j];
+      pData[j] = y;
+
+      idx = pIdxes[i];
+      pIdxes[i] = pIdxes[j];
+      pIdxes[j] = idx;
+
+      i++;
+      j--;
+    }
+  } while (i <= j);
+
+  /* recurse */
+  if (low < j)
+    QuickSort(pData, pIdxes, low, j, bAscent);
+
+  if (i < high)
+    QuickSort(pData, pIdxes, i, high, bAscent);
+}
+
+float CMultiLayerBGS::DistLBP(LBPStruct *LBP1, LBPStruct *LBP2) {
+  int a;
+
+  float pattern_dist = 0;
+  for (a = 0; a < m_nLBPLength; a++) {
+    pattern_dist = fabsf(LBP1->bg_pattern[a] - LBP1->bg_pattern[a]);
+  }
+  pattern_dist /= (float) m_nLBPLength;
+
+  float color_dist = 0;
+  for (a = 0; a < m_nChannel; a++) {
+    color_dist += fabsf((float) LBP1->bg_intensity[a]-(float) LBP2->bg_intensity[a]);
+  }
+  color_dist /= 3.0f * 125.0f;
+
+  //return MAX(pattern_dist, color_dist);
+  return color_dist;
+}
+
+void CMultiLayerBGS::SetNewImage(IplImage *new_img, CvRect *roi) {
+  m_pOrgImg = new_img;
+  m_pROI = roi;
+  if (roi && (roi->width <= 0 || roi->height <= 0))
+    return;
+
+  if (roi) {
+    cvSetImageROI(m_pOrgImg, *roi);
+    for (int a = 0; a < m_nLBPImgNum; a++)
+      cvSetImageROI(m_ppOrgLBPImgs[a], *roi);
+  }
+
+  switch (m_nLBPImgNum) {
+  case 1:
+    cvCvtColor(m_pOrgImg, m_ppOrgLBPImgs[0], CV_BGR2GRAY);
+    break;
+  case 2:
+    cvCvtColor(m_pOrgImg, m_ppOrgLBPImgs[0], CV_BGR2GRAY);
+    ComputeGradientImage(m_ppOrgLBPImgs[0], m_ppOrgLBPImgs[1], false);
+    break;
+  case 3:
+    cvSplit(m_pOrgImg, m_ppOrgLBPImgs[0], m_ppOrgLBPImgs[1], m_ppOrgLBPImgs[2], NULL);
+    break;
+  case 4:
+    cvSplit(m_pOrgImg, m_ppOrgLBPImgs[0], m_ppOrgLBPImgs[1], m_ppOrgLBPImgs[2], NULL);
+    ComputeGradientImage(m_ppOrgLBPImgs[0], m_ppOrgLBPImgs[3], false);
+    break;
+  }
+
+  if (roi) {
+    cvResetImageROI(m_pOrgImg);
+    for (int a = 0; a < m_nLBPImgNum; a++)
+      cvResetImageROI(m_ppOrgLBPImgs[a]);
+  }
+  m_cLBP.SetNewImages(m_ppOrgLBPImgs);
+
+  m_nCurImgFrameIdx++;
+}
+
+void CMultiLayerBGS::SetBkMaskImage(IplImage *mask_img) {
+  if (m_pBkMaskImg == NULL) {
+    m_pBkMaskImg = cvCreateImage(cvGetSize(mask_img), mask_img->depth, mask_img->nChannels);
+  }
+  cvCopyImage(mask_img, m_pBkMaskImg);
+}
+
+void CMultiLayerBGS::BackgroundSubtractionProcess() {
+  CvRect *roi = m_pROI;
+
+  if (roi && (roi->width <= 0 || roi->height <= 0))
+    return;
+  LBPStruct* LBPs;
+  unsigned int bg_num;
+  float* cur_pattern;
+  unsigned char* cur_intensity;
+  int a, b;
+  unsigned int lbp_num;
+  unsigned short* lbp_idxes;
+  unsigned short cur_lbp_idx;
+  bool bBackgroundUpdating;
+
+  PixelLBPStruct *PLBP = m_pPixelLBPs;
+
+  bool bFirstFrame = (PLBP[0].num == 0);
+  float best_match_bg_dist, bg_pattern_dist, bg_color_dist, bg_pattern_color_dist;
+
+  // compute the local binary pattern
+  if (m_fTextureWeight > 0)
+    m_cLBP.ComputeLBP(PLBP, roi);
+
+  LBPStruct* curLBP;
+
+  int data_length;
+
+  if (roi)
+    data_length = roi->width * roi->height;
+  else
+    data_length = m_cvImgSize.width * m_cvImgSize.height;
+
+  int best_match_idx;
+
+  COpencvDataConversion<uchar, uchar> ODC1;
+  if (roi) {
+    cvSetImageROI(m_pBkMaskImg, *roi);
+    cvSetImageROI(m_pOrgImg, *roi);
+  }
+  uchar *_mask = ODC1.GetImageData(m_pBkMaskImg);
+  uchar *_org_intensity = ODC1.GetImageData(m_pOrgImg);
+
+  if (roi) {
+    cvResetImageROI(m_pBkMaskImg);
+    cvResetImageROI(m_pOrgImg);
+  }
+
+  COpencvDataConversion<float, float> ODC2;
+  float *_bg_dist = new float[data_length];
+
+  uchar *mask = _mask;
+  uchar *org_intensity = _org_intensity;
+  float *bg_dist = _bg_dist;
+
+  bool removed_modes[10];
+
+  // scanning the point via first x-axis and then y-axis
+  int x, y;
+
+  for (y = 0; y < (roi ? roi->height : m_cvImgSize.height); y++) {
+    if (roi)
+      PLBP = m_pPixelLBPs + (roi->y + y) * m_cvImgSize.width + roi->x;
+    else
+      PLBP = m_pPixelLBPs + y * m_cvImgSize.width;
+
+    for (x = 0; x < (roi ? roi->width : m_cvImgSize.width); x++) {
+      // check whether the current pixel is the pixel to be modeled
+      if (*mask++ == 0) {
+        PLBP++;
+        *bg_dist++ = 0.0f; //m_fPatternColorDistBgThreshold*1.01f;
+        org_intensity += m_nChannel;
+        continue;
+      }
+
+      // removing the background layers
+      if (!m_disableLearning) {
+        RemoveBackgroundLayers(PLBP);
+      }
+
+      // check whether the current image is the first image
+      bFirstFrame = ((*PLBP).num == 0);
+
+      // get lbp information
+      lbp_num = (*PLBP).num;
+      LBPs = (*PLBP).LBPs;
+      lbp_idxes = (*PLBP).lbp_idxes;
+
+      (*PLBP).cur_bg_layer_no = 0;
+
+      // set the current pixel's intensity
+      cur_intensity = (*PLBP).cur_intensity;
+      for (a = 0; a < m_nChannel; a++)
+        cur_intensity[a] = *org_intensity++;
+
+      // get the current lbp pattern
+      cur_pattern = (*PLBP).cur_pattern;
+
+      // first check whether the pixel is background or foreground and then update the background pattern model
+      if (lbp_num == 0) { // empty pattern list
+        curLBP = (&(LBPs[0]));
+        for (a = 0; a < m_nLBPLength; a++) {
+          curLBP->bg_pattern[a] = (float) cur_pattern[a];
+        }
+
+        curLBP->bg_layer_num = 0;
+        curLBP->weight = m_fLowInitialModeWeight;
+        curLBP->max_weight = m_fLowInitialModeWeight;
+
+        curLBP->first_time = m_nCurImgFrameIdx;
+        curLBP->last_time = m_nCurImgFrameIdx;
+        curLBP->freq = 1;
+
+        (*PLBP).matched_mode_first_time = (float) m_nCurImgFrameIdx;
+
+        for (a = 0; a < m_nChannel; a++) {
+          curLBP->bg_intensity[a] = (float) cur_intensity[a];
+          curLBP->min_intensity[a] = (float) cur_intensity[a];
+          curLBP->max_intensity[a] = (float) cur_intensity[a];
+        }
+
+        lbp_idxes[0] = 0;
+
+        lbp_num++;
+        (*PLBP).num = 1;
+        (*PLBP).bg_num = 1;
+
+        PLBP++;
+        *bg_dist++ = 0.0f;
+        continue;
+      } else { // not empty pattern list
+        /*
+        // remove the background layers
+        // end of removing the background layer
+        */
+
+        best_match_idx = -1;
+        best_match_bg_dist = 999.0f;
+
+        // find the best match
+        for (a = 0; a < (int) lbp_num; a++) {
+          // get the current index for lbp pattern
+          cur_lbp_idx = lbp_idxes[a];
+
+          // get the current LBP pointer
+          curLBP = &(LBPs[cur_lbp_idx]);
+
+          // compute the background probability based on lbp pattern
+          bg_pattern_dist = 0.0f;
+          if (m_fTextureWeight > 0)
+            bg_pattern_dist = CalPatternBgDist(cur_pattern, curLBP->bg_pattern);
+
+          // compute the color invariant probability based on RGB color
+          bg_color_dist = 0.0f;
+          if (m_fColorWeight > 0)
+            bg_color_dist = CalColorBgDist(cur_intensity, curLBP->bg_intensity, curLBP->max_intensity, curLBP->min_intensity);
+
+          // compute the joint background probability
+          //bg_pattern_color_dist = sqrtf(bg_color_dist*bg_pattern_dist);
+
+          //UpdatePatternColorDistWeights(cur_pattern, curLBP->bg_pattern);
+
+          bg_pattern_color_dist = m_fColorWeight * bg_color_dist + m_fTextureWeight*bg_pattern_dist;
+          //bg_pattern_color_dist = MAX(bg_color_dist, bg_pattern_dist);
+
+          //bg_pattern_color_dist = 1.0f - (1.0f-bg_color_dist)*(1.0-bg_pattern_dist);
+          //bg_pattern_color_dist = bg_pattern_dist;
+
+          //bg_pattern_color_dist = bg_color_dist;
+
+          if (bg_pattern_color_dist < best_match_bg_dist) {
+            best_match_bg_dist = bg_pattern_color_dist;
+            best_match_idx = a;
+          }
+        }
+
+        bg_num = (*PLBP).bg_num;
+
+        // check
+        bBackgroundUpdating = ((best_match_bg_dist < m_fPatternColorDistBgUpdatedThreshold));
+
+        // reset the weight of the mode
+        if (best_match_idx >= (int) bg_num && LBPs[lbp_idxes[best_match_idx]].max_weight < m_fReliableBackgroundModeWeight) // found not in the background models
+          best_match_bg_dist = MAX(best_match_bg_dist, m_fPatternColorDistBgThreshold * 2.5f);
+
+        *bg_dist = best_match_bg_dist;
+      }
+      if (m_disableLearning) {
+        // no creation or update when learning is disabled
+      } else if (!bBackgroundUpdating) { // no match
+
+        for (a = 0; a < (int) lbp_num; a++) { // decrease the weights
+          curLBP = &(LBPs[lbp_idxes[a]]);
+          curLBP->weight *= (1.0f - m_fWeightUpdatingLearnRate / (1.0f + m_fWeightUpdatingConstant * curLBP->max_weight));
+        }
+
+        if ((int) lbp_num < m_nMaxLBPModeNum) { // add a new pattern
+          // find the pattern index for addition
+          int add_lbp_idx = 0;
+          bool bFound;
+          for (a = 0; a < m_nMaxLBPModeNum; a++) {
+            bFound = true;
+            for (b = 0; b < (int) lbp_num; b++)
+              bFound &= (a != lbp_idxes[b]);
+            if (bFound) {
+              add_lbp_idx = a;
+              break;
+            }
+          }
+          curLBP = &(LBPs[add_lbp_idx]);
+
+          curLBP->first_time = m_nCurImgFrameIdx;
+          curLBP->last_time = m_nCurImgFrameIdx;
+          curLBP->freq = 1;
+          curLBP->layer_time = -1;
+
+          (*PLBP).matched_mode_first_time = (float) m_nCurImgFrameIdx;
+
+          for (a = 0; a < m_nLBPLength; a++) {
+            curLBP->bg_pattern[a] = (float) cur_pattern[a];
+          }
+
+          curLBP->bg_layer_num = 0;
+          curLBP->weight = m_fLowInitialModeWeight;
+          curLBP->max_weight = m_fLowInitialModeWeight;
+
+          for (a = 0; a < m_nChannel; a++) {
+            curLBP->bg_intensity[a] = (float) cur_intensity[a];
+            curLBP->min_intensity[a] = (float) cur_intensity[a];
+            curLBP->max_intensity[a] = (float) cur_intensity[a];
+          }
+
+          lbp_idxes[lbp_num] = add_lbp_idx;
+
+          lbp_num++;
+          (*PLBP).num = lbp_num;
+        } else { // replacing the pattern with the minimal weight
+          // find the replaced pattern index
+          /*
+          int rep_pattern_idx = -1;
+          for ( a = m_nLBPLength-1 ; a >= 0 ; a-- ) {
+          if ( LBPs[lbp_idxes[a]].bg_layer_num == 0 )
+          rep_pattern_idx = lbp_idxes[a];
+          }
+          if ( rep_pattern_idx < 0 ) {
+          rep_pattern_idx = lbp_idxes[m_nMaxLBPModeNum-1];
+          for ( a = 0 ; a < m_nLBPLength ; a++ ) {
+          if ( LBPs[lbp_idxes[a]].bg_layer_num > LBPs[rep_pattern_idx].bg_layer_num )
+          LBPs[lbp_idxes[a]].bg_layer_num--;
+          }
+          }
+          */
+          int rep_pattern_idx = lbp_idxes[m_nMaxLBPModeNum - 1];
+
+          curLBP = &(LBPs[rep_pattern_idx]);
+
+          curLBP->first_time = m_nCurImgFrameIdx;
+          curLBP->last_time = m_nCurImgFrameIdx;
+          curLBP->freq = 1;
+          curLBP->layer_time = -1;
+
+          (*PLBP).matched_mode_first_time = (float) m_nCurImgFrameIdx;
+
+          for (a = 0; a < m_nLBPLength; a++) {
+            curLBP->bg_pattern[a] = (float) cur_pattern[a];
+          }
+
+          curLBP->bg_layer_num = 0;
+          curLBP->weight = m_fLowInitialModeWeight;
+          curLBP->max_weight = m_fLowInitialModeWeight;
+
+          for (a = 0; a < m_nChannel; a++) {
+            curLBP->bg_intensity[a] = (float) cur_intensity[a];
+            curLBP->min_intensity[a] = (float) cur_intensity[a];
+            curLBP->max_intensity[a] = (float) cur_intensity[a];
+          }
+        }
+      } else { // find match
+        // updating the background pattern model
+        cur_lbp_idx = lbp_idxes[best_match_idx];
+        curLBP = &(LBPs[cur_lbp_idx]);
+
+        curLBP->first_time = MAX(MIN(curLBP->first_time, m_nCurImgFrameIdx), 0);
+        (*PLBP).matched_mode_first_time = curLBP->first_time;
+
+        curLBP->last_time = m_nCurImgFrameIdx;
+        curLBP->freq++;
+
+        if (m_fColorWeight > 0) {
+          // update the color information
+          UpdateBgPixelColor(cur_intensity, curLBP->bg_intensity);
+          // update the MAX and MIN color intensity
+          Update_MAX_MIN_Intensity(cur_intensity, curLBP->max_intensity, curLBP->min_intensity);
+        }
+
+        // update the texture information
+        if (m_fTextureWeight > 0)
+          UpdateBgPixelPattern(cur_pattern, curLBP->bg_pattern);
+
+
+        // increase the weight of the best matched mode
+        float increasing_weight_factor = m_fWeightUpdatingLearnRate * (1.0f + m_fWeightUpdatingConstant * curLBP->max_weight);
+        curLBP->weight = (1.0f - increasing_weight_factor) * curLBP->weight + increasing_weight_factor; //*expf(-best_match_dist/m_fPatternColorDistBgThreshold);
+
+        // update the maximal weight for the best matched mode
+        curLBP->max_weight = MAX(curLBP->weight, curLBP->max_weight);
+
+        // calculate the number of background layer
+        if (curLBP->bg_layer_num > 0) {
+          bool removed_bg_layers = false;
+          if (curLBP->weight > curLBP->max_weight * 0.2f) {
+            for (a = 0; a < (int) lbp_num; a++) {
+              removed_modes[a] = false;
+              if (LBPs[lbp_idxes[a]].bg_layer_num > curLBP->bg_layer_num &&
+                LBPs[lbp_idxes[a]].weight < LBPs[lbp_idxes[a]].max_weight * 0.9f) { /* remove layers */
+                  //LBPs[lbp_idxes[a]].bg_layer_num = 0;
+                  removed_modes[a] = true;
+                  removed_bg_layers = true;
+              }
+            }
+          }
+
+          if (removed_bg_layers) {
+            RemoveBackgroundLayers(PLBP, removed_modes);
+            lbp_num = (*PLBP).num;
+          }
+        } else if (curLBP->max_weight > m_fReliableBackgroundModeWeight && curLBP->bg_layer_num == 0) {
+          int max_bg_layer_num = LBPs[lbp_idxes[0]].bg_layer_num;
+          for (a = 1; a < (int) lbp_num; a++)
+            max_bg_layer_num = MAX(max_bg_layer_num, LBPs[lbp_idxes[a]].bg_layer_num);
+          curLBP->bg_layer_num = max_bg_layer_num + 1;
+          curLBP->layer_time = m_nCurImgFrameIdx;
+        }
+
+        (*PLBP).cur_bg_layer_no = curLBP->bg_layer_num;
+
+        // decrease the weights of non-best matched modes
+        for (a = 0; a < (int) lbp_num; a++) {
+          if (a != best_match_idx) {
+            curLBP = &(LBPs[lbp_idxes[a]]);
+            curLBP->weight *= (1.0f - m_fWeightUpdatingLearnRate / (1.0f + m_fWeightUpdatingConstant * curLBP->max_weight));
+          }
+        }
+      }
+
+      // sort the list of modes based on the weights of modes
+      if ((int) lbp_num > 1 && !m_disableLearning) {
+        float weights[100], tot_weights = 0;
+        for (a = 0; a < (int) lbp_num; a++) {
+          weights[a] = LBPs[lbp_idxes[a]].weight;
+          tot_weights += weights[a];
+        }
+
+        // sort weights in the descent order
+        QuickSort(weights, lbp_idxes, 0, (int) lbp_num - 1, false);
+
+        // calculate the first potential background modes number, bg_num
+        float threshold_weight = m_fBackgroundModelPercent*tot_weights;
+        tot_weights = 0;
+        for (a = 0; a < (int) lbp_num; a++) {
+          tot_weights += LBPs[lbp_idxes[a]].weight;
+          if (tot_weights > threshold_weight) {
+            bg_num = a + 1;
+            break;
+          }
+        }
+        (*PLBP).bg_num = bg_num;
+      }
+
+      PLBP++;
+      bg_dist++;
+    }
+  }
+
+  if (bFirstFrame) { // check whether it is the first frame for background modeling
+    if (m_pFgMaskImg)
+      cvSetZero(m_pFgMaskImg);
+    cvSetZero(m_pBgDistImg);
+  } else {
+    // set the image data
+    if (roi) {
+      cvSetZero(m_pBgDistImg);
+      cvSetImageROI(m_pBgDistImg, *roi);
+    }
+    ODC2.SetImageData(m_pBgDistImg, _bg_dist);
+
+    // do gaussian smooth
+    if (m_nPatternDistSmoothNeigHalfSize >= 0)
+      cvSmooth(m_pBgDistImg, m_pBgDistImg, CV_GAUSSIAN, (2 * m_nPatternDistSmoothNeigHalfSize + 1), (2 * m_nPatternDistSmoothNeigHalfSize + 1), m_fPatternDistConvGaussianSigma);
+
+    if (roi)
+      cvResetImageROI(m_pBgDistImg);
+#ifdef LINUX_BILATERAL_FILTER
+    // do cross bilateral filter
+    fprintf(stderr, "%f %f\n", m_fSigmaS, m_fSigmaR);
+    if (m_fSigmaS > 0 && m_fSigmaR > 0) {
+      GetFloatEdgeImage(m_ppOrgLBPImgs[0], m_pEdgeImg);
+      //ComputeGradientImage(m_ppOrgLBPImgs[0], m_pEdgeImg, true);
+      m_cCrossBF.SetNewImages(m_pBgDistImg, m_pEdgeImg);
+      m_cCrossBF.FastCrossBF();
+      m_cCrossBF.GetFilteredImage(m_pBgDistImg);
+    }
+#endif
+
+    // get the foreground mask by thresholding
+    if (m_pFgMaskImg)
+      cvThreshold(m_pBgDistImg, m_pFgMaskImg, m_fPatternColorDistBgThreshold, 255, CV_THRESH_BINARY);
+
+    // get the foreground probability image (uchar)
+    if (m_pFgProbImg)
+      GetForegroundProbabilityImage(m_pFgProbImg);
+
+    // do post-processing
+    //Postprocessing();
+  }
+
+  // release memories
+  delete [] _mask;
+  delete [] _bg_dist;
+  delete [] _org_intensity;
+}
+
+void CMultiLayerBGS::GetBackgroundImage(IplImage *bk_img) {
+  IplImage *bg_img = m_pBgImg;
+  uchar *c1;
+  float *c2;
+  int bg_img_idx;
+  int channel;
+  int img_length = m_cvImgSize.height * m_cvImgSize.width;
+  int yx;
+
+  COpencvDataConversion<uchar, uchar> ODC;
+  uchar *org_data = ODC.GetImageData(bg_img);
+  c1 = org_data;
+
+  //c1 = (uchar*)(bg_img->imageData);
+
+  PixelLBPStruct* PLBP = m_pPixelLBPs;
+
+  for (yx = 0; yx < img_length; yx++) {
+    // the newest background image
+    bg_img_idx = (*PLBP).lbp_idxes[0];
+    if ((*PLBP).num == 0) {
+      for (channel = 0; channel < m_nChannel; channel++)
+        *c1++ = 0;
+    } else {
+      c2 = (*PLBP).LBPs[bg_img_idx].bg_intensity;
+      for (channel = 0; channel < m_nChannel; channel++)
+        *c1++ = cvRound(*c2++);
+    }
+    PLBP++;
+  }
+
+  ODC.SetImageData(bg_img, org_data);
+  delete [] org_data;
+
+  cvCopyImage(m_pBgImg, bk_img);
+}
+
+void CMultiLayerBGS::GetForegroundImage(IplImage *fg_img, CvScalar bg_color) {
+  if (m_pROI && (m_pROI->width <= 0 || m_pROI->height <= 0))
+    return;
+  IplImage* org_img;
+  IplImage* fg_mask_img; // the Mat pointer of the foreground mask matrices at different levels
+
+  org_img = m_pOrgImg;
+  fg_mask_img = m_pFgMaskImg;
+
+  cvSet(fg_img, bg_color);
+  if (m_pROI) {
+    cvSetImageROI(org_img, *m_pROI);
+    cvSetImageROI(fg_img, *m_pROI);
+    cvSetImageROI(fg_mask_img, *m_pROI);
+    cvCopy(org_img, fg_img, fg_mask_img);
+    cvResetImageROI(org_img);
+    cvResetImageROI(fg_img);
+    cvResetImageROI(fg_mask_img);
+  } else
+    cvCopy(org_img, fg_img, fg_mask_img);
+}
+
+void CMultiLayerBGS::GetForegroundMaskImage(IplImage *fg_mask_img) {
+  if (m_pROI && (m_pROI->width <= 0 || m_pROI->height <= 0))
+    return;
+
+  //cvCopyImage(m_pFgMaskImg, fg_mask_img);
+  if (m_pROI) {
+    cvSetImageROI(m_pFgMaskImg, *m_pROI);
+    cvSetImageROI(fg_mask_img, *m_pROI);
+    cvThreshold(m_pFgMaskImg, fg_mask_img, 0, 255, CV_THRESH_BINARY);
+    cvResetImageROI(m_pFgMaskImg);
+    cvResetImageROI(fg_mask_img);
+  } else
+    cvThreshold(m_pFgMaskImg, fg_mask_img, 0, 255, CV_THRESH_BINARY);
+}
+
+void CMultiLayerBGS::GetForegroundMaskMap(CvMat *fg_mask_mat) {
+  COpencvDataConversion<uchar, uchar> ODC;
+  ODC.ConvertData(m_pFgMaskImg, fg_mask_mat);
+}
+
+void CMultiLayerBGS::GetCurrentBackgroundDistMap(CvMat *bk_dist_map) {
+  cvCopy(m_pBgDistImg, bk_dist_map);
+}
+
+void CMultiLayerBGS::Initialization(IplImage *first_img, int lbp_level_num, float *radiuses, int *neig_pt_nums) {
+  int a;
+
+  m_nLBPLength = 0;
+  m_nLBPLevelNum = lbp_level_num;
+  for (a = 0; a < lbp_level_num; a++) {
+    m_nLBPLength += neig_pt_nums[a];
+    m_pLBPRadiuses[a] = radiuses[a];
+    m_pLBPMeigPointNums[a] = neig_pt_nums[a];
+  }
+
+  m_pFgImg = NULL;
+  m_pFgMaskImg = NULL;
+  m_pBgDistImg = NULL;
+  m_pOrgImg = NULL;
+  m_pBgImg = NULL;
+  m_ppOrgLBPImgs = NULL;
+  m_pFgProbImg = NULL;
+
+  m_cvImgSize = cvGetSize(first_img);
+
+  m_nChannel = first_img->nChannels;
+
+  m_pOrgImg = first_img;
+
+  if (m_bUsedColorLBP && m_bUsedGradImage)
+    m_nLBPImgNum = 4;
+  else if (m_bUsedColorLBP && !m_bUsedGradImage)
+    m_nLBPImgNum = 3;
+  else if (!m_bUsedColorLBP && m_bUsedGradImage)
+    m_nLBPImgNum = 2;
+  else
+    m_nLBPImgNum = 1;
+
+  m_nLBPLength *= m_nLBPImgNum;
+
+  m_ppOrgLBPImgs = new IplImage*[m_nLBPImgNum];
+  for (a = 0; a < m_nLBPImgNum; a++)
+    m_ppOrgLBPImgs[a] = cvCreateImage(m_cvImgSize, IPL_DEPTH_8U, 1);
+
+  m_pBgImg = cvCreateImage(m_cvImgSize, IPL_DEPTH_8U, m_nChannel);
+  m_pFgImg = cvCreateImage(m_cvImgSize, IPL_DEPTH_8U, m_nChannel);
+  m_pEdgeImg = cvCreateImage(m_cvImgSize, IPL_DEPTH_32F, 1);
+  m_pBgDistImg = cvCreateImage(m_cvImgSize, IPL_DEPTH_32F, 1);
+
+  ResetAllParameters();
+
+  int img_length = m_cvImgSize.height * m_cvImgSize.width;
+  m_pPixelLBPs = new PixelLBPStruct[img_length];
+  PixelLBPStruct* PLBP = m_pPixelLBPs;
+  int yx;
+  for (yx = 0; yx < img_length; yx++) {
+    (*PLBP).cur_intensity = new unsigned char[m_nChannel];
+    (*PLBP).cur_pattern = new float[m_nLBPLength];
+    (*PLBP).LBPs = new LBPStruct[m_nMaxLBPModeNum];
+    (*PLBP).lbp_idxes = new unsigned short[m_nMaxLBPModeNum];
+    (*PLBP).lbp_idxes[0] = 0;
+    (*PLBP).num = 0;
+    (*PLBP).cur_bg_layer_no = 0;
+    (*PLBP).matched_mode_first_time = 0;
+    for (a = 0; a < m_nMaxLBPModeNum; a++) {
+      (*PLBP).LBPs[a].bg_intensity = new float[m_nChannel];
+      (*PLBP).LBPs[a].max_intensity = new float[m_nChannel];
+      (*PLBP).LBPs[a].min_intensity = new float[m_nChannel];
+      (*PLBP).LBPs[a].bg_pattern = new float[m_nLBPLength];
+      (*PLBP).LBPs[a].first_time = -1;
+      (*PLBP).LBPs[a].last_time = -1;
+      (*PLBP).LBPs[a].freq = -1;
+      (*PLBP).LBPs[a].layer_time = -1;
+    }
+    PLBP++;
+  }
+
+  m_pBkMaskImg = cvCreateImage(m_cvImgSize, IPL_DEPTH_8U, 1);
+  cvSet(m_pBkMaskImg, cvScalar(1));
+
+  m_cLBP.Initialization(m_ppOrgLBPImgs, m_nLBPImgNum, lbp_level_num, radiuses, neig_pt_nums, m_fRobustColorOffset);
+
+#ifdef LINUX_BILATERAL_FILTER
+  if (m_fSigmaS > 0 && m_fSigmaR > 0)
+    m_cCrossBF.Initialization(m_pBgDistImg, m_pBgDistImg, m_fSigmaS, m_fSigmaR);
+#endif
+}
+
+float CMultiLayerBGS::CalPatternBgDist(float *cur_pattern, float *bg_pattern) {
+  float bg_hamming_dist = 0;
+  int a;
+  for (a = 0; a < m_nLBPLength; a++)
+    bg_hamming_dist += fabsf(cur_pattern[a] - bg_pattern[a]) > m_f1_MinLBPBinaryProb;
+
+  bg_hamming_dist /= (float) m_nLBPLength;
+
+  return bg_hamming_dist;
+}
+
+float CMultiLayerBGS::CalColorBgDist(uchar *cur_intensity, float *bg_intensity, float *max_intensity, float *min_intensity) {
+  float noised_angle, range_dist, bg_color_dist;
+
+  range_dist = CalColorRangeDist(cur_intensity, bg_intensity, max_intensity, min_intensity, m_fRobustShadowRate, m_fRobustHighlightRate);
+
+  if (range_dist == 1.0f)
+    bg_color_dist = range_dist;
+  else {
+    noised_angle = CalVectorsNoisedAngle(bg_intensity, cur_intensity, MAX(m_fRobustColorOffset, 5.0f), m_nChannel);
+    bg_color_dist = (1.0f - expf(-100.0f * noised_angle * noised_angle));
+  }
+
+  //float bg_color_dist = (expf(-100.0f*noised_angle*noised_angle)*(1.0f-range_dist);
+
+  //float bg_color_dist =  0.5f*(1.0f-expf(-noised_angle*noised_angle/0.005f)) + 0.5f*range_dist;
+  //float bg_color_dist =  MAX((float)(noised_angle>0.08f), range_dist);
+
+  return bg_color_dist;
+}
+
+void CMultiLayerBGS::ComputeGradientImage(IplImage *src, IplImage *dst, bool bIsFloat) {
+  if (src->nChannels != 1 || dst->nChannels != 1) {
+    printf("Input images error for computing gradient images!");
+    exit(1);
+  }
+
+  int a;
+
+  IplImage* _dX = cvCreateImage(cvGetSize(dst), IPL_DEPTH_16S, 1);
+  IplImage* _dY = cvCreateImage(cvGetSize(dst), IPL_DEPTH_16S, 1);
+
+  int aperture_size = 3;
+
+  cvSobel(src, _dX, 1, 0, aperture_size);
+  cvSobel(src, _dY, 0, 1, aperture_size);
+
+  COpencvDataConversion<short, short> ODC1;
+  COpencvDataConversion<uchar, uchar> ODC2;
+  COpencvDataConversion<float, float> ODC3;
+
+  short* dX_data = ODC1.GetImageData(_dX);
+  short* dY_data = ODC1.GetImageData(_dY);
+
+  uchar* dst_u_data = NULL;
+  float* dst_f_data = NULL;
+
+  if (bIsFloat)
+    dst_f_data = ODC3.GetImageData(dst);
+  else
+    dst_u_data = ODC2.GetImageData(dst);
+
+  short* dX = dX_data;
+  short* dY = dY_data;
+  uchar *uSrc = dst_u_data;
+  float *fSrc = dst_f_data;
+
+  /*
+  short* dX = (short*)(_dX->imageData);
+  short* dY = (short*)(_dY->imageData);
+  uchar *dSrc = (uchar*)(dst->imageData);
+  */
+
+  int length;
+  if (src->roi)
+    length = dst->width * dst->height;
+  else
+    length = dst->roi->width * dst->roi->height;
+  /*
+  int x, y;
+  uchar *x_u_data;
+  float *x_f_data;
+  */
+
+  if (bIsFloat) {
+    for (a = 0; a < length; a++) {
+      *fSrc = cvSqrt((float) ((*dX)*(*dX)+(*dY)*(*dY)) / (32.0f * 255.0f));
+      fSrc++;
+      dX++;
+      dY++;
+    }
+    ODC3.SetImageData(dst, dst_f_data);
+    delete [] dst_f_data;
+  } else {
+    for (a = 0; a < length; a++) {
+      *uSrc = cvRound(cvSqrt((float) ((*dX)*(*dX)+(*dY)*(*dY)) / 32.0f));
+      uSrc++;
+      dX++;
+      dY++;
+    }
+    ODC2.SetImageData(dst, dst_u_data);
+    delete [] dst_u_data;
+  }
+
+  delete [] dX_data;
+  delete [] dY_data;
+
+  cvReleaseImage(&_dX);
+  cvReleaseImage(&_dY);
+}
+
+float CMultiLayerBGS::CalVectorsNoisedAngle(float *bg_color, unsigned char *noised_color, float offset, int length) {
+  float org_angle = CalVectorsAngle(bg_color, noised_color, length);
+  float norm_color = 0, elem, noised_angle;
+  int a;
+  for (a = 0; a < length; a++) {
+    elem = bg_color[a];
+    norm_color += elem*elem;
+  }
+  norm_color = sqrtf(norm_color);
+  if (norm_color == 0)
+    noised_angle = PI;
+  else {
+    float sin_angle = offset / norm_color;
+    if (sin_angle < m_fMinNoisedAngleSine)
+      noised_angle = m_fMinNoisedAngle;
+    else
+      //noised_angle = ( sin_angle >= 1 ? PI : asinf(sin_angle));
+      noised_angle = (sin_angle >= 1 ? PI : sin_angle);
+  }
+
+  float angle = org_angle - noised_angle;
+  if (angle < 0)
+    angle = 0;
+  return angle;
+
+  /*
+  float org_angle = CalVectorsAngle(bg_color, noised_color, length);
+  float max_norm_color, bg_norm_color = 0, noised_norm_color = 0, elem, noised_angle;
+  int a;
+  for ( a = 0 ; a <  length ; a++ ) {
+  elem = bg_color[a];
+  bg_norm_color += elem*elem;
+  elem = (float)noised_color[a];
+  noised_norm_color += elem*elem;
+  }
+  max_norm_color = MIN(bg_norm_color, noised_norm_color);
+  max_norm_color = sqrtf(max_norm_color);
+  if ( max_norm_color == 0 )
+  noised_angle = PI;
+  else {
+  float sin_angle = offset/max_norm_color;
+  noised_angle = ( sin_angle >= 1 ? PI : asinf(sin_angle));
+  }
+
+  float angle = org_angle-noised_angle;
+  if ( angle < 0 )
+  angle = 0;
+  return angle;
+  */
+}
+
+float CMultiLayerBGS::CalVectorsAngle(float *c1, unsigned char *c2, int length) {
+  float angle;
+  float dot2, norm1, norm2, elem1, elem2;
+
+  dot2 = norm1 = norm2 = 0;
+
+  int a;
+  for (a = 0; a < length; a++) {
+    elem1 = (float) (c1[a]);
+    elem2 = (float) (c2[a]);
+    dot2 += elem1*elem2;
+    norm1 += elem1*elem1;
+    norm2 += elem2*elem2;
+  }
+
+  //angle = (norm1*norm2==0 ? 0 : acosf(dot2/sqrtf(norm1*norm2)));
+  //angle = (norm1 * norm2 == 0 ? 0 : sqrtf(fmax(1.0f - dot2 * dot2 / (norm1 * norm2), 0.f)));
+  angle = (norm1 * norm2 == 0 ? 0 : sqrtf(std::max(1.0f - dot2 * dot2 / (norm1 * norm2), 0.f)));
+
+  return angle;
+}
+
+float CMultiLayerBGS::CalColorRangeDist(unsigned char *cur_intensity, float *bg_intensity, float *max_intensity, float *min_intensity, float shadow_rate, float highlight_rate) {
+  float dist = 0.0f, minI, maxI, bgI, curI;
+  int channel;
+  //float cdist;
+
+
+  for (channel = 0; channel < m_nChannel; channel++) {
+    bgI = bg_intensity[channel];
+
+    /*
+    minI = MIN(MIN(min_intensity[channel], bgI*shadow_rate), min_intensity[channel]-15.0f);
+    maxI = MAX(MAX(max_intensity[channel], bgI*highlight_rate), max_intensity[channel]+15.0f);
+    */
+
+    minI = MIN(min_intensity[channel], bgI * shadow_rate - 5.0f);
+    maxI = MAX(max_intensity[channel], bgI * highlight_rate + 5.0f);
+
+    /*
+    if ( rand()/((double)RAND_MAX+1) > 0.999 ) {
+    char msg[200];
+    sprintf(msg, "%d\t%d\n", min_intensity[channel]<bgI*shadow_rate-5.0f ? 1 : 0, max_intensity[channel]>bgI*highlight_rate+5.0f ? 1 : 0);
+    ExportLogMessage(msg);
+    }
+    */
+
+    /*
+    minI = max_intensity[channel]*shadow_rate;
+    maxI = MAX(bg_intensity[channel]+m_fRobustColorOffset, MIN(max_intensity[channel]*highlight_rate,min_intensity[channel]/shadow_rate));
+    */
+
+    curI = (float) (cur_intensity[channel]);
+
+    /*
+    //cdist = fabsf(bgI-curI)/512.0f;
+    if ( curI > bgI )
+    cdist = fabsf(bgI-curI)/256.0f;
+    else
+    cdist = fabsf(bgI-curI)/512.0f;
+
+    if ( curI > maxI )
+    //cdist += (curI-maxI)/(2.0f*(255.0f-maxI))*0.5f;
+    cdist += (1.0f-expf(10.0f*(maxI-curI)/MAX(255.0f-maxI,10.0f)))*0.5f;
+    else if ( curI < minI )
+    //cdist += (minI-curI)/(2.0f*minI)*0.5f;
+    cdist += (1.0f-expf(10.0f*(curI-minI)/MAX(minI,10.0f)))*0.5f;
+    //dist += cdist;
+    if ( cdist > dist )
+    dist = cdist;
+    */
+
+    if (curI > maxI || curI < minI) {
+      dist = 1.0f;
+      break;
+    }
+  }
+  //dist = powf(dist, 1.0f/(float)m_nChannel);
+  //dist /= (float)m_nChannel;
+
+  return dist;
+}
+
+void CMultiLayerBGS::GetLayeredBackgroundImage(int layered_no, IplImage *layered_bg_img, CvScalar empty_color) {
+  PixelLBPStruct *PLBP = m_pPixelLBPs;
+  LBPStruct* LBPs;
+  unsigned short* lbp_idxes;
+
+  int a, b, c;
+  int img_length = m_pOrgImg->width * m_pOrgImg->height;
+
+  cvSet(layered_bg_img, empty_color);
+
+  COpencvDataConversion<uchar, uchar> ODC;
+
+  uchar *bg_img_data = ODC.GetImageData(layered_bg_img);
+  uchar *_bg_img_data = bg_img_data;
+  float *cur_bg_intensity;
+  int lbp_num;
+
+  for (a = 0; a < img_length; a++) {
+    // get lbp information
+    LBPs = (*PLBP).LBPs;
+    lbp_idxes = (*PLBP).lbp_idxes;
+    lbp_num = (int) ((*PLBP).num);
+    bool found = false;
+    for (b = 0; b < lbp_num; b++) {
+      if (LBPs[lbp_idxes[b]].bg_layer_num == layered_no) {
+        cur_bg_intensity = LBPs[lbp_idxes[b]].bg_intensity;
+        for (c = 0; c < m_pOrgImg->nChannels; c++)
+          *_bg_img_data++ = (uchar) * cur_bg_intensity++;
+        found = true;
+        break;
+      }
+    }
+    if (!found)
+      _bg_img_data += m_pOrgImg->nChannels;
+
+    PLBP++;
+  }
+
+  ODC.SetImageData(layered_bg_img, bg_img_data);
+
+  delete [] bg_img_data;
+}
+
+void CMultiLayerBGS::GetBgLayerNoImage(IplImage *bg_layer_no_img, CvScalar *layer_colors, int layer_num) {
+  if (layer_num != 0 && layer_num != m_nMaxLBPModeNum) {
+    printf("Must be set in %d layers in function GetBgLayerNoImage!\n", m_nMaxLBPModeNum);
+    exit(1);
+  }
+
+  CvScalar *bg_layer_colors;
+  int bg_layer_color_num = layer_num;
+  if (bg_layer_color_num == 0)
+    bg_layer_color_num = m_nMaxLBPModeNum;
+  bg_layer_colors = new CvScalar[bg_layer_color_num];
+  if (layer_colors) {
+    for (int l = 0; l < layer_num; l++)
+      bg_layer_colors[l] = layer_colors[l];
+  } else {
+    int rgb[3];
+    rgb[0] = rgb[1] = rgb[2] = 0;
+    int rgb_idx = 0;
+    for (int l = 0; l < bg_layer_color_num; l++) {
+      bg_layer_colors[l] = CV_RGB(rgb[0], rgb[1], rgb[2]);
+      rgb[rgb_idx] += 200;
+      rgb[rgb_idx] %= 255;
+      rgb_idx++;
+      rgb_idx %= 3;
+    }
+  }
+
+  int img_length = m_pOrgImg->width * m_pOrgImg->height;
+  uchar *bg_layer_data = new uchar[img_length * bg_layer_no_img->nChannels];
+  uchar *_bg_layer_data = bg_layer_data;
+
+  PixelLBPStruct *PLBP = m_pPixelLBPs;
+  unsigned int cur_bg_layer_no;
+
+  for (int a = 0; a < img_length; a++) {
+    cur_bg_layer_no = (*PLBP).cur_bg_layer_no;
+    for (int b = 0; b < bg_layer_no_img->nChannels; b++) {
+      *_bg_layer_data++ = (uchar) (bg_layer_colors[cur_bg_layer_no].val[b]);
+    }
+    PLBP++;
+  }
+
+  COpencvDataConversion<uchar, uchar> ODC;
+  ODC.SetImageData(bg_layer_no_img, bg_layer_data);
+
+  delete [] bg_layer_data;
+  delete [] bg_layer_colors;
+}
+
+void CMultiLayerBGS::GetCurrentLayeredBackgroundImage(int layered_no, IplImage *layered_bg_img, IplImage *layered_fg_img, CvScalar layered_bg_bk_color, CvScalar layered_fg_color,
+  int smooth_win, float smooth_sigma, float below_layer_noise, float above_layer_noise, int min_blob_size) {
+    PixelLBPStruct *PLBP = m_pPixelLBPs;
+    LBPStruct* LBPs;
+    unsigned short* lbp_idxes;
+
+    int a;
+    int img_length = m_pOrgImg->width * m_pOrgImg->height;
+
+    float *bg_layer_mask = new float[img_length];
+    float *_bg_layer_mask = bg_layer_mask;
+
+    for (a = 0; a < img_length; a++) {
+      // get lbp information
+      LBPs = (*PLBP).LBPs;
+      lbp_idxes = (*PLBP).lbp_idxes;
+      *_bg_layer_mask++ = (float) (*PLBP).cur_bg_layer_no;
+      PLBP++;
+    }
+
+    COpencvDataConversion<float, float> ODC;
+    IplImage* bg_layer_float_mask_img = cvCreateImage(cvGetSize(m_pOrgImg), IPL_DEPTH_32F, 1);
+    IplImage* bg_layer_low_mask_img = cvCreateImage(cvGetSize(m_pOrgImg), IPL_DEPTH_8U, 1);
+    IplImage* bg_layer_high_mask_img = cvCreateImage(cvGetSize(m_pOrgImg), IPL_DEPTH_8U, 1);
+    IplImage* bg_layer_mask_img = cvCreateImage(cvGetSize(m_pOrgImg), IPL_DEPTH_8U, 1);
+
+    ODC.SetImageData(bg_layer_float_mask_img, bg_layer_mask);
+
+    /* method 1 using smooth */
+    /*
+    cvSmooth(bg_layer_float_mask_img, bg_layer_float_mask_img, CV_GAUSSIAN, smooth_win, smooth_win, smooth_sigma);
+
+    cvThreshold(bg_layer_float_mask_img, bg_layer_low_mask_img, (float)layered_no-below_layer_noise, 1, CV_THRESH_BINARY);
+    cvThreshold(bg_layer_float_mask_img, bg_layer_high_mask_img, (float)layered_no+above_layer_noise, 1, CV_THRESH_BINARY_INV);
+
+    cvAnd(bg_layer_low_mask_img, bg_layer_high_mask_img, bg_layer_mask_img);
+    */
+
+    /* method 2 using dilate, erode, blob removing */
+    cvSmooth(bg_layer_float_mask_img, bg_layer_float_mask_img, CV_GAUSSIAN, smooth_win, smooth_win, smooth_sigma);
+
+    cvThreshold(bg_layer_float_mask_img, bg_layer_low_mask_img, (float) layered_no - below_layer_noise, 1, CV_THRESH_BINARY);
+    cvThreshold(bg_layer_float_mask_img, bg_layer_high_mask_img, (float) layered_no + above_layer_noise, 1, CV_THRESH_BINARY_INV);
+    cvAnd(bg_layer_low_mask_img, bg_layer_high_mask_img, bg_layer_mask_img);
+
+    cvDilate(bg_layer_mask_img, bg_layer_mask_img, 0, 2);
+    cvErode(bg_layer_mask_img, bg_layer_mask_img, 0, 2);
+
+    //cvMorphologyEx(bg_layer_mask_img, bg_layer_mask_img, NULL, 0, CV_MOP_OPEN|CV_MOP_CLOSE, 1);
+
+    // Extract the blobs using a threshold of 100 in the image
+    CBlobResult blobs = CBlobResult(bg_layer_mask_img, NULL, 0, true);
+    // discard the blobs with less area than 100 pixels
+    // ( the criteria to filter can be any class derived from COperadorBlob )
+    blobs.Filter(blobs, B_INCLUDE, CBlobGetArea(), B_GREATER, min_blob_size);
+
+    CBlob filtered_blob;
+    cvSetZero(bg_layer_mask_img);
+    for (a = 0; a < blobs.GetNumBlobs(); a++) {
+      filtered_blob = blobs.GetBlob(a);
+      filtered_blob.FillBlob(bg_layer_mask_img, cvScalar(1));
+    }
+    blobs.GetNthBlob(CBlobGetArea(), 0, filtered_blob);
+    filtered_blob.FillBlob(bg_layer_mask_img, cvScalar(0));
+
+
+    cvSet(layered_bg_img, layered_bg_bk_color);
+    cvCopy(m_pBgImg, layered_bg_img, bg_layer_mask_img);
+
+    if (layered_fg_img) {
+      cvCopy(m_pOrgImg, layered_fg_img);
+      cvSet(layered_fg_img, layered_fg_color, bg_layer_mask_img);
+    }
+
+    cvReleaseImage(&bg_layer_float_mask_img);
+    cvReleaseImage(&bg_layer_low_mask_img);
+    cvReleaseImage(&bg_layer_high_mask_img);
+    cvReleaseImage(&bg_layer_mask_img);
+    delete [] bg_layer_mask;
+}
+
+void CMultiLayerBGS::GetColoredBgMultiLayeredImage(IplImage *bg_multi_layer_img, CvScalar *layer_colors) {
+  cvCopyImage(m_pOrgImg, bg_multi_layer_img);
+
+  COpencvDataConversion<uchar, uchar> ODC;
+
+  uchar *bg_ml_imgD = ODC.GetImageData(bg_multi_layer_img);
+  uchar *fg_maskD = ODC.GetImageData(m_pFgMaskImg);
+
+  uchar *_bg_ml_imgD = bg_ml_imgD;
+  uchar *_fg_maskD = fg_maskD;
+
+  PixelLBPStruct *PLBP = m_pPixelLBPs;
+  LBPStruct* LBPs;
+  unsigned short* lbp_idxes;
+  unsigned int lbp_num;
+  int bg_layer_num;
+
+  int a, c;
+  int img_length = m_pOrgImg->width * m_pOrgImg->height;
+  int channels = m_pOrgImg->nChannels;
+  bool bLayeredBg;
+
+  for (a = 0; a < img_length; a++) {
+    // get lbp information
+    lbp_num = (*PLBP).num;
+    LBPs = (*PLBP).LBPs;
+    lbp_idxes = (*PLBP).lbp_idxes;
+    bLayeredBg = false;
+
+    if ((*_fg_maskD == 0)) {
+      bg_layer_num = LBPs[lbp_idxes[0]].bg_layer_num;
+      int first_layer_idx = 0;
+      for (c = 0; c < (int) lbp_num; c++) {
+        if (LBPs[lbp_idxes[c]].bg_layer_num == 1) {
+          first_layer_idx = c;
+          break;
+        }
+      }
+      if (bg_layer_num > 1 && DistLBP(&(LBPs[lbp_idxes[0]]), &(LBPs[first_layer_idx])) > 0.1f) {
+        for (c = 0; c < channels; c++)
+          *_bg_ml_imgD++ = (uchar) (layer_colors[bg_layer_num].val[c]);
+        bLayeredBg = true;
+      }
+
+      if (!bLayeredBg)
+        _bg_ml_imgD += channels;
+    } else {
+      _bg_ml_imgD += channels;
+    }
+
+    PLBP++;
+    _fg_maskD++;
+  }
+
+  ODC.SetImageData(bg_multi_layer_img, bg_ml_imgD);
+
+  delete [] fg_maskD;
+  delete [] bg_ml_imgD;
+}
+
+void CMultiLayerBGS::GetForegroundProbabilityImage(IplImage *fg_dist_img) {
+  COpencvDataConversion<float, float> ODC1;
+  COpencvDataConversion<uchar, uchar> ODC2;
+
+  float *_fg_distD = ODC1.GetImageData(m_pBgDistImg);
+  uchar *_fg_progI = ODC2.GetImageData(fg_dist_img);
+  float *fg_distD = _fg_distD;
+  uchar *fg_progI = _fg_progI;
+
+  /*
+  float *fg_distD = (float*)(m_pBgDistImg->imageData);
+  uchar *fg_progI = (uchar*)(fg_dist_img->imageData);
+  */
+
+  int channels = fg_dist_img->nChannels;
+
+  int a, b;
+  int img_length = fg_dist_img->width * fg_dist_img->height;
+  uchar temp;
+  for (a = 0; a < img_length; a++) {
+    temp = cvRound(255.0f * ((*fg_distD++)));
+    for (b = 0; b < channels; b++)
+      *fg_progI++ = temp;
+  }
+
+  ODC2.SetImageData(fg_dist_img, _fg_progI);
+
+  delete [] _fg_distD;
+  delete [] _fg_progI;
+}
+
+void CMultiLayerBGS::RemoveBackgroundLayers(PixelLBPStruct *PLBP, bool *removed_modes) {
+  int a, b;
+  int lbp_num = PLBP->num;
+
+  /*
+  if ( lbp_num < m_nMaxLBPModeNum )
+  return;
+  */
+
+  /* testing */
+
+  unsigned short* lbp_idxes = PLBP->lbp_idxes;
+  if (!removed_modes) {
+    int removed_bg_layer_num = 0;
+    for (a = 0; a < lbp_num; a++) {
+      if (PLBP->LBPs[lbp_idxes[a]].bg_layer_num && PLBP->LBPs[lbp_idxes[a]].weight < m_fMinBgLayerWeight) { // should be removed
+        removed_bg_layer_num = PLBP->LBPs[lbp_idxes[a]].bg_layer_num;
+        lbp_num--;
+        for (b = a; b < lbp_num; b++)
+          lbp_idxes[b] = lbp_idxes[b + 1];
+        break;
+      }
+    }
+    if (removed_bg_layer_num) {
+      for (a = 0; a < lbp_num; a++) {
+        if (PLBP->LBPs[lbp_idxes[a]].bg_layer_num > removed_bg_layer_num)
+          PLBP->LBPs[lbp_idxes[a]].bg_layer_num--;
+      }
+    }
+  } else {
+    int removed_bg_layer_nums[10];
+    int removed_layer_num = 0;
+    for (a = 0; a < lbp_num; a++) {
+      if (removed_modes[a] && PLBP->LBPs[lbp_idxes[a]].bg_layer_num) { // should be removed
+        removed_bg_layer_nums[removed_layer_num++] = PLBP->LBPs[lbp_idxes[a]].bg_layer_num;
+      }
+    }
+
+    for (a = 0; a < lbp_num; a++) {
+      if (removed_modes[a]) { // should be removed
+        lbp_num--;
+        for (b = a; b < lbp_num; b++)
+          lbp_idxes[b] = lbp_idxes[b + 1];
+      }
+    }
+
+    for (a = 0; a < lbp_num; a++) {
+      for (b = 0; b < removed_layer_num; b++) {
+        if (PLBP->LBPs[lbp_idxes[a]].bg_layer_num > removed_bg_layer_nums[b])
+          PLBP->LBPs[lbp_idxes[a]].bg_layer_num--;
+      }
+    }
+  }
+
+  // sort the list of modes based on the weights of modes
+  if (lbp_num != (int) PLBP->num) {
+    float weights[100], tot_weights = 0;
+    for (a = 0; a < (int) lbp_num; a++) {
+      weights[a] = PLBP->LBPs[lbp_idxes[a]].weight;
+      tot_weights += weights[a];
+    }
+
+    // sort weights in the descent order
+    QuickSort(weights, lbp_idxes, 0, (int) lbp_num - 1, false);
+
+    // calculate the first potential background modes number, bg_num
+    float threshold_weight = m_fBackgroundModelPercent*tot_weights;
+    int bg_num = 0;
+    tot_weights = 0;
+    for (a = 0; a < (int) lbp_num; a++) {
+      tot_weights += PLBP->LBPs[lbp_idxes[a]].weight;
+      if (tot_weights > threshold_weight) {
+        bg_num = a + 1;
+        break;
+      }
+    }
+    (*PLBP).bg_num = bg_num;
+
+  }
+
+  PLBP->num = lbp_num;
+
+  float bg_layer_data[10];
+  unsigned short bg_layer_idxes[10];
+  int bg_layer_num;
+  int tot_bg_layer_num = 0;
+  for (a = 0; a < lbp_num; a++) {
+    bg_layer_num = PLBP->LBPs[lbp_idxes[a]].bg_layer_num;
+    if (bg_layer_num) {
+      bg_layer_data[tot_bg_layer_num] = (float) bg_layer_num;
+      bg_layer_idxes[tot_bg_layer_num++] = lbp_idxes[a];
+    }
+  }
+  if (tot_bg_layer_num == 1) {
+    PLBP->LBPs[bg_layer_idxes[0]].bg_layer_num = 1;
+  } else if (tot_bg_layer_num) {
+    // sort weights in the descent order
+    QuickSort(bg_layer_data, bg_layer_idxes, 0, tot_bg_layer_num - 1, true);
+    for (a = 0; a < tot_bg_layer_num; a++)
+      PLBP->LBPs[bg_layer_idxes[a]].bg_layer_num = a + 1;
+  }
+
+  /*
+  int max_bg_layer_num = 0;
+  for ( a = 0 ; a < lbp_num ; a++ )
+  max_bg_layer_num = MAX(max_bg_layer_num, PLBP->LBPs[lbp_idxes[a]].bg_layer_num);
+  if ( max_bg_layer_num >= 2 ) {
+  bool find_first_layer = false;
+  for ( a = 0 ; a < lbp_num ; a++ ) {
+  max_bg_layer_num = MAX(max_bg_layer_num, PLBP->LBPs[lbp_idxes[a]].bg_layer_num);
+  if ( PLBP->LBPs[lbp_idxes[a]].bg_layer_num == 1 ) {
+  find_first_layer = true;
+  break;
+  }
+  }
+  if ( !find_first_layer ) {
+  printf("\n===============================================\n");
+  printf(" have second layer, no first layer \n");
+  printf("\n===============================================\n");
+  exit(1);
+  }
+  }
+  */
+}
+
+void CMultiLayerBGS::Postprocessing() {
+  // post-processing for background subtraction results
+  cvDilate(m_pFgMaskImg, m_pFgMaskImg, 0, 2);
+  cvErode(m_pFgMaskImg, m_pFgMaskImg, 0, 2);
+
+  /** Example of extracting and filtering the blobs of an image */
+
+  // object that will contain blobs of inputImage
+  CBlobResult blobs;
+
+  IplImage *inputImage = m_pFgMaskImg;
+
+  // Extract the blobs using a threshold of 100 in the image
+  blobs = CBlobResult(inputImage, NULL, 0, true);
+
+  // create a file with some of the extracted features
+  //blobs.PrintBlobs( ".\\blobs.txt" );
+
+  // discard the blobs with less area than 100 pixels
+  // ( the criteria to filter can be any class derived from COperadorBlob )
+  blobs.Filter(blobs, B_INCLUDE, CBlobGetArea(), B_GREATER, 100);
+
+  // create a file with filtered results
+  //blobs.PrintBlobs( ".\\filteredBlobs.txt" );
+
+  // build an output image equal to the input but with 3 channels (to draw the coloured blobs)
+  IplImage *outputImage;
+  outputImage = cvCreateImage(cvSize(inputImage->width, inputImage->height), IPL_DEPTH_8U, 1);
+  cvSet(outputImage, cvScalar(0));
+
+  // plot the selected blobs in a output image
+  CBlob filtered_blob;
+  //cvSet(outputImage, CV_RGB(0,0,255));
+  int a;
+  for (a = 0; a < blobs.GetNumBlobs(); a++) {
+    filtered_blob = blobs.GetBlob(a);
+    filtered_blob.FillBlob(outputImage, cvScalar(255));
+  }
+  blobs.GetNthBlob(CBlobGetArea(), 0, filtered_blob);
+  filtered_blob.FillBlob(outputImage, cvScalar(0));
+
+  /*
+  char *win_name = "blob filtered image";
+  cvNamedWindow(win_name);
+  cvShowImage(win_name, outputImage);
+  cvWaitKey(3);
+  */
+
+  cvReleaseImage(&outputImage);
+}
+
+void CMultiLayerBGS::GetFloatEdgeImage(IplImage *src, IplImage *dst) {
+  if (src->nChannels > 1) {
+    printf("Error: the input source image must be single-channel image!\n");
+    exit(1);
+  }
+  if (dst->depth != IPL_DEPTH_32F) {
+    printf("Error: the output edge image must be float image ranging in [0,1]!\n");
+    exit(1);
+  }
+
+  uchar *src_x_data;
+  float *dst_x_data;
+
+  int x, y;
+  for (y = 0; y < dst->height; y++) {
+    src_x_data = (uchar*) (src->imageData + src->widthStep * y);
+    dst_x_data = (float*) (dst->imageData + dst->widthStep * y);
+    for (x = 0; x < dst->width; x++) {
+      *dst_x_data++ = (float) (*src_x_data++) / 255.0f;
+    }
+  }
+}
+
+void CMultiLayerBGS::ExportLogMessage(char *msg) {
+  const char *log_fn = "log_message.txt";
+  ofstream fout(log_fn, ios::app);
+  if (fout.fail()) {
+    printf("Error opening log output file %s.\n", log_fn);
+    fout.close();
+    exit(0);
+  }
+
+  fout << msg;
+  fout.close();
+}
+
+void CMultiLayerBGS::UpdatePatternColorDistWeights(float *cur_pattern, float *bg_pattern) {
+  return;
+
+  int cur_true_num = 0, cur_false_num = 0, bg_true_num = 0, bg_false_num = 0;
+  int a;
+
+  for (a = 0; a < m_nLBPLength; a++) {
+    cur_true_num += (cur_pattern[a] > 0.5f ? 1 : 0);
+    cur_false_num += (cur_pattern[a] < 0.5f ? 0 : 1);
+    bg_true_num += (bg_pattern[a] > 0.5f);
+    bg_false_num += (bg_pattern[a] < 0.5f);
+  }
+  m_fTextureWeight = expf(-(fabsf(cur_true_num - cur_false_num) + fabsf(bg_true_num - bg_false_num) + 0.8f) / (float) m_nLBPLength);
+  m_fTextureWeight = MAX(MIN(m_fTextureWeight, 0.5f), 0.1f);
+  m_fColorWeight = 1.0f - m_fTextureWeight;
+}
+
+void CMultiLayerBGS::Save(const char *bg_model_fn) {
+  Save(bg_model_fn, 2);
+}
+
+void CMultiLayerBGS::Save(const char *bg_model_fn, int save_type) {
+  FILE * fout = fopen(bg_model_fn, "w");
+  if (!fout) {
+    printf("Error opening background model output file %s.\n", bg_model_fn);
+    fclose(fout);
+    //exit(0);
+    return;
+  }
+
+  int i, j;
+  if (save_type == 0) { /* save the background model information */
+    fprintf(fout, "FILE_TYPE:  MODEL_INFO\n\n");
+
+    fprintf(fout, "MAX_MODEL_NUM: %5d\n", m_nMaxLBPModeNum);
+    fprintf(fout, "LBP_LENGTH: %5d\n", m_nLBPLength);
+    fprintf(fout, "CHANNELS_NUM: %5d\n", m_nChannel);
+    fprintf(fout, "IMAGE_SIZE: %5d %5d\n\n", m_cvImgSize.width, m_cvImgSize.height);
+
+    fprintf(fout, "MODEL_INFO_PIXEL_BY_PIXEL:\n");
+
+    int img_length = m_cvImgSize.height * m_cvImgSize.width;
+    PixelLBPStruct* PLBP = m_pPixelLBPs;
+
+    for (int yx = 0; yx < img_length; yx++) {
+      fprintf(fout, "%3d %3d %3d", (*PLBP).num, (*PLBP).bg_num, (*PLBP).cur_bg_layer_no);
+      for (i = 0; i < (int) (*PLBP).num; i++)
+        fprintf(fout, " %3d", (*PLBP).lbp_idxes[i]);
+      for (i = 0; i < (int) (*PLBP).num; i++) {
+        int li = (*PLBP).lbp_idxes[i];
+        for (j = 0; j < m_nChannel; j++) {
+          fprintf(fout, " %7.1f %7.1f %7.1f", (*PLBP).LBPs[li].bg_intensity[j],
+            (*PLBP).LBPs[li].max_intensity[j], (*PLBP).LBPs[li].min_intensity[j]);
+        }
+        for (j = 0; j < m_nLBPLength; j++)
+          fprintf(fout, " %7.3f", (*PLBP).LBPs[li].bg_pattern[j]);
+        fprintf(fout, " %10.5f", (*PLBP).LBPs[li].weight);
+        fprintf(fout, " %10.5f", (*PLBP).LBPs[li].max_weight);
+        fprintf(fout, " %3d", (*PLBP).LBPs[li].bg_layer_num);
+        fprintf(fout, " %20lu", (*PLBP).LBPs[li].first_time);
+        fprintf(fout, " %20lu", (*PLBP).LBPs[li].last_time);
+        fprintf(fout, " %8d", (*PLBP).LBPs[li].freq);
+      }
+      fprintf(fout, "\n");
+      PLBP++;
+    }
+  } else if (save_type == 1) { /* save current parameters for background subtraction */
+    fprintf(fout, "FILE_TYPE:  MODEL_PARAS\n\n");
+
+    fprintf(fout, "MAX_MODEL_NUM: %5d\n", m_nMaxLBPModeNum);
+    fprintf(fout, "FRAME_DURATION: %f\n", m_fFrameDuration);
+    fprintf(fout, "MODEL_UPDATING_LEARN_RATE: %f\n", m_fModeUpdatingLearnRate);
+    fprintf(fout, "WEIGHT_UPDATING_LEARN_RATE: %f\n", m_fWeightUpdatingLearnRate);
+    fprintf(fout, "WEIGHT_UPDATING_CONSTANT: %f\n", m_fWeightUpdatingConstant);
+    fprintf(fout, "LOW_INITIAL_MODE_WEIGHT: %f\n", m_fLowInitialModeWeight);
+    fprintf(fout, "RELIABLE_BACKGROUND_MODE_WEIGHT: %f\n", m_fReliableBackgroundModeWeight);
+    fprintf(fout, "ROBUST_COLOR_OFFSET: %f\n", m_fRobustColorOffset);
+    fprintf(fout, "BACKGROUND_MODEL_PERCENT: %f\n", m_fBackgroundModelPercent);
+    fprintf(fout, "ROBUST_SHADOW_RATE: %f\n", m_fRobustShadowRate);
+    fprintf(fout, "ROBUST_HIGHLIGHT_RATE: %f\n", m_fRobustHighlightRate);
+    fprintf(fout, "PATTERN_COLOR_DIST_BACKGROUND_THRESHOLD: %f\n", m_fPatternColorDistBgThreshold);
+    fprintf(fout, "PATTERN_COLOR_DIST_BACKGROUND_UPDATED_THRESHOLD: %f\n", m_fPatternColorDistBgUpdatedThreshold);
+    fprintf(fout, "MIN_BACKGROUND_LAYER_WEIGHT: %f\n", m_fMinBgLayerWeight);
+    fprintf(fout, "PATTERN_DIST_SMOOTH_NEIG_HALF_SIZE: %d\n", m_nPatternDistSmoothNeigHalfSize);
+    fprintf(fout, "PATTERN_DIST_CONV_GAUSSIAN_SIGMA: %f\n", m_fPatternDistConvGaussianSigma);
+    fprintf(fout, "TEXTURE_WEIGHT: %f\n", m_fTextureWeight);
+    fprintf(fout, "MIN_NOISED_ANGLE: %f\n", m_fMinNoisedAngle);
+    fprintf(fout, "MIN_NOISED_ANGLE_SINE: %f\n", m_fMinNoisedAngleSine);
+    fprintf(fout, "BILATERAL_SIGMA_S: %f\n", m_fSigmaS);
+    fprintf(fout, "BILATERAL_SIGMA_R: %f\n", m_fSigmaR);
+    fprintf(fout, "LBP_LENGTH: %5d\n", m_nLBPLength);
+    fprintf(fout, "LBP_LEVEL_NUM: %5d\n", m_nLBPLevelNum);
+    fprintf(fout, "LBP_RADIUSES: ");
+    for (i = 0; i < m_nLBPLevelNum; i++)
+      fprintf(fout, "%10.5f", m_pLBPRadiuses[i]);
+    fprintf(fout, "\nLBP_NEIG_POINT_NUMS: ");
+    for (i = 0; i < m_nLBPLevelNum; i++)
+      fprintf(fout, "%6d", m_pLBPMeigPointNums[i]);
+  } else if (save_type == 2) { /* save the background model information and parameters */
+    fprintf(fout, "FILE_TYPE:  MODEL_PARAS_INFO\n\n");
+
+    fprintf(fout, "MAX_MODEL_NUM: %5d\n", m_nMaxLBPModeNum);
+    fprintf(fout, "FRAME_DURATION: %f\n", m_fFrameDuration);
+    fprintf(fout, "MODEL_UPDATING_LEARN_RATE: %f\n", m_fModeUpdatingLearnRate);
+    fprintf(fout, "WEIGHT_UPDATING_LEARN_RATE: %f\n", m_fWeightUpdatingLearnRate);
+    fprintf(fout, "WEIGHT_UPDATING_CONSTANT: %f\n", m_fWeightUpdatingConstant);
+    fprintf(fout, "LOW_INITIAL_MODE_WEIGHT: %f\n", m_fLowInitialModeWeight);
+    fprintf(fout, "RELIABLE_BACKGROUND_MODE_WEIGHT: %f\n", m_fReliableBackgroundModeWeight);
+    fprintf(fout, "ROBUST_COLOR_OFFSET: %f\n", m_fRobustColorOffset);
+    fprintf(fout, "BACKGROUND_MODEL_PERCENT: %f\n", m_fBackgroundModelPercent);
+    fprintf(fout, "ROBUST_SHADOW_RATE: %f\n", m_fRobustShadowRate);
+    fprintf(fout, "ROBUST_HIGHLIGHT_RATE: %f\n", m_fRobustHighlightRate);
+    fprintf(fout, "PATTERN_COLOR_DIST_BACKGROUND_THRESHOLD: %f\n", m_fPatternColorDistBgThreshold);
+    fprintf(fout, "PATTERN_COLOR_DIST_BACKGROUND_UPDATED_THRESHOLD: %f\n", m_fPatternColorDistBgUpdatedThreshold);
+    fprintf(fout, "MIN_BACKGROUND_LAYER_WEIGHT: %f\n", m_fMinBgLayerWeight);
+    fprintf(fout, "PATTERN_DIST_SMOOTH_NEIG_HALF_SIZE: %d\n", m_nPatternDistSmoothNeigHalfSize);
+    fprintf(fout, "PATTERN_DIST_CONV_GAUSSIAN_SIGMA: %f\n", m_fPatternDistConvGaussianSigma);
+    fprintf(fout, "TEXTURE_WEIGHT: %f\n", m_fTextureWeight);
+    fprintf(fout, "MIN_NOISED_ANGLE: %f\n", m_fMinNoisedAngle);
+    fprintf(fout, "MIN_NOISED_ANGLE_SINE: %f\n", m_fMinNoisedAngleSine);
+    fprintf(fout, "BILATERAL_SIGMA_S: %f\n", m_fSigmaS);
+    fprintf(fout, "BILATERAL_SIGMA_R: %f\n", m_fSigmaR);
+    fprintf(fout, "LBP_LENGTH: %5d\n", m_nLBPLength);
+    fprintf(fout, "LBP_LEVEL_NUM: %5d\n", m_nLBPLevelNum);
+    fprintf(fout, "LBP_RADIUSES: ");
+    for (i = 0; i < m_nLBPLevelNum; i++)
+      fprintf(fout, "%10.5f", m_pLBPRadiuses[i]);
+    fprintf(fout, "\nLBP_NEIG_POINT_NUMS: ");
+    for (i = 0; i < m_nLBPLevelNum; i++)
+      fprintf(fout, "%6d", m_pLBPMeigPointNums[i]);
+
+    fprintf(fout, "\nMAX_MODEL_NUM: %5d\n", m_nMaxLBPModeNum);
+    fprintf(fout, "LBP_LENGTH: %5d\n", m_nLBPLength);
+    fprintf(fout, "CHANNELS_NUM: %5d\n", m_nChannel);
+    fprintf(fout, "IMAGE_SIZE: %5d %5d\n\n", m_cvImgSize.width, m_cvImgSize.height);
+
+    fprintf(fout, "MODEL_INFO_PIXEL_BY_PIXEL:\n");
+
+    int img_length = m_cvImgSize.height * m_cvImgSize.width;
+    PixelLBPStruct* PLBP = m_pPixelLBPs;
+
+    for (int yx = 0; yx < img_length; yx++) {
+      fprintf(fout, "%3d %3d %3d", (*PLBP).num, (*PLBP).bg_num, (*PLBP).cur_bg_layer_no);
+      for (i = 0; i < (int) (*PLBP).num; i++)
+        fprintf(fout, " %3d", (*PLBP).lbp_idxes[i]);
+      for (i = 0; i < (int) (*PLBP).num; i++) {
+        int li = (*PLBP).lbp_idxes[i];
+        for (j = 0; j < m_nChannel; j++) {
+          fprintf(fout, " %7.1f %7.1f %7.1f", (*PLBP).LBPs[li].bg_intensity[j],
+            (*PLBP).LBPs[li].max_intensity[j], (*PLBP).LBPs[li].min_intensity[j]);
+        }
+        for (j = 0; j < m_nLBPLength; j++)
+          fprintf(fout, " %7.3f", (*PLBP).LBPs[li].bg_pattern[j]);
+        fprintf(fout, " %10.5f", (*PLBP).LBPs[li].weight);
+        fprintf(fout, " %10.5f", (*PLBP).LBPs[li].max_weight);
+        fprintf(fout, " %3d", (*PLBP).LBPs[li].bg_layer_num);
+        fprintf(fout, " %20lu", (*PLBP).LBPs[li].first_time);
+        fprintf(fout, " %20lu", (*PLBP).LBPs[li].last_time);
+        fprintf(fout, " %8d", (*PLBP).LBPs[li].freq);
+      }
+      fprintf(fout, "\n");
+      PLBP++;
+    }
+  } else { /* wrong save type */
+    printf("Please input correct save type: 0 - model_info  1 - model_paras  2 - model_paras_info\n");
+    fclose(fout);
+    exit(0);
+  }
+
+  fclose(fout);
+}
+
+bool CMultiLayerBGS::Load(const char *bg_model_fn) {
+  ifstream fin(bg_model_fn, ios::in);
+  if (fin.fail()) {
+    printf("Error opening background model file %s.\n", bg_model_fn);
+    fin.close();
+    return false;
+  }
+
+  char para_name[1024], model_type[1024];
+
+  fin >> para_name >> model_type;
+
+  int i, j;
+  CvSize img_size;
+  int img_length = m_cvImgSize.width * m_cvImgSize.height;
+  int max_lbp_mode_num = m_nMaxLBPModeNum;
+
+  if (!strcmp(model_type, "MODEL_INFO")) {
+    fin >> para_name >> m_nMaxLBPModeNum;
+    fin >> para_name >> m_nLBPLength;
+    fin >> para_name >> m_nChannel;
+    fin >> para_name >> img_size.width >> img_size.height;
+
+    if (m_cvImgSize.width != img_size.width || m_cvImgSize.height != img_size.height) {
+      printf("Image size is not matched!\n");
+      return false;
+    }
+
+    if (max_lbp_mode_num != m_nMaxLBPModeNum) {
+      PixelLBPStruct* PLBP = m_pPixelLBPs;
+      for (int yx = 0; yx < img_length; yx++) {
+        delete [] (*PLBP).LBPs;
+        delete [] (*PLBP).lbp_idxes;
+        (*PLBP).LBPs = new LBPStruct[m_nMaxLBPModeNum];
+        (*PLBP).lbp_idxes = new unsigned short[m_nMaxLBPModeNum];
+      }
+    }
+
+    fin >> para_name;
+
+    int img_length = m_cvImgSize.height * m_cvImgSize.width;
+    PixelLBPStruct* PLBP = m_pPixelLBPs;
+
+    for (int yx = 0; yx < img_length; yx++) {
+      fin >> (*PLBP).num >> (*PLBP).bg_num >> (*PLBP).cur_bg_layer_no;
+      for (i = 0; i < (int) (*PLBP).num; i++)
+        fin >> (*PLBP).lbp_idxes[i];
+      for (i = 0; i < (int) (*PLBP).num; i++) {
+        int li = (*PLBP).lbp_idxes[i];
+        for (j = 0; j < m_nChannel; j++) {
+          fin >> (*PLBP).LBPs[li].bg_intensity[j] >>
+            (*PLBP).LBPs[li].max_intensity[j] >> (*PLBP).LBPs[li].min_intensity[j];
+        }
+        for (j = 0; j < m_nLBPLength; j++)
+          fin >> (*PLBP).LBPs[li].bg_pattern[j];
+        fin >> (*PLBP).LBPs[li].weight >> (*PLBP).LBPs[li].max_weight >> (*PLBP).LBPs[li].bg_layer_num
+          >> (*PLBP).LBPs[li].first_time >> (*PLBP).LBPs[li].last_time >> (*PLBP).LBPs[li].freq;
+      }
+      PLBP++;
+    }
+  } else if (!strcmp(model_type, "MODEL_PARAS")) {
+    fin >> para_name >> m_nMaxLBPModeNum;
+    fin >> para_name >> m_fFrameDuration;
+    fin >> para_name >> m_fModeUpdatingLearnRate;
+    fin >> para_name >> m_fWeightUpdatingLearnRate;
+    fin >> para_name >> m_fWeightUpdatingConstant;
+    fin >> para_name >> m_fLowInitialModeWeight;
+    fin >> para_name >> m_fReliableBackgroundModeWeight;
+    fin >> para_name >> m_fRobustColorOffset;
+    fin >> para_name >> m_fBackgroundModelPercent;
+    fin >> para_name >> m_fRobustShadowRate;
+    fin >> para_name >> m_fRobustHighlightRate;
+    fin >> para_name >> m_fPatternColorDistBgThreshold;
+    fin >> para_name >> m_fPatternColorDistBgUpdatedThreshold;
+    fin >> para_name >> m_fMinBgLayerWeight;
+    fin >> para_name >> m_nPatternDistSmoothNeigHalfSize;
+    fin >> para_name >> m_fPatternDistConvGaussianSigma;
+    fin >> para_name >> m_fTextureWeight;
+    fin >> para_name >> m_fMinNoisedAngle;
+    fin >> para_name >> m_fMinNoisedAngleSine;
+    fin >> para_name >> m_fSigmaS;
+    fin >> para_name >> m_fSigmaR;
+    fin >> para_name >> m_nLBPLength;
+    fin >> para_name >> m_nLBPLevelNum;
+    fin >> para_name;
+    for (i = 0; i < m_nLBPLevelNum; i++)
+      fin >> m_pLBPRadiuses[i];
+    fin >> para_name;
+    for (i = 0; i < m_nLBPLevelNum; i++)
+      fin >> m_pLBPMeigPointNums[i];
+  } else if (!strcmp(model_type, "MODEL_PARAS_INFO")) {
+    fin >> para_name >> m_nMaxLBPModeNum;
+    fin >> para_name >> m_fFrameDuration;
+    fin >> para_name >> m_fModeUpdatingLearnRate;
+    fin >> para_name >> m_fWeightUpdatingLearnRate;
+    fin >> para_name >> m_fWeightUpdatingConstant;
+    fin >> para_name >> m_fLowInitialModeWeight;
+    fin >> para_name >> m_fReliableBackgroundModeWeight;
+    fin >> para_name >> m_fRobustColorOffset;
+    fin >> para_name >> m_fBackgroundModelPercent;
+    fin >> para_name >> m_fRobustShadowRate;
+    fin >> para_name >> m_fRobustHighlightRate;
+    fin >> para_name >> m_fPatternColorDistBgThreshold;
+    fin >> para_name >> m_fPatternColorDistBgUpdatedThreshold;
+    fin >> para_name >> m_fMinBgLayerWeight;
+    fin >> para_name >> m_nPatternDistSmoothNeigHalfSize;
+    fin >> para_name >> m_fPatternDistConvGaussianSigma;
+    fin >> para_name >> m_fTextureWeight;
+    fin >> para_name >> m_fMinNoisedAngle;
+    fin >> para_name >> m_fMinNoisedAngleSine;
+    fin >> para_name >> m_fSigmaS;
+    fin >> para_name >> m_fSigmaR;
+    fin >> para_name >> m_nLBPLength;
+    fin >> para_name >> m_nLBPLevelNum;
+    fin >> para_name;
+    for (i = 0; i < m_nLBPLevelNum; i++)
+      fin >> m_pLBPRadiuses[i];
+    fin >> para_name;
+    for (i = 0; i < m_nLBPLevelNum; i++)
+      fin >> m_pLBPMeigPointNums[i];
+
+    fin >> para_name >> m_nMaxLBPModeNum;
+    fin >> para_name >> m_nLBPLength;
+    fin >> para_name >> m_nChannel;
+    fin >> para_name >> img_size.width >> img_size.height;
+
+    if (m_cvImgSize.width != img_size.width || m_cvImgSize.height != img_size.height) {
+      printf("Image size is not matched!\n");
+      return false;
+    }
+
+    if (max_lbp_mode_num != m_nMaxLBPModeNum) {
+      PixelLBPStruct* PLBP = m_pPixelLBPs;
+      for (int yx = 0; yx < img_length; yx++) {
+        delete [] (*PLBP).LBPs;
+        delete [] (*PLBP).lbp_idxes;
+        (*PLBP).LBPs = new LBPStruct[m_nMaxLBPModeNum];
+        (*PLBP).lbp_idxes = new unsigned short[m_nMaxLBPModeNum];
+      }
+    }
+
+    fin >> para_name;
+
+    int img_length = m_cvImgSize.height * m_cvImgSize.width;
+    PixelLBPStruct* PLBP = m_pPixelLBPs;
+
+    for (int yx = 0; yx < img_length; yx++) {
+      fin >> (*PLBP).num >> (*PLBP).bg_num >> (*PLBP).cur_bg_layer_no;
+      for (i = 0; i < (int) (*PLBP).num; i++)
+        fin >> (*PLBP).lbp_idxes[i];
+      for (i = 0; i < (int) (*PLBP).num; i++) {
+        int li = (*PLBP).lbp_idxes[i];
+        for (j = 0; j < m_nChannel; j++) {
+          fin >> (*PLBP).LBPs[li].bg_intensity[j] >>
+            (*PLBP).LBPs[li].max_intensity[j] >> (*PLBP).LBPs[li].min_intensity[j];
+        }
+        for (j = 0; j < m_nLBPLength; j++)
+          fin >> (*PLBP).LBPs[li].bg_pattern[j];
+        fin >> (*PLBP).LBPs[li].weight >> (*PLBP).LBPs[li].max_weight >> (*PLBP).LBPs[li].bg_layer_num
+          >> (*PLBP).LBPs[li].first_time >> (*PLBP).LBPs[li].last_time >> (*PLBP).LBPs[li].freq;
+      }
+      PLBP++;
+    }
+  } else {
+    printf("Not correct model save type!\n");
+    fin.close();
+    exit(0);
+  }
+
+  fin.close();
+
+  ResetAllParameters();
+
+  return true;
+}
+
+void CMultiLayerBGS::SetValidPointMask(IplImage *maskImage, int mode) {
+  if (mode == 1)
+    SetBkMaskImage(maskImage);
+  else
+    cvAnd(m_pBkMaskImg, maskImage, m_pBkMaskImg);
+}
+
+void CMultiLayerBGS::SetFrameRate(float frameDuration) {
+  m_fModeUpdatingLearnRate = m_fModeUpdatingLearnRatePerSecond*frameDuration;
+  m_fWeightUpdatingLearnRate = m_fWeightUpdatingLearnRatePerSecond*frameDuration;
+
+  m_fFrameDuration = frameDuration;
+
+  m_f1_ModeUpdatingLearnRate = 1.0f - m_fModeUpdatingLearnRate;
+  m_f1_WeightUpdatingLearnRate = 1.0f - m_fWeightUpdatingLearnRate;
+}
+
+void CMultiLayerBGS::Init(int width, int height) {
+  IplImage* first_img = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
+  int lbp_level_num = 1;
+  float radiuses[] = {2.0f};
+  int neig_pt_nums[] = {6};
+  Initialization(first_img, lbp_level_num, radiuses, neig_pt_nums);
+  cvReleaseImage(&first_img);
+}
+
+int CMultiLayerBGS::SetRGBInputImage(IplImage *inputImage, CvRect *roi) {
+  if (!inputImage) {
+    printf("Please allocate the IplImage memory!\n");
+    return 0;
+  }
+  if (inputImage->width != m_cvImgSize.width ||
+    inputImage->height != m_cvImgSize.height ||
+    inputImage->depth != IPL_DEPTH_8U ||
+    inputImage->nChannels != 3) {
+      printf("Please provide the correct IplImage pointer, \ne.g. inputImage = cvCreateImage(imgSize, IPL_DEPTH_8U, 3);\n");
+      return 0;
+  }
+  SetNewImage(inputImage, roi);
+  return 1;
+}
+
+void CMultiLayerBGS::SetParameters(int max_lbp_mode_num, float mode_updating_learn_rate_per_second, float weight_updating_learn_rate_per_second, float low_init_mode_weight) {
+  m_nMaxLBPModeNum = max_lbp_mode_num;
+  m_fModeUpdatingLearnRate = mode_updating_learn_rate_per_second*m_fFrameDuration;
+  m_fWeightUpdatingLearnRate = weight_updating_learn_rate_per_second*m_fFrameDuration;
+  m_fLowInitialModeWeight = low_init_mode_weight;
+
+  m_fModeUpdatingLearnRatePerSecond = mode_updating_learn_rate_per_second;
+  m_fWeightUpdatingLearnRatePerSecond = weight_updating_learn_rate_per_second;
+
+  m_f1_ModeUpdatingLearnRate = 1.0f - m_fModeUpdatingLearnRate;
+  m_f1_WeightUpdatingLearnRate = 1.0f - m_fWeightUpdatingLearnRate;
+}
+
+int CMultiLayerBGS::Process() {
+  BackgroundSubtractionProcess();
+  return 1;
+}
+
+int CMultiLayerBGS::SetForegroundMaskImage(IplImage* fg_mask_img) {
+  if (!fg_mask_img) {
+    printf("Please allocate the IplImage memory!\n");
+    return 0;
+  }
+  if (fg_mask_img->width != m_cvImgSize.width ||
+    fg_mask_img->height != m_cvImgSize.height ||
+    fg_mask_img->depth != IPL_DEPTH_8U ||
+    fg_mask_img->nChannels != 1) {
+      printf("Please provide the correct IplImage pointer, \ne.g. fg_mask_img = cvCreateImage(imgSize, IPL_DEPTH_8U, 1);\n");
+      return 0;
+  }
+
+  m_pFgMaskImg = fg_mask_img;
+
+  return 1;
+}
+
+int CMultiLayerBGS::SetForegroundProbImage(IplImage* fg_prob_img) {
+  if (!fg_prob_img) {
+    printf("Please allocate the IplImage memory!\n");
+    return 0;
+  }
+  if (fg_prob_img->width != m_cvImgSize.width ||
+    fg_prob_img->height != m_cvImgSize.height ||
+    fg_prob_img->depth != IPL_DEPTH_8U) {
+      printf("Please provide the correct IplImage pointer, \ne.g. fg_prob_img = cvCreateImage(imgSize, IPL_DEPTH_8U, 1);\n");
+      return 0;
+  }
+
+  m_pFgProbImg = fg_prob_img;
+
+  return 1;
+}
+
+void CMultiLayerBGS::SetCurrentFrameNumber(unsigned long cur_frame_no) {
+  m_nCurImgFrameIdx = cur_frame_no;
+}
diff --git a/package_bgs/jmo/CMultiLayerBGS.h b/package_bgs/jmo/CMultiLayerBGS.h
new file mode 100644
index 0000000..1eda55b
--- /dev/null
+++ b/package_bgs/jmo/CMultiLayerBGS.h
@@ -0,0 +1,313 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+// BackgroundSubtraction.h: interface for the CBackgroundSubtraction class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(_MULTI_LAYER_BGS_H_)
+#define _MULTI_LAYER_BGS_H_
+
+/*
+Since the used fast cross bilateral filter codes can not be compiled under Windows,
+we don't use the bilateral filter to remove the noise in the foreground detection
+step. If you compile it under Linux, please uncomment it.
+*/
+//#define LINUX_BILATERAL_FILTER
+
+#include "LocalBinaryPattern.h"
+#include "BGS.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include "BlobResult.h"
+#include "OpenCvDataConversion.h"
+
+#include "BackgroundSubtractionAPI.h"
+
+#ifdef LINUX_BILATERAL_FILTER
+#include "CrossBilateralFilter.h"				// cross bilateral filter
+#endif
+
+#include <ctime>						// clock
+#include <cstdlib>						// C standard library
+#include <cstdio>						// C I/O (for sscanf)
+#include <cstring>						// string manipulation
+#include <fstream>						// file I/O
+#include <cmath>						// math includes
+#include <iostream>						// I/O streams
+
+using namespace std;						// make std:: accessible
+
+class CMultiLayerBGS : public CBackgroundSubtractionAPI
+{
+public:
+  //-------------------------------------------------------------
+  // TO CALL AT INITIALISATION: DEFINES THE SIZE OF THE INPUT IMAGES
+  // NORMALLY, UNNECESSARY IF A CONFIGURATION FILE IS LOADED
+  void   Init(int width,int height);
+
+  //-------------------------------------------------------------
+  // PROVIDE A MASK TO DEFINE THE SET OF POINTS WHERE BACKGROUND
+  // SUBTRACTION DOES NOT NEED TO BE PERFORMED
+  //
+  //  mode is useful to specify if the points to remove from
+  //  processing are in addition to the ones potentially
+  //  removed according to the configuration file,
+  //  or if they are the only ones to be removed
+  //
+  // mode=0 : provided points need to be removed
+  //          in addition to those already removed
+  // mode=1 : the provided points are the only one to remove
+  //          from processing
+  // Note:  maskImage(li,co)=0 indicate the points to remove
+  //       from background processing
+  void   SetValidPointMask(IplImage* maskImage, int mode);
+
+  //-------------------------------------------------------------
+  //
+  //   set the frame rate, to adjust the update parameters
+  //   to the actual frame rate.
+  //   Can be called only once at initialisation,
+  //   but in online cases, can be used to indicate
+  //   the time interval during the last processed frame
+  //
+  //   frameDuration is in millisecond
+  void   SetFrameRate(float    frameDuration);
+
+  //-------------------------------------------------------------
+  //
+  //   set some main parameters for background model learning.
+  //   in general, we can set large updating rates for background
+  //   model learning and set small updating rates in foreground
+  //   detection
+  void SetParameters(int max_lbp_mode_num,		// maximal LBP mode number
+    float mode_updating_learn_rate_per_second,	// background mode updating learning rate per second
+    float weight_updating_learn_rate_per_second,	// mode's weight updating learning rate per second
+    float low_init_mode_weight);			// the low initial mode weight
+
+  //-------------------------------------------------------------
+  //   PROVIDE A POINTER TO THE INPUT IMAGE
+  //   -> INDICATE WHERE THE NEW IMAGE TO PROCESS IS STORED
+  //
+  //   Here assumes that the input image will contain RGB images.
+  //   The memory of this image is handled by the caller.
+  //
+  //    The return value indicate whether the actual Background
+  //    Subtraction algorithm handles RGB images (1) or not (0).
+  //
+  int   SetRGBInputImage(IplImage  *  inputImage, CvRect *roi=NULL);
+
+  //-------------------------------------------------------------
+  //   PROVIDE A POINTER TO THE RESULT IMAGE
+  //   INDICATE WHERE THE BACKGROUND RESULT NEED TO BE STORED
+  //
+  int SetForegroundMaskImage(IplImage* fg_mask_img);
+  int SetForegroundProbImage(IplImage* fg_prob_img);
+
+  //-------------------------------------------------------------
+  // This function should be called each time a new image is
+  // available in the input image.
+  //
+  // The return value is 0 if everything goes well, a non-zero value
+  // otherwise.
+  //
+  int   Process();
+
+  //-------------------------------------------------------------
+  // this function should save parameters and information of the model
+  // (e.g. after a training of the model, or in such a way
+  // that the model can be reload to process the next frame
+  // type of save:
+  //	0 - background model information (pixel by pixel)
+  //	1 - background model parameters
+  //	2 - both background information (pixel by pixel) and parameters
+  void   Save(const char   *bg_model_fn, int save_type);
+  void   Save(const char* bg_model_fn);
+
+  //-------------------------------------------------------------
+  // this function should load the parameters necessary
+  // for the processing of the background subtraction or
+  // load background model information
+  bool   Load(const char  *bg_model_fn);
+
+
+  void SetCurrentFrameNumber(unsigned long cur_frame_no);
+
+  void GetForegroundMaskImage(IplImage *fg_mask_img);
+  void GetForegroundImage(IplImage *fg_img, CvScalar bg_color=CV_RGB(0,255,0));
+  void GetBackgroundImage(IplImage *bk_img);
+  void GetForegroundProbabilityImage(IplImage* fg_prob_img);
+
+  void GetBgLayerNoImage(IplImage *bg_layer_no_img, CvScalar* layer_colors=NULL, int layer_num=0);
+  void GetLayeredBackgroundImage(int layered_no, IplImage *layered_bg_img, CvScalar empty_color=CV_RGB(0,0,0));
+  void GetCurrentLayeredBackgroundImage(int layered_no, IplImage *layered_bg_img, IplImage *layered_fg_img=NULL,
+    CvScalar layered_bg_bk_color=CV_RGB(0,0,0), CvScalar layered_fg_color=CV_RGB(255,0,0),
+    int smooth_win=13, float smooth_sigma=3.0f, float below_layer_noise=0.5f, float above_layer_noise=0.3f, int min_blob_size=50);
+  float DistLBP(LBPStruct *LBP1, LBPStruct *LBP2);
+  void GetColoredBgMultiLayeredImage(IplImage *bg_multi_layer_img, CvScalar *layer_colors);
+  void UpdatePatternColorDistWeights(float *cur_pattern, float *bg_pattern);
+  void ExportLogMessage(char* msg);
+  void Postprocessing();
+  void GetFloatEdgeImage(IplImage *src, IplImage *dst);
+  void RemoveBackgroundLayers(PixelLBPStruct *PLBP, bool *removed_modes=NULL);
+  float CalColorRangeDist(unsigned char *cur_intensity, float *bg_intensity, float *max_intensity,
+    float *min_intensity, float shadow_rate, float highlight_rate);
+  float CalVectorsAngle(float *c1, unsigned char *c2, int length);
+  float CalVectorsNoisedAngle(float *bg_color, unsigned char *noised_color, float offset, int length);
+  void ComputeGradientImage(IplImage *src, IplImage *dst, bool bIsFloat);
+  float CalColorBgDist(uchar *cur_intensity, float *bg_intensity, float *max_intensity, float *min_intensity);
+  float CalPatternBgDist(float *cur_pattern, float *bg_pattern);
+
+  void GetForegroundMaskMap(CvMat *fg_mask_mat);
+  void Initialization(IplImage *first_img, int lbp_level_num, float *radiuses, int *neig_pt_nums);
+  void GetCurrentBackgroundDistMap(CvMat *bk_dist_map);
+  void BackgroundSubtractionProcess();
+  void SetBkMaskImage(IplImage *mask_img);
+  void SetNewImage(IplImage *new_img, CvRect *roi=NULL);
+
+  void ResetAllParameters();
+  void QuickSort(float *pData, unsigned short *pIdxes, long low, long high, bool bAscent);
+  void UpdateBgPixelPattern(float *cur_pattern, float *bg_bg_pattern);
+  void UpdateBgPixelColor(unsigned char* cur_intensity, float* bg_intensity);
+  void Update_MAX_MIN_Intensity(unsigned char *cur_intensity, float *max_intensity, float *min_intensity);
+  void MergeImages(int num, ...);
+
+  int	m_nChannel;				/* most of opencv functions support 1,2,3 or 4 channels, for the input images */
+
+  PixelLBPStruct*	m_pPixelLBPs;			/* the LBP texture patterns for each image */
+  int	m_nMaxLBPModeNum;			/* the maximal number for the used LBP pattern models */
+  float	m_fModeUpdatingLearnRate;		/* the background mode learning rate */
+  float	m_fWeightUpdatingLearnRate;		/* the background mode weight updating rate */
+  float	m_f1_ModeUpdatingLearnRate;		/* 1 - background_mode_learning_rate */
+  float	m_f1_WeightUpdatingLearnRate;		/* 1 - background_mode_weight_updating_rate */
+  float	m_fRobustColorOffset;			/* the intensity offset robust to noise */
+  float	m_fLowInitialModeWeight;		/* the lowest weight of initial background mode */
+  int	m_nLBPLength;				/* the length of texture LBP operator */
+  float	m_fPatternColorDistBgThreshold;		/* the threshold value used to classify background and foreground */
+  float	m_fPatternColorDistBgUpdatedThreshold;	/* the threshold value used to update the background modeling */
+  float	m_fMinBgLayerWeight;			/* the minimal weight to remove background layers */
+
+  int	m_nPatternDistSmoothNeigHalfSize;	/* the neighboring half size of gaussian window to remove the noise
+                                        on the distance map */
+  float	m_fPatternDistConvGaussianSigma;	/* the gaussian sigma used to remove the noise on the distance map */
+
+  float	m_fBackgroundModelPercent;		/* the background mode percent, the first several background modes
+                                      with high mode weights should be regarded as reliable background modes */
+
+  float	m_fRobustShadowRate;			/* the minimal shadow rate, [0.4, 0.7] */
+  float	m_fRobustHighlightRate;			/* the maximal highlight rate, [1.1, 1.4] */
+
+  int	m_nLBPImgNum;				/* the number of images used for texture LBP feature */
+
+  float	m_fMinLBPBinaryProb;			/* the minimal LBP binary probability */
+  float	m_f1_MinLBPBinaryProb;			/* 1 - minimal_LBP_binary_probability */
+
+  CvSize	m_cvImgSize;				/* the image size (width, height) */
+
+  unsigned long	m_nCurImgFrameIdx;			/* the frame index of current image */
+
+  bool	m_bUsedGradImage;			/* the boolean variable signaling whether the gradient image is used
+                              or not for computing LBP operator */
+
+  bool	m_bUsedColorLBP;			/* true - multi-channel color image for LBP operator,
+                              false - gray-scale image for LBP operator  */
+
+  CLocalBinaryPattern	m_cLBP;			/* the class instant for computing LBP (local binary pattern) texture feature */
+
+  IplImage* m_pBkMaskImg;				/* the mask image corresponding to the input image,
+                                i.e. all the masked pixels should be processed  */
+
+  IplImage* m_pOrgImg;				/* the original image */
+  IplImage** m_ppOrgLBPImgs;			/* the multi-layer images used for LBP feature extraction */
+  IplImage* m_pFgImg;				/* the foreground image */
+  IplImage* m_pBgImg;				/* the background image */
+  IplImage* m_pFgMaskImg;				/* the foreground mask image */
+  IplImage* m_pBgDistImg;				/* the background distance image (float) */
+  IplImage* m_pEdgeImg;				/* the edge image used for cross bilateral filter */
+  IplImage* m_pFgProbImg;				/* the foreground probability image (uchar) */
+
+  IplImage* m_pFirstAppearingTimeMap;
+
+#ifdef LINUX_BILATERAL_FILTER
+  CCrossBilateralFilter	m_cCrossBF;		/* the class instant for cross bilateral filter
+                                      which should be used to remove noise on the distance map */
+#endif
+
+  bool	m_disableLearning;
+  float	m_fSigmaS;				/* sigma in the spatial domain for cross bilateral filter */
+  float	m_fSigmaR;				/* sigma in the normalized intensity domain for cross bilateral filter */
+
+  float	m_fTextureWeight;			/* the weight value of texture LBP feature
+                              for background modeling & foreground detection */
+
+  float	m_fColorWeight;				/* the weight value of color invariant feature
+                              for background modeling & foreground detection */
+
+  float	m_fWeightUpdatingConstant;		/* the constant ( >= 1 ) for 'hysteries' weight updating scheme
+                                      (increase when matched, decrease when un-matched */
+
+  float	m_fReliableBackgroundModeWeight;	/* the weight value for background mode
+                                          which should be regarded as a reliable background mode,
+                                          which is useful for multi-layer scheme */
+
+  float	m_fMinNoisedAngle;			/* the minimal angle value between the background color
+                                and the noised observed color */
+
+  float	m_fMinNoisedAngleSine;			/* the minimal angle sine value between the background color
+                                    and the noised observed color */
+
+  float	m_fFrameDuration;			/* frame duration */
+
+  float	m_fModeUpdatingLearnRatePerSecond;
+  float	m_fWeightUpdatingLearnRatePerSecond;
+
+  int m_nLBPLevelNum;
+  float m_pLBPRadiuses[10];
+  int m_pLBPMeigPointNums[10];
+
+  CvRect* m_pROI;
+  CMultiLayerBGS();
+  virtual ~CMultiLayerBGS();
+};
+
+#endif // !defined(_MULTI_LAYER_BGS_H_)
+
diff --git a/package_bgs/jmo/LocalBinaryPattern.cpp b/package_bgs/jmo/LocalBinaryPattern.cpp
new file mode 100644
index 0000000..45528aa
--- /dev/null
+++ b/package_bgs/jmo/LocalBinaryPattern.cpp
@@ -0,0 +1,314 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+// LocalBinaryPattern.cpp: implementation of the CLocalBinaryPattern class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "LocalBinaryPattern.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CLocalBinaryPattern::CLocalBinaryPattern()
+{
+  m_ppOrgImgs = NULL;
+  m_pRadiuses = NULL;
+  m_fRobustWhiteNoise = 3.0f;
+  m_pNeigPointsNums = NULL;
+  m_pXYShifts = NULL;
+  m_pShiftedImg = NULL;
+}
+
+CLocalBinaryPattern::~CLocalBinaryPattern()
+{
+  FreeMemories();
+}
+
+void CLocalBinaryPattern::Initialization(IplImage **first_imgs, int imgs_num, int level_num, float *radius, int *neig_pt_num, float robust_white_noise, int type)
+{
+
+  m_nImgsNum = imgs_num;
+
+  m_nLBPLevelNum = level_num;
+
+  m_pRadiuses = new float[m_nLBPLevelNum];
+  m_pNeigPointsNums= new int[m_nLBPLevelNum];
+  m_ppOrgImgs = first_imgs;
+
+  int a, b;
+  for ( a = 0 ; a < m_nImgsNum ; a++ ) {
+    m_cvImgSize = cvGetSize(first_imgs[a]);
+
+    if ( first_imgs[a]->nChannels > 1 ) {
+      printf("Input image channel must be 1!");
+      exit(1);
+    }
+  }
+
+  int tot_neig_pts_num = 0;
+  for ( a = 0 ; a < m_nLBPLevelNum ; a++ ) {
+    m_pRadiuses[a] = radius[a];
+    m_pNeigPointsNums[a] = neig_pt_num[a];
+    tot_neig_pts_num += neig_pt_num[a];
+    if ( m_pNeigPointsNums[a] % 2 != 0 ) {
+      printf("Even number must be given for points number for LBP!\n");
+      exit(1);
+    }
+  }
+
+  m_pShiftedImg = cvCloneImage(m_ppOrgImgs[0]);
+
+  m_pXYShifts = new CvPoint[tot_neig_pts_num];
+
+  m_nMaxShift.x = 0;
+  m_nMaxShift.y = 0;
+  int shift_idx = 0;
+  for ( a = 0 ; a < m_nLBPLevelNum ; a++ ) 
+    for ( b = 0 ; b < m_pNeigPointsNums[a] ; b++ ) {
+      // compute the offset of neig point
+      CalNeigPixelOffset(m_pRadiuses[a], m_pNeigPointsNums[a], b, m_pXYShifts[shift_idx].x, m_pXYShifts[shift_idx].y);
+      m_nMaxShift.x = MAX(m_nMaxShift.x, m_pXYShifts[shift_idx].x);
+      m_nMaxShift.y = MAX(m_nMaxShift.y, m_pXYShifts[shift_idx].y);
+      shift_idx++;
+    }
+
+    m_fRobustWhiteNoise = robust_white_noise;
+}
+
+void CLocalBinaryPattern::SetNewImages(IplImage **new_imgs)
+{
+  m_ppOrgImgs = new_imgs;
+}
+
+void CLocalBinaryPattern::ComputeLBP(PixelLBPStruct *PLBP, CvRect *roi)
+{
+  float *dif_pattern;
+  float *_dif_pattern;
+  PixelLBPStruct *_PLBP;
+  int data_length;
+  float *cur_pattern;
+
+  // allocate memories
+  if ( roi ) 
+    data_length = roi->height*roi->width;
+  else
+    data_length = m_cvImgSize.width*m_cvImgSize.height;
+
+  dif_pattern = new float[data_length];
+
+  int img_idx, pt_idx, yx, level;
+  int pattern_idx = 0;
+  for ( img_idx = 0 ; img_idx < m_nImgsNum ; img_idx++ ) {
+    for ( level = 0 ; level < m_nLBPLevelNum ; level++ ) {
+      for ( pt_idx = 0 ; pt_idx < m_pNeigPointsNums[level] ; pt_idx++ ) {
+
+        // computing the shifted image
+        CalShiftedImage(m_ppOrgImgs[img_idx], m_pXYShifts[pattern_idx].x, m_pXYShifts[pattern_idx].y, m_pShiftedImg, roi);
+
+        // computing the different binary images
+        CalImageDifferenceMap(m_ppOrgImgs[img_idx], m_pShiftedImg, dif_pattern, roi);
+
+        // set the binary values
+        _PLBP = PLBP;
+        _dif_pattern = dif_pattern;
+
+        if ( roi ) {
+          int x, y;
+          for ( y = 0 ; y < roi->height ; y++ )  {
+            _PLBP = PLBP + (y+roi->y)*m_cvImgSize.width + roi->x;
+            for ( x = 0 ; x < roi->width ; x++ ) {
+              cur_pattern = (*_PLBP++).cur_pattern;
+              cur_pattern[pattern_idx] = *_dif_pattern++;
+            }
+          }
+        }
+        else {
+          for ( yx = 0 ; yx < data_length ; yx++ ) {
+            cur_pattern = (*_PLBP++).cur_pattern;
+            cur_pattern[pattern_idx] = *_dif_pattern++;
+          }
+        }
+
+        pattern_idx++;
+
+      }
+    }
+  }
+
+  // release memories
+  delete [] dif_pattern;
+
+  //delete [] shifted_dif_pattern;
+  //cvReleaseImage(&shifted_img);
+  //cvReleaseImage(&pattern_img);
+}
+
+void CLocalBinaryPattern::FreeMemories()
+{
+  if ( m_pRadiuses != NULL )
+    delete [] m_pRadiuses;
+  if ( m_pNeigPointsNums != NULL )
+    delete [] m_pNeigPointsNums;
+  if ( m_pXYShifts )
+    delete [] m_pXYShifts;
+  if ( m_pShiftedImg )
+    cvReleaseImage(&m_pShiftedImg);
+
+  m_pXYShifts = NULL;
+  m_pRadiuses = NULL;
+  m_pNeigPointsNums = NULL;
+  m_pShiftedImg = NULL;
+}
+
+void CLocalBinaryPattern::SetShiftedMeshGrid(CvSize img_size, float offset_x, float offset_y, CvMat *grid_map_x, CvMat *grid_map_y)
+{
+  float *gX = (float*)(grid_map_x->data.ptr);
+  float *gY = (float*)(grid_map_y->data.ptr);
+
+  int x, y;
+  for ( y = 0 ; y < img_size.height ; y++ ) {
+    for ( x = 0 ; x < img_size.width ; x++ ) {
+      *gX++ = (float)x + offset_x;
+      *gY++ = (float)y + offset_y;
+    }
+  }
+}
+
+void CLocalBinaryPattern::CalShiftedImage(IplImage *src, int offset_x, int offset_y, IplImage *dst, CvRect *roi)
+{
+  CvRect src_roi, dst_roi;
+  int roi_width, roi_height;
+
+  if ( roi ) {
+    src_roi.x = MAX(offset_x+roi->x, 0);
+    src_roi.y = MAX(offset_y+roi->y, 0);
+
+    dst_roi.x = MAX(-(offset_x+roi->x), roi->x);
+    dst_roi.y = MAX(-(offset_y+roi->y), roi->y);
+
+    roi_width = MIN(MIN(roi->width+(int)fabsf((float)offset_x), src->width-src_roi.x), dst->width-dst_roi.x);
+    roi_height = MIN(MIN(roi->height+(int)fabsf((float)offset_y), src->height-src_roi.y), dst->height-dst_roi.y);
+
+    src_roi.width = roi_width;
+    src_roi.height = roi_height;
+
+    dst_roi.width = roi_width;
+    dst_roi.height = roi_height;
+  }
+  else {
+    roi_width = src->width-(int)fabsf((float)offset_x);
+    roi_height = src->height-(int)fabsf((float)offset_y);
+
+    src_roi.x = MAX(offset_x, 0);
+    src_roi.y = MAX(offset_y, 0);
+    src_roi.width = roi_width;
+    src_roi.height = roi_height;
+
+    dst_roi.x = MAX(-offset_x, 0);
+    dst_roi.y = MAX(-offset_y, 0);
+    dst_roi.width = roi_width;
+    dst_roi.height = roi_height;
+  }
+
+  cvSet(dst,cvScalar(0));
+
+  if ( roi_width <= 0 || roi_height <= 0 )
+    return;
+
+  cvSetImageROI(src, src_roi);
+  cvSetImageROI(dst, dst_roi);
+  cvCopy(src, dst);
+  cvResetImageROI(src);
+  cvResetImageROI(dst);
+}
+
+void CLocalBinaryPattern::CalNeigPixelOffset(float radius, int tot_neig_pts_num, int neig_pt_idx, int &offset_x, int &offset_y)
+{
+  float angle = (float)neig_pt_idx/(float)tot_neig_pts_num*2.0f*PI;
+  offset_x = cvRound(radius*cosf(angle));
+  offset_y = cvRound(-radius*sinf(angle));
+}
+
+void CLocalBinaryPattern::CalImageDifferenceMap(IplImage *cent_img, IplImage *neig_img, float *pattern, CvRect *roi)
+{
+  COpencvDataConversion<uchar, uchar> ODC;
+
+  if ( roi ) {
+    cvSetImageROI(cent_img, *roi);
+    cvSetImageROI(neig_img, *roi);
+  }
+
+  uchar *_centI = ODC.GetImageData(cent_img);
+  uchar *_neigI = ODC.GetImageData(neig_img);
+  uchar *centI = _centI;
+  uchar *neigI = _neigI;
+
+  float *tmp_pattern = pattern;
+
+  int xy;
+  int length;
+
+  if ( roi )
+    length = roi->height*roi->width;
+  else
+    length = cent_img->height*cent_img->width;
+
+  for ( xy = 0 ; xy < length ; xy++ ) {
+    *tmp_pattern = (float)BINARY_PATTERM_ELEM(*neigI, *centI, m_fRobustWhiteNoise);
+    tmp_pattern++;
+    centI++;
+    neigI++;
+  }
+
+  if ( roi ) {
+    cvResetImageROI(cent_img);
+    cvResetImageROI(neig_img);
+  }
+
+  // release memories
+  delete [] _centI;
+  delete [] _neigI;
+
+}
+
diff --git a/package_bgs/jmo/LocalBinaryPattern.h b/package_bgs/jmo/LocalBinaryPattern.h
new file mode 100644
index 0000000..307d94f
--- /dev/null
+++ b/package_bgs/jmo/LocalBinaryPattern.h
@@ -0,0 +1,103 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+// LocalBinaryPattern.h: interface for the CLocalBinaryPattern class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(_LOCAL_BINARY_PATTERN_H_)
+#define _LOCAL_BINARY_PATTERN_H_
+
+#include <cv.h>
+#include "BGS.h"
+
+
+/************************************************************************/
+/* two types of computing the LBP operators but currently GENERAL_LBP   */
+/* has been implemented.                                                */
+/************************************************************************/
+#define	GENERAL_LBP	0
+#define SYMMETRIC_LBP	1
+
+#include <cstdio>						// C I/O (for sscanf)
+#include "OpenCvDataConversion.h"
+
+
+class CLocalBinaryPattern  
+{
+public:
+  void CalImageDifferenceMap(IplImage *cent_img, IplImage *neig_img, float *pattern, CvRect *roi=NULL);
+  void CalNeigPixelOffset(float radius, int tot_neig_pts_num, int neig_pt_idx, int &offset_x, int &offset_y);
+  void CalShiftedImage(IplImage *src, int offset_x, int offset_y, IplImage *dst, CvRect *roi=NULL);
+  void FreeMemories();
+  void ComputeLBP(PixelLBPStruct *PLBP, CvRect *roi=NULL);
+  void SetNewImages(IplImage **new_imgs);
+
+  IplImage** m_ppOrgImgs;			/* the original images used for computing the LBP operators */
+
+  void Initialization(IplImage **first_imgs, int imgs_num, 
+    int level_num, float *radius, int *neig_pt_num, 
+    float robust_white_noise = 3.0f, int type = GENERAL_LBP);
+
+  CLocalBinaryPattern();
+  virtual ~CLocalBinaryPattern();
+
+  float	m_fRobustWhiteNoise;		/* the robust noise value for computing the LBP operator in each channel */
+
+private:
+  void SetShiftedMeshGrid(CvSize img_size, float offset_x, float offset_y, CvMat *grid_map_x, CvMat *grid_map_y);
+
+  float*	m_pRadiuses;			/* the circle radiuses for the LBP operator */
+  int	m_nLBPType;			/* the type of computing LBP operator */
+  int*	m_pNeigPointsNums;		/* the numbers of neighboring pixels on multi-level circles */
+  int	m_nImgsNum;			/* the number of multi-channel image */
+  int	m_nLBPLevelNum;			/* the number of multi-level LBP operator */
+  CvSize	m_cvImgSize;			/* the image size (width, height) */
+
+  CvPoint* m_pXYShifts;
+  CvPoint	m_nMaxShift;
+
+  IplImage* m_pShiftedImg;
+};
+
+#endif // !defined(_LOCAL_BINARY_PATTERN_H_)
+
diff --git a/package_bgs/jmo/MultiLayerBGS.cpp b/package_bgs/jmo/MultiLayerBGS.cpp
new file mode 100644
index 0000000..dc0a6e8
--- /dev/null
+++ b/package_bgs/jmo/MultiLayerBGS.cpp
@@ -0,0 +1,332 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "MultiLayerBGS.h"
+
+MultiLayerBGS::MultiLayerBGS() : firstTime(true), showOutput(true), 
+  bg_model_preload(""), saveModel(false), disableLearning(false), disableDetectMode(true), loadDefaultParams(true), 
+  detectAfter(0), frameNumber(0)
+{
+  std::cout << "MultiLayerBGS()" << std::endl;
+}
+
+MultiLayerBGS::~MultiLayerBGS()
+{
+  finish();
+  std::cout << "~MultiLayerBGS()" << std::endl;
+}
+
+void MultiLayerBGS::setStatus(Status _status)
+{
+  status = _status;
+}
+
+void MultiLayerBGS::finish(void)
+{
+  if(bg_model_preload.empty())
+  {
+    bg_model_preload = "./models/MultiLayerBGSModel.yml";
+    saveConfig();
+  }
+
+  if(status == MLBGS_LEARN && saveModel == true)
+  {
+    std::cout << "MultiLayerBGS saving background model: " << bg_model_preload << std::endl;
+    BGS->Save(bg_model_preload.c_str());
+  }
+
+  cvReleaseImage(&fg_img);
+  cvReleaseImage(&bg_img);
+  cvReleaseImage(&fg_prob_img);
+  cvReleaseImage(&fg_mask_img);
+  cvReleaseImage(&fg_prob_img3);
+  cvReleaseImage(&merged_img);
+
+  delete BGS;
+}
+
+void MultiLayerBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  CvSize img_size = cvSize(cvCeil((double) img_input.size().width), cvCeil((double) img_input.size().height));
+
+  if(firstTime)
+  {
+    if(disableDetectMode)
+      status = MLBGS_LEARN;
+
+    if(status == MLBGS_LEARN)
+      std::cout << "MultiLayerBGS in LEARN mode" << std::endl;
+
+    if(status == MLBGS_DETECT)
+      std::cout << "MultiLayerBGS in DETECT mode" << std::endl;
+
+    org_img = new IplImage(img_input);
+
+    fg_img = cvCreateImage(img_size, org_img->depth, org_img->nChannels);
+    bg_img = cvCreateImage(img_size, org_img->depth, org_img->nChannels);
+    fg_prob_img = cvCreateImage(img_size, org_img->depth, 1);
+    fg_mask_img = cvCreateImage(img_size, org_img->depth, 1);
+    fg_prob_img3 = cvCreateImage(img_size, org_img->depth, org_img->nChannels);
+    merged_img = cvCreateImage(cvSize(img_size.width * 2, img_size.height * 2), org_img->depth, org_img->nChannels);
+
+    BGS = new CMultiLayerBGS();
+    BGS->Init(img_size.width, img_size.height);
+    BGS->SetForegroundMaskImage(fg_mask_img);
+    BGS->SetForegroundProbImage(fg_prob_img);
+
+    if(bg_model_preload.empty() == false)
+    {
+      std::cout << "MultiLayerBGS loading background model: " << bg_model_preload << std::endl;
+      BGS->Load(bg_model_preload.c_str());
+    }
+
+    if(status == MLBGS_DETECT)
+    {
+      BGS->m_disableLearning = disableLearning;
+
+      if(disableLearning)
+        std::cout << "MultiLayerBGS disabled learning in DETECT mode" << std::endl;
+      else
+        std::cout << "MultiLayerBGS enabled learning in DETECT mode" << std::endl;
+    }
+
+    if(loadDefaultParams)
+    {
+      std::cout << "MultiLayerBGS loading default params" << std::endl;
+
+      max_mode_num = 5;
+      weight_updating_constant = 5.0;
+      texture_weight = 0.5;
+      bg_mode_percent = 0.6;
+      pattern_neig_half_size = 4;
+      pattern_neig_gaus_sigma = 3.0;
+      bg_prob_threshold = 0.2;
+      bg_prob_updating_threshold = 0.2;
+      robust_LBP_constant = 3;
+      min_noised_angle = 10.0 / 180.0 * PI; //0,01768
+      shadow_rate = 0.6;
+      highlight_rate = 1.2;
+      bilater_filter_sigma_s = 3.0;
+      bilater_filter_sigma_r = 0.1;
+    }
+    else
+      std::cout << "MultiLayerBGS loading config params" << std::endl;
+
+    BGS->m_nMaxLBPModeNum = max_mode_num;
+    BGS->m_fWeightUpdatingConstant = weight_updating_constant;
+    BGS->m_fTextureWeight = texture_weight;
+    BGS->m_fBackgroundModelPercent = bg_mode_percent;
+    BGS->m_nPatternDistSmoothNeigHalfSize = pattern_neig_half_size;
+    BGS->m_fPatternDistConvGaussianSigma = pattern_neig_gaus_sigma;
+    BGS->m_fPatternColorDistBgThreshold = bg_prob_threshold;
+    BGS->m_fPatternColorDistBgUpdatedThreshold = bg_prob_updating_threshold;
+    BGS->m_fRobustColorOffset = robust_LBP_constant;
+    BGS->m_fMinNoisedAngle = min_noised_angle;
+    BGS->m_fRobustShadowRate = shadow_rate;
+    BGS->m_fRobustHighlightRate = highlight_rate;
+    BGS->m_fSigmaS = bilater_filter_sigma_s;
+    BGS->m_fSigmaR = bilater_filter_sigma_r;
+
+    if(loadDefaultParams)
+    {
+      //frame_duration = 1.0 / 30.0;
+      //frame_duration = 1.0 / 25.0;
+      frame_duration = 1.0 / 10.0;
+    }
+
+    BGS->SetFrameRate(frame_duration);
+
+    if(status == MLBGS_LEARN)
+    {
+      if(loadDefaultParams)
+      {
+        mode_learn_rate_per_second = 0.5;
+        weight_learn_rate_per_second = 0.5;
+        init_mode_weight = 0.05;
+      }
+      else
+      {
+        mode_learn_rate_per_second = learn_mode_learn_rate_per_second;
+        weight_learn_rate_per_second = learn_weight_learn_rate_per_second;
+        init_mode_weight = learn_init_mode_weight;
+      }
+    }
+
+    if(status == MLBGS_DETECT)
+    {
+      if(loadDefaultParams)
+      {
+        mode_learn_rate_per_second = 0.01;
+        weight_learn_rate_per_second = 0.01;
+        init_mode_weight = 0.001;
+      }
+      else
+      {
+        mode_learn_rate_per_second = detect_mode_learn_rate_per_second;
+        weight_learn_rate_per_second = detect_weight_learn_rate_per_second;
+        init_mode_weight = detect_init_mode_weight;
+      }
+    }
+
+    BGS->SetParameters(max_mode_num, mode_learn_rate_per_second, weight_learn_rate_per_second, init_mode_weight);
+
+    saveConfig();
+
+    delete org_img;
+  }
+  
+  //IplImage* inputImage = new IplImage(img_input);
+  //IplImage* img = cvCreateImage(img_size, IPL_DEPTH_8U, 3);
+  //cvCopy(inputImage, img);
+  //delete inputImage;
+
+  if(detectAfter > 0 && detectAfter == frameNumber)
+  {
+    std::cout << "MultiLayerBGS in DETECT mode" << std::endl;
+
+    status = MLBGS_DETECT;
+
+    mode_learn_rate_per_second = 0.01;
+    weight_learn_rate_per_second = 0.01;
+    init_mode_weight = 0.001;
+
+    BGS->SetParameters(max_mode_num, mode_learn_rate_per_second, weight_learn_rate_per_second, init_mode_weight);
+
+    BGS->m_disableLearning = disableLearning;
+
+    if(disableLearning)
+      std::cout << "MultiLayerBGS disabled learning in DETECT mode" << std::endl;
+    else
+      std::cout << "MultiLayerBGS enabled learning in DETECT mode" << std::endl;
+  }
+
+  IplImage* img = new IplImage(img_input);
+
+  BGS->SetRGBInputImage(img);
+  BGS->Process();
+  
+  BGS->GetBackgroundImage(bg_img);
+  BGS->GetForegroundImage(fg_img);
+  BGS->GetForegroundProbabilityImage(fg_prob_img3);
+  BGS->GetForegroundMaskImage(fg_mask_img);
+  BGS->MergeImages(4, img, bg_img, fg_prob_img3, fg_img, merged_img);
+
+  img_merged = cv::Mat(merged_img);
+  img_foreground = cv::Mat(fg_mask_img);
+  img_background = cv::Mat(bg_img);
+
+  if(showOutput)
+  {
+    cv::imshow("MLBGS Layers", img_merged);
+    cv::imshow("MLBGS FG Mask", img_foreground);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+  
+  delete img;
+  //cvReleaseImage(&img);
+
+  firstTime = false;
+  frameNumber++;
+}
+
+void MultiLayerBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/MultiLayerBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteString(fs, "preloadModel", bg_model_preload.c_str());
+  cvWriteInt(fs, "saveModel", saveModel);
+  cvWriteInt(fs, "detectAfter", detectAfter);
+  cvWriteInt(fs, "disableDetectMode", disableDetectMode);
+  cvWriteInt(fs, "disableLearningInDetecMode", disableLearning);
+  cvWriteInt(fs, "loadDefaultParams", loadDefaultParams);
+  
+  cvWriteInt(fs, "max_mode_num", max_mode_num);
+  cvWriteReal(fs, "weight_updating_constant", weight_updating_constant);
+  cvWriteReal(fs, "texture_weight", texture_weight);
+  cvWriteReal(fs, "bg_mode_percent", bg_mode_percent);
+  cvWriteInt(fs, "pattern_neig_half_size", pattern_neig_half_size);
+  cvWriteReal(fs, "pattern_neig_gaus_sigma", pattern_neig_gaus_sigma);
+  cvWriteReal(fs, "bg_prob_threshold", bg_prob_threshold);
+  cvWriteReal(fs, "bg_prob_updating_threshold", bg_prob_updating_threshold);
+  cvWriteInt(fs, "robust_LBP_constant", robust_LBP_constant);
+  cvWriteReal(fs, "min_noised_angle", min_noised_angle);
+  cvWriteReal(fs, "shadow_rate", shadow_rate);
+  cvWriteReal(fs, "highlight_rate", highlight_rate);
+  cvWriteReal(fs, "bilater_filter_sigma_s", bilater_filter_sigma_s);
+  cvWriteReal(fs, "bilater_filter_sigma_r", bilater_filter_sigma_r);
+
+  cvWriteReal(fs, "frame_duration", frame_duration);
+
+  cvWriteReal(fs, "learn_mode_learn_rate_per_second", learn_mode_learn_rate_per_second);
+  cvWriteReal(fs, "learn_weight_learn_rate_per_second", learn_weight_learn_rate_per_second);
+  cvWriteReal(fs, "learn_init_mode_weight", learn_init_mode_weight);
+  
+  cvWriteReal(fs, "detect_mode_learn_rate_per_second", detect_mode_learn_rate_per_second);
+  cvWriteReal(fs, "detect_weight_learn_rate_per_second", detect_weight_learn_rate_per_second);
+  cvWriteReal(fs, "detect_init_mode_weight", detect_init_mode_weight);
+
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void MultiLayerBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/MultiLayerBGS.xml", 0, CV_STORAGE_READ);
+  
+  bg_model_preload = cvReadStringByName(fs, 0, "preloadModel", "");
+  saveModel = cvReadIntByName(fs, 0, "saveModel", false);
+  detectAfter = cvReadIntByName(fs, 0, "detectAfter", 0);
+  disableDetectMode = cvReadIntByName(fs, 0, "disableDetectMode", true);
+  disableLearning = cvReadIntByName(fs, 0, "disableLearningInDetecMode", false);
+  loadDefaultParams = cvReadIntByName(fs, 0, "loadDefaultParams", true);
+
+  max_mode_num = cvReadIntByName(fs, 0, "max_mode_num", 5);
+  weight_updating_constant = cvReadRealByName(fs, 0, "weight_updating_constant", 5.0);
+  texture_weight = cvReadRealByName(fs, 0, "texture_weight", 0.5);
+  bg_mode_percent = cvReadRealByName(fs, 0, "bg_mode_percent", 0.6);
+  pattern_neig_half_size = cvReadIntByName(fs, 0, "pattern_neig_half_size", 4);
+  pattern_neig_gaus_sigma = cvReadRealByName(fs, 0, "pattern_neig_gaus_sigma", 3.0);
+  bg_prob_threshold = cvReadRealByName(fs, 0, "bg_prob_threshold", 0.2);
+  bg_prob_updating_threshold = cvReadRealByName(fs, 0, "bg_prob_updating_threshold", 0.2);
+  robust_LBP_constant = cvReadIntByName(fs, 0, "robust_LBP_constant", 3);
+  min_noised_angle = cvReadRealByName(fs, 0, "min_noised_angle", 0.01768);
+  shadow_rate = cvReadRealByName(fs, 0, "shadow_rate", 0.6);
+  highlight_rate = cvReadRealByName(fs, 0, "highlight_rate", 1.2);
+  bilater_filter_sigma_s = cvReadRealByName(fs, 0, "bilater_filter_sigma_s", 3.0);
+  bilater_filter_sigma_r = cvReadRealByName(fs, 0, "bilater_filter_sigma_r", 0.1);
+
+  frame_duration = cvReadRealByName(fs, 0, "frame_duration", 0.1);
+
+  learn_mode_learn_rate_per_second = cvReadRealByName(fs, 0, "learn_mode_learn_rate_per_second", 0.5);
+  learn_weight_learn_rate_per_second = cvReadRealByName(fs, 0, "learn_weight_learn_rate_per_second", 0.5);
+  learn_init_mode_weight = cvReadRealByName(fs, 0, "learn_init_mode_weight", 0.05);
+  
+  detect_mode_learn_rate_per_second = cvReadRealByName(fs, 0, "detect_mode_learn_rate_per_second", 0.01);
+  detect_weight_learn_rate_per_second = cvReadRealByName(fs, 0, "detect_weight_learn_rate_per_second", 0.01);
+  detect_init_mode_weight = cvReadRealByName(fs, 0, "detect_init_mode_weight", 0.001);
+
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/jmo/MultiLayerBGS.h b/package_bgs/jmo/MultiLayerBGS.h
new file mode 100644
index 0000000..671a788
--- /dev/null
+++ b/package_bgs/jmo/MultiLayerBGS.h
@@ -0,0 +1,101 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "CMultiLayerBGS.h"
+
+class MultiLayerBGS : public IBGS
+{
+public:
+  enum Status
+  {
+    MLBGS_NONE   = -1,
+    MLBGS_LEARN  = 0,
+    MLBGS_DETECT = 1
+  };
+
+private:
+  bool firstTime;
+  long long frameNumber;
+  cv::Mat img_foreground;
+  cv::Mat img_merged;
+  cv::Mat img_background;
+  bool showOutput;
+  bool saveModel;
+  bool disableDetectMode;
+  bool disableLearning;
+  int detectAfter;
+  CMultiLayerBGS* BGS;
+  Status status;
+  IplImage* img;
+  IplImage* org_img;
+  IplImage* fg_img;
+  IplImage* bg_img;
+  IplImage* fg_prob_img;
+  IplImage* fg_mask_img;
+  IplImage* fg_prob_img3;
+  IplImage* merged_img;
+  std::string bg_model_preload;
+  
+  bool loadDefaultParams;
+
+  int max_mode_num;
+  float weight_updating_constant;
+  float texture_weight;
+  float bg_mode_percent;
+  int pattern_neig_half_size;
+  float pattern_neig_gaus_sigma;
+  float bg_prob_threshold;
+  float bg_prob_updating_threshold;
+  int robust_LBP_constant;
+  float min_noised_angle;
+  float shadow_rate;
+  float highlight_rate;
+  float bilater_filter_sigma_s;
+  float bilater_filter_sigma_r;
+
+  float frame_duration;
+
+  float mode_learn_rate_per_second;
+  float weight_learn_rate_per_second;
+  float init_mode_weight;
+
+  float learn_mode_learn_rate_per_second;
+  float learn_weight_learn_rate_per_second;
+  float learn_init_mode_weight;
+  
+  float detect_mode_learn_rate_per_second;
+  float detect_weight_learn_rate_per_second;
+  float detect_init_mode_weight;
+
+public:
+  MultiLayerBGS();
+  ~MultiLayerBGS();
+
+  void setStatus(Status status);
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void finish(void);
+  void saveConfig();
+  void loadConfig();
+};
\ No newline at end of file
diff --git a/package_bgs/jmo/OpenCvDataConversion.h b/package_bgs/jmo/OpenCvDataConversion.h
new file mode 100644
index 0000000..22d6ec9
--- /dev/null
+++ b/package_bgs/jmo/OpenCvDataConversion.h
@@ -0,0 +1,224 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+// OpencvDataConversion.h: interface for the COpencvDataConversion class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(_OPENCV_DATA_CONVERSION_H_)
+#define _OPENCV_DATA_CONVERSION_H_
+
+#include <cv.h>
+#include <stdio.h>
+
+template <class TI, class TM>		/* class TI - the type of image data, class TM - the type of matrix data */
+class COpencvDataConversion
+{
+public:
+
+  /* get the image data */
+  TI * GetImageData(IplImage *img) 
+  {
+    if ( !img->roi ) {	/* no ROI used, i.e. the whole image */
+      int y; //, x;
+      TI* img_data = new TI[img->width*img->height*img->nChannels];
+      TI* temp = img_data;
+      TI* x_data;
+
+      for ( y = 0 ; y < img->height ; y++ ) {
+        x_data = (TI*)(img->imageData + img->widthStep*y);
+        int row_length = img->width*img->nChannels;
+        memcpy(temp, x_data, sizeof(TI)*row_length);
+        temp += row_length;
+        /*
+        for ( x = 0 ; x < img->width*img->nChannels ; x++ ) 
+        *temp++ = *x_data++;
+        */
+      }
+
+      return img_data;
+    }
+    else {	/* get image data only in ROI */
+      int y;//, x;
+      TI* img_data = new TI[img->roi->width*img->roi->height*img->nChannels];
+      TI* temp = img_data;
+      TI* x_data;
+      for ( y = img->roi->yOffset ; y < img->roi->yOffset+img->roi->height ; y++ ) {
+        x_data = (TI*)(img->imageData + img->widthStep*y + img->roi->xOffset*sizeof(TI)*img->nChannels);
+        int row_length = img->roi->width*img->nChannels;
+        memcpy(temp, x_data, sizeof(TI)*row_length);
+        temp += row_length;
+        /*
+        for ( x = 0 ; x < img->roi->width*img->nChannels ; x++ ) 
+        *temp++ = *x_data++;
+        */
+      }
+      return img_data;
+    }
+  };
+
+  /* set the image data */
+  void SetImageData(IplImage *img, TI *img_data) 
+  {
+    if ( !img->roi ) {	/* no ROI used, i.e. the whole image */
+      int y;//, x;
+      TI* temp = img_data;
+      TI* x_data;
+      for ( y = 0 ; y < img->height ; y++ ) {
+        x_data = (TI*)(img->imageData + img->widthStep*y);
+        int row_length = img->width*img->nChannels;
+        memcpy(x_data, temp, sizeof(TI)*row_length);
+        temp += row_length;
+        /*
+        for ( x = 0 ; x < img->width*img->nChannels ; x++ ) 
+        *x_data++ = *temp++;
+        */
+      }
+    }
+    else {	/* set image data only in ROI */
+      int y;//, x;
+      TI* temp = img_data;
+      TI* x_data;
+      for ( y = img->roi->yOffset ; y < img->roi->yOffset+img->roi->height ; y++ ) {
+        x_data = (TI*)(img->imageData + img->widthStep*y + img->roi->xOffset*sizeof(TI)*img->nChannels);
+        int row_length = img->roi->width*img->nChannels;
+        memcpy(x_data, temp, sizeof(TI)*row_length);
+        temp += row_length;
+        /*
+        for ( x = 0 ; x < img->roi->width*img->nChannels ; x++ ) 
+        *x_data++ = *temp++;
+        */
+      }
+    }
+  }
+
+  /* get the matrix data */
+  TM * GetMatData(CvMat *mat) 
+  {
+    TM* mat_data = new TM[mat->width*mat->height];
+    memcpy(mat_data, mat->data.ptr, sizeof(TM)*mat->width*mat->height);
+    return mat_data;
+
+    /*
+    int y, x;
+    TM* mat_data = new TM[mat->width*mat->height];
+    TM* temp = mat_data;
+    TM* x_data;
+    for ( y = 0 ; y < mat->height ; y++ ) {
+    x_data = (TM*)(mat->data.ptr + mat->step*y);
+    for ( x = 0 ; x < mat->width ; x++ ) 
+    *temp++ = *x_data++;
+    }
+    return mat_data;
+    */
+  };
+
+  /* set the matrix data */
+  void SetMatData(CvMat *mat, TM *mat_data) 
+  {
+    memcpy(mat->data.ptr, mat_data, sizeof(TM)*mat->width*mat->height);
+
+    /*
+    int y, x;
+    TM* temp = mat_data;
+    TM* x_data;
+    for ( y = 0 ; y < mat->height ; y++ ) {
+    x_data = (TM*)(mat->data.ptr + mat->step*y);
+    for ( x = 0 ; x < mat->width ; x++ ) 
+    *x_data++ = *temp++;
+    }
+    */
+  }
+
+  /* convert the image data to the matrix data */
+  void ConvertData(IplImage *img_src, CvMat *mat_dst) 
+  {
+    if ( img_src->nChannels > 1 ) {
+      printf("Must be one-channel image for ConvertImageData!\n");
+      exit(1);
+    }
+
+    TI* _img_data = GetImageData(img_src);
+    TM* _mat_data = new TM[img_src->width*img_src->height];
+
+    TI* img_data = _img_data;
+    TM* mat_data = _mat_data;
+    int i;
+    for ( i = 0 ; i < img_src->width*img_src->height ; i++ )
+      *mat_data++ = (TM)(*img_data++);
+
+    SetMatData(mat_dst, _mat_data);
+
+    delete [] _img_data;
+    delete [] _mat_data;
+  }
+
+  /* convert the matrix data to the image data */
+  void ConvertData(CvMat *mat_src, IplImage *img_dst)
+  {
+    if ( img_dst->nChannels > 1 ) {
+      printf("Must be one-channel image for ConvertImageData!\n");
+      exit(1);
+    }
+
+    TM* _mat_data = GetMatData(mat_src);
+    TI* _img_data = new TI[mat_src->width*mat_src->height];
+
+    TM* mat_data = _mat_data;
+    TI* img_data = _img_data;
+
+    int i;
+    for ( i = 0 ; i < mat_src->width*mat_src->height ; i++ )
+      *img_data++ = (TI)(*mat_data++);
+
+    SetImageData(img_dst, _img_data);
+
+    delete [] _img_data;
+    delete [] _mat_data;
+  }
+
+  COpencvDataConversion() {};
+  virtual ~COpencvDataConversion() {};
+};
+
+#endif // !defined(_OPENCV_DATA_CONVERSION_H_)
+
diff --git a/package_bgs/jmo/blob.cpp b/package_bgs/jmo/blob.cpp
new file mode 100644
index 0000000..2b99b2a
--- /dev/null
+++ b/package_bgs/jmo/blob.cpp
@@ -0,0 +1,1149 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+/************************************************************************
+Blob.cpp
+
+- FUNCIONALITAT: Implementaci� de la classe CBlob
+- AUTOR: Inspecta S.L.
+MODIFICACIONS (Modificaci�, Autor, Data):
+
+
+FUNCTIONALITY: Implementation of the CBlob class and some helper classes to perform
+some calculations on it
+AUTHOR: Inspecta S.L.
+MODIFICATIONS (Modification, Author, Date):
+
+**************************************************************************/
+
+
+#include <limits.h>
+#include "blob.h"
+#include "cv.h"
+
+namespace Blob
+{
+
+/**
+- FUNCI�: CBlob
+- FUNCIONALITAT: Constructor est�ndard 
+- PAR�METRES:
+- RESULTAT:
+- inicialitzaci� de totes les variables internes i de l'storage i la sequencia
+per a les cantonades del blob
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlob
+- FUNCTIONALITY: Standard constructor
+- PARAMETERS:
+- RESULT:
+- memory allocation for the blob edges and initialization of member variables
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlob::CBlob()
+{
+  etiqueta = -1;		// Flag indicates null region
+  exterior = 0;
+  area = 0.0f;
+  perimeter = 0.0f;
+  parent = -1;
+  minx = LONG_MAX;
+  maxx = 0;
+  miny = LONG_MAX;
+  maxy = 0;
+  sumx = 0;
+  sumy = 0;
+  sumxx = 0;
+  sumyy = 0;
+  sumxy = 0;
+  mean = 0;
+  stddev = 0;
+  externPerimeter = 0;
+
+  m_storage = cvCreateMemStorage(0);
+  edges = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2,
+    sizeof(CvContour),
+    sizeof(CvPoint),m_storage);
+}
+
+/**
+- FUNCI�: CBlob
+- FUNCIONALITAT: Constructor de c�pia 
+- PAR�METRES:
+- RESULTAT:
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlob
+- FUNCTIONALITY: Copy constructor
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlob::CBlob( const CBlob &src )
+{
+  // copiem les propietats del blob origen a l'actual
+  etiqueta = src.etiqueta;		
+  exterior = src.exterior;
+  area = src.Area();
+  perimeter = src.Perimeter();
+  parent = src.parent;
+  minx = src.minx;
+  maxx = src.maxx;
+  miny = src.miny;
+  maxy = src.maxy;
+  sumx = src.sumx;
+  sumy = src.sumy;
+  sumxx = src.sumxx;
+  sumyy = src.sumyy;
+  sumxy = src.sumxy;
+  mean = src.mean;
+  stddev = src.stddev;
+  externPerimeter = src.externPerimeter;
+
+  // copiem els edges del blob origen a l'actual
+  CvSeqReader reader;
+  CvSeqWriter writer;
+  CvPoint edgeactual;
+
+  // creem una sequencia buida per als edges
+  m_storage = cvCreateMemStorage(0);
+  edges = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2,
+    sizeof(CvContour),
+    sizeof(CvPoint),m_storage);
+
+  cvStartReadSeq( src.Edges(), &reader);
+  cvStartAppendToSeq( edges, &writer );
+
+  for( int i=0; i< src.Edges()->total; i++)
+  {
+    CV_READ_SEQ_ELEM( edgeactual ,reader);
+    CV_WRITE_SEQ_ELEM( edgeactual , writer );
+  }
+
+  cvEndWriteSeq( &writer );
+}
+CBlob::CBlob( const CBlob *src )
+{
+  // copiem les propietats del blob origen a l'actual
+  etiqueta = src->etiqueta;		
+  exterior = src->exterior;
+  area = src->Area();
+  perimeter = src->Perimeter();
+  parent = src->parent;
+  minx = src->minx;
+  maxx = src->maxx;
+  miny = src->miny;
+  maxy = src->maxy;
+  sumx = src->sumx;
+  sumy = src->sumy;
+  sumxx = src->sumxx;
+  sumyy = src->sumyy;
+  sumxy = src->sumxy;
+  mean = src->mean;
+  stddev = src->stddev;
+  externPerimeter = src->externPerimeter;
+
+  // copiem els edges del blob origen a l'actual
+  CvSeqReader reader;
+  CvSeqWriter writer;
+  CvPoint edgeactual;
+
+  // creem una sequencia buida per als edges
+  m_storage = cvCreateMemStorage(0);
+  edges = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2,
+    sizeof(CvContour),
+    sizeof(CvPoint),m_storage);
+
+  cvStartReadSeq( src->Edges(), &reader);
+  cvStartAppendToSeq( edges, &writer );
+
+  for( int i=0; i< src->Edges()->total; i++)
+  {
+    CV_READ_SEQ_ELEM( edgeactual ,reader);
+    CV_WRITE_SEQ_ELEM( edgeactual , writer );
+  }
+
+  cvEndWriteSeq( &writer );
+}
+
+/**
+- FUNCI�: ~CBlob
+- FUNCIONALITAT: Destructor est�ndard 
+- PAR�METRES:
+- RESULTAT:
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlob
+- FUNCTIONALITY: Standard destructor
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlob::~CBlob()
+{
+  // Eliminar v�rtexs del blob 
+  cvClearSeq(edges);
+  // i la zona de mem�ria on s�n
+  cvReleaseMemStorage( &m_storage );
+}
+
+/**
+- FUNCI�: operator=
+- FUNCIONALITAT: Operador d'assignaci�
+- PAR�METRES:
+- src: blob a assignar a l'actual
+- RESULTAT:
+- Substitueix el blob actual per el src
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: Assigment operator
+- FUNCTIONALITY: Assigns a blob to the current 
+- PARAMETERS:
+- src: blob to assign
+- RESULT:
+- the current blob is replaced by the src blob
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CBlob& CBlob::operator=(const CBlob &src )
+{
+  // si ja s�n el mateix, no cal fer res
+  if (this != &src)
+  {
+    // Eliminar v�rtexs del blob 
+    cvClearSeq(edges);
+    // i la zona de mem�ria on s�n
+    cvReleaseMemStorage( &m_storage );
+
+    // creem una sequencia buida per als edges
+    m_storage = cvCreateMemStorage(0);
+    edges = cvCreateSeq( CV_SEQ_KIND_GENERIC|CV_32SC2,
+      sizeof(CvContour),
+      sizeof(CvPoint),m_storage);
+
+    // copiem les propietats del blob origen a l'actual
+    etiqueta = src.etiqueta;		
+    exterior = src.exterior;
+    area = src.Area();
+    perimeter = src.Perimeter();
+    parent = src.parent;
+    minx = src.minx;
+    maxx = src.maxx;
+    miny = src.miny;
+    maxy = src.maxy;
+    sumx = src.sumx;
+    sumy = src.sumy;
+    sumxx = src.sumxx;
+    sumyy = src.sumyy;
+    sumxy = src.sumxy;
+    mean = src.mean;
+    stddev = src.stddev;
+    externPerimeter = src.externPerimeter;
+
+    // copiem els edges del blob origen a l'actual
+    CvSeqReader reader;
+    CvSeqWriter writer;
+    CvPoint edgeactual;
+
+    cvStartReadSeq( src.Edges(), &reader);
+    cvStartAppendToSeq( edges, &writer );
+
+    for( int i=0; i< src.Edges()->total; i++)
+    {
+      CV_READ_SEQ_ELEM( edgeactual ,reader);
+      CV_WRITE_SEQ_ELEM( edgeactual , writer );
+    }
+
+    cvEndWriteSeq( &writer );
+  }
+  return *this;
+}
+
+/**
+- FUNCI�: FillBlob
+- FUNCIONALITAT: Pinta l'interior d'un blob amb el color especificat
+- PAR�METRES:
+- imatge: imatge on es vol pintar el el blob
+- color: color amb que es vol pintar el blob
+- RESULTAT:
+- retorna la imatge d'entrada amb el blob pintat
+- RESTRICCIONS:
+- AUTOR: 
+- Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: FillBlob
+- FUNCTIONALITY: 
+- Fills the blob with a specified colour
+- PARAMETERS:
+- imatge: where to paint
+- color: colour to paint the blob
+- RESULT:
+- modifies input image and returns the seed point used to fill the blob
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+void CBlob::FillBlob( IplImage *imatge, CvScalar color, int offsetX /*=0*/, int offsetY /*=0*/) const					  
+{
+
+  //verifiquem que existeixi el blob i que tingui cantonades
+  if( edges == NULL || edges->total == 0 ) return;
+
+  CvPoint edgeactual, pt1, pt2;
+  CvSeqReader reader;
+  vectorPunts vectorEdges = vectorPunts( edges->total );
+  vectorPunts::iterator itEdges, itEdgesSeguent;
+  bool dinsBlob;
+  int yActual;
+
+  // passem els punts del blob a un vector de punts de les STL
+  cvStartReadSeq( edges, &reader);
+  itEdges = vectorEdges.begin();
+  while( itEdges != vectorEdges.end() )
+  {
+    CV_READ_SEQ_ELEM( edgeactual ,reader);
+    *itEdges = edgeactual;
+    itEdges++;
+  }
+  // ordenem el vector per les Y's i les X's d'esquerra a dreta
+  std::sort( vectorEdges.begin(), vectorEdges.end(), comparaCvPoint() );
+
+  // recorrem el vector ordenat i fem linies entre punts consecutius
+  itEdges = vectorEdges.begin();
+  itEdgesSeguent = vectorEdges.begin() + 1;
+  dinsBlob = true;
+  while( itEdges != (vectorEdges.end() - 1))
+  {
+    yActual = (*itEdges).y;
+
+    if( ( (*itEdges).x != (*itEdgesSeguent).x ) &&
+      ( (*itEdgesSeguent).y == yActual )
+      )
+    {
+      if( dinsBlob )
+      {
+        pt1 = *itEdges;
+        pt1.x += offsetX;
+        pt1.y += offsetY;
+
+        pt2 = *itEdgesSeguent;
+        pt2.x += offsetX;
+        pt2.y += offsetY;
+
+        cvLine( imatge, pt1, pt2, color );
+      }
+      dinsBlob =! dinsBlob;
+    }
+    itEdges++;
+    itEdgesSeguent++;
+    if( (*itEdges).y != yActual ) dinsBlob = true;
+  }
+  vectorEdges.clear();
+}
+
+/**
+- FUNCI�: CopyEdges
+- FUNCIONALITAT: Afegeix els v�rtexs del blob al blob destination
+- PAR�METRES:
+- destination: blob al que volem afegir els v�rtexs
+- RESULTAT:
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CopyEdges
+- FUNCTIONALITY: Adds the blob edges to destination
+- PARAMETERS:
+- destination: where to add the edges
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+void CBlob::CopyEdges( CBlob &destination ) const
+{
+  CvSeqReader reader;
+  CvSeqWriter writer;
+  CvPoint edgeactual;
+
+  cvStartReadSeq( edges, &reader);
+  cvStartAppendToSeq( destination.Edges(), &writer );
+
+  for( int i=0; i<edges->total; i++)
+  {
+    CV_READ_SEQ_ELEM( edgeactual ,reader);
+    CV_WRITE_SEQ_ELEM( edgeactual , writer );
+  }
+
+  cvEndWriteSeq( &writer );
+}
+
+/**
+- FUNCI�: ClearEdges
+- FUNCIONALITAT: Elimina els v�rtexs del blob
+- PAR�METRES:
+- RESULTAT:
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: ClearEdges
+- FUNCTIONALITY: Delete current blob edges
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+void CBlob::ClearEdges()
+{
+  // Eliminar v�rtexs del blob eliminat
+  cvClearSeq( edges );
+}
+
+/**
+- FUNCI�: GetConvexHull
+- FUNCIONALITAT: Retorna el poligon convex del blob
+- PAR�METRES:
+- dst: sequencia on desarem el resultat (no ha d'estar inicialitzada)
+- RESULTAT:
+- true si tot ha anat b�
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: GetConvexHull
+- FUNCTIONALITY: Calculates the convex hull polygon of the blob
+- PARAMETERS:
+- dst: where to store the result
+- RESULT:
+- true if no error ocurred
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+bool CBlob::GetConvexHull( CvSeq **dst ) const
+{
+  if( edges != NULL && edges->total > 0)
+  {
+    *dst = cvConvexHull2( edges, 0, CV_CLOCKWISE, 0 );
+    return true;
+  }
+  return false;
+}
+
+/**
+- FUNCI�: GetEllipse
+- FUNCIONALITAT: Retorna l'ellipse que s'ajusta millor a les cantonades del blob
+- PAR�METRES:
+- RESULTAT:
+- estructura amb l'ellipse
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 25-05-2005.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: GetEllipse
+- FUNCTIONALITY: Calculates the ellipse that best fits the edges of the blob
+- PARAMETERS:
+- RESULT:
+- CvBox2D struct with the calculated ellipse
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+CvBox2D CBlob::GetEllipse() const
+{
+  CvBox2D elipse;
+  // necessitem 6 punts per calcular l'elipse
+  if( edges != NULL && edges->total > 6)
+  {
+    elipse = cvFitEllipse2( edges );
+  }
+  else
+  {
+    elipse.center.x = 0.0;
+    elipse.center.y = 0.0;
+    elipse.size.width = 0.0;
+    elipse.size.height = 0.0;
+    elipse.angle = 0.0;
+  }
+  return elipse;
+}
+
+
+
+/***************************************************************************
+Implementaci� de les classes per al c�lcul de caracter�stiques sobre el blob
+
+Implementation of the helper classes to perform operations on blobs
+**************************************************************************/
+
+/**
+- FUNCI�: Moment
+- FUNCIONALITAT: Calcula el moment pq del blob
+- RESULTAT:
+- retorna el moment pq especificat o 0 si el moment no est� implementat
+- RESTRICCIONS:
+- Implementats els moments pq: 00, 01, 10, 20, 02
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 20-07-2004.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: Moment
+- FUNCTIONALITY: Calculates the pq moment of the blob
+- PARAMETERS:
+- RESULT:
+- returns the pq moment or 0 if the moment it is not implemented
+- RESTRICTIONS:
+- Currently, only implemented the 00, 01, 10, 20, 02 pq moments
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 20-07-2004.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetMoment::operator()(const CBlob &blob) const
+{
+  //Moment 00
+  if((m_p==0) && (m_q==0))
+    return blob.Area();
+
+  //Moment 10
+  if((m_p==1) && (m_q==0))
+    return blob.SumX();
+
+  //Moment 01
+  if((m_p==0) && (m_q==1))
+    return blob.SumY();
+
+  //Moment 20
+  if((m_p==2) && (m_q==0))
+    return blob.SumXX();
+
+  //Moment 02
+  if((m_p==0) && (m_q==2))
+    return blob.SumYY();
+
+  return 0;
+}
+
+/**
+- FUNCI�: HullPerimeter
+- FUNCIONALITAT: Calcula la longitud del perimetre convex del blob.
+Fa servir la funci� d'OpenCV cvConvexHull2 per a 
+calcular el perimetre convex.
+
+- PAR�METRES:
+- RESULTAT:
+- retorna la longitud del per�metre convex del blob. Si el blob no t� coordenades
+associades retorna el per�metre normal del blob.
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 20-07-2004.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlobGetHullPerimeter
+- FUNCTIONALITY: Calculates the convex hull perimeter of the blob
+- PARAMETERS:
+- RESULT:
+- returns the convex hull perimeter of the blob or the perimeter if the 
+blob edges could not be retrieved
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetHullPerimeter::operator()(const CBlob &blob) const
+{
+  if(blob.Edges() != NULL && blob.Edges()->total > 0)
+  {
+    CvSeq *hull = cvConvexHull2( blob.Edges(), 0, CV_CLOCKWISE, 1 );
+    return fabs(cvArcLength(hull,CV_WHOLE_SEQ,1));
+  }
+  return blob.Perimeter();
+}
+
+double CBlobGetHullArea::operator()(const CBlob &blob) const
+{
+  if(blob.Edges() != NULL && blob.Edges()->total > 0)
+  {
+    CvSeq *hull = cvConvexHull2( blob.Edges(), 0, CV_CLOCKWISE, 1 );
+    return fabs(cvContourArea(hull));
+  }
+  return blob.Perimeter();
+}
+
+/**
+- FUNCI�: MinX_at_MinY
+- FUNCIONALITAT: Calcula el valor MinX a MinY.
+- PAR�METRES:
+- blob: blob del que volem calcular el valor
+- RESULTAT:
+- retorna la X minima en la Y minima.
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 20-07-2004.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlobGetMinXatMinY
+- FUNCTIONALITY: Calculates the minimum X on the minimum Y
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetMinXatMinY::operator()(const CBlob &blob) const
+{
+  double MinX_at_MinY = LONG_MAX;
+
+  CvSeqReader reader;
+  CvPoint edgeactual;
+
+  cvStartReadSeq(blob.Edges(),&reader);
+
+  for(int j=0;j<blob.Edges()->total;j++)
+  {
+    CV_READ_SEQ_ELEM(edgeactual,reader);
+    if( (edgeactual.y == blob.MinY()) && (edgeactual.x < MinX_at_MinY) )
+    {
+      MinX_at_MinY = edgeactual.x;
+    }
+  }
+
+  return MinX_at_MinY;
+}
+
+/**
+- FUNCI�: MinY_at_MaxX
+- FUNCIONALITAT: Calcula el valor MinX a MaxX.
+- PAR�METRES:
+- blob: blob del que volem calcular el valor
+- RESULTAT:
+- retorna la Y minima en la X maxima.
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 20-07-2004.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlobGetMinXatMinY
+- FUNCTIONALITY: Calculates the minimum Y on the maximum X
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetMinYatMaxX::operator()(const CBlob &blob) const
+{
+  double MinY_at_MaxX = LONG_MAX;
+
+  CvSeqReader reader;
+  CvPoint edgeactual;
+
+  cvStartReadSeq(blob.Edges(),&reader);
+
+  for(int j=0;j<blob.Edges()->total;j++)
+  {
+    CV_READ_SEQ_ELEM(edgeactual,reader);
+    if( (edgeactual.x == blob.MaxX()) && (edgeactual.y < MinY_at_MaxX) )
+    {
+      MinY_at_MaxX = edgeactual.y;
+    }
+  }
+
+  return MinY_at_MaxX;
+}
+
+/**
+- FUNCI�: MaxX_at_MaxY
+- FUNCIONALITAT: Calcula el valor MaxX a MaxY.
+- PAR�METRES:
+- blob: blob del que volem calcular el valor
+- RESULTAT:
+- retorna la X maxima en la Y maxima.
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 20-07-2004.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlobGetMaxXatMaxY
+- FUNCTIONALITY: Calculates the maximum X on the maximum Y
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetMaxXatMaxY::operator()(const CBlob &blob) const
+{
+  double MaxX_at_MaxY = LONG_MIN;
+
+  CvSeqReader reader;
+  CvPoint edgeactual;
+
+  cvStartReadSeq(blob.Edges(),&reader);
+
+  for(int j=0;j<blob.Edges()->total;j++)
+  {
+    CV_READ_SEQ_ELEM(edgeactual,reader);
+    if( (edgeactual.y == blob.MaxY()) && (edgeactual.x > MaxX_at_MaxY) )
+    {
+      MaxX_at_MaxY = edgeactual.x;
+    }
+  }
+
+  return MaxX_at_MaxY;
+}
+
+/**
+- FUNCI�: MaxY_at_MinX
+- FUNCIONALITAT: Calcula el valor MaxY a MinX.
+- PAR�METRES:
+- blob: blob del que volem calcular el valor
+- RESULTAT:
+- retorna la Y maxima en la X minima.
+- RESTRICCIONS:
+- AUTOR: Ricard Borr�s
+- DATA DE CREACI�: 20-07-2004.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: CBlobGetMaxYatMinX
+- FUNCTIONALITY: Calculates the maximum Y on the minimum X
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetMaxYatMinX::operator()(const CBlob &blob) const
+{
+  double MaxY_at_MinX = LONG_MIN;
+
+  CvSeqReader reader;
+  CvPoint edgeactual;
+
+  cvStartReadSeq(blob.Edges(),&reader);
+
+  for(int j=0;j<blob.Edges()->total;j++)
+  {
+    CV_READ_SEQ_ELEM(edgeactual,reader);
+    if( (edgeactual.x == blob.MinY()) && (edgeactual.y > MaxY_at_MinX) )
+    {
+      MaxY_at_MinX = edgeactual.y;
+    }
+  }
+
+  return MaxY_at_MinX;
+}
+
+/**
+Retorna l'elongaci� del blob (longitud/amplada)
+*/
+/**
+- FUNCTION: CBlobGetElongation
+- FUNCTIONALITY: Calculates the elongation of the blob ( length/breadth )
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- See below to see how the lenght and the breadth are aproximated
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetElongation::operator()(const CBlob &blob) const
+{
+  double ampladaC,longitudC,amplada,longitud;
+
+  ampladaC=(double) (blob.Perimeter()+sqrt(pow(blob.Perimeter(),2)-16*blob.Area()))/4;
+  if(ampladaC<=0.0) return 0;
+  longitudC=(double) blob.Area()/ampladaC;
+
+  longitud=MAX( longitudC , ampladaC );
+  amplada=MIN( longitudC , ampladaC );
+
+  return (double) longitud/amplada;
+}
+
+/**
+Retorna la compacitat del blob
+*/
+/**
+- FUNCTION: CBlobGetCompactness
+- FUNCTIONALITY: Calculates the compactness of the blob 
+( maximum for circle shaped blobs, minimum for the rest)
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetCompactness::operator()(const CBlob &blob) const
+{
+  if( blob.Area() != 0.0 )
+    return (double) pow(blob.Perimeter(),2)/(4*CV_PI*blob.Area());
+  else
+    return 0.0;
+}
+
+/**
+Retorna la rugositat del blob
+*/
+/**
+- FUNCTION: CBlobGetRoughness
+- FUNCTIONALITY: Calculates the roughness of the blob 
+( ratio between perimeter and convex hull perimeter)
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetRoughness::operator()(const CBlob &blob) const
+{
+  CBlobGetHullPerimeter getHullPerimeter = CBlobGetHullPerimeter();
+
+  double hullPerimeter = getHullPerimeter(blob);
+
+  if( hullPerimeter != 0.0 )
+    return blob.Perimeter() / hullPerimeter;//HullPerimeter();
+
+  return 0.0;
+}
+
+/**
+Retorna la longitud del blob
+*/
+/**
+- FUNCTION: CBlobGetLength
+- FUNCTIONALITY: Calculates the lenght of the blob (the biggest axis of the blob)
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- The lenght is an aproximation to the real lenght
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetLength::operator()(const CBlob &blob) const
+{
+  double ampladaC,longitudC;
+  double tmp;
+
+  tmp = blob.Perimeter()*blob.Perimeter() - 16*blob.Area();
+
+  if( tmp > 0.0 )
+    ampladaC = (double) (blob.Perimeter()+sqrt(tmp))/4;
+  // error intr�nsec en els c�lculs de l'�rea i el per�metre 
+  else
+    ampladaC = (double) (blob.Perimeter())/4;
+
+  if(ampladaC<=0.0) return 0;
+  longitudC=(double) blob.Area()/ampladaC;
+
+  return MAX( longitudC , ampladaC );
+}
+
+/**
+Retorna l'amplada del blob
+*/
+/**
+- FUNCTION: CBlobGetBreadth
+- FUNCTIONALITY: Calculates the breadth of the blob (the smallest axis of the blob)
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- The breadth is an aproximation to the real breadth
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetBreadth::operator()(const CBlob &blob) const
+{
+  double ampladaC,longitudC;
+  double tmp;
+
+  tmp = blob.Perimeter()*blob.Perimeter() - 16*blob.Area();
+
+  if( tmp > 0.0 )
+    ampladaC = (double) (blob.Perimeter()+sqrt(tmp))/4;
+  // error intr�nsec en els c�lculs de l'�rea i el per�metre 
+  else
+    ampladaC = (double) (blob.Perimeter())/4;
+
+  if(ampladaC<=0.0) return 0;
+  longitudC = (double) blob.Area()/ampladaC;
+
+  return MIN( longitudC , ampladaC );
+}
+
+/**
+Calcula la dist�ncia entre un punt i el centre del blob
+*/
+/**
+- FUNCTION: CBlobGetDistanceFromPoint
+- FUNCTIONALITY: Calculates the euclidean distance between the blob center and 
+the point specified in the constructor
+- PARAMETERS:
+- RESULT:
+- RESTRICTIONS:
+- AUTHOR: Ricard Borr�s
+- CREATION DATE: 25-05-2005.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetDistanceFromPoint::operator()(const CBlob &blob) const
+{
+  double xmitjana, ymitjana;
+  CBlobGetXCenter getXCenter;
+  CBlobGetYCenter getYCenter;
+
+  xmitjana = m_x - getXCenter( blob );
+  ymitjana = m_y - getYCenter( blob );
+
+  return sqrt((xmitjana*xmitjana)+(ymitjana*ymitjana));
+}
+
+/**
+- FUNCI�: BlobGetXYInside
+- FUNCIONALITAT: Calcula si un punt cau dins de la capsa rectangular
+del blob
+- RESULTAT:
+- retorna 1 si hi est�; 0 si no
+- RESTRICCIONS:
+- AUTOR: Francesc Pinyol Margalef
+- DATA DE CREACI�: 16-01-2006.
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+/**
+- FUNCTION: BlobGetXYInside
+- FUNCTIONALITY: Calculates whether a point is inside the
+rectangular bounding box of a blob
+- PARAMETERS:
+- RESULT:
+- returns 1 if it is inside; o if not
+- RESTRICTIONS:
+- AUTHOR: Francesc Pinyol Margalef
+- CREATION DATE: 16-01-2006.
+- MODIFICATION: Date. Author. Description.
+*/
+double CBlobGetXYInside::operator()(const CBlob &blob) const
+{
+  if( blob.Edges() == NULL || blob.Edges()->total == 0 ) return 0.0;
+
+  // passem els punts del blob a un vector de punts de les STL
+  CvSeqReader reader;
+  CBlob::vectorPunts vectorEdges;
+  CBlob::vectorPunts::iterator itEdges, itEdgesSeguent;
+  CvPoint edgeactual;
+  bool dinsBlob;
+
+  // agafem tots els punts amb la mateixa y que l'actual
+  cvStartReadSeq( blob.Edges(), &reader);
+
+  for( int i=0; i< blob.Edges()->total; i++)
+  {
+    CV_READ_SEQ_ELEM( edgeactual ,reader );
+    if( edgeactual.y == m_p.y )
+      vectorEdges.push_back( edgeactual );
+  }
+
+  if( vectorEdges.size() == 0 ) return 0.0;
+
+  // ordenem el vector per les Y's i les X's d'esquerra a dreta
+  std::sort( vectorEdges.begin(), vectorEdges.end(), CBlob::comparaCvPoint() );
+
+  // recorrem el punts del blob de la mateixa fila que el punt d'entrada
+  // i mirem si la X del punt d'entrada est� entre dos coordenades "plenes"
+  // del blob
+  itEdges = vectorEdges.begin();
+  itEdgesSeguent = vectorEdges.begin() + 1;
+  dinsBlob = true;
+
+  while( itEdges != (vectorEdges.end() - 1) )
+  {
+    if( (*itEdges).x <= m_p.x && (*itEdgesSeguent).x >= m_p.x && dinsBlob )
+    {
+      vectorEdges.clear();
+      return 1.0;
+    }
+
+    itEdges++;
+    itEdgesSeguent++;
+    dinsBlob = !dinsBlob;
+  }
+
+  vectorEdges.clear();
+  return 0.0;
+}
+
+#ifdef BLOB_OBJECT_FACTORY
+
+/**
+- FUNCI�: RegistraTotsOperadors
+- FUNCIONALITAT: Registrar tots els operadors definits a blob.h
+- PAR�METRES:
+- fabricaOperadorsBlob: f�brica on es registraran els operadors
+- RESULTAT:
+- Modifica l'objecte fabricaOperadorsBlob
+- RESTRICCIONS:
+- Nom�s es registraran els operadors de blob.h. Si se'n volen afegir, cal afegir-los amb 
+el m�tode Register de la f�brica.
+- AUTOR: rborras
+- DATA DE CREACI�: 2006/05/18
+- MODIFICACI�: Data. Autor. Descripci�.
+*/
+void RegistraTotsOperadors( t_OperadorBlobFactory &fabricaOperadorsBlob )
+{
+  // blob shape
+  fabricaOperadorsBlob.Register( CBlobGetArea().GetNom(), Type2Type<CBlobGetArea>());
+  fabricaOperadorsBlob.Register( CBlobGetBreadth().GetNom(), Type2Type<CBlobGetBreadth>());
+  fabricaOperadorsBlob.Register( CBlobGetCompactness().GetNom(), Type2Type<CBlobGetCompactness>());
+  fabricaOperadorsBlob.Register( CBlobGetElongation().GetNom(), Type2Type<CBlobGetElongation>());
+  fabricaOperadorsBlob.Register( CBlobGetExterior().GetNom(), Type2Type<CBlobGetExterior>());
+  fabricaOperadorsBlob.Register( CBlobGetLength().GetNom(), Type2Type<CBlobGetLength>());
+  fabricaOperadorsBlob.Register( CBlobGetPerimeter().GetNom(), Type2Type<CBlobGetPerimeter>());
+  fabricaOperadorsBlob.Register( CBlobGetRoughness().GetNom(), Type2Type<CBlobGetRoughness>());
+
+  // extern pixels
+  fabricaOperadorsBlob.Register( CBlobGetExternPerimeterRatio().GetNom(), Type2Type<CBlobGetExternPerimeterRatio>());
+  fabricaOperadorsBlob.Register( CBlobGetExternHullPerimeterRatio().GetNom(), Type2Type<CBlobGetExternHullPerimeterRatio>());
+  fabricaOperadorsBlob.Register( CBlobGetExternPerimeter().GetNom(), Type2Type<CBlobGetExternPerimeter>());
+
+
+  // hull 
+  fabricaOperadorsBlob.Register( CBlobGetHullPerimeter().GetNom(), Type2Type<CBlobGetHullPerimeter>());
+  fabricaOperadorsBlob.Register( CBlobGetHullArea().GetNom(), Type2Type<CBlobGetHullArea>());
+
+
+  // elipse info
+  fabricaOperadorsBlob.Register( CBlobGetMajorAxisLength().GetNom(), Type2Type<CBlobGetMajorAxisLength>());
+  fabricaOperadorsBlob.Register( CBlobGetMinorAxisLength().GetNom(), Type2Type<CBlobGetMinorAxisLength>());
+  fabricaOperadorsBlob.Register( CBlobGetAxisRatio().GetNom(), Type2Type<CBlobGetAxisRatio>());
+  fabricaOperadorsBlob.Register( CBlobGetOrientation().GetNom(), Type2Type<CBlobGetOrientation>());
+  fabricaOperadorsBlob.Register( CBlobGetOrientationCos().GetNom(), Type2Type<CBlobGetOrientationCos>());
+  fabricaOperadorsBlob.Register( CBlobGetAreaElipseRatio().GetNom(), Type2Type<CBlobGetAreaElipseRatio>());
+
+  // min an max
+  fabricaOperadorsBlob.Register( CBlobGetMaxX().GetNom(), Type2Type<CBlobGetMaxX>());
+  fabricaOperadorsBlob.Register( CBlobGetMaxY().GetNom(), Type2Type<CBlobGetMaxY>());
+  fabricaOperadorsBlob.Register( CBlobGetMinX().GetNom(), Type2Type<CBlobGetMinX>());
+  fabricaOperadorsBlob.Register( CBlobGetMinY().GetNom(), Type2Type<CBlobGetMinY>());
+
+  fabricaOperadorsBlob.Register( CBlobGetMaxXatMaxY().GetNom(), Type2Type<CBlobGetMaxXatMaxY>());
+  fabricaOperadorsBlob.Register( CBlobGetMaxYatMinX().GetNom(), Type2Type<CBlobGetMaxYatMinX>());
+  fabricaOperadorsBlob.Register( CBlobGetMinXatMinY().GetNom(), Type2Type<CBlobGetMinXatMinY>());
+  fabricaOperadorsBlob.Register( CBlobGetMinYatMaxX().GetNom(), Type2Type<CBlobGetMinYatMaxX>());
+
+  // grey level stats
+  fabricaOperadorsBlob.Register( CBlobGetMean().GetNom(), Type2Type<CBlobGetMean>());
+  fabricaOperadorsBlob.Register( CBlobGetStdDev().GetNom(), Type2Type<CBlobGetStdDev>());
+
+  // coordinate info
+  fabricaOperadorsBlob.Register( CBlobGetXYInside().GetNom(), Type2Type<CBlobGetXYInside>());
+  fabricaOperadorsBlob.Register( CBlobGetDiffY().GetNom(), Type2Type<CBlobGetDiffY>());
+  fabricaOperadorsBlob.Register( CBlobGetDiffX().GetNom(), Type2Type<CBlobGetDiffX>());
+  fabricaOperadorsBlob.Register( CBlobGetXCenter().GetNom(), Type2Type<CBlobGetXCenter>());
+  fabricaOperadorsBlob.Register( CBlobGetYCenter().GetNom(), Type2Type<CBlobGetYCenter>());
+  fabricaOperadorsBlob.Register( CBlobGetDistanceFromPoint().GetNom(), Type2Type<CBlobGetDistanceFromPoint>());
+
+  // moments
+  fabricaOperadorsBlob.Register( CBlobGetMoment().GetNom(), Type2Type<CBlobGetMoment>());
+
+}
+
+#endif
+
+}
+
diff --git a/package_bgs/jmo/blob.h b/package_bgs/jmo/blob.h
new file mode 100644
index 0000000..463e81a
--- /dev/null
+++ b/package_bgs/jmo/blob.h
@@ -0,0 +1,853 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* --- --- ---
+* Copyright (C) 2008--2010 Idiap Research Institute (.....@idiap.ch)
+* All rights reserved.
+* 
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions 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.
+* 3. The name of the author may not be used to endorse or promote products
+*    derived from this software without specific prior written permission.
+* 
+* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+*/
+/************************************************************************
+Blob.h
+
+FUNCIONALITAT: Definici� de la classe CBlob
+AUTOR: Inspecta S.L.
+MODIFICACIONS (Modificaci�, Autor, Data):
+
+FUNCTIONALITY: Definition of the CBlob class and some helper classes to perform
+some calculations on it
+AUTHOR: Inspecta S.L.
+MODIFICATIONS (Modification, Author, Date):
+
+**************************************************************************/
+
+//! Disable warnings referred to 255 character truncation for the std:map
+//#pragma warning( disable : 4786 ) 
+
+#ifndef CBLOB_INSPECTA_INCLUDED
+#define CBLOB_INSPECTA_INCLUDED
+
+#include "cxcore.h"
+#include "BlobLibraryConfiguration.h"
+#include <functional>
+#include <vector>
+#include <algorithm>
+
+
+#ifdef BLOB_OBJECT_FACTORY
+//! Object factory pattern implementation
+#include "..\inspecta\DesignPatterns\ObjectFactory.h"
+#endif
+
+
+//! Factor de conversi� de graus a radians
+#define DEGREE2RAD		(CV_PI / 180.0)
+
+namespace Blob
+{
+
+/**
+Classe que representa un blob, ent�s com un conjunt de pixels del 
+mateix color contigus en una imatge binaritzada.
+
+Class to represent a blob, a group of connected pixels in a binary image
+*/
+class CBlob
+{
+public:
+  //! Constructor est�ndard
+  //! Standard constructor
+  CBlob();
+  //! Constructor de c�pia
+  //! Copy constructor
+  CBlob( const CBlob &src );
+  CBlob( const CBlob *src );
+
+  //! Destructor est�ndard
+  //! Standard Destructor
+  ~CBlob();
+
+  //! Operador d'assignaci�
+  //! Assigment operator
+  CBlob& operator=(const CBlob &src );
+
+  //! Indica si el blob est� buit ( no t� cap info associada )
+  //! Shows if the blob has associated information
+  bool IsEmpty() const
+  {
+    return (area == 0.0 && perimeter == 0.0 );
+  };
+
+  //! Neteja les cantonades del blob
+  //! Clears the edges of the blob
+  void ClearEdges();
+  //! Copia les cantonades del blob a un altre (les afegeix al dest�)
+  //! Adds the blob edges to another blob
+  void CopyEdges( CBlob &destination ) const;
+  //! Retorna el poligon convex del blob
+  //! Calculates the convex hull of the blob
+  bool GetConvexHull( CvSeq **dst ) const;
+  //! Calcula l'elipse que s'adapta als v�rtexs del blob
+  //! Fits an ellipse to the blob edges
+  CvBox2D GetEllipse() const;
+
+  //! Pinta l'interior d'un blob d'un color determinat
+  //! Paints the blob in an image
+  void FillBlob( IplImage *imatge, CvScalar color, int offsetX = 0, int offsetY = 0 ) const;
+
+  //! Funcions GET sobre els valors dels blobs
+  //! Get functions
+
+  inline int Label() const	{ return etiqueta; }
+  inline int Parent() const	{ return parent; }
+  inline double Area() const { return area; }
+  inline double Perimeter() const { return perimeter; }
+  inline double ExternPerimeter() const { return externPerimeter; }
+  inline int	  Exterior() const { return exterior; }
+  inline double Mean() const { return mean; }
+  inline double StdDev() const { return stddev; }
+  inline double MinX() const { return minx; }
+  inline double MinY() const { return miny; }
+  inline double MaxX() const { return maxx; }
+  inline double MaxY() const { return maxy; }
+  inline CvSeq *Edges() const { return edges; }
+  inline double SumX() const { return sumx; }
+  inline double SumY() const { return sumy; }
+  inline double SumXX() const { return sumxx; }
+  inline double SumYY() const { return sumyy; }
+  inline double SumXY() const { return sumxy; }
+
+  //! etiqueta del blob
+  //! label of the blob
+  int etiqueta;
+  //! flag per indicar si es exterior o no
+  //! true for extern blobs
+  int exterior;
+  //! area del blob
+  //! Blob area
+  double area;
+  //! perimetre del blob
+  //! Blob perimeter
+  double perimeter;
+  //! quantitat de perimetre del blob extern
+  //! amount of blob perimeter which is exterior
+  double externPerimeter;
+  //! etiqueta del blob pare
+  //! label of the parent blob
+  int parent;
+  //! moments
+  double sumx;
+  double sumy;
+  double sumxx;
+  double sumyy;
+  double sumxy;
+  //! Bounding rect
+  double minx;
+  double maxx;
+  double miny;
+  double maxy;
+
+  //! mitjana
+  //! mean of the grey scale values of the blob pixels
+  double mean;
+  //! desviaci� standard
+  //! standard deviation of the grey scale values of the blob pixels
+  double stddev;
+
+  //! �rea de mem�ria on es desaran els punts de contorn del blob
+  //! storage which contains the edges of the blob
+  CvMemStorage *m_storage;
+  //!	Sequ�ncia de punts del contorn del blob
+  //! Sequence with the edges of the blob
+  CvSeq *edges;
+
+
+  //! Point datatype for plotting (FillBlob)
+  typedef std::vector<CvPoint> vectorPunts;
+
+  //! Helper class to compare two CvPoints (for sorting in FillBlob)
+  struct comparaCvPoint : public std::binary_function<CvPoint, CvPoint, bool> 
+  {
+    //! Definim que un punt �s menor com m�s amunt a la dreta estigui
+    bool operator()(CvPoint a, CvPoint b) 
+    { 
+      if( a.y == b.y ) 
+        return a.x < b.x;
+      else 
+        return a.y < b.y; 
+    }
+  };
+};
+
+
+
+/**************************************************************************
+Definici� de les classes per a fer operacions sobre els blobs
+
+Helper classes to perform operations on blobs
+**************************************************************************/
+
+
+//! Classe d'on derivarem totes les operacions sobre els blobs
+//! Interface to derive all blob operations
+class COperadorBlob
+{
+public:
+  virtual ~COperadorBlob(){};
+
+  //! Aplica l'operaci� al blob
+  virtual double operator()(const CBlob &blob) const = 0;
+  //! Obt� el nom de l'operador
+  virtual const char *GetNom() const = 0;
+
+  operator COperadorBlob*() const
+  {
+    return (COperadorBlob*)this;
+  }
+};
+
+typedef COperadorBlob funcio_calculBlob;
+
+#ifdef BLOB_OBJECT_FACTORY
+/**
+Funci� per comparar dos identificadors dins de la f�brica de COperadorBlobs
+*/
+struct functorComparacioIdOperador
+{
+  bool operator()(const char* s1, const char* s2) const
+  {
+    return strcmp(s1, s2) < 0;
+  }
+};
+
+//! Definition of Object factory type for COperadorBlob objects
+typedef ObjectFactory<COperadorBlob, const char *, functorComparacioIdOperador > t_OperadorBlobFactory;
+
+//! Funci� global per a registrar tots els operadors definits a blob.h
+void RegistraTotsOperadors( t_OperadorBlobFactory &fabricaOperadorsBlob );
+
+#endif
+
+//! Classe per calcular l'�rea d'un blob
+//! Class to get the area of a blob
+class CBlobGetArea : public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  { 
+    return blob.Area(); 
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetArea";
+  }
+};
+
+//! Classe per calcular el perimetre d'un blob
+//! Class to get the perimeter of a blob
+class CBlobGetPerimeter: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  { 
+    return blob.Perimeter(); 
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetPerimeter";
+  }
+};
+
+//! Classe que diu si un blob �s extern o no
+//! Class to get the extern flag of a blob
+class CBlobGetExterior: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  { 
+    return blob.Exterior(); 
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetExterior";
+  }
+};
+
+//! Classe per calcular la mitjana de nivells de gris d'un blob
+//! Class to get the mean grey level of a blob
+class CBlobGetMean: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  { 
+    return blob.Mean(); 
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetMean";
+  }
+};
+
+//! Classe per calcular la desviaci� est�ndard dels nivells de gris d'un blob
+//! Class to get the standard deviation of the grey level values of a blob
+class CBlobGetStdDev: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  { 
+    return blob.StdDev(); 
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetStdDev";
+  }
+};
+
+//! Classe per calcular la compacitat d'un blob
+//! Class to calculate the compactness of a blob
+class CBlobGetCompactness: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetCompactness";
+  }
+};
+
+//! Classe per calcular la longitud d'un blob
+//! Class to calculate the length of a blob
+class CBlobGetLength: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetLength";
+  }
+};
+
+//! Classe per calcular l'amplada d'un blob
+//! Class to calculate the breadth of a blob
+class CBlobGetBreadth: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetBreadth";
+  }
+};
+
+//! Classe per calcular la difer�ncia en X del blob
+class CBlobGetDiffX: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    return blob.maxx - blob.minx;
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetDiffX";
+  }
+};
+
+//! Classe per calcular la difer�ncia en X del blob
+class CBlobGetDiffY: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    return blob.maxy - blob.miny;
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetDiffY";
+  }
+};
+
+//! Classe per calcular el moment PQ del blob
+//! Class to calculate the P,Q moment of a blob
+class CBlobGetMoment: public COperadorBlob
+{
+public:
+  //! Constructor est�ndard
+  //! Standard constructor (gets the 00 moment)
+  CBlobGetMoment()
+  {
+    m_p = m_q = 0;
+  }
+  //! Constructor: indiquem el moment p,q a calcular
+  //! Constructor: gets the PQ moment
+  CBlobGetMoment( int p, int q )
+  {
+    m_p = p;
+    m_q = q;
+  };
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetMoment";
+  }
+
+private:
+  //! moment que volem calcular
+  int m_p, m_q;
+};
+
+//! Classe per calcular el perimetre del poligon convex d'un blob
+//! Class to calculate the convex hull perimeter of a blob
+class CBlobGetHullPerimeter: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetHullPerimeter";
+  }
+};
+
+//! Classe per calcular l'�rea del poligon convex d'un blob
+//! Class to calculate the convex hull area of a blob
+class CBlobGetHullArea: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetHullArea";
+  }
+};
+
+//! Classe per calcular la x minima en la y minima
+//! Class to calculate the minimum x on the minimum y
+class CBlobGetMinXatMinY: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetMinXatMinY";
+  }
+};
+
+//! Classe per calcular la y minima en la x maxima
+//! Class to calculate the minimum y on the maximum x
+class CBlobGetMinYatMaxX: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetMinYatMaxX";
+  }
+};
+
+//! Classe per calcular la x maxima en la y maxima
+//! Class to calculate the maximum x on the maximum y
+class CBlobGetMaxXatMaxY: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetMaxXatMaxY";
+  }
+};
+
+//! Classe per calcular la y maxima en la x minima
+//! Class to calculate the maximum y on the minimum y
+class CBlobGetMaxYatMinX: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetMaxYatMinX";
+  }
+};
+
+//! Classe per a calcular la x m�nima
+//! Class to get the minimum x
+class CBlobGetMinX: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    return blob.MinX();
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetMinX";
+  }
+};
+
+//! Classe per a calcular la x m�xima
+//! Class to get the maximum x
+class CBlobGetMaxX: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    return blob.MaxX();
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetMaxX";
+  }
+};
+
+//! Classe per a calcular la y m�nima
+//! Class to get the minimum y
+class CBlobGetMinY: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    return blob.MinY();
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetMinY";
+  }
+};
+
+//! Classe per a calcular la y m�xima
+//! Class to get the maximum y
+class CBlobGetMaxY: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    return blob.MaxY();
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetMax";
+  }
+};
+
+
+//! Classe per calcular l'elongacio d'un blob
+//! Class to calculate the elongation of the blob
+class CBlobGetElongation: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetElongation";
+  }
+};
+
+//! Classe per calcular la rugositat d'un blob
+//! Class to calculate the roughness of the blob
+class CBlobGetRoughness: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetRoughness";
+  }
+};
+
+//! Classe per calcular la dist�ncia entre el centre del blob i un punt donat
+//! Class to calculate the euclidean distance between the center of a blob and a given point
+class CBlobGetDistanceFromPoint: public COperadorBlob
+{
+public:
+  //! Standard constructor (distance to point 0,0)
+  CBlobGetDistanceFromPoint()
+  {
+    m_x = m_y = 0.0;
+  }
+  //! Constructor (distance to point x,y)
+  CBlobGetDistanceFromPoint( const double x, const double y )
+  {
+    m_x = x;
+    m_y = y;
+  }
+
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetDistanceFromPoint";
+  }
+
+private:
+  // coordenades del punt on volem calcular la dist�ncia
+  double m_x, m_y;
+};
+
+//! Classe per calcular el nombre de pixels externs d'un blob
+//! Class to get the number of extern pixels of a blob
+class CBlobGetExternPerimeter: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    return blob.ExternPerimeter();
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetExternPerimeter";
+  }
+};
+
+//! Classe per calcular el ratio entre el perimetre i nombre pixels externs
+//! valors propers a 0 indiquen que la majoria del blob �s intern
+//! valors propers a 1 indiquen que la majoria del blob �s extern
+//! Class to calculate the ratio between the perimeter and the number of extern pixels
+class CBlobGetExternPerimeterRatio: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    if( blob.Perimeter() != 0 )
+      return blob.ExternPerimeter() / blob.Perimeter();
+    else
+      return blob.ExternPerimeter();
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetExternPerimeterRatio";
+  }
+};
+
+//! Classe per calcular el ratio entre el perimetre convex i nombre pixels externs
+//! valors propers a 0 indiquen que la majoria del blob �s intern
+//! valors propers a 1 indiquen que la majoria del blob �s extern
+//! Class to calculate the ratio between the perimeter and the number of extern pixels
+class CBlobGetExternHullPerimeterRatio: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    CBlobGetHullPerimeter getHullPerimeter;
+    double hullPerimeter;
+
+    if( (hullPerimeter = getHullPerimeter( blob ) ) != 0 )
+      return blob.ExternPerimeter() / hullPerimeter;
+    else
+      return blob.ExternPerimeter();
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetExternHullPerimeterRatio";
+  }
+};
+
+//! Classe per calcular el centre en el eix X d'un blob
+//! Class to calculate the center in the X direction
+class CBlobGetXCenter: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    return blob.MinX() + (( blob.MaxX() - blob.MinX() ) / 2.0);
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetXCenter";
+  }
+};
+
+//! Classe per calcular el centre en el eix Y d'un blob
+//! Class to calculate the center in the Y direction
+class CBlobGetYCenter: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    return blob.MinY() + (( blob.MaxY() - blob.MinY() ) / 2.0);
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetYCenter";
+  }
+};
+
+//! Classe per calcular la longitud de l'eix major d'un blob
+//! Class to calculate the length of the major axis of the ellipse that fits the blob edges
+class CBlobGetMajorAxisLength: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    CvBox2D elipse = blob.GetEllipse();
+
+    return elipse.size.width;
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetMajorAxisLength";
+  }
+};
+
+//! Classe per calcular el ratio entre l'area de la elipse i la de la taca
+//! Class 
+class CBlobGetAreaElipseRatio: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    if( blob.Area()==0.0 ) return 0.0;
+
+    CvBox2D elipse = blob.GetEllipse();
+    double ratioAreaElipseAreaTaca = ( (elipse.size.width/2.0)
+      *
+      (elipse.size.height/2.0)
+      *CV_PI
+      )
+      /
+      blob.Area();
+
+    return ratioAreaElipseAreaTaca;
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetAreaElipseRatio";
+  }
+};
+
+//! Classe per calcular la longitud de l'eix menor d'un blob
+//! Class to calculate the length of the minor axis of the ellipse that fits the blob edges
+class CBlobGetMinorAxisLength: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    CvBox2D elipse = blob.GetEllipse();
+
+    return elipse.size.height;
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetMinorAxisLength";
+  }
+};
+
+//! Classe per calcular l'orientaci� de l'ellipse del blob en radians
+//! Class to calculate the orientation of the ellipse that fits the blob edges in radians
+class CBlobGetOrientation: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    CvBox2D elipse = blob.GetEllipse();
+
+    if( elipse.angle > 180.0 )
+      return (( elipse.angle - 180.0 )* DEGREE2RAD);
+    else
+      return ( elipse.angle * DEGREE2RAD);
+
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetOrientation";
+  }
+};
+
+//! Classe per calcular el cosinus de l'orientaci� de l'ellipse del blob
+//! Class to calculate the cosinus of the orientation of the ellipse that fits the blob edges
+class CBlobGetOrientationCos: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    CBlobGetOrientation getOrientation;
+    return fabs( cos( getOrientation(blob) ));
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetOrientationCos";
+  }
+};
+
+
+//! Classe per calcular el ratio entre l'eix major i menor de la el�lipse
+//! Class to calculate the ratio between both axes of the ellipse
+class CBlobGetAxisRatio: public COperadorBlob
+{
+public:
+  double operator()(const CBlob &blob) const
+  {
+    CvBox2D elipse = blob.GetEllipse();
+
+    return elipse.size.height / elipse.size.width;
+  }
+  const char *GetNom() const
+  {
+    return "CBlobGetAxisRatio";
+  }
+};
+
+
+//! Classe per calcular si un punt cau dins del blob
+//! Class to calculate whether a point is inside a blob
+class CBlobGetXYInside: public COperadorBlob
+{
+public:
+  //! Constructor est�ndard
+  //! Standard constructor
+  CBlobGetXYInside()
+  {
+    m_p = cvPoint(0,0);
+  }
+  //! Constructor: indiquem el punt
+  //! Constructor: sets the point
+  CBlobGetXYInside( CvPoint p )
+  {
+    m_p = p;
+  };
+  double operator()(const CBlob &blob) const;
+  const char *GetNom() const
+  {
+    return "CBlobGetXYInside";
+  }
+
+private:
+  //! punt que considerem
+  //! point to be considered
+  CvPoint m_p;
+};
+
+}
+
+#endif //CBLOB_INSPECTA_INCLUDED
+
diff --git a/package_bgs/lb/BGModel.cpp b/package_bgs/lb/BGModel.cpp
new file mode 100644
index 0000000..c42bec7
--- /dev/null
+++ b/package_bgs/lb/BGModel.cpp
@@ -0,0 +1,87 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+  BGModel.cpp
+    
+  Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#include "BGModel.h"
+
+namespace lb_library
+{
+  BGModel::BGModel(int width, int height): m_width(width), m_height(height)
+  {
+    m_SrcImage = cvCreateImage(cvSize(m_width,m_height), IPL_DEPTH_8U, 3);
+    m_BGImage = cvCreateImage(cvSize(m_width,m_height), IPL_DEPTH_8U, 3);
+    m_FGImage = cvCreateImage(cvSize(m_width,m_height), IPL_DEPTH_8U, 3);
+
+    cvZero(m_SrcImage);
+    cvZero(m_BGImage);
+    cvZero(m_FGImage);
+  }
+
+  BGModel::~BGModel()
+  {
+    if (m_SrcImage!=NULL) cvReleaseImage(&m_SrcImage);
+    if (m_BGImage!=NULL) cvReleaseImage(&m_BGImage);
+    if (m_FGImage!=NULL) cvReleaseImage(&m_FGImage);
+  }
+
+  IplImage* BGModel::GetSrc()
+  {
+    return m_SrcImage;
+  }
+
+  IplImage* BGModel::GetFG()
+  {
+    return m_FGImage;
+  }
+
+  IplImage* BGModel::GetBG()
+  {
+    return m_BGImage;
+  }
+
+  void BGModel::InitModel(IplImage* image)
+  {
+    cvCopy(image,m_SrcImage);
+    Init();
+    return;
+  }
+
+  void BGModel::UpdateModel(IplImage* image)
+  {
+    cvCopy(image,m_SrcImage);
+    Update();
+    return;
+  }
+}
\ No newline at end of file
diff --git a/package_bgs/lb/BGModel.h b/package_bgs/lb/BGModel.h
new file mode 100644
index 0000000..d53b52e
--- /dev/null
+++ b/package_bgs/lb/BGModel.h
@@ -0,0 +1,78 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+  BGModel.h
+    
+  Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#ifndef BGMODEL_H
+#define BGMODEL_H
+
+#include <cv.h>
+#include <math.h>
+#include <float.h>
+
+#include "Types.h"
+
+namespace lb_library
+{
+  class BGModel
+  {
+  public:
+
+    BGModel(int width, int height);
+    virtual ~BGModel();
+
+    void InitModel(IplImage* image);
+    void UpdateModel(IplImage* image);
+  
+    virtual void setBGModelParameter(int id, int value) {};
+
+    virtual IplImage* GetSrc();
+    virtual IplImage* GetFG();
+    virtual IplImage* GetBG();
+
+  protected:
+  
+    IplImage* m_SrcImage;
+    IplImage* m_BGImage;
+    IplImage* m_FGImage;
+
+    const int m_width;
+    const int m_height;
+  
+    virtual void Init() = 0;
+    virtual void Update() = 0;
+  };
+}
+
+#endif
diff --git a/package_bgs/lb/BGModelFuzzyGauss.cpp b/package_bgs/lb/BGModelFuzzyGauss.cpp
new file mode 100644
index 0000000..8706b13
--- /dev/null
+++ b/package_bgs/lb/BGModelFuzzyGauss.cpp
@@ -0,0 +1,210 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+BGModelFuzzyGauss.cpp
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#include "BGModelFuzzyGauss.h"
+
+namespace lb_library
+{
+  namespace FuzzyGaussian
+  {
+    BGModelFuzzyGauss::BGModelFuzzyGauss(int width, int height) : BGModel(width,height)
+    {
+      m_alphamax = ALPHAFUZZYGAUSS;
+      m_threshold = THRESHOLDFUZZYGAUSS * THRESHOLDFUZZYGAUSS;
+      m_threshBG = THRESHOLDBG;
+      m_noise = NOISEFUZZYGAUSS;
+
+      m_pMu = new DBLRGB[m_width * m_height];
+      m_pVar = new DBLRGB[m_width * m_height];
+
+      DBLRGB *pMu = m_pMu;
+      DBLRGB *pVar = m_pVar;
+
+      for(int k = 0; k < (m_width * m_height); k++)
+      {
+        pMu->Red = 0.0;
+        pMu->Green = 0.0;
+        pMu->Blue = 0.0;
+
+        pVar->Red = m_noise;
+        pVar->Green = m_noise;
+        pVar->Blue = m_noise;
+
+        pMu++;
+        pVar++;
+      }
+    }
+
+    BGModelFuzzyGauss::~BGModelFuzzyGauss()
+    {
+      delete [] m_pMu;
+      delete [] m_pVar;
+    }
+
+    void BGModelFuzzyGauss::setBGModelParameter(int id, int value)
+    {
+      double dvalue = (double)value/255.0;
+
+      switch(id)
+      {
+      case 0:
+        m_threshold = 100.0*dvalue*dvalue;
+        break;
+
+      case 1:
+        m_threshBG = dvalue;
+        break;
+
+      case 2:
+        m_alphamax = dvalue*dvalue*dvalue;
+        break;
+
+      case 3:
+        m_noise = 100.0*dvalue;
+        break;
+      }
+
+      return;
+    }
+
+    void BGModelFuzzyGauss::Init()
+    {
+      DBLRGB *pMu = m_pMu;
+      DBLRGB *pVar = m_pVar;
+
+      Image<BYTERGB> prgbSrc(m_SrcImage);
+
+      for(int i = 0; i < m_height; i++)
+      {
+        for(int j = 0; j < m_width; j++)
+        {
+          pMu->Red = prgbSrc[i][j].Red;
+          pMu->Green = prgbSrc[i][j].Green;
+          pMu->Blue = prgbSrc[i][j].Blue;
+
+          pVar->Red = m_noise;
+          pVar->Green = m_noise;
+          pVar->Blue = m_noise;
+
+          pMu++;
+          pVar++;
+        }
+      }
+
+      return;
+    }
+
+    void BGModelFuzzyGauss::Update()
+    {
+      DBLRGB *pMu = m_pMu;
+      DBLRGB *pVar = m_pVar;
+
+      Image<BYTERGB> prgbSrc(m_SrcImage);
+      Image<BYTERGB> prgbBG(m_BGImage);
+      Image<BYTERGB> prgbFG(m_FGImage);
+
+      for(int i = 0; i < m_height; i++)
+      {
+        for(int j = 0; j < m_width; j++)
+        {
+          double srcR = (double) prgbSrc[i][j].Red;
+          double srcG = (double) prgbSrc[i][j].Green;
+          double srcB = (double) prgbSrc[i][j].Blue;
+
+          // Fuzzy background subtraction (Mahalanobis distance)
+
+          double dr = srcR - pMu->Red;
+          double dg = srcG - pMu->Green;
+          double db = srcB - pMu->Blue;
+
+          double d2 = dr*dr/pVar->Red + dg*dg/pVar->Green + db*db/pVar->Blue;
+
+          double fuzzyBG = 1.0;
+
+          if(d2 < m_threshold)
+            fuzzyBG = d2/m_threshold;
+
+          // Fuzzy running average
+
+          double alpha = m_alphamax*exp(FUZZYEXP*fuzzyBG);
+
+          if(dr*dr > DBL_MIN)
+            pMu->Red += alpha*dr;
+
+          if(dg*dg > DBL_MIN)
+            pMu->Green += alpha*dg;
+
+          if(db*db > DBL_MIN)
+            pMu->Blue += alpha*db;
+
+          double d;
+
+          d = (srcR - pMu->Red)*(srcR - pMu->Red) - pVar->Red;
+          if(d*d > DBL_MIN)
+            pVar->Red += alpha*d;
+
+          d = (srcG - pMu->Green)*(srcG - pMu->Green) - pVar->Green;
+          if(d*d > DBL_MIN)
+            pVar->Green += alpha*d;
+
+          d = (srcB - pMu->Blue)*(srcB - pMu->Blue) - pVar->Blue;
+          if(d*d > DBL_MIN)
+            pVar->Blue += alpha*d;
+
+          pVar->Red = (std::max)(pVar->Red,m_noise);
+          pVar->Green = (std::max)(pVar->Green,m_noise);
+          pVar->Blue = (std::max)(pVar->Blue,m_noise);
+
+          // Set foreground and background
+
+          if(fuzzyBG >= m_threshBG)
+            prgbFG[i][j].Red = prgbFG[i][j].Green = prgbFG[i][j].Blue = 255;
+          else
+            prgbFG[i][j].Red = prgbFG[i][j].Green = prgbFG[i][j].Blue = 0;
+
+          prgbBG[i][j].Red = (unsigned char)pMu->Red;			
+          prgbBG[i][j].Green = (unsigned char)pMu->Green;			
+          prgbBG[i][j].Blue = (unsigned char)pMu->Blue;
+
+          pMu++;
+          pVar++;
+        }
+      }
+
+      return;
+    }
+  }
+}
\ No newline at end of file
diff --git a/package_bgs/lb/BGModelFuzzyGauss.h b/package_bgs/lb/BGModelFuzzyGauss.h
new file mode 100644
index 0000000..033eaf3
--- /dev/null
+++ b/package_bgs/lb/BGModelFuzzyGauss.h
@@ -0,0 +1,75 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+BGModelFuzzyGauss.h
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#ifndef BGMODELFUZZYGAUSS_H
+#define BGMODELFUZZYGAUSS_H
+
+#include "BGModel.h"
+
+namespace lb_library
+{
+  namespace FuzzyGaussian
+  {
+    const float ALPHAFUZZYGAUSS = 0.02;
+    const float THRESHOLDFUZZYGAUSS = 3.5;
+    const float THRESHOLDBG = 0.5;
+    const float NOISEFUZZYGAUSS = 50.0;
+    const float FUZZYEXP = -5.0;
+
+    class BGModelFuzzyGauss : public BGModel
+    {
+    public:
+      BGModelFuzzyGauss(int width, int height);
+      ~BGModelFuzzyGauss();
+
+      void setBGModelParameter(int id, int value);
+
+    protected:
+      double m_alphamax;
+      double m_threshold;
+      double m_threshBG;
+      double m_noise;
+
+      DBLRGB* m_pMu;
+      DBLRGB* m_pVar;
+
+      void Init();
+      void Update();
+    };
+  }
+}
+
+#endif
diff --git a/package_bgs/lb/BGModelFuzzySom.cpp b/package_bgs/lb/BGModelFuzzySom.cpp
new file mode 100644
index 0000000..189cb1a
--- /dev/null
+++ b/package_bgs/lb/BGModelFuzzySom.cpp
@@ -0,0 +1,298 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+BGModelFuzzySom.cpp
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#include "BGModelFuzzySom.h"
+
+namespace lb_library
+{
+  namespace FuzzyAdaptiveSOM
+  {
+    BGModelFuzzySom::BGModelFuzzySom(int width, int height) : BGModel(width,height)
+    {
+      m_offset = (KERNEL - 1)/2;
+
+      if(SPAN_NEIGHBORS)
+        m_pad = 0;	
+      else
+        m_pad = m_offset;
+
+      // SOM models
+
+      m_widthSOM = m_width*M + 2*m_offset + (m_width-1)*m_pad;
+      m_heightSOM = m_height*N + 2*m_offset + (m_height-1)*m_pad;
+
+      m_ppSOM = new DBLRGB*[m_heightSOM];	
+      for(int n = 0; n < m_heightSOM; n++)
+        m_ppSOM[n] = new DBLRGB[m_widthSOM];
+
+      for(int j = 0; j < m_heightSOM; j++)
+      {
+        for(int i = 0; i < m_widthSOM; i++)
+        {
+          m_ppSOM[j][i].Red = 0.0;
+          m_ppSOM[j][i].Green = 0.0;
+          m_ppSOM[j][i].Blue = 0.0;
+        }
+      }
+
+      // Create weights
+
+      m_ppW = new double*[KERNEL];
+      for(int n = 0; n < KERNEL; n++)
+        m_ppW[n] = new double[KERNEL];
+
+      // Construct Gaussian kernel using Pascal's triangle
+
+      int cM;
+      int cN;
+      m_Wmax = DBL_MIN;
+
+      cN = 1;
+      for(int j = 0; j < KERNEL; j++)
+      {
+        cM = 1;		
+
+        for(int i = 0; i < KERNEL; i++)
+        {
+          m_ppW[j][i] = cN*cM;
+
+          if(m_ppW[j][i] > m_Wmax)
+            m_Wmax = m_ppW[j][i];
+
+          cM = cM * (KERNEL - 1 - i) / (i + 1);
+        }
+
+        cN = cN * (KERNEL - 1 - j) / (j + 1);
+      }
+
+      // Parameters
+
+      m_epsilon1 = EPS1*EPS1;
+      m_epsilon2 = EPS2*EPS2;
+
+      m_alpha1 = C1/m_Wmax;
+      m_alpha2 = C2/m_Wmax;
+
+      m_K = 0;
+      m_TSteps = TRAINING_STEPS;
+    }
+
+    BGModelFuzzySom::~BGModelFuzzySom()
+    {
+      for(int n = 0; n < m_heightSOM; n++)
+        delete [] m_ppSOM[n];
+
+      delete [] m_ppSOM;
+
+      for(int n = 0; n < KERNEL; n++)
+        delete [] m_ppW[n];
+
+      delete [] m_ppW;
+    }
+
+    void BGModelFuzzySom::setBGModelParameter(int id, int value)
+    {
+      double dvalue = (double)value/255.0;
+
+      switch(id)
+      {
+      case 0:
+        m_epsilon2 = 255.0*255.0*dvalue*dvalue*dvalue*dvalue;
+        break;
+
+      case 1:
+        m_epsilon1 = 255.0*255.0*dvalue*dvalue*dvalue*dvalue;
+        break;
+
+      case 2:
+        m_alpha2 = dvalue*dvalue*dvalue/m_Wmax;
+        break;
+
+      case 3:
+        m_alpha1 = dvalue*dvalue*dvalue/m_Wmax;
+        break;
+
+      case 5:
+        m_TSteps = (int)(255.0*dvalue);
+        break;
+      }
+
+      return;
+    }
+
+    void BGModelFuzzySom::Init()
+    {
+      Image<BYTERGB> prgbSrc(m_SrcImage);
+
+      for(int j = 0; j < m_height; j++)
+      {
+        int jj = m_offset + j*(N + m_pad);
+
+        for(int i = 0; i < m_width; i++)
+        {
+          int ii = m_offset + i*(M + m_pad);		
+
+          for(int l = 0; l < N; l++)
+          {
+            for(int k = 0; k < M; k++)
+            {
+              m_ppSOM[jj+l][ii+k].Red = (double)prgbSrc[j][i].Red;
+              m_ppSOM[jj+l][ii+k].Green = (double)prgbSrc[j][i].Green;
+              m_ppSOM[jj+l][ii+k].Blue = (double)prgbSrc[j][i].Blue;
+            }
+          }
+        }
+      }
+
+      m_K = 0;
+
+      return;
+    }
+
+    void BGModelFuzzySom::Update()
+    {
+      double alpha,a;
+      double epsilon;
+
+      // calibration phase
+      if(m_K <= m_TSteps)
+      {
+        epsilon = m_epsilon1;
+        alpha = (m_alpha1 - m_K * (m_alpha1 - m_alpha2) / m_TSteps);
+        m_K++;
+      }
+      else // online phase
+      {
+        epsilon = m_epsilon2;
+        alpha = m_alpha2;
+      }
+
+      Image<BYTERGB> prgbSrc(m_SrcImage);
+      Image<BYTERGB> prgbBG(m_BGImage);
+      Image<BYTERGB> prgbFG(m_FGImage);
+
+      for(int j = 0; j < m_height; j++)
+      {
+        int jj = m_offset + j*(N + m_pad);
+
+        for(int i = 0; i < m_width; i++)
+        {
+          int ii = m_offset + i*(M + m_pad);
+
+          double srcR = (double)prgbSrc[j][i].Red;
+          double srcG = (double)prgbSrc[j][i].Green;
+          double srcB = (double)prgbSrc[j][i].Blue;
+
+          // Find BMU
+
+          double d2min = DBL_MAX;
+          int iiHit = ii;
+          int jjHit = jj;
+
+          for(int l = 0; l < N; l++)
+          {
+            for(int k = 0; k < M; k++)
+            {
+              double dr = srcR - m_ppSOM[jj+l][ii+k].Red;
+              double dg = srcG - m_ppSOM[jj+l][ii+k].Green;
+              double db = srcB - m_ppSOM[jj+l][ii+k].Blue;
+
+              double d2 = dr*dr + dg*dg + db*db;
+
+              if(d2 < d2min)
+              {
+                d2min = d2;
+                iiHit = ii + k;
+                jjHit = jj + l;
+              }
+            }
+          }
+
+          double fuzzyBG = 1.0;
+
+          if(d2min < epsilon)
+            fuzzyBG = d2min/epsilon;
+
+          // Update SOM
+
+          double alphamax = alpha*exp(FUZZYEXP*fuzzyBG);
+
+          for(int l = (jjHit - m_offset); l <= (jjHit + m_offset); l++)
+          {
+            for(int k = (iiHit - m_offset); k <= (iiHit + m_offset); k++)
+            {
+              a = alphamax * m_ppW[l - jjHit + m_offset][k - iiHit + m_offset];
+
+              // speed hack.. avoid very small increment values. abs() is sloooow.
+
+              double d;
+
+              d = srcR - m_ppSOM[l][k].Red;
+              if(d*d > DBL_MIN)
+                m_ppSOM[l][k].Red += a*d;
+
+              d = srcG - m_ppSOM[l][k].Green;
+              if(d*d > DBL_MIN)
+                m_ppSOM[l][k].Green += a*d;
+
+              d = srcB - m_ppSOM[l][k].Blue;
+              if(d*d > DBL_MIN)
+                m_ppSOM[l][k].Blue += a*d;
+            }
+          }
+
+          if(fuzzyBG >= FUZZYTHRESH)
+          {
+            // Set foreground image
+            prgbFG[j][i].Red = prgbFG[j][i].Green = prgbFG[j][i].Blue = 255;
+          }
+          else
+          {
+            // Set background image
+            prgbBG[j][i].Red = m_ppSOM[jjHit][iiHit].Red;
+            prgbBG[j][i].Green = m_ppSOM[jjHit][iiHit].Green;
+            prgbBG[j][i].Blue =  m_ppSOM[jjHit][iiHit].Blue;
+
+            // Set foreground image
+            prgbFG[j][i].Red = prgbFG[j][i].Green = prgbFG[j][i].Blue = 0;
+          }
+        }
+      }
+
+      return;
+    }
+  }
+}
\ No newline at end of file
diff --git a/package_bgs/lb/BGModelFuzzySom.h b/package_bgs/lb/BGModelFuzzySom.h
new file mode 100644
index 0000000..2f21d3e
--- /dev/null
+++ b/package_bgs/lb/BGModelFuzzySom.h
@@ -0,0 +1,95 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+BGModelFuzzySom.h
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#ifndef BGMODELFUZZYSOM_H
+#define BGMODELFUZZYSOM_H
+
+#include "BGModel.h"
+
+namespace lb_library
+{
+  namespace FuzzyAdaptiveSOM
+  {
+    // SOM parameters
+
+    const int M = 3;				// width SOM (per pixel)
+    const int N = 3;				// height SOM (per pixel)
+    const int KERNEL = 3; 	// size Gaussian kernel 
+
+    const bool SPAN_NEIGHBORS = false; // true if update neighborhood spans different pixels			// 
+    const int TRAINING_STEPS = 100;			// number of training steps
+
+    const double EPS1 = 100.0; // model match distance during training
+    const double EPS2 = 20.0;  // model match distance
+    const double C1 = 1.0;     // learning rate during training
+    const double C2 = 0.05;    // learning rate
+
+    const double FUZZYEXP = -5.0;
+    const double FUZZYTHRESH = 0.8;
+
+    class BGModelFuzzySom : public BGModel
+    {
+    public:
+      BGModelFuzzySom(int width, int height);
+      ~BGModelFuzzySom();
+
+      void setBGModelParameter(int id, int value);
+
+    protected:
+      int m_widthSOM;
+      int m_heightSOM;
+      int m_offset;
+      int m_pad;
+      int m_K;
+      int m_TSteps;
+
+      double m_Wmax;
+
+      double m_epsilon1;
+      double m_epsilon2;
+      double m_alpha1;
+      double m_alpha2;
+
+      DBLRGB** m_ppSOM;					// SOM grid
+      double** m_ppW;						// Weights 
+
+      void Init();
+      void Update();
+    };
+  }
+}
+
+#endif
diff --git a/package_bgs/lb/BGModelGauss.cpp b/package_bgs/lb/BGModelGauss.cpp
new file mode 100644
index 0000000..6892d13
--- /dev/null
+++ b/package_bgs/lb/BGModelGauss.cpp
@@ -0,0 +1,200 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+BGModelGauss.cpp
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#include "BGModelGauss.h"
+
+namespace lb_library
+{
+  namespace SimpleGaussian
+  {
+    BGModelGauss::BGModelGauss(int width, int height) : BGModel(width,height)
+    {
+      m_alpha = ALPHAGAUSS;
+      m_threshold = THRESHGAUSS*THRESHGAUSS;
+      m_noise = NOISEGAUSS;
+
+      m_pMu = new DBLRGB[m_width * m_height];
+      m_pVar = new DBLRGB[m_width * m_height];
+
+      DBLRGB *pMu = m_pMu;
+      DBLRGB *pVar = m_pVar;
+
+      for(int k = 0; k < (m_width * m_height); k++)
+      {
+        pMu->Red = 0.0;
+        pMu->Green = 0.0;
+        pMu->Blue = 0.0;
+
+        pVar->Red = m_noise;
+        pVar->Green = m_noise;
+        pVar->Blue = m_noise;
+
+        pMu++;
+        pVar++;
+      }
+    }
+
+    BGModelGauss::~BGModelGauss()
+    {
+      delete [] m_pMu;
+      delete [] m_pVar;
+    }
+
+    void BGModelGauss::setBGModelParameter(int id, int value)
+    {
+      double dvalue = (double)value/255.0;
+
+      switch(id)
+      {
+      case 0:
+        m_threshold = 100.0*dvalue*dvalue;
+        break;
+
+      case 1:
+        m_noise = 100.0*dvalue;
+        break;
+
+      case 2: 
+        m_alpha = dvalue*dvalue*dvalue;
+        break;
+      }
+
+      return;
+    }
+
+    void BGModelGauss::Init()
+    {
+      DBLRGB *pMu = m_pMu;
+      DBLRGB *pVar = m_pVar;
+
+      Image<BYTERGB> prgbSrc(m_SrcImage);
+
+      for(int i = 0; i < m_height; i++)
+      {
+        for(int j = 0; j < m_width; j++)
+        {
+          pMu->Red = prgbSrc[i][j].Red;
+          pMu->Green = prgbSrc[i][j].Green;
+          pMu->Blue = prgbSrc[i][j].Blue;
+
+          pVar->Red = m_noise;
+          pVar->Green = m_noise;
+          pVar->Blue = m_noise;
+
+          pMu++;
+          pVar++;
+        }
+      }
+
+      return;
+    }
+
+    void BGModelGauss::Update()
+    {
+      DBLRGB *pMu = m_pMu;
+      DBLRGB *pVar = m_pVar;
+
+      Image<BYTERGB> prgbSrc(m_SrcImage);
+      Image<BYTERGB> prgbBG(m_BGImage);
+      Image<BYTERGB> prgbFG(m_FGImage);
+
+      for(int i = 0; i < m_height; i++)
+      {
+        for(int j = 0; j < m_width; j++)
+        {
+          double srcR = (double) prgbSrc[i][j].Red;
+          double srcG = (double) prgbSrc[i][j].Green;
+          double srcB = (double) prgbSrc[i][j].Blue;
+
+          // Mahalanobis distance 
+
+          double dr = srcR - pMu->Red;
+          double dg = srcG - pMu->Green;
+          double db = srcB - pMu->Blue;
+
+          double d2 = dr*dr/pVar->Red + dg*dg/pVar->Green + db*db/pVar->Blue;
+
+          // Classify
+
+          if(d2 < m_threshold)
+            prgbFG[i][j].Red = prgbFG[i][j].Green = prgbFG[i][j].Blue = 0;		
+          else
+            prgbFG[i][j].Red = prgbFG[i][j].Green = prgbFG[i][j].Blue = 255;		
+
+          // Update parameters
+
+          if(dr*dr > DBL_MIN)
+            pMu->Red += m_alpha*dr;
+
+          if(dg*dg > DBL_MIN)
+            pMu->Green += m_alpha*dg;
+
+          if(db*db > DBL_MIN)
+            pMu->Blue += m_alpha*db;
+
+          double d;
+
+          d = (srcR - pMu->Red)*(srcR - pMu->Red) - pVar->Red;
+          if(d*d > DBL_MIN)
+            pVar->Red += m_alpha*d;
+
+          d = (srcG - pMu->Green)*(srcG - pMu->Green) - pVar->Green;
+          if(d*d > DBL_MIN)
+            pVar->Green += m_alpha*d;
+
+          d = (srcB - pMu->Blue)*(srcB - pMu->Blue) - pVar->Blue;
+          if(d*d > DBL_MIN)
+            pVar->Blue += m_alpha*d;
+
+          pVar->Red = (std::min)(pVar->Red,m_noise);
+          pVar->Green = (std::min)(pVar->Green,m_noise);
+          pVar->Blue = (std::min)(pVar->Blue,m_noise);
+
+          // Set background
+
+          prgbBG[i][j].Red = (unsigned char)pMu->Red;			
+          prgbBG[i][j].Green = (unsigned char)pMu->Green;			
+          prgbBG[i][j].Blue = (unsigned char)pMu->Blue;
+
+          pMu++;
+          pVar++;
+        }
+      }
+
+      return;
+    }
+  }
+}
\ No newline at end of file
diff --git a/package_bgs/lb/BGModelGauss.h b/package_bgs/lb/BGModelGauss.h
new file mode 100644
index 0000000..d36a716
--- /dev/null
+++ b/package_bgs/lb/BGModelGauss.h
@@ -0,0 +1,73 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+BGModelGauss.h
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#ifndef BGMODELGAUSS_H
+#define BGMODELGAUSS_H
+
+#include "BGModel.h"
+
+namespace lb_library
+{
+  namespace SimpleGaussian
+  {
+    // Parameters
+    const double THRESHGAUSS = 2.5;   // Threshold
+    const double ALPHAGAUSS = 0.0001; // Learning rate
+    const double NOISEGAUSS = 50.0;   // Minimum variance (noise)
+
+    class BGModelGauss : public BGModel
+    {
+    public:
+      BGModelGauss(int width, int height);
+      ~BGModelGauss();
+
+      void setBGModelParameter(int id, int value);
+
+    protected:
+      double m_alpha;
+      double m_threshold;
+      double m_noise;
+
+      DBLRGB* m_pMu;
+      DBLRGB* m_pVar;
+
+      void Init();
+      void Update();
+    };
+  }
+}
+
+#endif
diff --git a/package_bgs/lb/BGModelMog.cpp b/package_bgs/lb/BGModelMog.cpp
new file mode 100644
index 0000000..df6986c
--- /dev/null
+++ b/package_bgs/lb/BGModelMog.cpp
@@ -0,0 +1,309 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+BGModelMog.cpp
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#include "BGModelMog.h"
+
+namespace lb_library
+{
+  namespace MixtureOfGaussians
+  {
+    BGModelMog::BGModelMog(int width, int height) : BGModel(width, height)
+    {
+      m_alpha = LEARNINGRATEMOG;
+      m_threshold = THRESHOLDMOG*THRESHOLDMOG;
+      m_noise = INITIALVARMOG;
+
+      m_T = BGTHRESHOLDMOG;
+
+      m_pMOG = new MOGDATA[NUMBERGAUSSIANS*m_width*m_height];
+      m_pK = new int[m_width*m_height];
+
+      MOGDATA *pMOG = m_pMOG;
+      int *pK = m_pK;
+
+      for(int i = 0; i < (m_width * m_height); i++)
+      {
+        for(int k = 0; k < NUMBERGAUSSIANS; k++)
+        {
+          pMOG->mu.Red = 0.0;
+          pMOG->mu.Green = 0.0;
+          pMOG->mu.Blue = 0.0;
+
+          pMOG->var.Red = 0.0;
+          pMOG->var.Green = 0.0;
+          pMOG->var.Blue = 0.0;
+
+          pMOG->w = 0.0;
+          pMOG->sortKey = 0.0;
+
+          pMOG++;
+        }
+
+        pK[i] = 0; 
+      }
+    }
+
+    BGModelMog::~BGModelMog()
+    {
+      delete [] m_pMOG;
+      delete [] m_pK;
+    }
+
+    void BGModelMog::setBGModelParameter(int id, int value)
+    {
+      double dvalue = (double)value/255.0;
+
+      switch(id)
+      {
+      case 0:
+        m_threshold = 100.0*dvalue*dvalue;
+        break;
+
+      case 1: 
+        m_T = dvalue;
+        break;
+
+      case 2:
+        m_alpha = dvalue*dvalue*dvalue;
+        break;
+
+      case 3: 
+        m_noise = 100.0*dvalue;;
+        break;
+      }
+
+      return;
+    }
+
+    void BGModelMog::Init()
+    {
+      MOGDATA *pMOG = m_pMOG;
+      int *pK = m_pK;
+
+      Image<BYTERGB> prgbSrc(m_SrcImage);
+
+      int n = 0;
+      for(int i = 0; i < m_height; i++)
+      {
+        for(int j = 0; j < m_width; j++)
+        {
+          pMOG[0].mu.Red = prgbSrc[i][j].Red;
+          pMOG[0].mu.Green = prgbSrc[i][j].Green;
+          pMOG[0].mu.Blue = prgbSrc[i][j].Blue;
+
+          pMOG[0].var.Red = m_noise;
+          pMOG[0].var.Green = m_noise;
+          pMOG[0].var.Blue = m_noise;
+
+          pMOG[0].w = 1.0;
+          pMOG[0].sortKey = pMOG[0].w/sqrt(pMOG[0].var.Red+pMOG[0].var.Green+pMOG[0].var.Blue);
+
+          pK[n] = 1;
+          n++;
+
+          pMOG += NUMBERGAUSSIANS;
+        }
+      }
+
+      return;
+    }
+
+    void BGModelMog::Update()
+    {
+      int kBG;
+
+      MOGDATA *pMOG = m_pMOG;
+      int *pK = m_pK;
+
+      Image<BYTERGB> prgbSrc(m_SrcImage);
+      Image<BYTERGB> prgbBG(m_BGImage);
+      Image<BYTERGB> prgbFG(m_FGImage);
+
+      int n = 0;
+      for(int i = 0; i < m_height; i++)
+      {
+        for(int j = 0; j < m_width; j++)
+        {
+          double srcR = (double) prgbSrc[i][j].Red;
+          double srcG = (double) prgbSrc[i][j].Green;
+          double srcB = (double) prgbSrc[i][j].Blue;
+
+          // Find matching distribution
+
+          int kHit = -1;
+
+          for(int k = 0; k < pK[n]; k++)
+          {
+            // Mahalanobis distance
+            double dr = srcR - pMOG[k].mu.Red;
+            double dg = srcG - pMOG[k].mu.Green;
+            double db = srcB - pMOG[k].mu.Blue;
+            double d2 = dr*dr/pMOG[k].var.Red + dg*dg/pMOG[k].var.Green + db*db/pMOG[k].var.Blue;
+
+            if(d2 < m_threshold)
+            {
+              kHit = k;
+              break;
+            }
+          }
+
+          // Adjust parameters
+
+          // matching distribution found
+          if(kHit != -1)
+          {
+            for(int k = 0; k < pK[n]; k++)
+            {
+              if(k == kHit)
+              {
+                pMOG[k].w = pMOG[k].w + m_alpha*(1.0f - pMOG[k].w);
+
+                double d;
+
+                d = srcR - pMOG[k].mu.Red;
+                if(d*d > DBL_MIN)
+                  pMOG[k].mu.Red += m_alpha*d;
+
+                d = srcG - pMOG[k].mu.Green;
+                if(d*d > DBL_MIN)
+                  pMOG[k].mu.Green += m_alpha*d;
+
+                d = srcB - pMOG[k].mu.Blue;
+                if(d*d > DBL_MIN)
+                  pMOG[k].mu.Blue += m_alpha*d;
+
+                d = (srcR - pMOG[k].mu.Red)*(srcR - pMOG[k].mu.Red) - pMOG[k].var.Red;
+                if(d*d > DBL_MIN)
+                  pMOG[k].var.Red += m_alpha*d;
+
+                d = (srcG - pMOG[k].mu.Green)*(srcG - pMOG[k].mu.Green) - pMOG[k].var.Green;
+                if(d*d > DBL_MIN)
+                  pMOG[k].var.Green += m_alpha*d;
+
+                d = (srcB - pMOG[k].mu.Blue)*(srcB - pMOG[k].mu.Blue) - pMOG[k].var.Blue;
+                if(d*d > DBL_MIN)
+                  pMOG[k].var.Blue += m_alpha*d;
+
+                pMOG[k].var.Red = (std::max)(pMOG[k].var.Red,m_noise);
+                pMOG[k].var.Green = (std::max)(pMOG[k].var.Green,m_noise);
+                pMOG[k].var.Blue = (std::max)(pMOG[k].var.Blue,m_noise);
+              }
+              else
+                pMOG[k].w = (1.0 - m_alpha)*pMOG[k].w;
+            }
+          }
+          // no match found... create new one
+          else
+          {
+            if(pK[n] < NUMBERGAUSSIANS)
+              pK[n]++;
+
+            kHit = pK[n] - 1;
+
+            if(pK[n] == 1)
+              pMOG[kHit].w = 1.0;
+            else
+              pMOG[kHit].w = LEARNINGRATEMOG;
+
+            pMOG[kHit].mu.Red = srcR;
+            pMOG[kHit].mu.Green = srcG;
+            pMOG[kHit].mu.Blue = srcB;
+
+            pMOG[kHit].var.Red = m_noise;
+            pMOG[kHit].var.Green = m_noise;
+            pMOG[kHit].var.Blue = m_noise;
+          }
+
+          // Normalize weights
+
+          double wsum = 0.0;
+
+          for(int k = 0; k < pK[n]; k++) 
+            wsum += pMOG[k].w;
+
+          double wfactor = 1.0/wsum;
+
+          for(int k = 0; k < pK[n]; k++)
+          {
+            pMOG[k].w *= wfactor;
+            pMOG[k].sortKey = pMOG[k].w/sqrt(pMOG[k].var.Red+pMOG[k].var.Green+pMOG[k].var.Blue);
+          }
+
+          // Sort distributions
+
+          for (int k = 0; k < kHit; k++)
+          {
+            if(pMOG[kHit].sortKey > pMOG[k].sortKey)
+            {
+              std::swap(pMOG[kHit],pMOG[k]);
+              break;
+            }
+          }
+
+          // Determine background distributions
+
+          wsum = 0.0;
+
+          for(int k = 0; k < pK[n]; k++)
+          {
+            wsum += pMOG[k].w;
+
+            if(wsum > m_T)
+            {
+              kBG = k;
+              break;
+            }
+          }
+
+          if(kHit > kBG)
+            prgbFG[i][j].Red = prgbFG[i][j].Green = prgbFG[i][j].Blue = 255;			
+          else
+            prgbFG[i][j].Red = prgbFG[i][j].Green = prgbFG[i][j].Blue = 0;			
+
+          prgbBG[i][j].Red = (unsigned char)pMOG[0].mu.Red;
+          prgbBG[i][j].Green = (unsigned char)pMOG[0].mu.Green;
+          prgbBG[i][j].Blue = (unsigned char)pMOG[0].mu.Blue;
+
+          pMOG += NUMBERGAUSSIANS;
+
+          n++;
+        }
+      }
+
+      return;
+    }
+  }
+}
\ No newline at end of file
diff --git a/package_bgs/lb/BGModelMog.h b/package_bgs/lb/BGModelMog.h
new file mode 100644
index 0000000..c4e51a4
--- /dev/null
+++ b/package_bgs/lb/BGModelMog.h
@@ -0,0 +1,83 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+BGModelMog.h
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#ifndef BGMODELMOGRGB_H
+#define BGMODELMOGRGB_H
+
+#include "BGModel.h"
+
+namespace lb_library
+{
+  namespace MixtureOfGaussians
+  {
+    const unsigned int NUMBERGAUSSIANS = 3;
+    const float LEARNINGRATEMOG = 0.001f;
+    const float THRESHOLDMOG = 2.5f;
+    const float BGTHRESHOLDMOG = 0.5f;
+    const float INITIALVARMOG = 50.0f;
+
+    typedef struct tagMOGDATA
+    {
+      DBLRGB mu;
+      DBLRGB var;
+      double w;
+      double sortKey;
+    } MOGDATA;
+
+    class BGModelMog : public BGModel
+    {
+    public:
+      BGModelMog(int width, int height);
+      ~BGModelMog();
+
+      void setBGModelParameter(int id, int value);
+
+    protected:
+      double m_alpha;
+      double m_threshold;
+      double m_noise;
+      double m_T;
+
+      MOGDATA* m_pMOG;
+      int* m_pK;				// number of distributions per pixel
+
+      void Init();
+      void Update();
+    };
+  }
+}
+
+#endif
diff --git a/package_bgs/lb/BGModelSom.cpp b/package_bgs/lb/BGModelSom.cpp
new file mode 100644
index 0000000..256d485
--- /dev/null
+++ b/package_bgs/lb/BGModelSom.cpp
@@ -0,0 +1,291 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+BGModelSom.cpp
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#include "BGModelSom.h"
+
+namespace lb_library
+{
+  namespace AdaptiveSOM
+  {
+    BGModelSom::BGModelSom(int width, int height) : BGModel(width,height)
+    {
+      m_offset = (KERNEL - 1)/2;
+
+      if(SPAN_NEIGHBORS)
+        m_pad = 0;	
+      else
+        m_pad = m_offset;
+
+      // SOM models
+
+      m_widthSOM = m_width*M + 2*m_offset + (m_width-1)*m_pad;
+      m_heightSOM = m_height*N + 2*m_offset + (m_height-1)*m_pad;
+
+      m_ppSOM = new DBLRGB*[m_heightSOM];	
+      for(int n = 0; n < m_heightSOM; n++)
+        m_ppSOM[n] = new DBLRGB[m_widthSOM];
+
+      for(int j = 0; j < m_heightSOM; j++)
+      {
+        for(int i = 0; i < m_widthSOM; i++)
+        {							
+          m_ppSOM[j][i].Red = 0.0;
+          m_ppSOM[j][i].Green = 0.0;
+          m_ppSOM[j][i].Blue = 0.0;
+        }
+      }
+
+      // Create weights
+
+      m_ppW = new double*[KERNEL];
+      for(int n = 0; n < KERNEL; n++)
+        m_ppW[n] = new double[KERNEL];
+
+      // Construct Gaussian kernel using Pascal's triangle
+
+      int cM;
+      int cN;
+      m_Wmax = DBL_MIN;
+
+      cN = 1;
+      for(int j = 0; j < KERNEL; j++)
+      {
+        cM = 1;		
+
+        for(int i = 0; i < KERNEL; i++)
+        {
+          m_ppW[j][i] = cN*cM;
+
+          if(m_ppW[j][i] > m_Wmax)
+            m_Wmax = m_ppW[j][i]; 
+
+          cM = cM * (KERNEL - 1 - i) / (i + 1);
+        }
+
+        cN = cN * (KERNEL - 1 - j) / (j + 1);
+      }
+
+      // Parameters
+
+      m_epsilon1 = EPS1*EPS1;
+      m_epsilon2 = EPS2*EPS2;
+
+      m_alpha1 = C1/m_Wmax;
+      m_alpha2 = C2/m_Wmax;
+
+      m_K = 0;
+      m_TSteps = TRAINING_STEPS;
+    }
+
+    BGModelSom::~BGModelSom()
+    {
+      for(int n = 0; n < m_heightSOM; n++)
+        delete [] m_ppSOM[n];
+
+      delete [] m_ppSOM;
+
+      for(int n = 0; n < KERNEL; n++)
+        delete [] m_ppW[n];
+
+      delete [] m_ppW;
+    }
+
+    void BGModelSom::setBGModelParameter(int id, int value)
+    {
+      double dvalue = (double)value/255.0;
+
+      switch(id)
+      {
+      case 0:
+        m_epsilon2 = 255.0*255.0*dvalue*dvalue*dvalue*dvalue;
+        break;
+
+      case 1:
+        m_epsilon1 = 255.0*255.0*dvalue*dvalue*dvalue*dvalue;
+        break;
+
+      case 2:
+        m_alpha2 = dvalue*dvalue*dvalue/m_Wmax;
+        break;
+
+      case 3:
+        m_alpha1 = dvalue*dvalue*dvalue/m_Wmax;
+        break;
+
+      case 5:
+        m_TSteps = (int)(255.0*dvalue);
+        break;
+      }
+
+      return;
+    }
+
+    void BGModelSom::Init()
+    {
+      Image<BYTERGB> prgbSrc(m_SrcImage);
+
+      for(int j = 0; j < m_height; j++)
+      {
+        int jj = m_offset + j*(N + m_pad);
+
+        for(int i = 0; i < m_width; i++)
+        {
+          int ii = m_offset + i*(M + m_pad);		
+
+          for(int l = 0; l < N; l++)
+          {
+            for(int k = 0; k < M; k++)
+            {
+              m_ppSOM[jj+l][ii+k].Red = (double)prgbSrc[j][i].Red;
+              m_ppSOM[jj+l][ii+k].Green = (double)prgbSrc[j][i].Green;
+              m_ppSOM[jj+l][ii+k].Blue = (double)prgbSrc[j][i].Blue;
+            }
+          }
+        }
+      }
+
+      m_K = 0;
+
+      return;
+    }
+
+    void BGModelSom::Update()
+    {
+      double alpha,a;
+      double epsilon;
+
+      // calibration phase
+      if(m_K <= m_TSteps)
+      {									
+        epsilon = m_epsilon1;
+        alpha = (m_alpha1-m_K*(m_alpha1-m_alpha2)/m_TSteps);
+        m_K++;
+      }
+      else // online phase
+      {														
+        epsilon = m_epsilon2;
+        alpha = m_alpha2;
+      }
+
+      Image<BYTERGB> prgbSrc(m_SrcImage);
+      Image<BYTERGB> prgbBG(m_BGImage);
+      Image<BYTERGB> prgbFG(m_FGImage);
+
+      for(int j = 0; j < m_height; j++)
+      {
+        int jj = m_offset + j*(N + m_pad);
+
+        for(int i = 0; i < m_width; i++)
+        {
+          int ii = m_offset + i*(M + m_pad);
+
+          double srcR = (double)prgbSrc[j][i].Red;
+          double srcG = (double)prgbSrc[j][i].Green;
+          double srcB = (double)prgbSrc[j][i].Blue;
+
+          // Find BMU
+
+          double d2min = DBL_MAX;
+          int iiHit = ii;
+          int jjHit = jj;
+
+          for(int l = 0; l < N; l++)
+          {
+            for(int k = 0; k < M; k++)
+            {
+              double dr = srcR - m_ppSOM[jj+l][ii+k].Red;
+              double dg = srcG - m_ppSOM[jj+l][ii+k].Green;
+              double db = srcB - m_ppSOM[jj+l][ii+k].Blue;
+
+              double d2 = dr*dr + dg*dg + db*db;
+
+              if(d2 < d2min)
+              {
+                d2min = d2;
+                iiHit = ii + k;
+                jjHit = jj + l;
+              }
+            }
+          }
+
+          // Update SOM
+
+          if(d2min <= epsilon) // matching model found 
+          {
+            for(int l = (jjHit - m_offset); l <= (jjHit + m_offset); l++)
+            {
+              for(int k = (iiHit - m_offset); k <= (iiHit + m_offset); k++)
+              {
+                a = alpha*m_ppW[l-jjHit+m_offset][k-iiHit+m_offset];
+
+                // speed hack.. avoid very small increment values. abs() is sloooow.
+
+                double d;
+
+                d = srcR - m_ppSOM[l][k].Red;
+                if(d*d > DBL_MIN)
+                  m_ppSOM[l][k].Red += a*d;
+
+                d = srcG - m_ppSOM[l][k].Green;
+                if(d*d > DBL_MIN)
+                  m_ppSOM[l][k].Green += a*d;
+
+                d = srcB - m_ppSOM[l][k].Blue;
+                if(d*d > DBL_MIN)
+                  m_ppSOM[l][k].Blue += a*d;
+              }
+            }
+
+            // Set background image
+            prgbBG[j][i].Red = m_ppSOM[jjHit][iiHit].Red;
+            prgbBG[j][i].Green = m_ppSOM[jjHit][iiHit].Green;
+            prgbBG[j][i].Blue =  m_ppSOM[jjHit][iiHit].Blue;
+
+            // Set foreground image
+            prgbFG[j][i].Red = prgbFG[j][i].Green = prgbFG[j][i].Blue = 0;
+          }
+          else
+          {
+            // Set foreground image
+            prgbFG[j][i].Red = prgbFG[j][i].Green = prgbFG[j][i].Blue = 255;
+          }
+        }
+      }
+
+      return;
+    }
+  }
+}
\ No newline at end of file
diff --git a/package_bgs/lb/BGModelSom.h b/package_bgs/lb/BGModelSom.h
new file mode 100644
index 0000000..e95af11
--- /dev/null
+++ b/package_bgs/lb/BGModelSom.h
@@ -0,0 +1,92 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+BGModelSom.h
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#ifndef BGMODELSOM_H
+#define BGMODELSOM_H
+
+#include "BGModel.h"
+
+namespace lb_library
+{
+  namespace AdaptiveSOM
+  {
+    // SOM parameters
+
+    const int M = 3;				// width SOM (per pixel)
+    const int N = 3;				// height SOM (per pixel)
+    const int KERNEL = 3; 	// size Gaussian kernel 
+
+    const bool SPAN_NEIGHBORS = false; // true if update neighborhood spans different pixels			// 
+    const int TRAINING_STEPS = 100;			// number of training steps
+
+    const float EPS1 = 100.0; // model match distance during training
+    const float EPS2 = 20.0;  // model match distance
+    const float C1 = 1.0;     // learning rate during training
+    const float C2 = 0.05;    // learning rate
+
+    class BGModelSom : public BGModel
+    {
+    public:
+      BGModelSom(int width, int height);
+      ~BGModelSom();
+
+      void setBGModelParameter(int id, int value);
+
+    protected:
+      int m_widthSOM;
+      int m_heightSOM;
+      int m_offset;
+      int m_pad;
+      int m_K;
+      int m_TSteps;
+
+      double m_Wmax;
+
+      double m_epsilon1;
+      double m_epsilon2;
+      double m_alpha1;
+      double m_alpha2;
+
+      DBLRGB** m_ppSOM;					// SOM grid
+      double** m_ppW;						// Weights 
+
+      void Init();
+      void Update();
+    };
+  }
+}
+
+#endif
diff --git a/package_bgs/lb/LBAdaptiveSOM.cpp b/package_bgs/lb/LBAdaptiveSOM.cpp
new file mode 100644
index 0000000..ce06433
--- /dev/null
+++ b/package_bgs/lb/LBAdaptiveSOM.cpp
@@ -0,0 +1,109 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "LBAdaptiveSOM.h"
+
+LBAdaptiveSOM::LBAdaptiveSOM() : firstTime(true), showOutput(true), 
+  sensitivity(75), trainingSensitivity(245), learningRate(62), trainingLearningRate(255), trainingSteps(55)
+{
+  std::cout << "LBAdaptiveSOM()" << std::endl;
+}
+
+LBAdaptiveSOM::~LBAdaptiveSOM()
+{
+  delete m_pBGModel;
+  std::cout << "~LBAdaptiveSOM()" << std::endl;
+}
+
+void LBAdaptiveSOM::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+  
+  IplImage *frame = new IplImage(img_input);
+  
+  if(firstTime)
+  {
+    saveConfig();
+
+    int w = cvGetSize(frame).width;
+    int h = cvGetSize(frame).height;
+
+    m_pBGModel = new BGModelSom(w,h);
+    m_pBGModel->InitModel(frame);
+  }
+  
+  m_pBGModel->setBGModelParameter(0,sensitivity);
+  m_pBGModel->setBGModelParameter(1,trainingSensitivity);
+  m_pBGModel->setBGModelParameter(2,learningRate);
+  m_pBGModel->setBGModelParameter(3,trainingLearningRate);
+  m_pBGModel->setBGModelParameter(5,trainingSteps);
+
+  m_pBGModel->UpdateModel(frame);
+
+  img_foreground = cv::Mat(m_pBGModel->GetFG());
+  img_background = cv::Mat(m_pBGModel->GetBG());
+    
+  if(showOutput)
+  {
+    cv::imshow("SOM Mask", img_foreground);
+    cv::imshow("SOM Model", img_background);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+  
+  delete frame;
+  
+  firstTime = false;
+}
+
+//void LBAdaptiveSOM::finish(void)
+//{
+//  delete m_pBGModel;
+//}
+
+void LBAdaptiveSOM::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LBAdaptiveSOM.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "sensitivity", sensitivity);
+  cvWriteInt(fs, "trainingSensitivity", trainingSensitivity);
+  cvWriteInt(fs, "learningRate", learningRate);
+  cvWriteInt(fs, "trainingLearningRate", trainingLearningRate);
+  cvWriteInt(fs, "trainingSteps", trainingSteps);
+
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void LBAdaptiveSOM::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LBAdaptiveSOM.xml", 0, CV_STORAGE_READ);
+  
+  sensitivity          = cvReadIntByName(fs, 0, "sensitivity", 75);
+  trainingSensitivity  = cvReadIntByName(fs, 0, "trainingSensitivity", 245);
+  learningRate         = cvReadIntByName(fs, 0, "learningRate", 62);
+  trainingLearningRate = cvReadIntByName(fs, 0, "trainingLearningRate", 255);
+  trainingSteps        = cvReadIntByName(fs, 0, "trainingSteps", 55);
+
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/lb/LBAdaptiveSOM.h b/package_bgs/lb/LBAdaptiveSOM.h
new file mode 100644
index 0000000..6e001df
--- /dev/null
+++ b/package_bgs/lb/LBAdaptiveSOM.h
@@ -0,0 +1,56 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "BGModelSom.h"
+
+#include "../IBGS.h"
+
+using namespace lb_library;
+using namespace lb_library::AdaptiveSOM;
+
+class LBAdaptiveSOM : public IBGS
+{
+private:
+  bool firstTime;
+  bool showOutput;
+  
+  BGModel* m_pBGModel;
+  int sensitivity;
+  int trainingSensitivity;
+  int learningRate;
+  int trainingLearningRate;
+  int trainingSteps;
+
+  cv::Mat img_foreground;
+  cv::Mat img_background;
+
+public:
+  LBAdaptiveSOM();
+  ~LBAdaptiveSOM();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+  //void finish(void);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
\ No newline at end of file
diff --git a/package_bgs/lb/LBFuzzyAdaptiveSOM.cpp b/package_bgs/lb/LBFuzzyAdaptiveSOM.cpp
new file mode 100644
index 0000000..4ef8560
--- /dev/null
+++ b/package_bgs/lb/LBFuzzyAdaptiveSOM.cpp
@@ -0,0 +1,109 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "LBFuzzyAdaptiveSOM.h"
+
+LBFuzzyAdaptiveSOM::LBFuzzyAdaptiveSOM() : firstTime(true), showOutput(true), 
+  sensitivity(90), trainingSensitivity(240), learningRate(38), trainingLearningRate(255), trainingSteps(81)
+{
+  std::cout << "LBFuzzyAdaptiveSOM()" << std::endl;
+}
+
+LBFuzzyAdaptiveSOM::~LBFuzzyAdaptiveSOM()
+{
+  delete m_pBGModel;
+  std::cout << "~LBFuzzyAdaptiveSOM()" << std::endl;
+}
+
+void LBFuzzyAdaptiveSOM::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+  
+  IplImage *frame = new IplImage(img_input);
+  
+  if(firstTime)
+  {
+    saveConfig();
+
+    int w = cvGetSize(frame).width;
+    int h = cvGetSize(frame).height;
+
+    m_pBGModel = new BGModelFuzzySom(w,h);
+    m_pBGModel->InitModel(frame);
+  }
+  
+  m_pBGModel->setBGModelParameter(0,sensitivity);
+  m_pBGModel->setBGModelParameter(1,trainingSensitivity);
+  m_pBGModel->setBGModelParameter(2,learningRate);
+  m_pBGModel->setBGModelParameter(3,trainingLearningRate);
+  m_pBGModel->setBGModelParameter(5,trainingSteps);
+
+  m_pBGModel->UpdateModel(frame);
+
+  img_foreground = cv::Mat(m_pBGModel->GetFG());
+  img_background = cv::Mat(m_pBGModel->GetBG());
+    
+  if(showOutput)
+  {
+    cv::imshow("FSOM Mask", img_foreground);
+    cv::imshow("FSOM Model", img_background);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+  
+  delete frame;
+  
+  firstTime = false;
+}
+
+//void LBFuzzyAdaptiveSOM::finish(void)
+//{
+//  //delete m_pBGModel;
+//}
+
+void LBFuzzyAdaptiveSOM::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LBFuzzyAdaptiveSOM.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "sensitivity", sensitivity);
+  cvWriteInt(fs, "trainingSensitivity", trainingSensitivity);
+  cvWriteInt(fs, "learningRate", learningRate);
+  cvWriteInt(fs, "trainingLearningRate", trainingLearningRate);
+  cvWriteInt(fs, "trainingSteps", trainingSteps);
+
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void LBFuzzyAdaptiveSOM::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LBFuzzyAdaptiveSOM.xml", 0, CV_STORAGE_READ);
+  
+  sensitivity          = cvReadIntByName(fs, 0, "sensitivity", 90);
+  trainingSensitivity  = cvReadIntByName(fs, 0, "trainingSensitivity", 240);
+  learningRate         = cvReadIntByName(fs, 0, "learningRate", 38);
+  trainingLearningRate = cvReadIntByName(fs, 0, "trainingLearningRate", 255);
+  trainingSteps        = cvReadIntByName(fs, 0, "trainingSteps", 81);
+
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/lb/LBFuzzyAdaptiveSOM.h b/package_bgs/lb/LBFuzzyAdaptiveSOM.h
new file mode 100644
index 0000000..76dec2f
--- /dev/null
+++ b/package_bgs/lb/LBFuzzyAdaptiveSOM.h
@@ -0,0 +1,56 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "BGModelFuzzySom.h"
+
+#include "../IBGS.h"
+
+using namespace lb_library;
+using namespace lb_library::FuzzyAdaptiveSOM;
+
+class LBFuzzyAdaptiveSOM : public IBGS
+{
+private:
+  bool firstTime;
+  bool showOutput;
+  
+  BGModel* m_pBGModel;
+  int sensitivity;
+  int trainingSensitivity;
+  int learningRate;
+  int trainingLearningRate;
+  int trainingSteps;
+
+  cv::Mat img_foreground;
+  cv::Mat img_background;
+
+public:
+  LBFuzzyAdaptiveSOM();
+  ~LBFuzzyAdaptiveSOM();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+  //void finish(void);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
\ No newline at end of file
diff --git a/package_bgs/lb/LBFuzzyGaussian.cpp b/package_bgs/lb/LBFuzzyGaussian.cpp
new file mode 100644
index 0000000..dc257bf
--- /dev/null
+++ b/package_bgs/lb/LBFuzzyGaussian.cpp
@@ -0,0 +1,105 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "LBFuzzyGaussian.h"
+
+LBFuzzyGaussian::LBFuzzyGaussian() : firstTime(true), showOutput(true), sensitivity(72), bgThreshold(162), learningRate(49), noiseVariance(195)
+{
+  std::cout << "LBFuzzyGaussian()" << std::endl;
+}
+
+LBFuzzyGaussian::~LBFuzzyGaussian()
+{
+  delete m_pBGModel;
+  std::cout << "~LBFuzzyGaussian()" << std::endl;
+}
+
+void LBFuzzyGaussian::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+  
+  IplImage *frame = new IplImage(img_input);
+  
+  if(firstTime)
+  {
+    saveConfig();
+
+    int w = cvGetSize(frame).width;
+    int h = cvGetSize(frame).height;
+
+    m_pBGModel = new BGModelFuzzyGauss(w,h);
+    m_pBGModel->InitModel(frame);
+  }
+  
+  m_pBGModel->setBGModelParameter(0,sensitivity);
+  m_pBGModel->setBGModelParameter(1,bgThreshold);
+  m_pBGModel->setBGModelParameter(2,learningRate);
+  m_pBGModel->setBGModelParameter(3,noiseVariance);
+
+  m_pBGModel->UpdateModel(frame);
+
+  img_foreground = cv::Mat(m_pBGModel->GetFG());
+  img_background = cv::Mat(m_pBGModel->GetBG());
+    
+  if(showOutput)
+  {
+    cv::imshow("FG Mask", img_foreground);
+    cv::imshow("FG Model", img_background);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+  
+  delete frame;
+  
+  firstTime = false;
+}
+
+//void LBFuzzyGaussian::finish(void)
+//{
+//  delete m_pBGModel;
+//}
+
+void LBFuzzyGaussian::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LBFuzzyGaussian.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "sensitivity", sensitivity);
+  cvWriteInt(fs, "bgThreshold", bgThreshold);
+  cvWriteInt(fs, "learningRate", learningRate);
+  cvWriteInt(fs, "noiseVariance", noiseVariance);
+  
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void LBFuzzyGaussian::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LBFuzzyGaussian.xml", 0, CV_STORAGE_READ);
+  
+  sensitivity = cvReadIntByName(fs, 0, "sensitivity", 72);
+  bgThreshold = cvReadIntByName(fs, 0, "bgThreshold", 162);
+  learningRate = cvReadIntByName(fs, 0, "learningRate", 49);
+  noiseVariance = cvReadIntByName(fs, 0, "noiseVariance", 195);
+  
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/lb/LBFuzzyGaussian.h b/package_bgs/lb/LBFuzzyGaussian.h
new file mode 100644
index 0000000..408c4a5
--- /dev/null
+++ b/package_bgs/lb/LBFuzzyGaussian.h
@@ -0,0 +1,55 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "BGModelFuzzyGauss.h"
+
+#include "../IBGS.h"
+
+using namespace lb_library;
+using namespace lb_library::FuzzyGaussian;
+
+class LBFuzzyGaussian : public IBGS
+{
+private:
+  bool firstTime;
+  bool showOutput;
+  
+  BGModel* m_pBGModel;
+  int sensitivity;
+  int bgThreshold;
+  int learningRate;
+  int noiseVariance;
+
+  cv::Mat img_foreground;
+  cv::Mat img_background;
+
+public:
+  LBFuzzyGaussian();
+  ~LBFuzzyGaussian();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+  //void finish(void);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
\ No newline at end of file
diff --git a/package_bgs/lb/LBMixtureOfGaussians.cpp b/package_bgs/lb/LBMixtureOfGaussians.cpp
new file mode 100644
index 0000000..8d235c5
--- /dev/null
+++ b/package_bgs/lb/LBMixtureOfGaussians.cpp
@@ -0,0 +1,105 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "LBMixtureOfGaussians.h"
+
+LBMixtureOfGaussians::LBMixtureOfGaussians() : firstTime(true), showOutput(true), sensitivity(81), bgThreshold(83), learningRate(59), noiseVariance(206)
+{
+  std::cout << "LBMixtureOfGaussians()" << std::endl;
+}
+
+LBMixtureOfGaussians::~LBMixtureOfGaussians()
+{
+  delete m_pBGModel;
+  std::cout << "~LBMixtureOfGaussians()" << std::endl;
+}
+
+void LBMixtureOfGaussians::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+  
+  IplImage *frame = new IplImage(img_input);
+  
+  if(firstTime)
+  {
+    saveConfig();
+
+    int w = cvGetSize(frame).width;
+    int h = cvGetSize(frame).height;
+
+    m_pBGModel = new BGModelMog(w,h);
+    m_pBGModel->InitModel(frame);
+  }
+  
+  m_pBGModel->setBGModelParameter(0,sensitivity);
+  m_pBGModel->setBGModelParameter(1,bgThreshold);
+  m_pBGModel->setBGModelParameter(2,learningRate);
+  m_pBGModel->setBGModelParameter(3,noiseVariance);
+
+  m_pBGModel->UpdateModel(frame);
+
+  img_foreground = cv::Mat(m_pBGModel->GetFG());
+  img_background = cv::Mat(m_pBGModel->GetBG());
+    
+  if(showOutput)
+  {
+    cv::imshow("MOG Mask", img_foreground);
+    cv::imshow("MOG Model", img_background);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+  
+  delete frame;
+  
+  firstTime = false;
+}
+
+//void LBMixtureOfGaussians::finish(void)
+//{
+//  delete m_pBGModel;
+//}
+
+void LBMixtureOfGaussians::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LBMixtureOfGaussians.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "sensitivity", sensitivity);
+  cvWriteInt(fs, "bgThreshold", bgThreshold);
+  cvWriteInt(fs, "learningRate", learningRate);
+  cvWriteInt(fs, "noiseVariance", noiseVariance);
+  
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void LBMixtureOfGaussians::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LBMixtureOfGaussians.xml", 0, CV_STORAGE_READ);
+  
+  sensitivity = cvReadIntByName(fs, 0, "sensitivity", 81);
+  bgThreshold = cvReadIntByName(fs, 0, "bgThreshold", 83);
+  learningRate = cvReadIntByName(fs, 0, "learningRate", 59);
+  noiseVariance = cvReadIntByName(fs, 0, "noiseVariance", 206);
+  
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/lb/LBMixtureOfGaussians.h b/package_bgs/lb/LBMixtureOfGaussians.h
new file mode 100644
index 0000000..71ab5f0
--- /dev/null
+++ b/package_bgs/lb/LBMixtureOfGaussians.h
@@ -0,0 +1,55 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "BGModelMog.h"
+
+#include "../IBGS.h"
+
+using namespace lb_library;
+using namespace lb_library::MixtureOfGaussians;
+
+class LBMixtureOfGaussians : public IBGS
+{
+private:
+  bool firstTime;
+  bool showOutput;
+  
+  BGModel* m_pBGModel;
+  int sensitivity;
+  int bgThreshold;
+  int learningRate;
+  int noiseVariance;
+
+  cv::Mat img_foreground;
+  cv::Mat img_background;
+
+public:
+  LBMixtureOfGaussians();
+  ~LBMixtureOfGaussians();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+  //void finish(void);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
\ No newline at end of file
diff --git a/package_bgs/lb/LBSimpleGaussian.cpp b/package_bgs/lb/LBSimpleGaussian.cpp
new file mode 100644
index 0000000..f0ce6fc
--- /dev/null
+++ b/package_bgs/lb/LBSimpleGaussian.cpp
@@ -0,0 +1,100 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "LBSimpleGaussian.h"
+
+LBSimpleGaussian::LBSimpleGaussian() : firstTime(true), showOutput(true), sensitivity(66), noiseVariance(162), learningRate(18)
+{
+  std::cout << "LBSimpleGaussian()" << std::endl;
+}
+
+LBSimpleGaussian::~LBSimpleGaussian()
+{
+  delete m_pBGModel;
+  std::cout << "~LBSimpleGaussian()" << std::endl;
+}
+
+void LBSimpleGaussian::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+  
+  IplImage *frame = new IplImage(img_input);
+  
+  if(firstTime)
+  {
+    saveConfig();
+
+    int w = cvGetSize(frame).width;
+    int h = cvGetSize(frame).height;
+
+    m_pBGModel = new BGModelGauss(w,h);
+    m_pBGModel->InitModel(frame);
+  }
+  
+  m_pBGModel->setBGModelParameter(0,sensitivity);
+  m_pBGModel->setBGModelParameter(1,noiseVariance);
+  m_pBGModel->setBGModelParameter(2,learningRate);
+
+  m_pBGModel->UpdateModel(frame);
+
+  img_foreground = cv::Mat(m_pBGModel->GetFG());
+  img_background = cv::Mat(m_pBGModel->GetBG());
+    
+  if(showOutput)
+  {
+    cv::imshow("SG Mask", img_foreground);
+    cv::imshow("SG Model", img_background);
+  }
+
+  img_foreground.copyTo(img_output);
+  img_background.copyTo(img_bgmodel);
+  
+  delete frame;
+  
+  firstTime = false;
+}
+
+//void LBSimpleGaussian::finish(void)
+//{
+//  delete m_pBGModel;
+//}
+
+void LBSimpleGaussian::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LBSimpleGaussian.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "sensitivity", sensitivity);
+  cvWriteInt(fs, "noiseVariance", noiseVariance);
+  cvWriteInt(fs, "learningRate", learningRate);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void LBSimpleGaussian::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/LBSimpleGaussian.xml", 0, CV_STORAGE_READ);
+  
+  sensitivity = cvReadIntByName(fs, 0, "sensitivity", 66);
+  noiseVariance = cvReadIntByName(fs, 0, "noiseVariance", 162);
+  learningRate = cvReadIntByName(fs, 0, "learningRate", 18);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/lb/LBSimpleGaussian.h b/package_bgs/lb/LBSimpleGaussian.h
new file mode 100644
index 0000000..ea8317c
--- /dev/null
+++ b/package_bgs/lb/LBSimpleGaussian.h
@@ -0,0 +1,54 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "BGModelGauss.h"
+
+#include "../IBGS.h"
+
+using namespace lb_library;
+using namespace lb_library::SimpleGaussian;
+
+class LBSimpleGaussian : public IBGS
+{
+private:
+  bool firstTime;
+  bool showOutput;
+  
+  BGModel* m_pBGModel;
+  int sensitivity;
+  int noiseVariance;
+  int learningRate;
+
+  cv::Mat img_foreground;
+  cv::Mat img_background;
+
+public:
+  LBSimpleGaussian();
+  ~LBSimpleGaussian();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+  //void finish(void);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
\ No newline at end of file
diff --git a/package_bgs/lb/Types.h b/package_bgs/lb/Types.h
new file mode 100644
index 0000000..5b1fd5b
--- /dev/null
+++ b/package_bgs/lb/Types.h
@@ -0,0 +1,99 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/*  Scene 1.0.1 -- Background subtraction and object tracking for complex environments  
+Types.h
+
+Copyright (C) 2011 Laurence Bender <lbender@untref.edu.ar>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+#ifndef TYPES_H
+#define TYPES_H
+
+#include <cv.h>
+
+namespace lb_library
+{
+  template<class T> class Image
+  {
+  private:
+    IplImage* imgp;
+
+  public:
+    Image(IplImage* img=0) {imgp=img;}
+    ~Image(){imgp=0;}
+  
+    void operator=(IplImage* img) {imgp=img;}
+  
+    inline T* operator[](const int rowIndx)
+    {
+      return ((T *)(imgp->imageData + rowIndx*imgp->widthStep));
+    }
+  };
+
+  typedef struct{
+    unsigned char b,g,r;
+  } RgbPixel;
+
+  typedef struct{
+    unsigned char Blue,Green,Red;
+  } BYTERGB;
+
+  typedef struct{
+    unsigned int Blue,Green,Red;
+  } INTRGB;
+
+  typedef struct{
+    float b,g,r;
+  }RgbPixelFloat;
+
+  typedef struct{
+    double Blue,Green,Red;
+  } DBLRGB;
+
+  typedef Image<RgbPixel>       RgbImage;
+  typedef Image<RgbPixelFloat>  RgbImageFloat;
+  typedef Image<unsigned char>  BwImage;
+  typedef Image<float>          BwImageFloat;
+
+  /*
+  IplImage* img = cvCreateImage(cvSize(640,480), IPL_DEPTH_32F, 3);
+  RgbImageFloat imgA(img);
+  for(int i = 0; i < m_height; i++)
+    for(int j = 0; j < m_width; j++)
+      imgA[i][j].b = 111;
+      imgA[i][j].g = 111;
+      imgA[i][j].r = 111;
+  */
+}
+
+//---------------------------------------------
+
+#endif
diff --git a/package_bgs/my/MyBGS.cpp b/package_bgs/my/MyBGS.cpp
new file mode 100644
index 0000000..07b51cd
--- /dev/null
+++ b/package_bgs/my/MyBGS.cpp
@@ -0,0 +1,26 @@
+#include "MyBGS.h"
+
+MyBGS::MyBGS(){}
+MyBGS::~MyBGS(){}
+
+void MyBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  if(img_previous.empty())
+    img_input.copyTo(img_previous);
+
+  cv::Mat img_foreground;
+  cv::absdiff(img_previous, img_input, img_foreground);
+
+  if(img_foreground.channels() == 3)
+    cv::cvtColor(img_foreground, img_foreground, CV_BGR2GRAY);
+
+  cv::threshold(img_foreground, img_foreground, 15, 255, cv::THRESH_BINARY);
+
+  img_foreground.copyTo(img_output);
+  img_previous.copyTo(img_bgmodel);
+
+  img_input.copyTo(img_previous);
+}
diff --git a/package_bgs/my/MyBGS.h b/package_bgs/my/MyBGS.h
new file mode 100644
index 0000000..daba730
--- /dev/null
+++ b/package_bgs/my/MyBGS.h
@@ -0,0 +1,22 @@
+#pragma once
+
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+
+class MyBGS : public IBGS
+{
+private:
+  cv::Mat img_previous;
+  
+public:
+  MyBGS();
+  ~MyBGS();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig(){}
+  void loadConfig(){}
+};
\ No newline at end of file
diff --git a/package_bgs/pt/PBAS.cpp b/package_bgs/pt/PBAS.cpp
new file mode 100644
index 0000000..3f74b82
--- /dev/null
+++ b/package_bgs/pt/PBAS.cpp
@@ -0,0 +1,586 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "PBAS.h"
+
+PBAS::PBAS(void) : N(20), R_lower(18), Raute_min(2), T_lower(2), T_upper(200), R_scale(5), R_incdec(0.05), T_dec(0.05), T_inc(1)
+{
+  std::cout << "PBAS()" << std::endl;
+
+  //feature vector
+  alpha = 7.0;
+  beta = 1.0;
+  formerMeanNorm = 0;
+  width = 0;
+
+  //result image
+  foregroundValue = 255;
+  backgroundValue = 0;
+
+  //length of random array
+  countOfRandomNumb = 1000;
+
+  //the T(x_i) value needs initiation 
+  T_init = R_lower;
+
+  //check if something is moving in the picture
+  isMove = false;
+
+  //for init, count number of runs
+  runs = 0;
+  newInitialization();
+}
+
+void PBAS::newInitialization()
+{
+  if(!randomN.empty())
+    randomN.clear();
+
+  if(!randomX.empty())
+    randomX.clear();
+
+  if(!randomY.empty())
+    randomY.clear();
+
+  if(!randomMinDist.empty())
+    randomMinDist.clear();
+
+  if(!randomT.empty())
+    randomT.clear();
+
+  if(!randomTN.empty())
+    randomTN.clear();
+
+  for(int l = 0; l < countOfRandomNumb; l++)
+  {
+    randomN.push_back((int)randomGenerator.uniform((int)0,(int)N));
+    randomX.push_back((int)randomGenerator.uniform(-1, +2));
+    randomY.push_back((int)randomGenerator.uniform(-1, +2));
+    randomMinDist.push_back((int)randomGenerator.uniform((int)0, (int)N));
+    randomT.push_back((int)randomGenerator.uniform((int)0, (int)T_upper));
+    randomTN.push_back((int)randomGenerator.uniform((int)0, (int)T_upper));
+  }
+}
+
+PBAS::~PBAS(void)
+{
+  std::cout << "~PBAS()" << std::endl;
+
+  randomN.clear();
+  randomX.clear();
+  randomY.clear();
+  randomMinDist.clear();
+  randomT.clear();
+  randomTN.clear();
+
+  for(int k = 0; k < backgroundModel.size(); ++k)
+  {
+    if(chans == 1)
+    {
+      backgroundModel.at(k).at(0).release();
+      backgroundModel.at(k).at(1).release();
+    }
+    else
+    {
+      backgroundModel.at(k).at(0).release();
+      backgroundModel.at(k).at(1).release();
+      backgroundModel.at(k).at(2).release();
+
+      backgroundModel.at(k).at(3).release();
+      backgroundModel.at(k).at(4).release();
+      backgroundModel.at(k).at(5).release();
+    }
+  }
+
+  backgroundModel.clear();
+  meanMinDist.release();
+
+  actualR.release();
+  actualT.release();
+
+  sobelX.release();
+  sobelY.release();
+}
+
+bool PBAS::process(cv::Mat* input, cv::Mat* output)
+{
+  if(width != input->cols)
+  {
+    width = input->cols;
+    chans = input->channels();
+    height = input->rows;
+
+    if(input->rows < 1  || input->cols < 1)
+    {
+      std::cout << "Error: Occurrence of to small (or empty?) image size in PBAS. STOPPING " << std::endl;
+      return false;
+    }
+  }
+
+  //iniate the background model
+  init(input);
+
+  resultMap = new cv::Mat(input->rows,input->cols,CV_8UC1);
+
+  //calculate features
+  calculateFeatures(&currentFeatures, input);
+
+  //set sumMagnitude to zero at beginning and then sum up in the loop
+  sumMagnitude = 0;
+  long glCounterFore = 0;
+  isMove = false;
+
+  //Here starts the whole processing of each pixel of the image
+  // for each pixel
+  for (int j=0; j< resultMap->rows; ++j) 
+  {
+    resultMap_Pt = resultMap->ptr<uchar>(j);
+    currentFeaturesM_Pt.clear();
+    currentFeaturesC_Pt.clear();
+    std::vector<float*> fT;
+    std::vector<uchar*> uT;
+    B_Mag_Pts.clear();
+    B_Col_Pts.clear();
+
+    for(int z = 0; z < chans; ++z)
+    {
+      currentFeaturesM_Pt.push_back(currentFeatures.at(z).ptr<float>(j));
+      currentFeaturesC_Pt.push_back(currentFeatures.at(z + chans).ptr<uchar>(j));
+
+      B_Mag_Pts.push_back(fT);
+
+      B_Col_Pts.push_back(uT);
+    }
+
+    meanMinDist_Pt = meanMinDist.ptr<float>(j);
+    actualR_Pt = actualR.ptr<float>(j);
+    actualT_Pt = actualT.ptr<float>(j);
+
+    for(int k = 0; k < runs; ++k)
+    {
+      for(int z = 0; z < chans; ++z)
+      {
+        B_Mag_Pts.at(z).push_back(backgroundModel.at(k).at(z).ptr<float>(j));
+        B_Col_Pts.at(z).push_back(backgroundModel.at(k).at(z+chans).ptr<uchar>(j));
+      }
+    }
+
+    for(int i = 0; i < resultMap->cols; ++i) 
+    {
+      //Compare each pixel to in the worst runtime-case each background model
+      int count = 0; 
+      int index = 0; 
+
+      double norm = 0.0;
+      double dist = 0.0;
+      double minDist = 1000.0;
+      int entry = randomGenerator.uniform(3, countOfRandomNumb-4);
+
+      do
+      {
+        if(chans == 3)
+        {
+          norm = sqrt(
+            (((double)B_Mag_Pts.at(0).at(index)[i] - ((double)*currentFeaturesM_Pt.at(0)))*((double)B_Mag_Pts.at(0).at(index)[i] - ((double)*currentFeaturesM_Pt.at(0))))+
+            (((double)B_Mag_Pts.at(1).at(index)[i] - ((double)*currentFeaturesM_Pt.at(1)))*((double)B_Mag_Pts.at(1).at(index)[i] - ((double)*currentFeaturesM_Pt.at(1))))+
+            (((double)B_Mag_Pts.at(2).at(index)[i] - ((double)*currentFeaturesM_Pt.at(2)))*((double)B_Mag_Pts.at(2).at(index)[i] - ((double)*currentFeaturesM_Pt.at(2))))
+            );				
+
+          dist = sqrt(
+            (((double)B_Col_Pts.at(0).at(index)[i] - ((double)*currentFeaturesC_Pt.at(0)))*((double)B_Col_Pts.at(0).at(index)[i] - ((double)*currentFeaturesC_Pt.at(0))))+
+            (((double)B_Col_Pts.at(1).at(index)[i] - ((double)*currentFeaturesC_Pt.at(1)))*((double)B_Col_Pts.at(1).at(index)[i] - ((double)*currentFeaturesC_Pt.at(1))))+
+            (((double)B_Col_Pts.at(2).at(index)[i] - ((double)*currentFeaturesC_Pt.at(2)))*((double)B_Col_Pts.at(2).at(index)[i] - ((double)*currentFeaturesC_Pt.at(2))))
+            );
+        }
+        else
+        {
+          norm = abs((((double)B_Mag_Pts.at(0).at(index)[i] - 
+          ((double)*currentFeaturesM_Pt.at(0)))*((double)B_Mag_Pts.at(0).at(index)[i] - ((double)*currentFeaturesM_Pt.at(0)))));				
+
+          dist = abs((((double)B_Col_Pts.at(0).at(index)[i] - 
+          ((double)*currentFeaturesC_Pt.at(0)))*((double)B_Col_Pts.at(0).at(index)[i] - ((double)*currentFeaturesC_Pt.at(0))))
+            );
+        }
+        dist = ((double)alpha*(norm/formerMeanMag) + beta*dist);
+
+        if((dist < *actualR_Pt)) 
+        {
+          ++count;
+          if(minDist > dist)
+            minDist = dist;
+        }
+        else
+        {
+          sumMagnitude += (double)(norm);
+          ++glCounterFore;
+        }
+        ++index;
+      }
+      while((count< Raute_min) && (index < runs));
+
+
+      //#############################################
+      //update backgroundmodel
+      // is BACKGROUND			
+      if(count >= Raute_min)
+      {
+        *resultMap_Pt = 0;
+        double ratio = std::ceil((double)T_upper/(double)(*actualT_Pt));
+        //in the first run every distance is zero, because there is no background model
+        //in the secont run, we have already one image as background model, hence a 
+        // reasonable minDist could be found -> because of the partly 1/run changing in the running average, we set in the first try meanMinDist to the actual minDist value
+        if(runs < N && runs > 2)
+        {
+          *meanMinDist_Pt = ((((float)(runs-1)) * (*meanMinDist_Pt)) + (float)minDist) / ((float)runs);
+        }
+        else if(runs < N && runs == 2)
+        {
+          *meanMinDist_Pt = (float)minDist;
+        }
+
+        //1. update model
+        if(runs == N)
+        {
+          //Update current pixel
+          //check if random numer is smaller than ratio
+          if(randomT.at(entry) < ratio)
+          {
+            // replace randomly chosen sample
+            int rand = randomN.at(entry+1); //randomGenerator.uniform((int)0,(int)N-1);
+            for(int z = 0; z < chans; ++z)
+            {
+              B_Mag_Pts.at(z).at(rand)[i] = (float)*currentFeaturesM_Pt.at(z);
+              B_Col_Pts.at(z).at(rand)[i] = (uchar)*currentFeaturesC_Pt.at(z);
+
+            }
+
+            *meanMinDist_Pt = ((((float)(N-1)) * (*meanMinDist_Pt)) + (float)minDist) / ((float)N);
+          }
+
+          //Update neighboring pixel model
+          if(randomTN.at(entry) < ratio)
+          {
+            //choose neighboring pixel randomly
+            int xNeigh = randomX.at(entry)+i;
+            int yNeigh = randomY.at(entry)+j;
+            checkValid(&xNeigh, &yNeigh);
+
+            // replace randomly chosen sample
+            int rand = randomN.at(entry-1); 
+            for(int z = 0; z < chans; ++z)
+            {
+              (backgroundModel.at(rand)).at(z).at<float>(yNeigh,xNeigh) = currentFeatures.at(z).at<float>(yNeigh,xNeigh);
+              (backgroundModel.at(rand)).at(z + chans).at<uchar>(yNeigh,xNeigh) = currentFeatures.at(z+chans).at<uchar>(yNeigh,xNeigh);
+            }
+          }
+        }
+      }
+      else
+      {
+        // store pixel as foreground
+        *resultMap_Pt = 255;
+
+        //there is some movement
+        isMove = true; 
+      }
+
+      //#######################//#######################//#######################//#######################
+      //control loops
+      //#######################//#######################//#######################//#######################
+      //update R		
+      decisionThresholdRegulator(actualR_Pt,meanMinDist_Pt);
+
+      //update T
+      learningRateRegulator(actualT_Pt, meanMinDist_Pt,resultMap_Pt);
+
+      //#######################//#######################//#######################//#######################
+      //#######################//#######################//#######################//#######################			
+
+      //jump to next pixel
+      ++resultMap_Pt;
+      for(int z = 0; z < chans; ++z)
+      {
+        ++currentFeaturesM_Pt.at(z);
+        ++currentFeaturesC_Pt.at(z);
+      }
+
+      ++meanMinDist_Pt;
+      ++actualR_Pt;
+      ++actualT_Pt;			
+    }
+  }
+
+  resultMap->copyTo(*output);
+
+  //if there is no foreground -> no magnitudes fount
+  //-> initiate some low value to prevent diving through zero
+  double meanMag = sumMagnitude/(double)(glCounterFore + 1); //height*width);
+
+  if(meanMag > 20)
+    formerMeanMag = meanMag;
+  else
+    formerMeanMag = 20;
+
+  delete resultMap;
+
+  for(int z = 0; z < chans; ++z)
+  {
+    currentFeatures.at(z+chans).release();
+    currentFeatures.at(z).release();
+  }
+
+  return true;
+}
+
+void PBAS::decisionThresholdRegulator(float* pt, float* meanDist)
+{
+  //update R
+  double tempR = *pt;
+  double newThresh = (*meanDist)*R_scale;
+
+  if( tempR < newThresh)
+  {
+    tempR += tempR * R_incdec;
+  }
+  else
+  {
+    tempR -= tempR * R_incdec;
+  }
+
+  if(tempR >= R_lower)
+    *pt = (float)tempR;	
+  else
+    *pt = (float)R_lower;
+}
+
+void PBAS::learningRateRegulator(float* pt, float* meanDist,uchar* isFore)
+{
+  //time update
+  double tempT = *pt;
+
+  if((int)*isFore < 128)
+  {
+    tempT -= T_inc/(*meanDist+1.0);
+  }
+  else
+  {
+    tempT += T_dec/(*meanDist+1.0);
+  }
+
+  if(tempT > T_lower && tempT < T_upper)
+    *pt = (float)tempT;
+}
+
+void PBAS::checkValid(int *x, int *y)
+{
+  if(*x < 0)
+  {
+    *x = 0;
+  }
+  else if(*x >= width)
+  {
+    *x = width -1;
+  }
+
+  if(*y < 0)
+  {
+    *y = 0;
+  }
+  else if(*y >= height)
+  {
+    *y = height - 1;
+  }
+}
+
+void PBAS::init(cv::Mat* input)
+{
+  if(runs < N)
+  {
+    std::vector<cv::Mat> init;
+    calculateFeatures(&init, input);
+    backgroundModel.push_back(init);
+
+    if(chans == 1)
+    {
+      init.at(0).release();
+      init.at(1).release();
+    }
+    else
+    {
+      init.at(0).release();
+      init.at(1).release();
+      init.at(2).release();
+      init.at(3).release();
+      init.at(4).release();
+      init.at(5).release();
+    }
+
+    init.clear();
+
+    if(runs == 0)
+    {	
+      meanMinDist.create(input->size(), CV_32FC1);
+      meanMinDist.zeros(input->rows, input->cols, CV_32FC1);
+
+      actualR.create(input->rows, input->cols, CV_32FC1);
+      actualT.create(input->rows, input->cols, CV_32FC1);
+
+      float* ptRs, *ptTs; //, *ptM;
+      for(int rows = 0; rows < actualR.rows; ++rows)
+      {
+        ptRs = actualR.ptr<float>(rows);
+        ptTs = actualT.ptr<float>(rows);
+
+        for(int cols = 0; cols < actualR.cols; ++cols)
+        {
+          ptRs[cols] = (float)R_lower;
+          ptTs[cols] = (float)T_init;
+        }
+      }
+    }
+
+    ++runs;
+  }
+}
+
+void PBAS::calculateFeatures(std::vector<cv::Mat>* feature, cv::Mat* inputImage)
+{
+  if(!feature->empty())
+    feature->clear();
+
+  cv::Mat mag[3], dir;
+
+  if(inputImage->channels() == 3)
+  {
+    std::vector<cv::Mat> rgbChannels(3);
+    cv::split(*inputImage, rgbChannels);
+
+    for(int l = 0; l < 3; ++l)
+    {
+      cv::Sobel(rgbChannels.at(l),sobelX,CV_32F,1,0, 3, 1, 0.0);
+      cv::Sobel(rgbChannels.at(l),sobelY,CV_32F,0,1, 3, 1, 0.0);
+
+      // Compute the L2 norm and direction of the gradient
+      cv::cartToPolar(sobelX,sobelY,mag[l],dir, true);
+      feature->push_back(mag[l]);
+      sobelX.release();
+      sobelY.release();
+    }
+
+    feature->push_back(rgbChannels.at(0));
+    feature->push_back(rgbChannels.at(1));
+    feature->push_back(rgbChannels.at(2));
+    rgbChannels.at(0).release();
+    rgbChannels.at(1).release();
+    rgbChannels.at(2).release();
+  }
+  else
+  {
+    cv::Sobel(*inputImage,sobelX,CV_32F,1,0, 3, 1, 0.0);
+    cv::Sobel(*inputImage,sobelY,CV_32F,0,1, 3, 1, 0.0);
+
+    // Compute the L2 norm and direction of the gradient
+    cv::cartToPolar(sobelX,sobelY,mag[0],dir, true);
+    feature->push_back(mag[0]);
+
+    cv::Mat temp;
+    inputImage->copyTo(temp);
+    feature->push_back(temp);
+    temp.release();
+  }
+
+  mag[0].release();
+  mag[1].release();
+  mag[2].release();
+  dir.release();
+}
+
+void PBAS::setN(int temp)
+{
+  N = temp;
+  newInitialization();
+}
+
+void PBAS::setRaute_min(int temp)
+{
+  Raute_min = temp;
+}
+
+void PBAS::setR_lower(double temp)
+{
+  R_lower = temp;
+}
+
+void PBAS::setR_incdec(double temp)
+{
+  R_incdec = temp;
+}
+
+void PBAS::setR_scale(double temp)
+{
+  R_scale = temp;
+}
+
+void PBAS::setT_init(double temp)
+{
+  T_init = temp;
+}
+
+void PBAS::setT_lower(double temp)
+{
+  T_lower = temp;
+}
+
+void PBAS::setT_upper(double temp)
+{
+  T_upper = temp;
+  newInitialization();
+}
+
+void PBAS::setT_dec(double temp)
+{
+  T_dec = temp;
+}
+
+void PBAS::setT_inc(double temp)
+{
+  T_inc = temp;
+}
+
+void PBAS::setAlpha(double temp)
+{
+  alpha = temp;
+}
+
+void PBAS::setBeta(double temp)
+{
+  beta = temp;
+}
+
+bool PBAS::isMovement()
+{
+  return isMove;
+}
+
+//cv::Mat* PBAS::getR1_xi()
+//{
+//	return &actualR;
+//}
+//
+//cv::Mat* PBAS::getT_xi()
+//{
+//	return &actualT;
+//}
diff --git a/package_bgs/pt/PBAS.h b/package_bgs/pt/PBAS.h
new file mode 100644
index 0000000..917c525
--- /dev/null
+++ b/package_bgs/pt/PBAS.h
@@ -0,0 +1,207 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+//Implementation of the PBAS from:
+//
+//M. Hofmann, P. Tiefenbacher, G. Rigoll 
+//"Background Segmentation with Feedback: The Pixel-Based Adaptive Segmenter", 
+//in proc of IEEE Workshop on Change Detection, 2012
+//
+//Note: some changes, to improve the speed and memory requirements, were achieved in comparison to the 
+//described PBAS algorithm in the paper above.
+//
+//Example usage:
+// //Somewhere during initalization:
+// #include "PBAS.h"
+// #include <opencv2/opencv.hpp>
+// PBAS pbas;
+//
+// //you might want to change some parameters of the PBAS here...
+// ....
+//
+// //repeat for each frame
+// //make gaussian blur for reducing image noise
+//cv::Mat bluredImage;
+//cv::Mat pbastResult;
+//cv::GaussianBlur(singleFrame, bluredImage, cv::Size(5,5), 1.5);
+// 
+// //process image and receive segmentation in pbasResult
+//pbas.process(&bluredImage, &pbasResult);
+//
+// //make medianBlur on the result to reduce "salt and pepper noise"
+// //of the per pixel wise segmentation
+//cv::medianBlur(pbasResult, pbasResult, 5);
+//
+//
+//
+//Author: P.Tiefenbacher, https://sites.google.com/site/pbassegmenter/
+//Technische Universit�t M�nchen, Germany
+//Date: 22-May-2012, Version:0.1
+///////////
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#pragma once
+class PBAS
+{
+public:
+	PBAS(void);
+	~PBAS(void);
+	bool process(cv::Mat* input, cv::Mat* output);
+
+	void setN(int);
+	void setRaute_min(int);
+	void setR_lower(double);
+	void setR_incdec(double);
+	void setR_scale(double);
+	void setT_init(double);
+	void setT_lower(double);
+	void setT_upper(double);
+	void setT_dec(double);
+	void setT_inc(double);
+	void setAlpha(double);
+	void setBeta(double);
+
+	bool isMovement();
+	
+
+private:
+	void calculateFeatures(std::vector<cv::Mat>* feature, cv::Mat* inputImage);
+	void checkValid(int *x, int *y);
+	void decisionThresholdRegulator(float* pt, float* meanDistArr);
+	void learningRateRegulator(float* pt, float* meanDist,uchar* isFore);
+	void init(cv::Mat*);
+	void newInitialization();
+
+	cv::Mat meanMinDist;
+	float* meanMinDist_Pt;
+
+
+
+	int width, height;
+	int chans;
+
+	//balance of feature pixel value to conture value
+	double alpha, beta;
+	//##################################################################################
+	
+	double formerMeanNorm;
+
+	//define value of foreground/background pixels
+	int foregroundValue, backgroundValue;
+
+	//##################################################################################
+	//random number parameters
+	
+	//random number generator
+	cv::RNG randomGenerator;
+	
+	//length of random array initialization
+	long countOfRandomNumb;
+
+	//pre - initialize the randomNumbers for better performance
+	std::vector<int> randomN, randomMinDist, randomX, randomY, randomT, randomTN;
+	
+	//###################################################################################
+
+	//check if something is moving
+	bool isMove;
+
+	//for init, count number of runs
+	int runs;
+
+
+	cv::Mat* resultMap;
+	std::vector<cv::Mat> currentFeatures;
+
+	std::vector<float*> currentFeaturesM_Pt; 
+	std::vector<uchar*> currentFeaturesC_Pt; 
+	uchar* resultMap_Pt;
+	
+	std::vector<std::vector<float*>>B_Mag_Pts;
+	std::vector<std::vector<uchar*>>B_Col_Pts;
+	
+	double sumMagnitude;
+	double formerMeanMag;
+	float formerDistanceBack;
+
+	//####################################################################################
+	//N - Number: Defining the size of the background-history-model
+	// number of samples per pixel
+	//size of background history B(x_i)
+	int N;
+	// background model
+	std::vector<std::vector<cv::Mat>> backgroundModel;
+	//####################################################################################
+	//####################################################################################
+	//R-Threshhold - Variables
+	//minimal Threshold for foreground and initial value of R(x_i)
+	// radius of the sphere -> lower border boundary
+	double R_lower;
+
+	//factor which defines new threshold of R(x_i) together with meanMinDist(x_i)
+	// scale for the sphere threshhold to define pixel-based Thresholds
+	double R_scale;
+	
+	//decreasing / increasing factor of R(x_i)
+	// increasing/decreasing factor for the r-Threshold based on the result of rTreshScale * meanMinDistBackground
+	double R_incdec;
+	
+	cv::Mat actualR; 
+	float* actualR_Pt; //new pixel-based r-threshhold -> pointer to arrays
+	//#####################################################################################
+	//####################################################################################
+	//counter for minimal distance to background
+	// Defining the number of background-model-images, which have a lowerDIstance to the current Image than defined by the R-Thresholds, that are necessary
+	// to decide that this pixel is background
+	int Raute_min;
+	//#####################################################################################
+	//####################################################################################
+	//initial value of inverse update factor T(x_i)
+	// Initialize the background-model update rate 
+	double T_init;
+
+	//increasing Factor of the update rate 1/T(x_i)
+	// scale that defines the increasing of the update rate of the background model, if the current pixel is background 
+	//--> more frequently updates if pixel is background because, there shouln't be any change
+	double T_inc;
+	
+	//upper boundary of T(x_i)
+	// defining an upper value, that nrSubsampling can achieve, thus it doesn't reach to an infinite value, where actually no update is possible 
+	// at all
+	double T_upper;	
+	
+	//lower boundary of T(x_i)
+	// defining a minimum value for nrSubsampling --> base value 2.0
+	double T_lower;
+	
+	//decreasing factor of the update rate 1/T(x_i)
+	// opposite scale to increasingRateScale, for decreasing the update rate of the background model, if the current pixel is foreground
+	//--> Thesis: Our Foreground is a real moving object -> thus the background-model is good, so don't update it
+	double T_dec;
+
+	//holds update rate of current pixel
+	cv::Mat actualT; 
+	float* actualT_Pt; 
+	
+	//#####################################################################################
+
+
+	cv::Mat sobelX, sobelY;
+};
+
diff --git a/package_bgs/pt/PixelBasedAdaptiveSegmenter.cpp b/package_bgs/pt/PixelBasedAdaptiveSegmenter.cpp
new file mode 100644
index 0000000..10c8e8e
--- /dev/null
+++ b/package_bgs/pt/PixelBasedAdaptiveSegmenter.cpp
@@ -0,0 +1,124 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "PixelBasedAdaptiveSegmenter.h"
+
+PixelBasedAdaptiveSegmenter::PixelBasedAdaptiveSegmenter() : firstTime(true), showOutput(true), enableInputBlur(true), enableOutputBlur(true),
+alpha(7.0), beta(1.0), N(20), Raute_min(2), R_incdec(0.05), R_lower(18),
+R_scale(5), T_dec(0.05), T_inc(1), T_init(18), T_lower(2), T_upper(200)
+{
+  std::cout << "PixelBasedAdaptiveSegmenter()" << std::endl;
+}
+
+PixelBasedAdaptiveSegmenter::~PixelBasedAdaptiveSegmenter()
+{
+  std::cout << "~PixelBasedAdaptiveSegmenter()" << std::endl;
+}
+
+void PixelBasedAdaptiveSegmenter::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+  {
+    pbas.setAlpha(alpha);
+    pbas.setBeta(beta);
+    pbas.setN(N);
+    pbas.setRaute_min(Raute_min);
+    pbas.setR_incdec(R_incdec);
+    pbas.setR_lower(R_lower);
+    pbas.setR_scale(R_scale);
+    pbas.setT_dec(T_dec);
+    pbas.setT_inc(T_inc);
+    pbas.setT_init(T_init);
+    pbas.setT_lower(T_lower);
+    pbas.setT_upper(T_upper);
+
+    saveConfig();
+  }
+
+  cv::Mat img_input_new;
+  if(enableInputBlur)
+    cv::GaussianBlur(img_input, img_input_new, cv::Size(5,5), 1.5);
+  else
+    img_input.copyTo(img_input_new);
+
+  cv::Mat img_foreground;
+  pbas.process(&img_input_new, &img_foreground);
+
+  if(enableOutputBlur)
+    cv::medianBlur(img_foreground, img_foreground, 5);
+
+  if(showOutput)
+    cv::imshow("PBAS", img_foreground);
+
+  img_foreground.copyTo(img_output);
+
+  firstTime = false;
+}
+
+void PixelBasedAdaptiveSegmenter::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/PixelBasedAdaptiveSegmenter.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "enableInputBlur", enableInputBlur);
+  cvWriteInt(fs, "enableOutputBlur", enableOutputBlur);
+  
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteReal(fs, "beta", beta);
+  cvWriteInt(fs, "N", N);
+  cvWriteInt(fs, "Raute_min", Raute_min);
+  cvWriteReal(fs, "R_incdec", R_incdec);
+  cvWriteInt(fs, "R_lower", R_lower);
+  cvWriteInt(fs, "R_scale", R_scale);
+  cvWriteReal(fs, "T_dec", T_dec);
+  cvWriteInt(fs, "T_inc", T_inc);
+  cvWriteInt(fs, "T_init", T_init);
+  cvWriteInt(fs, "T_lower", T_lower);
+  cvWriteInt(fs, "T_upper", T_upper);
+
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void PixelBasedAdaptiveSegmenter::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/PixelBasedAdaptiveSegmenter.xml", 0, CV_STORAGE_READ);
+  
+  enableInputBlur = cvReadIntByName(fs, 0, "enableInputBlur", true);
+  enableOutputBlur = cvReadIntByName(fs, 0, "enableOutputBlur", true);
+  
+  alpha = cvReadRealByName(fs, 0, "alpha", 7.0);
+  beta = cvReadRealByName(fs, 0, "beta", 1.0);
+  N = cvReadIntByName(fs, 0, "N", 20);
+  Raute_min = cvReadIntByName(fs, 0, "Raute_min", 2);
+  R_incdec = cvReadRealByName(fs, 0, "R_incdec", 0.05);
+  R_lower = cvReadIntByName(fs, 0, "R_lower", 18);
+  R_scale = cvReadIntByName(fs, 0, "R_scale", 5);
+  T_dec = cvReadRealByName(fs, 0, "T_dec", 0.05);
+  T_inc = cvReadIntByName(fs, 0, "T_inc", 1);
+  T_init = cvReadIntByName(fs, 0, "T_init", 18);
+  T_lower = cvReadIntByName(fs, 0, "T_lower", 2);
+  T_upper = cvReadIntByName(fs, 0, "T_upper", 200);
+
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/pt/PixelBasedAdaptiveSegmenter.h b/package_bgs/pt/PixelBasedAdaptiveSegmenter.h
new file mode 100644
index 0000000..35409b5
--- /dev/null
+++ b/package_bgs/pt/PixelBasedAdaptiveSegmenter.h
@@ -0,0 +1,58 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "PBAS.h"
+#include "../IBGS.h"
+
+class PixelBasedAdaptiveSegmenter : public IBGS
+{
+private:
+  PBAS pbas;
+
+  bool firstTime;
+  bool showOutput;
+  bool enableInputBlur;
+  bool enableOutputBlur;
+
+  float alpha;
+  float beta;
+  int N;
+  int Raute_min;
+  float R_incdec;
+  int R_lower;
+  int R_scale;
+  float T_dec;
+  int T_inc;
+  int T_init;
+  int T_lower;
+  int T_upper;
+
+public:
+  PixelBasedAdaptiveSegmenter();
+  ~PixelBasedAdaptiveSegmenter();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
\ No newline at end of file
diff --git a/package_bgs/sjn/SJN_MultiCueBGS.cpp b/package_bgs/sjn/SJN_MultiCueBGS.cpp
new file mode 100644
index 0000000..55a7937
--- /dev/null
+++ b/package_bgs/sjn/SJN_MultiCueBGS.cpp
@@ -0,0 +1,2062 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+//------------------------------------------------------------------------------------------------------------------------------------//
+//									A BGS Method Using Multiple Color, Texture, Appearance Cues in the Scene						  //
+//																																	  //
+//  - Paper: A New Framework for Background Subtraction Using Multiple Cues (ACCV2012)												  //
+//  - Code by: SeungJon Noh																											  //
+//------------------------------------------------------------------------------------------------------------------------------------//
+//#include "StdAfx.h"
+#include "SJN_MultiCueBGS.h"
+SJN_MultiCueBGS::SJN_MultiCueBGS() : firstTime(true), showOutput(true)
+{
+	//----------------------------------
+	//	User adjustable parameters
+	//----------------------------------			
+	g_iTrainingPeriod = 20;											//the training period								(The parameter t in the paper)
+	g_iT_ModelThreshold = 1;										//the threshold for texture-model based BGS.		(The parameter tau_T in the paper)
+	g_iC_ModelThreshold = 10;										//the threshold for appearance based verification.  (The parameter tau_A in the paper)
+	
+	g_fLearningRate = 0.05;											//the learning rate for background models.			(The parameter alpha in the paper)
+	
+	g_nTextureTrainVolRange = 15;									//the codebook size factor for texture models.		(The parameter k in the paper)
+	g_nColorTrainVolRange = 20;										//the codebook size factor for color models.		(The parameter eta_1 in the paper)
+	
+	g_bAbsorptionEnable = TRUE;										//If TRUE, cache-book is also modeled for ghost region removal.
+	g_iAbsortionPeriod = 200;										//the period to absorb static ghost regions 
+	
+	g_iRWidth = 160, g_iRHeight = 120;								//Frames are precessed after reduced in this size .
+
+	//------------------------------------
+	//	For codebook maintenance
+	//------------------------------------
+	g_iBackClearPeriod = 300;										//the period to clear background models	
+	g_iCacheClearPeriod = 30;										//the period to clear cache-book models	
+
+	//------------------------------------
+	//	Initialization of other parameters
+	//------------------------------------
+	g_nNeighborNum = 6, g_nRadius = 2;													
+	g_fConfidenceThre = g_iT_ModelThreshold/(float)g_nNeighborNum;	//the final decision threshold
+
+	g_iFrameCount = 0;
+	g_bForegroundMapEnable = FALSE;									//TRUE only when BGS is successful
+	g_bModelMemAllocated = FALSE;									//To handle memory..
+	g_bNonModelMemAllocated = FALSE;								//To handle memory..
+}
+
+SJN_MultiCueBGS::~SJN_MultiCueBGS(void){
+	Destroy();
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//											the main function to background modeling and subtraction									   //																   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel){
+
+  if (img_input.empty())
+    return;
+
+  loadConfig();
+
+  if (firstTime)
+    saveConfig();
+
+	//--STep1: Background Modeling--//
+	IplImage* frame = &IplImage(img_input);
+	IplImage* result_image = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 3);
+	cvSetZero(result_image);
+
+	if(g_iFrameCount <= g_iTrainingPeriod){
+		BackgroundModeling_Par(frame);
+		g_iFrameCount++;	
+	}
+
+	//--Step2: Background Subtraction--//
+	else{
+		g_bForegroundMapEnable = FALSE;
+
+		ForegroundExtraction(frame);
+		UpdateModel_Par();
+
+		//Get BGS Results
+		GetForegroundMap(result_image, NULL);
+	}
+
+	cv::Mat temp(result_image,TRUE);
+	temp.copyTo(img_output);
+
+	cvReleaseImage(&result_image);
+  
+  if (showOutput)
+  {
+    cv::imshow("MultiCueBGS FG", img_output);
+  }
+
+  firstTime = false;
+}
+
+void SJN_MultiCueBGS::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/MultiCueBGS.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void SJN_MultiCueBGS::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/MultiCueBGS.xml", 0, CV_STORAGE_READ);
+
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//													the system initialization function													   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::Initialize(IplImage* frame)
+{
+	int i,j;
+
+	g_iHeight = frame->height;
+	g_iWidth = frame->width;
+
+	Destroy();	
+
+	//--------------------------------------------------------
+	// memory initialization
+	//--------------------------------------------------------
+	g_ResizedFrame = cvCreateImage(cvSize(g_iRWidth, g_iRHeight), IPL_DEPTH_8U, 3);
+
+	g_aGaussFilteredFrame = (uchar***)malloc(sizeof(uchar**)*g_iRHeight);
+	for(i=0;i<g_iRHeight;i++){
+		g_aGaussFilteredFrame[i] = (uchar**)malloc(sizeof(uchar*)*g_iRWidth);
+		for(j=0;j<g_iRWidth;j++) g_aGaussFilteredFrame[i][j] = (uchar*)malloc(sizeof(uchar)*3);
+	}
+	
+	g_aXYZFrame = (uchar***)malloc(sizeof(uchar**)*g_iRHeight);
+	for(i=0;i<g_iRHeight;i++){
+		g_aXYZFrame[i] = (uchar**)malloc(sizeof(uchar*)*g_iRWidth);
+		for(j=0;j<g_iRWidth;j++) g_aXYZFrame[i][j] = (uchar*)malloc(sizeof(uchar)*3);
+	}
+
+	g_aLandmarkArray = (uchar**)malloc(sizeof(uchar*)*g_iRHeight);
+	for(i=0;i<g_iRHeight;i++) g_aLandmarkArray[i] = (uchar*)malloc(sizeof(uchar)*g_iRWidth);
+
+	g_aResizedForeMap = (uchar**)malloc(sizeof(uchar*)*g_iRHeight);
+	for(i=0;i<g_iRHeight;i++) g_aResizedForeMap[i] = (uchar*)malloc(sizeof(uchar)*g_iRWidth);
+
+	g_aForegroundMap = (uchar**)malloc(sizeof(uchar*)*g_iHeight);
+	for(i=0;i<g_iHeight;i++) g_aForegroundMap[i] = (uchar*)malloc(sizeof(uchar)*g_iWidth);
+
+	g_aUpdateMap = (BOOL**)malloc(sizeof(BOOL*)*g_iRHeight);
+	for(i=0;i<g_iRHeight;i++) g_aUpdateMap[i] = (BOOL*)malloc(sizeof(BOOL)*g_iRWidth);
+
+	//Bound Box Related..
+	int iElementNum = 300;
+	g_BoundBoxInfo = (BoundingBoxInfo*)malloc(sizeof(BoundingBoxInfo));
+	g_BoundBoxInfo->m_iArraySize = iElementNum;					
+	g_BoundBoxInfo->m_iBoundBoxNum = iElementNum;				
+
+	g_BoundBoxInfo->m_aLeft = (short*)malloc( sizeof(short) * iElementNum ); g_BoundBoxInfo->m_aRight = (short*)malloc( sizeof(short) * iElementNum );
+	g_BoundBoxInfo->m_aBottom = (short*)malloc( sizeof(short) * iElementNum ); g_BoundBoxInfo->m_aUpper = (short*)malloc( sizeof(short) * iElementNum );
+
+	g_BoundBoxInfo->m_aRLeft = (short*)malloc( sizeof(short) * iElementNum ); g_BoundBoxInfo->m_aRRight = (short*)malloc( sizeof(short) * iElementNum );
+	g_BoundBoxInfo->m_aRBottom = (short*)malloc( sizeof(short) * iElementNum ); g_BoundBoxInfo->m_aRUpper = (short*)malloc( sizeof(short) * iElementNum );
+
+	g_BoundBoxInfo->m_ValidBox = (BOOL*)malloc( sizeof(BOOL) * iElementNum );
+
+	//--------------------------------------------------------
+	// texture model related
+	//--------------------------------------------------------
+	T_AllocateTextureModelRelatedMemory();
+
+	//--------------------------------------------------------
+	// color moddel related
+	//--------------------------------------------------------
+	C_AllocateColorModelRelatedMemory();
+
+	g_bModelMemAllocated = TRUE;	
+	g_bNonModelMemAllocated = TRUE;
+
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//												the function to release allocated memories											       //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::Destroy()
+{
+	if(g_bModelMemAllocated==FALSE && g_bNonModelMemAllocated==FALSE) return;
+	
+	int i,j;
+	short nNeighborNum = g_nNeighborNum; 
+	
+	if(g_bModelMemAllocated==TRUE){	
+		T_ReleaseTextureModelRelatedMemory();
+		C_ReleaseColorModelRelatedMemory();
+		
+		g_bModelMemAllocated = FALSE;
+	}
+	
+	if(g_bNonModelMemAllocated==TRUE){
+		
+		cvReleaseImage(&g_ResizedFrame);
+
+		for(i=0;i<g_iRHeight;i++){
+			for(j=0;j<g_iRWidth;j++) free(g_aGaussFilteredFrame[i][j]);
+			free(g_aGaussFilteredFrame[i]);
+		}
+		free(g_aGaussFilteredFrame);
+	
+		for(i=0;i<g_iRHeight;i++){
+			for(j=0;j<g_iRWidth;j++) free(g_aXYZFrame[i][j]);
+			free(g_aXYZFrame[i]);
+		}
+		free(g_aXYZFrame);
+	
+		for(i=0;i<g_iRHeight;i++) free(g_aLandmarkArray[i]);
+		free(g_aLandmarkArray);
+
+		for(i=0;i<g_iRHeight;i++) free(g_aResizedForeMap[i]);
+		free(g_aResizedForeMap);
+	
+		for(i=0;i<g_iHeight;i++) free(g_aForegroundMap[i]);
+		free(g_aForegroundMap);
+
+		for(i=0;i<g_iRHeight;i++) free(g_aUpdateMap[i]);
+		free(g_aUpdateMap);
+
+		free(g_BoundBoxInfo->m_aLeft); free(g_BoundBoxInfo->m_aRight); free(g_BoundBoxInfo->m_aBottom); free(g_BoundBoxInfo->m_aUpper);
+		free(g_BoundBoxInfo->m_aRLeft); free(g_BoundBoxInfo->m_aRRight); free(g_BoundBoxInfo->m_aRBottom); free(g_BoundBoxInfo->m_aRUpper);
+		free(g_BoundBoxInfo->m_ValidBox);
+		free(g_BoundBoxInfo);
+
+		g_bNonModelMemAllocated = FALSE;
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														the preprocessing function		    											   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::PreProcessing(IplImage* frame){
+
+	//image resize
+	ReduceImageSize(frame, g_ResizedFrame);
+	
+	//Gaussian filtering
+	GaussianFiltering(g_ResizedFrame, g_aGaussFilteredFrame);
+
+	//color space conversion
+	BGR2HSVxyz_Par(g_aGaussFilteredFrame,g_aXYZFrame);
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														the background modeling function												   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::BackgroundModeling_Par(IplImage* frame){
+	
+	//initialization
+	if(g_iFrameCount == 0) Initialize(frame);
+
+	//Step1: pre-processing
+	PreProcessing(frame);
+
+	int iH_Start = g_nRadius, iH_end = g_iRHeight-g_nRadius;
+	int iW_Start = g_nRadius, iW_end = g_iRWidth-g_nRadius;
+
+	float fLearningRate = g_fLearningRate * 4;
+
+	//Step2: background modeling
+	for(int i=iH_Start; i<iH_end; i++){
+		for(int j=iW_Start;j<iW_end;j++){
+			point center;
+			center.m_nX = j;
+			center.m_nY = i;
+			
+			T_ModelConstruction(g_nTextureTrainVolRange,fLearningRate,g_aXYZFrame,center,g_aNeighborDirection[i][j],g_TextureModel[i][j]);
+			C_CodebookConstruction(g_aXYZFrame[i][j], j, i, g_nColorTrainVolRange, fLearningRate, g_ColorModel[i][j]);
+		}
+	}
+
+	//Step3: Clear non-essential codewords
+	if(g_iFrameCount==g_iTrainingPeriod){
+		for(int i=0; i<g_iRHeight; i++){
+			for(int j=0;j<g_iRWidth;j++){
+				T_ClearNonEssentialEntries(g_iTrainingPeriod,g_TextureModel[i][j]);
+
+				C_ClearNonEssentialEntries(g_iTrainingPeriod,g_ColorModel[i][j]);
+			}
+		}
+		g_iFrameCount++;
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														the background subtraction function							                       //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::ForegroundExtraction(IplImage* frame){
+
+	//Step1:pre-processing
+	PreProcessing(frame);
+
+	//Step3: texture-model based process
+	T_GetConfidenceMap_Par(g_aXYZFrame,g_aTextureConfMap,g_aNeighborDirection,g_TextureModel);
+	
+	//Step2: color-model based verification
+	CreateLandmarkArray_Par(g_fConfidenceThre,g_nColorTrainVolRange,g_aTextureConfMap,g_nNeighborNum,g_aXYZFrame, g_aNeighborDirection,
+							g_TextureModel,g_ColorModel,g_aLandmarkArray);
+
+	//Step3: verification procedures
+	PostProcessing(frame);
+
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														the post-processing function													   //												
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::PostProcessing(IplImage* frame){
+
+	//Step1: morphological operation	
+	MorphologicalOpearions(g_aLandmarkArray,g_aResizedForeMap,0.5,5,g_iRWidth,g_iRHeight);
+	g_bForegroundMapEnable = TRUE;
+
+	//Step2: labeling
+	int** aLabelTable = (int**)malloc(sizeof(int*)*g_iRHeight);
+	for(int i=0;i<g_iRHeight;i++)  aLabelTable[i] = (int*)malloc(sizeof(int)*g_iRWidth);
+
+	int iLabelCount;
+	Labeling(g_aResizedForeMap,&iLabelCount,aLabelTable);
+
+	//Step3: getting bounding boxes for each candidate fore-blob
+	SetBoundingBox(iLabelCount, aLabelTable);
+	
+	//Step4: size  and appearance based verification
+	BoundBoxVerification(frame,g_aResizedForeMap,g_BoundBoxInfo);
+
+	//Step5: ��ȿ�� Foreground Region�鸸�� ��� �������� ����
+	RemovingInvalidForeRegions(g_aResizedForeMap,g_BoundBoxInfo);	
+
+	for(int i=0;i<g_iRHeight;i++) free(aLabelTable[i]);
+	free(aLabelTable);
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														the background-model update function			                                   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::UpdateModel_Par(){
+	short nNeighborNum = g_nNeighborNum;
+
+	//Step1: update map construction
+	for(int i=0;i<g_iRHeight;i++){
+		for(int j=0;j<g_iRWidth;j++){
+			g_aUpdateMap[i][j] = TRUE;
+		}
+	}
+
+	for(int k=0;k<g_BoundBoxInfo->m_iBoundBoxNum;k++){
+		if(g_BoundBoxInfo->m_ValidBox[k]==TRUE){
+			for(int i=g_BoundBoxInfo->m_aRUpper[k]; i<=g_BoundBoxInfo->m_aRBottom[k]; i++){
+				for(int j=g_BoundBoxInfo->m_aRLeft[k]; j<=g_BoundBoxInfo->m_aRRight[k]; j++){
+					g_aUpdateMap[i][j] = FALSE;
+				}
+			}
+		}
+	}
+
+	//Step2: update
+	int iH_Start = g_nRadius, iH_End = g_iRHeight-g_nRadius;
+	int iW_Start = g_nRadius, iW_End = g_iRWidth-g_nRadius;
+
+	float fLearningRate = (float)g_fLearningRate;
+
+	for(int i=iH_Start; i<iH_End; i++){
+		for(int j=iW_Start;j<iW_End;j++){
+
+			point center;
+
+			center.m_nX = j;
+			center.m_nY = i;
+
+			if(g_aUpdateMap[i][j]==TRUE){
+				//model update		
+				T_ModelConstruction(g_nTextureTrainVolRange,fLearningRate,g_aXYZFrame,center,g_aNeighborDirection[i][j],g_TextureModel[i][j]);
+				C_CodebookConstruction(g_aXYZFrame[i][j],j,i,g_nColorTrainVolRange,fLearningRate,g_ColorModel[i][j]);
+
+				//clearing non-essential codewords
+				T_ClearNonEssentialEntries(g_iBackClearPeriod,g_TextureModel[i][j]);
+				C_ClearNonEssentialEntries(g_iBackClearPeriod,g_ColorModel[i][j]);
+
+			}
+			else {
+				if(g_bAbsorptionEnable==TRUE){
+					//model update
+					T_ModelConstruction(g_nTextureTrainVolRange,fLearningRate,g_aXYZFrame,center,g_aNeighborDirection[i][j],g_TCacheBook[i][j]);
+					C_CodebookConstruction(g_aXYZFrame[i][j],j,i,g_nColorTrainVolRange,fLearningRate,g_CCacheBook[i][j]);
+
+					//clearing non-essential codewords
+					T_Absorption(g_iAbsortionPeriod,center,g_aTContinuousCnt,g_aTReferredIndex,g_TextureModel[i][j],g_TCacheBook[i][j]);
+					C_Absorption(g_iAbsortionPeriod,center,g_aCContinuousCnt,g_aCReferredIndex,g_ColorModel[i][j],g_CCacheBook[i][j]);
+
+				}
+			}
+
+			//clearing non-essential codewords for cache-books
+			if(g_bAbsorptionEnable==TRUE){
+				T_ClearNonEssentialEntriesForCachebook(g_aLandmarkArray[i][j],g_aTReferredIndex[i][j],10,g_TCacheBook[i][j]);
+				C_ClearNonEssentialEntriesForCachebook(g_aLandmarkArray[i][j],g_aCReferredIndex[i][j],10,g_CCacheBook[i][j]);
+			}
+		}
+	}
+
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														the color based verification function											   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::CreateLandmarkArray_Par(float fConfThre, short nTrainVolRange, float**aConfMap, int iNehborNum, uchar*** aXYZ, 
+												point*** aNeiDir, TextureModel**** TModel, ColorModel*** CModel, uchar**aLandmarkArr){
+	
+	int iBound_w = g_iRWidth-g_nRadius;
+	int iBound_h = g_iRHeight-g_nRadius;
+
+	for(int i=0; i<g_iRHeight; i++){
+		for(int j=0;j<g_iRWidth;j++){			
+
+			if(i<g_nRadius || i>=iBound_h || j<g_nRadius || j>=iBound_w) {
+				aLandmarkArr[i][j] = 0;
+				continue;
+			}
+
+			double tmp = aConfMap[i][j];
+			
+			if(tmp > fConfThre) aLandmarkArr[i][j] = 255;
+			else{
+				aLandmarkArr[i][j] = 0;
+				//Calculating texture amount in the background
+				double dBackAmt, dCnt;
+				dBackAmt = dCnt = 0;
+
+				for(int m=0; m<iNehborNum; m++){
+					for(int n=0;n<TModel[i][j][m]->m_iNumEntries;n++){
+						dBackAmt += TModel[i][j][m]->m_Codewords[n]->m_fMean;
+						dCnt++;
+					}
+				}
+				dBackAmt /= dCnt;
+
+				//Calculating texture amount in the input image
+				double dTemp, dInputAmt = 0;
+				for(int m=0; m<iNehborNum; m++){
+					dTemp = aXYZ[i][j][2] - aXYZ[ aNeiDir[i][j][m].m_nY ][ aNeiDir[i][j][m].m_nX ][2];
+					
+					if(dTemp>=0) dInputAmt += dTemp;
+					else dInputAmt -= dTemp;
+
+				}
+
+				//If there are only few textures in both background and input image
+				if(dBackAmt < 50 && dInputAmt <50){
+					//Conduct color codebook matching
+					BOOL bMatched = FALSE;
+					for(int m=0;m<CModel[i][j]->m_iNumEntries;m++){
+						
+						int iMatchedCount = 0;
+						for(int n=0;n<3;n++){
+							double dLowThre = CModel[i][j]->m_Codewords[m]->m_dMean[n] - nTrainVolRange - 10;
+							double dHighThre = CModel[i][j]->m_Codewords[m]->m_dMean[n] + nTrainVolRange + 10;
+
+							if(dLowThre <= aXYZ[i][j][n] && aXYZ[i][j][n] <= dHighThre) iMatchedCount++;
+						}
+
+						if(iMatchedCount==3) {
+							bMatched = TRUE;
+							break;
+						}
+
+					}
+					if(bMatched==TRUE) aLandmarkArr[i][j] = 125;
+					else aLandmarkArr[i][j] = 255;
+
+				}
+				
+			}
+		}
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//													the Gaussian filtering function								                           //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::GaussianFiltering(IplImage* frame, uchar*** aFilteredFrame){
+	
+	double dSigma = 0.7;
+
+	if(dSigma==0){
+		for(int i=0; i<g_iRHeight; i++){
+			for(int j=0; j<g_iRWidth; j++){
+				aFilteredFrame[i][j][0] = frame->imageData[i*frame->widthStep + j*3];
+				aFilteredFrame[i][j][1] = frame->imageData[i*frame->widthStep + j*3 + 1];
+				aFilteredFrame[i][j][2] = frame->imageData[i*frame->widthStep + j*3 + 2];
+			}
+		}
+	}
+
+	else{
+		cv::Mat temp_img(frame,TRUE);
+		cv::GaussianBlur(temp_img, temp_img, cv::Size(7,7), dSigma);
+
+		//Store results into aFilteredFrame[][][]
+		IplImage* img = &IplImage(temp_img);
+		int iWidthStep = img->widthStep;
+
+		for(int i=0; i<g_iRHeight; i++){
+			for(int j=0; j<g_iRWidth; j++){
+				aFilteredFrame[i][j][0] = img->imageData[i*img->widthStep + j*3];
+				aFilteredFrame[i][j][1] = img->imageData[i*img->widthStep + j*3 + 1];
+				aFilteredFrame[i][j][2] = img->imageData[i*img->widthStep + j*3 + 2];
+			}
+		}
+
+	}
+
+
+}
+
+//------------------------------------------------------------------------------------------------------------------------------------//
+//														the image resize function									                 //
+//------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::ReduceImageSize(IplImage* SrcImage, IplImage* DstImage){
+
+	int iChannel = 3;
+
+	double dResizeFactor_w = (double)g_iWidth/(double)g_iRWidth;
+	double dResizeFactor_h = (double)g_iHeight/(double)g_iRHeight;
+
+
+	for(int i=0;i<g_iRHeight;i++){
+		for(int j=0;j<g_iRWidth;j++){
+			int iSrcY = (int)(i*dResizeFactor_h);
+			int iSrcX = (int)(j*dResizeFactor_w);
+
+			for(int k=0;k<iChannel;k++) DstImage->imageData[i*DstImage->widthStep + j*3 +k]
+																			= SrcImage->imageData[iSrcY*SrcImage->widthStep + iSrcX*3 + k];
+		}
+	}
+
+}
+
+//------------------------------------------------------------------------------------------------------------------------------------//
+//											    the color space conversion function                                                   //
+//------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::BGR2HSVxyz_Par(uchar*** aBGR, uchar*** aXYZ){
+	
+	double dH_ratio = (2*PI)/360;
+
+	for(int i=0; i<g_iRHeight; i++){
+		
+		double dR,dG,dB;
+		double dMax, dMin;
+
+		double dH,dS, dV;
+		
+		for(int j=0;j<g_iRWidth;j++){
+
+			dB = (double)( aBGR[i][j][0] )/255;
+			dG = (double)( aBGR[i][j][1] )/255;
+			dR = (double)( aBGR[i][j][2] )/255; 
+
+
+			//Find max, min
+			dMin = MIN3(dR,dG,dB);
+			dMax = MAX3(dR,dG,dB);
+
+
+			//Get V
+			dV = dMax;
+
+			//Get S, H
+			if(dV==0) dS = dH = 0;
+			else{
+
+				//S value
+				dS = (dMax-dMin)/dMax;
+
+				if(dS == 0) dH =0;
+				else{
+					//H value
+					if(dMax == dR) {
+						dH = 60*(dG - dB)/dS;
+						if(dH < 0) dH = 360 + dH;
+					}
+					else if(dMax == dG) dH = 120 + 60*(dB - dR)/dS;
+					else dH = 240 + 60*(dR - dG)/dS;
+				}
+			}
+			dH = dH * dH_ratio;
+
+			aXYZ[i][j][0] = (uchar)( (dV * dS * cos(dH) * 127.5) + 127.5 );		//X  --> 0~255
+			aXYZ[i][j][1] = (uchar)( (dV * dS * sin(dH) * 127.5) + 127.5 );		//Y  --> 0~255
+			aXYZ[i][j][2] = (uchar)( dV * 255 );							    //Z  --> 0~255
+
+		}
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//												the function to get enlarged confidence map												   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::GetEnlargedMap(float** aOriginMap, float** aEnlargedMap){
+	int i,j;
+
+	short nSrcX;
+	short nSrcY;
+
+	double dEWweight,dNSweight;
+	double dEWtop, dEWbottom;
+
+	double dNW; //north-west
+	double dNE; //north-east
+	double dSW; //south-west
+	double dSE; //south-east
+
+	double dScaleFactor_w = ( (double)g_iWidth ) / ( (double)g_iRWidth );
+	double dScaleFactor_h = ( (double)g_iHeight ) / ( (double)g_iRHeight );
+
+	for(i=0;i<g_iHeight;i++){
+		for(j=0;j<g_iWidth;j++){
+			//backward mapping
+			nSrcY = (int)( i/dScaleFactor_h );
+			nSrcX = (int)( j/dScaleFactor_w );
+
+			if( nSrcY == (g_iRHeight-1) ) nSrcY -= 1;
+			if( nSrcX == (g_iRWidth-1) ) nSrcX -= 1;
+
+			dEWweight = i/dScaleFactor_h - nSrcY;
+			dNSweight = j/dScaleFactor_w - nSrcX;
+
+			dNW = (double)aOriginMap[nSrcY][nSrcX];
+			dNE = (double)aOriginMap[nSrcY][nSrcX+1];
+			dSW = (double)aOriginMap[nSrcY+1][nSrcX];
+			dSE = (double)aOriginMap[nSrcY+1][nSrcX+1];
+			
+			// interpolation
+			dEWtop = dNW + dEWweight * (dNE - dNW);
+			dEWbottom = dSW + dEWweight * (dSE - dSW);
+
+			aEnlargedMap[i][j] = (float)( dEWtop + dNSweight * (dEWbottom - dEWtop) );
+		}
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//										   				 the morphological operation function				    				   		   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::MorphologicalOpearions(uchar** aInput, uchar** aOutput, double dThresholdRatio, int iMaskSize, int iWidth, int iHeight){
+
+	int iOffset = (int)(iMaskSize/2);
+
+	int iBound_w = iWidth-iOffset;
+	int iBound_h = iHeight-iOffset;
+
+	uchar** aTemp = (uchar**)malloc(sizeof(uchar*)*iHeight);
+	for(int i=0;i<iHeight;i++){
+		aTemp[i] = (uchar*)malloc(sizeof(uchar)*iWidth);
+	}
+
+	for(int i=0;i<iHeight;i++){
+		for(int j=0;j<iWidth;j++){
+			aTemp[i][j] = aInput[i][j];
+		}
+	}
+
+	int iThreshold = (int)(iMaskSize*iMaskSize*dThresholdRatio);
+	for(int i=0;i<iHeight;i++){
+		for(int j=0;j<iWidth;j++){
+
+			if(i<iOffset || i>=iBound_h || j<iOffset || j>=iBound_w){
+				aOutput[i][j] = 0;
+				continue;
+			}
+
+			int iCnt = 0;
+			for(int m=-iOffset;m<=iOffset;m++){
+				for(int n=-iOffset;n<=iOffset;n++){
+					if(aTemp[i+m][j+n]==255) iCnt++;
+				}
+			}
+
+			if(iCnt >= iThreshold) aOutput[i][j] = 255;
+			else aOutput[i][j] = 0;
+		}
+	}
+
+
+	for(int i=0;i<iHeight;i++){
+		free(aTemp[i]);
+	}
+	free(aTemp);
+
+}
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//													2-raster scan pass based labeling function											   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::Labeling(uchar** aBinaryArray,int* pLabelCount, int** aLabelTable){
+	int x,y,i;		// pass 1,2
+	int cnt=0;		// pass 1
+	int label=0;	// pass 2
+
+	int iSize = g_iRWidth * g_iRHeight;
+	int iTableSize = iSize/2;
+
+	// initialize , table1 table1
+	int* aPass1 = (int*)malloc(iSize * sizeof(int));
+	int* aTable1 = (int*)malloc(iSize/2 * sizeof(int));
+	int* aTable2 = (int*)malloc(iSize/2 * sizeof(int));
+
+	memset(aPass1, 0, (iSize)* sizeof(int));
+	for (y=1; y < (g_iRHeight); y++){
+		for (x = 1; x < (g_iRWidth); x++){
+			aLabelTable[y][x] = 0;
+		}
+	}
+
+	for(i=0; i < iTableSize; i++){
+		aTable1[i] = i;
+	}
+	memset(aTable2, 0, iTableSize * sizeof(int));
+
+	// pass 1
+	for (y=1; y < (g_iRHeight); y++){
+		for (x = 1; x < (g_iRWidth); x++){
+
+			if (aBinaryArray[y][x] == 255){ // fore ground??
+				int up, le;
+
+				up = aPass1[ (y-1)*(g_iRWidth) + (x  ) ]; // up  index
+				le = aPass1[ (y  )*(g_iRWidth) + (x-1) ]; // left index
+
+				// case
+				if( up == 0 && le == 0){
+					++cnt;
+					aPass1[ y * g_iRWidth + x ] = cnt;
+
+				}else if( up != 0 && le != 0){
+					if ( up > le){
+						aPass1[ y *g_iRWidth + x ] = le;
+						aTable1[up] = aTable1[le]; // update table1 table1
+					}else{
+						aPass1[ y * g_iRWidth + x ] = up;
+						aTable1[le] = aTable1[up]; // update table1 table1
+					}
+				}else{
+					aPass1[ y * g_iRWidth + x ] = up + le;
+				}
+
+			}
+
+		}
+	}
+
+	// pass 2
+	for (y=1; y < (g_iRHeight); y++){
+		for (x = 1; x < (g_iRWidth); x++){
+
+			if (aPass1[ y * g_iRWidth + x]){
+				int v =  aTable1[aPass1[ y * g_iRWidth + x]];
+
+				if ( aTable2[v]  == 0){
+					++label;
+					aTable2[v] = label;
+				}
+
+				aLabelTable[y][x] = aTable2[v];
+			}
+		}
+	}
+
+	*pLabelCount = label;
+
+	free(aPass1);
+	free(aTable1);
+	free(aTable2);
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//									the function to set bounding boxes for each candidate foreground regions					    	   //																									   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::SetBoundingBox(int iLabelCount, int** aLabelTable){
+	int iBoundBoxIndex;
+
+	g_BoundBoxInfo->m_iBoundBoxNum = iLabelCount;
+
+	for (int i=0; i<g_BoundBoxInfo->m_iBoundBoxNum; i++ ){
+		g_BoundBoxInfo->m_aRLeft[i] = 9999;		//left
+		g_BoundBoxInfo->m_aRUpper[i] = 9999;	//top
+		g_BoundBoxInfo->m_aRRight[i] = 0;		//right
+		g_BoundBoxInfo->m_aRBottom[i] = 0;		//bottom
+	}
+
+	//Step1: Set tight bounding boxes
+	for(int i=1;i<g_iRHeight;i++){
+		for(int j=1;j<g_iRWidth;j++){
+			
+			if(   (aLabelTable[i][j]==0) ) continue;
+
+			iBoundBoxIndex = aLabelTable[i][j]-1;
+
+			if( g_BoundBoxInfo->m_aRLeft[ iBoundBoxIndex ] > j ) g_BoundBoxInfo->m_aRLeft[ iBoundBoxIndex ] = j;		//left
+			if( g_BoundBoxInfo->m_aRUpper[ iBoundBoxIndex ] > i ) g_BoundBoxInfo->m_aRUpper[ iBoundBoxIndex ] = i;		//top
+			if( g_BoundBoxInfo->m_aRRight[ iBoundBoxIndex ] < j ) g_BoundBoxInfo->m_aRRight[ iBoundBoxIndex ] = j;		//right
+			if( g_BoundBoxInfo->m_aRBottom[ iBoundBoxIndex ] < i ) g_BoundBoxInfo->m_aRBottom[ iBoundBoxIndex ] = i;	//bottom
+
+		}
+	}
+
+	//Step2: Add margins.
+	int iBoundary_w = (int)(g_iRWidth / 80), iBoundary_h = (int)(g_iRHeight / 60);
+
+	for( int i=0; i<g_BoundBoxInfo->m_iBoundBoxNum; i++ ){	
+
+		g_BoundBoxInfo->m_aRLeft[i] -= iBoundary_w;
+		if(g_BoundBoxInfo->m_aRLeft[i] < g_nRadius) g_BoundBoxInfo->m_aRLeft[i] = g_nRadius;									//left
+
+		g_BoundBoxInfo->m_aRRight[i] += iBoundary_w;
+		if(g_BoundBoxInfo->m_aRRight[i] >= g_iRWidth-g_nRadius) g_BoundBoxInfo->m_aRRight[i] = g_iRWidth-g_nRadius-1;		    //Right
+
+		g_BoundBoxInfo->m_aRUpper[i] -= iBoundary_h;
+		if(g_BoundBoxInfo->m_aRUpper[i] < g_nRadius) g_BoundBoxInfo->m_aRUpper[i] = g_nRadius;									//Top
+
+		g_BoundBoxInfo->m_aRBottom[i] += iBoundary_h;
+		if(g_BoundBoxInfo->m_aRBottom[i] >= g_iRHeight-g_nRadius) g_BoundBoxInfo->m_aRBottom[i] =g_iRHeight-g_nRadius-1;	
+	}
+
+	double dH_ratio = (double)g_iHeight/(double)g_iRHeight;
+	double dW_ratio = (double)g_iWidth/(double)g_iRWidth;
+
+	for(int i=0;i<g_BoundBoxInfo->m_iBoundBoxNum;i++){
+		g_BoundBoxInfo->m_aLeft[i] = (int)(g_BoundBoxInfo->m_aRLeft[i] * dW_ratio);
+		g_BoundBoxInfo->m_aUpper[i] = (int)(g_BoundBoxInfo->m_aRUpper[i] * dH_ratio);
+		g_BoundBoxInfo->m_aRight[i] = (int)(g_BoundBoxInfo->m_aRRight[i] * dW_ratio);
+		g_BoundBoxInfo->m_aBottom[i] = (int)(g_BoundBoxInfo->m_aRBottom[i] * dH_ratio);
+	}
+
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														the box verification function													   //																							   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::BoundBoxVerification(IplImage* frame, uchar** aResForeMap, BoundingBoxInfo* BoundBoxInfo){
+	
+	//Step1: Verification by the bounding box size
+	EvaluateBoxSize(BoundBoxInfo);
+
+	//Step2: Verification by checking whether the region is ghost
+	EvaluateGhostRegion(frame, aResForeMap, BoundBoxInfo);
+
+	//Step3: Counting the # of valid box
+	g_iForegroundNum = 0;
+	for( int i=0; i<BoundBoxInfo->m_iBoundBoxNum; i++ ){
+		if(BoundBoxInfo->m_ValidBox[i] == TRUE) g_iForegroundNum++;
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//																the size based verification												   //																							   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::EvaluateBoxSize(BoundingBoxInfo* BoundBoxInfo){
+
+	//Set thresholds
+	int iLowThreshold_w, iHighThreshold_w;	
+	iLowThreshold_w = g_iRWidth / 32; if(iLowThreshold_w<5) iLowThreshold_w = 5;
+	iHighThreshold_w = g_iRWidth;
+
+	int iLowThreshold_h, iHighThreshold_h;  
+	iLowThreshold_h = g_iRHeight / 24; if(iLowThreshold_h<5) iLowThreshold_h = 5;
+	iHighThreshold_h = g_iRHeight;
+
+	int iBoxWidth,iBoxHeight;
+	
+	//Perform verification.
+	for( int i=0; i<BoundBoxInfo->m_iBoundBoxNum; i++ ){
+
+		iBoxWidth = BoundBoxInfo->m_aRRight[i] - BoundBoxInfo->m_aRLeft[i];
+		iBoxHeight = BoundBoxInfo->m_aRBottom[i] - BoundBoxInfo->m_aRUpper[i];	
+
+		if(iLowThreshold_w<=iBoxWidth && iBoxWidth<=iHighThreshold_w && iLowThreshold_h<=iBoxHeight && iBoxHeight<= iHighThreshold_h) {
+			BoundBoxInfo->m_ValidBox[i] = TRUE;
+		}
+		else BoundBoxInfo->m_ValidBox[i] = FALSE;
+	}
+}
+
+//------------------------------------------------------------------------------------------------------------------------------------//
+//														overlapped region removal													  //
+//------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::EvaluateOverlapRegionSize(BoundingBoxInfo* SrcBoxInfo){
+
+	BOOL *aValidBoxFlag = new BOOL[SrcBoxInfo->m_iBoundBoxNum];
+	for(int i=0;i<SrcBoxInfo->m_iBoundBoxNum;i++) aValidBoxFlag[i] = TRUE;
+
+	int size1, size2;
+	short *aLeft=SrcBoxInfo->m_aRLeft, *aRight=SrcBoxInfo->m_aRRight;
+	short *aTop=SrcBoxInfo->m_aRUpper, *aBottom=SrcBoxInfo->m_aRBottom;
+
+	int iThreshold,iCount, iSmall_Idx, iLarge_Idx;
+	double dThreRatio = 0.7;
+
+	for(int i=0;i<SrcBoxInfo->m_iBoundBoxNum;i++){
+	
+		if(SrcBoxInfo->m_ValidBox[i]==FALSE) {
+			aValidBoxFlag[i] = FALSE;
+			continue;
+		}
+
+		size1 = (aRight[i] - aLeft[i]) * (aBottom[i] - aTop[i]);
+
+		for(int j=i;j<SrcBoxInfo->m_iBoundBoxNum;j++){
+			if( (i==j) || (SrcBoxInfo->m_ValidBox[j]==FALSE) ) continue;
+
+			//Setting threshold for checking overlapped region size
+			size2 = (aRight[j] - aLeft[j]) * (aBottom[j] - aTop[j]);
+
+			if(size1 >= size2) {
+				iThreshold = (int)( size2 * dThreRatio );
+				iSmall_Idx = j; iLarge_Idx = i;
+			}
+			else {
+				iThreshold = (int)( size1 * dThreRatio );
+				iSmall_Idx= i; iLarge_Idx = j;
+			}
+			
+			//Calculating overlapped region size
+			iCount = 0;
+			for(int m=aLeft[iSmall_Idx]; m<aRight[iSmall_Idx]; m++){
+				for(int n=aTop[iSmall_Idx]; n<aBottom[iSmall_Idx]; n++){
+					if( aLeft[iLarge_Idx]<=m && m<=aRight[iLarge_Idx] && aTop[iLarge_Idx]<=n && n<=aBottom[iLarge_Idx]) iCount++;
+				}
+			}
+
+			//Evaluating overlapped region size
+			if(iCount > iThreshold) aValidBoxFlag[iSmall_Idx] = FALSE;
+		}
+	}
+
+	for(int i=0;i<SrcBoxInfo->m_iBoundBoxNum;i++) SrcBoxInfo->m_ValidBox[i] = aValidBoxFlag[i];	
+	delete[] aValidBoxFlag;
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														appearance based verification													   //																							   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::EvaluateGhostRegion(IplImage* frame, uchar** aResForeMap, BoundingBoxInfo* BoundBoxInfo){
+
+	double dThreshold = 10;
+
+	BOOL** aUpdateMap = (BOOL**)malloc(sizeof(BOOL*)*g_iRHeight);
+	for(int i=0;i<g_iRHeight;i++){
+		aUpdateMap[i] = (BOOL*)malloc(sizeof(BOOL)*g_iRWidth);
+		for(int j=0;j<g_iRWidth;j++) aUpdateMap[i][j] = FALSE;
+	}
+
+	//Step1: Conduct fore-region evaluation to identify ghost regions
+
+	for(int i=0; i<BoundBoxInfo->m_iBoundBoxNum; i++){
+		if(BoundBoxInfo->m_ValidBox[i]==TRUE){
+			int iWin_w = BoundBoxInfo->m_aRRight[i] - BoundBoxInfo->m_aRLeft[i];
+			int iWin_h = BoundBoxInfo->m_aRBottom[i] - BoundBoxInfo->m_aRUpper[i];
+
+			//Generating edge image from bound-boxed frame region
+			IplImage* resized_frame = cvCreateImage(cvSize(g_iRWidth,g_iRHeight),IPL_DEPTH_8U,3);
+			cvResize(frame,resized_frame,CV_INTER_NN);
+
+			cvSetImageROI(resized_frame, cvRect(BoundBoxInfo->m_aRLeft[i], BoundBoxInfo->m_aRUpper[i], iWin_w, iWin_h));
+			IplImage* edge_frame = cvCreateImage(cvSize(iWin_w,iWin_h),IPL_DEPTH_8U,1);
+
+			cvCvtColor(resized_frame,edge_frame,CV_BGR2GRAY);
+			cvResetImageROI(resized_frame);
+
+			cvCanny(edge_frame,edge_frame,100,150);
+
+			//Generating edge image from aResForeMap
+			IplImage* edge_fore = cvCreateImage(cvSize(iWin_w,iWin_h),IPL_DEPTH_8U,1);
+			for(int m=BoundBoxInfo->m_aRUpper[i]; m<BoundBoxInfo->m_aRBottom[i]; m++){
+				for(int n=BoundBoxInfo->m_aRLeft[i]; n<BoundBoxInfo->m_aRRight[i]; n++){
+					edge_fore->imageData[(m-BoundBoxInfo->m_aRUpper[i])*edge_fore->widthStep + (n-BoundBoxInfo->m_aRLeft[i])] = (char)aResForeMap[m][n];
+				}
+			}
+			cvCanny(edge_fore,edge_fore,100,150);
+			//Calculating partial undirected Hausdorff distance
+			double distance = CalculateHausdorffDist(edge_frame,edge_fore);
+			
+			//Recording evaluation result
+			if(distance > dThreshold) {
+				
+				for(int m=BoundBoxInfo->m_aRUpper[i]; m<BoundBoxInfo->m_aRBottom[i]; m++){
+					for(int n=BoundBoxInfo->m_aRLeft[i]; n<BoundBoxInfo->m_aRRight[i]; n++){
+						aUpdateMap[m][n] = TRUE;
+					}
+				}
+				
+				BoundBoxInfo->m_ValidBox[i]=FALSE;		
+			}
+
+			cvReleaseImage(&resized_frame);
+			cvReleaseImage(&edge_frame);
+			cvReleaseImage(&edge_fore);
+		}
+	}
+
+	//Step2: Adding information fo ghost region pixels to background model
+	float fLearningRate = g_fLearningRate;
+	
+	for(int i=0;i<g_iRHeight;i++){
+		for(int j=0;j<g_iRWidth;j++){
+			if(aUpdateMap[i][j]==TRUE){
+				point center;
+				center.m_nX=j; center.m_nY=i;
+
+				T_ModelConstruction(g_nTextureTrainVolRange,fLearningRate,g_aXYZFrame,center,g_aNeighborDirection[i][j],g_TextureModel[i][j]);
+				C_CodebookConstruction(g_aXYZFrame[i][j],j,i,g_nColorTrainVolRange,fLearningRate,g_ColorModel[i][j]);
+
+				T_ClearNonEssentialEntries(g_iBackClearPeriod,g_TextureModel[i][j]);
+				C_ClearNonEssentialEntries(g_iBackClearPeriod,g_ColorModel[i][j]);
+
+			}
+		}
+	}
+
+	for(int i=0;i<g_iRHeight;i++) free(aUpdateMap[i]);
+	free(aUpdateMap);
+}
+
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//								the function to calculate partial undirected Hausdorff distance(forward distance)						   //																							   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+double SJN_MultiCueBGS::CalculateHausdorffDist(IplImage* input_image, IplImage* model_image){
+
+	//Step1: Generating imag vectors
+	//For reduce errors, points at the image boundary are excluded
+	vector<point> vInput, vModel;
+	point temp;
+
+	//input image --> input vector 
+	for(int i=0;i<input_image->height;i++){
+		for(int j=0;j<input_image->width;j++){
+
+			if( (uchar)input_image->imageData[i*input_image->widthStep + j]==0 ) continue;
+
+			temp.m_nX = j; temp.m_nY = i;
+			vInput.push_back(temp);
+		}
+	}
+	//model image --> model vector
+	for(int i=0; i<model_image->height; i++){
+		for(int j=0; j<model_image->width; j++){
+			if( (uchar)model_image->imageData[i*model_image->widthStep + j]==0 ) continue;
+
+			temp.m_nX = j; temp.m_nY = i;	
+			vModel.push_back(temp);
+		}
+	}
+
+	if( vInput.size()==0 && vModel.size()!=0 ) return (double)vModel.size();
+	else if( vInput.size()!=0 && vModel.size()==0 ) return (double)vInput.size();
+	else if( vInput.size()==0 && vModel.size()==0) return 0.0;
+
+	//Step2: Calculating forward distance h(Model,Image)
+	double dDist, temp1, temp2, dMinDist;
+	vector<double> vTempDist;
+
+	for( auto iter_m=vModel.begin(); iter_m<vModel.end(); iter_m++ ){
+
+		dMinDist = 9999999;
+		for( auto iter_i=vInput.begin(); iter_i<vInput.end(); iter_i++){
+			temp1 = (*iter_m).m_nX - (*iter_i).m_nX;
+			temp2 = (*iter_m).m_nY - (*iter_i).m_nY;
+			dDist = temp1*temp1 + temp2*temp2;
+
+			if(dDist < dMinDist) dMinDist = dDist;
+		}
+		vTempDist.push_back(dMinDist);
+	}
+	sort(vTempDist.begin(), vTempDist.end()); //in ascending order
+
+	double dQuantileVal = 0.9, dForwardDistance;
+	int iDistIndex = (int)(dQuantileVal*vTempDist.size()); if(iDistIndex == vTempDist.size()) iDistIndex -= 1;
+
+	dForwardDistance = sqrt( vTempDist[ iDistIndex ] );
+	return dForwardDistance;
+
+}
+
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//											function to remove non-valid bounding boxes fore fore-candidates							   //												
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::RemovingInvalidForeRegions(uchar** aResForeMap, BoundingBoxInfo* BoundBoxInfo){
+
+	int iBoxNum = BoundBoxInfo->m_iBoundBoxNum;
+
+	for(int k=0;k<iBoxNum; k++){
+		
+		if(BoundBoxInfo->m_ValidBox[k]==FALSE){
+			for(int i=BoundBoxInfo->m_aRUpper[k]; i<BoundBoxInfo->m_aRBottom[k]; i++){
+				for(int j=BoundBoxInfo->m_aRLeft[k]; j<BoundBoxInfo->m_aRRight[k]; j++){
+					if(aResForeMap[i][j]==255) aResForeMap[i][j] = 0;
+				}
+			}
+		}
+
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//													the function returning a foreground binary-map										   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::GetForegroundMap(IplImage* return_image, IplImage* input_frame){
+	
+	if(g_bForegroundMapEnable == FALSE) return;
+	
+	IplImage* temp_image = cvCreateImage(cvSize(g_iRWidth,g_iRHeight),IPL_DEPTH_8U,3);
+
+	if(input_frame==NULL){
+		for(int i=0;i<g_iRHeight;i++){
+			for(int j=0;j<g_iRWidth;j++){
+				temp_image->imageData[i*temp_image->widthStep + j*3] = (char)g_aResizedForeMap[i][j];
+				temp_image->imageData[i*temp_image->widthStep + j*3 + 1] = (char)g_aResizedForeMap[i][j];
+				temp_image->imageData[i*temp_image->widthStep + j*3 + 2] = (char)g_aResizedForeMap[i][j];
+			}
+		}
+	}
+
+	else{
+
+		cvResize(input_frame,temp_image);
+		CvScalar MixColor;
+		MixColor.val[0] = 255;	//B
+		MixColor.val[1] = 0;	//G
+		MixColor.val[2] = 255;   //R
+
+		for(int i=0;i<g_iRHeight;i++){
+			for(int j=0;j<g_iRWidth;j++){
+				
+				if(g_aResizedForeMap[i][j]==255) {
+
+					uchar B = (uchar)temp_image->imageData[i*temp_image->widthStep + j*3];
+					uchar G = (uchar)temp_image->imageData[i*temp_image->widthStep + j*3];
+					uchar R = (uchar)temp_image->imageData[i*temp_image->widthStep + j*3];
+
+					B = (uchar)(B*0.45 + MixColor.val[0]*0.55);
+					G = (uchar)(G*0.45 + MixColor.val[1]*0.55);
+					R = (uchar)(R*0.45 + MixColor.val[2]*0.55);
+
+					temp_image->imageData[i*temp_image->widthStep + j*3] = (char)B;
+					temp_image->imageData[i*temp_image->widthStep + j*3 + 1] = (char)G;
+					temp_image->imageData[i*temp_image->widthStep + j*3 + 2] = (char)R;
+				}
+			}
+		}
+	}
+
+	cvResize(temp_image,return_image);
+
+	cvReleaseImage(&temp_image);
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//												the	initialization function for the texture-models									       //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::T_AllocateTextureModelRelatedMemory(){
+	int i,j,k; 
+
+	//neighborhood system related
+	int iMaxNeighborArraySize = 8;
+	g_aNeighborDirection = (point***)malloc(sizeof(point**)*g_iRHeight);
+	for(i=0;i<g_iRHeight;i++){
+		g_aNeighborDirection[i] = (point**)malloc(sizeof(point*)*g_iRWidth);
+		for(j=0;j<g_iRWidth;j++){
+			g_aNeighborDirection[i][j] = (point*)malloc(sizeof(point)*iMaxNeighborArraySize);
+		}
+	}
+	T_SetNeighborDirection(g_aNeighborDirection);
+
+	//texture-model related
+	int iElementArraySize = 6;
+	g_TextureModel = (TextureModel****)malloc(sizeof(TextureModel***)*g_iRHeight);
+	for(i=0;i<g_iRHeight;i++){
+		g_TextureModel[i] = (TextureModel***)malloc(sizeof(TextureModel**)*g_iRWidth);
+		for(j=0;j<g_iRWidth;j++){
+			g_TextureModel[i][j] = (TextureModel**)malloc(sizeof(TextureModel*)*g_nNeighborNum);
+			for(k=0;k<g_nNeighborNum;k++){
+				g_TextureModel[i][j][k] = (TextureModel*)malloc(sizeof(TextureModel));
+				g_TextureModel[i][j][k]->m_Codewords = (TextureCodeword**)malloc(sizeof(TextureCodeword*)*iElementArraySize);
+				g_TextureModel[i][j][k]->m_iElementArraySize = iElementArraySize;
+				g_TextureModel[i][j][k]->m_iNumEntries = 0;
+				g_TextureModel[i][j][k]->m_iTotal = 0;
+				g_TextureModel[i][j][k]->m_bID = 1;
+			}
+		}
+	}
+
+	g_aTextureConfMap = (float**)malloc(sizeof(float*)*g_iRHeight);
+	for(i=0;i<g_iRHeight;i++) g_aTextureConfMap[i] = (float*)malloc(sizeof(float)*g_iRWidth);
+
+	//cache-book related
+	if(g_bAbsorptionEnable==TRUE){
+		iElementArraySize = iElementArraySize/2;
+		if(iElementArraySize<3)iElementArraySize = 3;
+		
+		g_TCacheBook = (TextureModel****)malloc(sizeof(TextureModel***)*g_iRHeight);
+		for(i=0;i<g_iRHeight;i++){
+			g_TCacheBook[i] = (TextureModel***)malloc(sizeof(TextureModel**)*g_iRWidth);
+			for(j=0;j<g_iRWidth;j++){
+				g_TCacheBook[i][j] = (TextureModel**)malloc(sizeof(TextureModel*)*g_nNeighborNum);
+				for(k=0;k<g_nNeighborNum;k++){
+					g_TCacheBook[i][j][k] = (TextureModel*)malloc(sizeof(TextureModel));
+					g_TCacheBook[i][j][k]->m_Codewords = (TextureCodeword**)malloc(sizeof(TextureCodeword*)*iElementArraySize);
+					g_TCacheBook[i][j][k]->m_iElementArraySize = iElementArraySize;
+					g_TCacheBook[i][j][k]->m_iNumEntries = 0;
+					g_TCacheBook[i][j][k]->m_iTotal = 0;
+					g_TCacheBook[i][j][k]->m_bID = 0;
+				}
+			}
+		}
+
+		g_aTReferredIndex = (short***)malloc(sizeof(short**)*g_iRHeight);
+		g_aTContinuousCnt = (short***)malloc(sizeof(short**)*g_iRHeight);
+		for(i=0;i<g_iRHeight;i++){
+			g_aTReferredIndex[i] = (short**)malloc(sizeof(short*)*g_iRWidth);
+			g_aTContinuousCnt[i] = (short**)malloc(sizeof(short*)*g_iRWidth);
+			for(j=0;j<g_iRWidth;j++) {
+				g_aTReferredIndex[i][j] = (short*)malloc(sizeof(short)*g_nNeighborNum);
+				g_aTContinuousCnt[i][j] = (short*)malloc(sizeof(short)*g_nNeighborNum);
+				for(k=0;k<g_nNeighborNum;k++){
+					g_aTReferredIndex[i][j][k] = -1;
+					g_aTContinuousCnt[i][j][k] = 0; 
+				}
+			}
+		}
+	}
+}
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//															the memory release function											           //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::T_ReleaseTextureModelRelatedMemory(){
+	int i,j,k,m;
+	short nNeighborNum = g_nNeighborNum; 
+
+	for(i=0;i<g_iRHeight;i++){
+		for(j=0;j<g_iRWidth;j++){
+			for(k=0;k<nNeighborNum;k++){
+				for(m=0;m<g_TextureModel[i][j][k]->m_iNumEntries;m++) free(g_TextureModel[i][j][k]->m_Codewords[m]);
+				free(g_TextureModel[i][j][k]->m_Codewords);
+				free(g_TextureModel[i][j][k]);
+			}
+			free(g_TextureModel[i][j]);
+		}free(g_TextureModel[i]);
+	}
+	free(g_TextureModel);
+
+	for(i=0;i<g_iRHeight;i++){
+		for(j=0;j<g_iRWidth;j++) free(g_aNeighborDirection[i][j]);
+		free(g_aNeighborDirection[i]);
+	}
+	free(g_aNeighborDirection);
+
+	for(i=0;i<g_iRHeight;i++) free(g_aTextureConfMap[i]);
+	free(g_aTextureConfMap);
+
+	if(g_bAbsorptionEnable==TRUE){
+		for(i=0;i<g_iRHeight;i++){
+			for(j=0;j<g_iRWidth;j++){
+				for(k=0;k<nNeighborNum;k++){
+					for(m=0;m<g_TCacheBook[i][j][k]->m_iNumEntries;m++) free(g_TCacheBook[i][j][k]->m_Codewords[m]);
+					free(g_TCacheBook[i][j][k]->m_Codewords);
+					free(g_TCacheBook[i][j][k]);
+				}
+				free(g_TCacheBook[i][j]);
+			}free(g_TCacheBook[i]);
+		}
+		free(g_TCacheBook);
+
+		for(i=0;i<g_iRHeight;i++){
+			for(j=0;j<g_iRWidth;j++){
+				free(g_aTReferredIndex[i][j]);
+				free(g_aTContinuousCnt[i][j]);
+			}
+			free(g_aTReferredIndex[i]);
+			free(g_aTContinuousCnt[i]);
+		}
+		free(g_aTReferredIndex);
+		free(g_aTContinuousCnt);
+
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														the codebook construction function				                                   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::T_ModelConstruction(short nTrainVolRange,float fLearningRate, uchar*** aXYZ,point center, point* aNei, TextureModel** aModel){
+	
+	int i,j;
+	int iMatchedIndex;
+
+	short nNeighborNum = g_nNeighborNum;
+
+	float fDifference;
+	float fDiffMean;
+
+	float fNegLearningRate = 1-fLearningRate;
+
+	//for all neighboring pairs 
+	for(i=0;i<nNeighborNum;i++){
+		
+		fDifference = (float)(aXYZ[center.m_nY][center.m_nX][2] - aXYZ[aNei[i].m_nY][aNei[i].m_nX][2]);
+
+		//Step1: matching
+		iMatchedIndex = -1;
+		for(j=0;j<aModel[i]->m_iNumEntries;j++){
+			if(aModel[i]->m_Codewords[j]->m_fLowThre  <= fDifference && fDifference <= aModel[i]->m_Codewords[j]->m_fHighThre){
+				iMatchedIndex = j;
+				break;
+			}
+		}
+			
+		aModel[i]->m_iTotal++;
+		//Step2: adding a new element
+		if(iMatchedIndex == -1){
+			//element array�� Ȯ���� �ʿ䰡 ������ Ȯ��
+			if(aModel[i]->m_iElementArraySize == aModel[i]->m_iNumEntries){
+				aModel[i]->m_iElementArraySize += 5;
+				TextureCodeword **temp = (TextureCodeword**)malloc(sizeof(TextureCodeword*)*aModel[i]->m_iElementArraySize);
+				for(j=0;j<aModel[i]->m_iNumEntries;j++){
+					temp[j] = aModel[i]->m_Codewords[j];
+					aModel[i]->m_Codewords[j] = NULL;
+				}
+				free(aModel[i]->m_Codewords);
+				aModel[i]->m_Codewords = temp;
+			}
+			aModel[i]->m_Codewords[aModel[i]->m_iNumEntries] = (TextureCodeword*)malloc(sizeof(TextureCodeword));
+
+			aModel[i]->m_Codewords[aModel[i]->m_iNumEntries]->m_fMean  = fDifference;
+			aModel[i]->m_Codewords[aModel[i]->m_iNumEntries]->m_fLowThre  = aModel[i]->m_Codewords[aModel[i]->m_iNumEntries]->m_fMean  - nTrainVolRange;
+			aModel[i]->m_Codewords[aModel[i]->m_iNumEntries]->m_fHighThre = aModel[i]->m_Codewords[aModel[i]->m_iNumEntries]->m_fMean  + nTrainVolRange;
+
+			aModel[i]->m_Codewords[aModel[i]->m_iNumEntries]->m_iT_first_time = aModel[i]->m_iTotal;
+			aModel[i]->m_Codewords[aModel[i]->m_iNumEntries]->m_iT_last_time = aModel[i]->m_iTotal;
+			aModel[i]->m_Codewords[aModel[i]->m_iNumEntries]->m_iMNRL = aModel[i]->m_iTotal-1;
+			aModel[i]->m_iNumEntries ++;
+		}
+
+		//Step3: update
+		else{
+			fDiffMean = aModel[i]->m_Codewords[iMatchedIndex]->m_fMean;
+			aModel[i]->m_Codewords[iMatchedIndex]->m_fMean  = fLearningRate*fDifference + fNegLearningRate*fDiffMean;
+
+			aModel[i]->m_Codewords[iMatchedIndex]->m_fLowThre  = aModel[i]->m_Codewords[iMatchedIndex]->m_fMean  - nTrainVolRange;
+			aModel[i]->m_Codewords[iMatchedIndex]->m_fHighThre = aModel[i]->m_Codewords[iMatchedIndex]->m_fMean  + nTrainVolRange;
+
+			aModel[i]->m_Codewords[iMatchedIndex]->m_iT_last_time = aModel[i]->m_iTotal;	
+		}
+
+		//cache-book handling
+		if(aModel[i]->m_bID==1){
+			//1. m_iMNRL update
+			int negTime;
+			for(j=0;j<aModel[i]->m_iNumEntries;j++){
+				//m_iMNRL update
+				negTime = aModel[i]->m_iTotal - aModel[i]->m_Codewords[j]->m_iT_last_time + aModel[i]->m_Codewords[j]->m_iT_first_time - 1;
+				if(aModel[i]->m_Codewords[j]->m_iMNRL < negTime) aModel[i]->m_Codewords[j]->m_iMNRL = negTime;
+			}
+			
+
+			//2. g_aTReferredIndex[center.m_nY][center.m_nX][i] update
+			if(g_bAbsorptionEnable == TRUE) g_aTReferredIndex[center.m_nY][center.m_nX][i] = -1;
+		}
+		
+		else{
+			//1. m_iMNRL update
+			if(iMatchedIndex == -1) aModel[i]->m_Codewords[aModel[i]->m_iNumEntries-1]->m_iMNRL = 0;
+
+			//2. g_aTReferredIndex[center.m_nY][center.m_nX][i] update
+			if(iMatchedIndex==-1){
+				g_aTReferredIndex[center.m_nY][center.m_nX][i] = aModel[i]->m_iNumEntries-1;
+				g_aTContinuousCnt[center.m_nY][center.m_nX][i] = 1;
+			}
+			else{
+				if(iMatchedIndex == g_aTReferredIndex[center.m_nY][center.m_nX][i]) g_aTContinuousCnt[center.m_nY][center.m_nX][i]++;
+				else{
+					g_aTReferredIndex[center.m_nY][center.m_nX][i] = iMatchedIndex;
+					g_aTContinuousCnt[center.m_nY][center.m_nX][i] = 1;
+				}
+			}
+		}
+
+	}
+
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//												Clear non-essential codewords of the given codebook						                   //																									   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::T_ClearNonEssentialEntries(short nClearNum, TextureModel** aModel){
+	int i,n;
+	int iStaleThresh = (int)(nClearNum*0.5);
+	int iKeepCnt;
+	int* aKeep;
+
+	short nNeighborNum = g_nNeighborNum;
+
+	TextureModel* c;
+
+	for(n=0;n<nNeighborNum;n++){
+		c = aModel[n];
+
+		if(c->m_iTotal < nClearNum) continue; //(being operated only when c[w][h]->m_iTotal == nClearNum)
+
+		//Step1: initialization
+		aKeep = (int*)malloc(sizeof(int)*c->m_iNumEntries);
+
+		iKeepCnt = 0;
+
+		//Step2: Find non-essential code-words
+		for(i=0;i<c->m_iNumEntries;i++){
+			if(c->m_Codewords[i]->m_iMNRL > iStaleThresh) {
+				aKeep[i] = 0; //removal candidate
+			}
+			else {
+				aKeep[i] = 1; 
+				iKeepCnt++;
+			}
+		}
+
+		//Step3: Perform removal
+		if(iKeepCnt==0 || iKeepCnt==c->m_iNumEntries){
+			for(i=0;i<c->m_iNumEntries;i++){
+				c->m_Codewords[i]->m_iT_first_time = 1;
+				c->m_Codewords[i]->m_iT_last_time = 1;
+				c->m_Codewords[i]->m_iMNRL = 0;
+			}
+		}
+
+		else{
+			iKeepCnt = 0;
+			TextureCodeword** temp = (TextureCodeword**)malloc(sizeof(TextureCodeword*)*c->m_iNumEntries);
+
+			for(i=0;i<c->m_iNumEntries;i++){
+				if(aKeep[i] == 1){
+					temp[iKeepCnt] = c->m_Codewords[i];
+					temp[iKeepCnt]->m_iT_first_time = 1;
+					temp[iKeepCnt]->m_iT_last_time = 1;
+					temp[iKeepCnt]->m_iMNRL = 0;
+					iKeepCnt++;
+				}
+				else free(c->m_Codewords[i]);
+			}
+
+			//ending..
+			free(c->m_Codewords);
+			c->m_Codewords = temp;
+			c->m_iElementArraySize = c->m_iNumEntries;
+			c->m_iNumEntries = iKeepCnt;
+		}
+		c->m_iTotal=0;
+		free(aKeep);
+
+	}
+
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//								Clear non-essential codewords of the given codebook (only for the cache-book)			                   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::T_ClearNonEssentialEntriesForCachebook(uchar bLandmark, short* nReferredIdxArr, short nClearNum, TextureModel** pCachebook){
+	int i,n;
+	short nNeighborNum = g_nNeighborNum;
+
+	TextureModel* c;
+	short nReferredIdx;
+
+	for(n=0;n<nNeighborNum;n++){
+
+		c = pCachebook[n];
+		nReferredIdx = nReferredIdxArr[n];
+	
+		//pCachebook->m_iTotal < nClearNum? --> MNRL update
+		if(c->m_iTotal<nClearNum) {
+			for(i=0;i<c->m_iNumEntries;i++){
+				if(bLandmark == 255 && i == nReferredIdx) c->m_Codewords[i]->m_iMNRL = 0;
+				else c->m_Codewords[i]->m_iMNRL++;
+			}
+
+			c->m_iTotal++;
+		}
+
+		//Perform clearing
+		else{
+			int iStaleThreshold = 5;
+
+			int* aKeep;
+			short nKeepCnt;
+
+			aKeep = (int*)malloc(sizeof(int)*c->m_iNumEntries);
+			nKeepCnt = 0;
+
+			for(i=0;i<c->m_iNumEntries;i++){
+				if(c->m_Codewords[i]->m_iMNRL<iStaleThreshold){
+					aKeep[i] = 1;
+					nKeepCnt++;
+				}
+				else aKeep[i] = 0;
+			}
+
+			c->m_iElementArraySize = nKeepCnt+2;
+			if(c->m_iElementArraySize<3) c->m_iElementArraySize = 3;
+
+			TextureCodeword** temp = (TextureCodeword**)malloc(sizeof(TextureCodeword*)*c->m_iElementArraySize);
+			nKeepCnt = 0;
+
+			for(i=0;i<c->m_iNumEntries;i++){
+				if(aKeep[i]==1){
+					temp[nKeepCnt] = c->m_Codewords[i];
+					temp[nKeepCnt]->m_iMNRL = 0;
+					nKeepCnt++;
+				}
+				else {
+					free(c->m_Codewords[i]);
+				}
+
+			}
+
+			//ending..
+			free(c->m_Codewords);
+			c->m_Codewords = temp;
+			c->m_iNumEntries = nKeepCnt;
+			c->m_iTotal = 0;
+
+			free(aKeep);
+		}	
+	}
+
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//											the function to generate texture confidence maps				                               //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::T_GetConfidenceMap_Par(uchar*** aXYZ, float** aTextureMap, point*** aNeiDirArr, TextureModel**** aModel){
+	
+	int iBound_w = g_iRWidth-g_nRadius;
+	int iBound_h = g_iRHeight-g_nRadius;
+
+	short nNeighborNum = g_nNeighborNum;
+	float fPadding = 5;
+	
+	for(int h=0; h<g_iRHeight; h++){
+		for(int w=0;w<g_iRWidth;w++){
+
+			if(h<g_nRadius || h>=iBound_h || w<g_nRadius || w>=iBound_w){	
+				aTextureMap[h][w] = 0;
+				continue;
+			}
+
+			int nMatchedCount = 0;
+			float fDiffSum = 0;
+			float fDifference;
+			point nei;
+
+			for(int i=0;i<nNeighborNum;i++){
+
+				nei.m_nX = aNeiDirArr[h][w][i].m_nX;
+				nei.m_nY = aNeiDirArr[h][w][i].m_nY;
+
+				fDifference = (float)(aXYZ[h][w][2] - aXYZ[nei.m_nY][nei.m_nX][2]);
+				if(fDifference<0) fDiffSum -= fDifference;
+				else fDiffSum += fDifference;
+		
+				for(int j=0;j<aModel[h][w][i]->m_iNumEntries;j++){
+					if(aModel[h][w][i]->m_Codewords[j]->m_fLowThre-fPadding  <= fDifference && fDifference <= aModel[h][w][i]->m_Codewords[j]->m_fHighThre+fPadding){
+						nMatchedCount++;
+						break;
+					}
+				}
+
+			}
+			aTextureMap[h][w] = 1 - (float)nMatchedCount/nNeighborNum;
+		}
+	}
+}
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//											Absorbing Ghost Non-background Region Update					                               //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::T_Absorption(int iAbsorbCnt, point pos, short*** aContinuCnt, short*** aRefferedIndex, TextureModel** pModel, TextureModel** pCache){
+	int i,j,k;
+	int iLeavingIndex;
+
+	short g_nRadius = 2;
+	short nNeighborNum = g_nNeighborNum;
+
+	for(i=0;i<nNeighborNum;i++){
+		//set iLeavingIndex
+		if(aContinuCnt[pos.m_nY][pos.m_nX][i]<iAbsorbCnt) continue;
+
+		iLeavingIndex = aRefferedIndex[pos.m_nY][pos.m_nX][i];
+
+		//array expansion
+		if(pModel[i]->m_iElementArraySize==pModel[i]->m_iNumEntries){
+			pModel[i]->m_iElementArraySize = pModel[i]->m_iElementArraySize+5;
+			TextureCodeword** temp = (TextureCodeword**)malloc(sizeof(TextureCodeword*)*pModel[i]->m_iElementArraySize);
+			for(j=0;j<pModel[i]->m_iNumEntries;j++) temp[j] = pModel[i]->m_Codewords[j];
+			free(pModel[i]->m_Codewords);
+			pModel[i]->m_Codewords = temp;
+		}
+
+		//movement from the cache-book to the codebook
+		pModel[i]->m_Codewords[pModel[i]->m_iNumEntries] = pCache[i]->m_Codewords[iLeavingIndex];
+
+		pModel[i]->m_iTotal = pModel[i]->m_iTotal+1;
+
+		pModel[i]->m_Codewords[pModel[i]->m_iNumEntries]->m_iT_first_time = pModel[i]->m_iTotal;
+		pModel[i]->m_Codewords[pModel[i]->m_iNumEntries]->m_iT_last_time = pModel[i]->m_iTotal;
+		pModel[i]->m_Codewords[pModel[i]->m_iNumEntries]->m_iMNRL = pModel[i]->m_iTotal-1;
+		pModel[i]->m_iNumEntries = pModel[i]->m_iNumEntries + 1;
+
+		k=0;
+		TextureCodeword **temp_Cache = (TextureCodeword**)malloc(sizeof(TextureCodeword*)*pCache[i]->m_iElementArraySize);
+		for(j=0;j<pCache[i]->m_iNumEntries;j++){
+			if(j==iLeavingIndex) continue;
+			else{
+				temp_Cache[k] = pCache[i]->m_Codewords[j];
+				k++;
+			}
+		}
+		free(pCache[i]->m_Codewords);
+		pCache[i]->m_Codewords = temp_Cache;
+		pCache[i]->m_iNumEntries = k;
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//													the function to set neighborhood system												   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::T_SetNeighborDirection(point*** aNeighborPos){
+	int i,j,k;
+	point* aSearchDirection = (point*)malloc(sizeof(point)*g_nNeighborNum);
+
+	aSearchDirection[0].m_nX = -2;//180 degree
+	aSearchDirection[0].m_nY = 0;
+
+	aSearchDirection[1].m_nX = -1;//123 degree
+	aSearchDirection[1].m_nY = -2;
+
+	aSearchDirection[2].m_nX = 1;//45 degree
+	aSearchDirection[2].m_nY = -2;
+
+	aSearchDirection[3].m_nX = 2;//0 degree
+	aSearchDirection[3].m_nY = 0;
+
+	aSearchDirection[4].m_nX = 1;//-45 degree
+	aSearchDirection[4].m_nY = 2;
+
+	aSearchDirection[5].m_nX = -1;//-135 degree
+	aSearchDirection[5].m_nY = 2;
+
+	point temp_pos;
+
+	for(i=0;i<g_iRHeight;i++){
+		for(j=0;j<g_iRWidth;j++){
+			for(k=0;k<g_nNeighborNum;k++){
+				temp_pos.m_nX = j+aSearchDirection[k].m_nX;
+				temp_pos.m_nY = i+aSearchDirection[k].m_nY;
+
+				if(temp_pos.m_nX<0 || temp_pos.m_nX>=g_iRWidth || temp_pos.m_nY<0 || temp_pos.m_nY>=g_iRHeight) {
+					aNeighborPos[i][j][k].m_nX = -1;
+					aNeighborPos[i][j][k].m_nY = -1;
+				}
+
+				else {
+					aNeighborPos[i][j][k].m_nX = temp_pos.m_nX;
+					aNeighborPos[i][j][k].m_nY = temp_pos.m_nY;
+				}
+			}
+		}
+	}
+	free(aSearchDirection);
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//													the color-model initialization function												   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::C_AllocateColorModelRelatedMemory(){
+	int i,j; 
+
+	int iElementArraySize = 10;
+	
+	//codebook initialization
+	g_ColorModel = (ColorModel***)malloc(sizeof(ColorModel**)*g_iRHeight);
+	for(i=0;i<g_iRHeight;i++){
+		g_ColorModel[i] = (ColorModel**)malloc(sizeof(ColorModel*)*g_iRWidth);
+		for(j=0;j<g_iRWidth;j++){
+			//initialization of each CodeBookArray.
+			g_ColorModel[i][j] = (ColorModel*)malloc(sizeof(ColorModel));
+			g_ColorModel[i][j]->m_Codewords = (ColorCodeword**)malloc(sizeof(ColorCodeword*)*iElementArraySize);
+			g_ColorModel[i][j]->m_iNumEntries = 0;
+			g_ColorModel[i][j]->m_iElementArraySize = iElementArraySize;
+			g_ColorModel[i][j]->m_iTotal = 0;
+			g_ColorModel[i][j]->m_bID = 1;
+		}
+	}
+
+	//cache-book initialization
+	if(g_bAbsorptionEnable==TRUE){
+		iElementArraySize = 3;
+
+		g_CCacheBook = (ColorModel***)malloc(sizeof(ColorModel**)*g_iRHeight);
+		for(i=0;i<g_iRHeight;i++){
+			g_CCacheBook[i] = (ColorModel**)malloc(sizeof(ColorModel*)*g_iRWidth);
+			for(j=0;j<g_iRWidth;j++){
+				//initialization of each CodeBookArray.
+				g_CCacheBook[i][j] = (ColorModel*)malloc(sizeof(ColorModel));
+				g_CCacheBook[i][j]->m_Codewords = (ColorCodeword**)malloc(sizeof(ColorCodeword*)*iElementArraySize);
+				g_CCacheBook[i][j]->m_iNumEntries = 0;
+				g_CCacheBook[i][j]->m_iElementArraySize = iElementArraySize;
+				g_CCacheBook[i][j]->m_iTotal = 0;
+				g_CCacheBook[i][j]->m_bID = 0;
+			}
+		}
+
+		g_aCReferredIndex = (short**)malloc(sizeof(short*)*g_iRHeight);
+		g_aCContinuousCnt = (short**)malloc(sizeof(short*)*g_iRHeight);
+		for(i=0;i<g_iRHeight;i++){
+			g_aCReferredIndex[i] = (short*)malloc(sizeof(short)*g_iRWidth);
+			g_aCContinuousCnt[i] = (short*)malloc(sizeof(short)*g_iRWidth);
+			for(j=0;j<g_iRWidth;j++){
+				g_aCReferredIndex[i][j] = -1;
+				g_aCContinuousCnt[i][j] = 0;
+			}
+		}
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//															the memory release function											           //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::C_ReleaseColorModelRelatedMemory(){
+	int i,j,k;
+
+	for(i=0;i<g_iRHeight;i++){           
+		for(j=0;j<g_iRWidth;j++){
+			for(k=0;k<g_ColorModel[i][j]->m_iNumEntries;k++){
+				free(g_ColorModel[i][j]->m_Codewords[k]);
+			}
+			free(g_ColorModel[i][j]->m_Codewords);
+			free(g_ColorModel[i][j]);
+		}
+		free(g_ColorModel[i]);
+	}
+	free(g_ColorModel);
+
+	if(g_bAbsorptionEnable==TRUE){
+		for(i=0;i<g_iRHeight;i++){           
+			for(j=0;j<g_iRWidth;j++){
+				for(k=0;k<g_CCacheBook[i][j]->m_iNumEntries;k++){
+					free(g_CCacheBook[i][j]->m_Codewords[k]);
+				}
+				free(g_CCacheBook[i][j]->m_Codewords);
+				free(g_CCacheBook[i][j]);
+			}
+			free(g_CCacheBook[i]);
+		}
+		free(g_CCacheBook);
+
+		for(i=0;i<g_iRHeight;i++){
+			free(g_aCReferredIndex[i]);
+			free(g_aCContinuousCnt[i]);
+		}
+		free(g_aCReferredIndex);
+		free(g_aCContinuousCnt);
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														the codebook construction function								                   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::C_CodebookConstruction(uchar* aP,int iPosX, int iPosY, short nTrainVolRange, float fLearningRate, ColorModel* pC){
+	
+	//Step1: matching
+	int i,j;
+	short nMatchedIndex;
+
+	float fNegLearningRate = 1-fLearningRate;
+
+	nMatchedIndex = -1;
+
+	for(i=0;i<pC->m_iNumEntries;i++){
+		
+		//Checking X
+		if(pC->m_Codewords[i]->m_dMean[0]-nTrainVolRange <= aP[0] && aP[0] <= pC->m_Codewords[i]->m_dMean[0]+nTrainVolRange){
+			//Checking Y
+			if(pC->m_Codewords[i]->m_dMean[1]-nTrainVolRange <= aP[1] && aP[1] <= pC->m_Codewords[i]->m_dMean[1]+nTrainVolRange){
+				//Checking Z
+				if(pC->m_Codewords[i]->m_dMean[2]-nTrainVolRange <= aP[2] && aP[2] <= pC->m_Codewords[i]->m_dMean[2]+nTrainVolRange){
+					nMatchedIndex = i;
+					break;
+				}
+			}
+		}
+	}
+
+	pC->m_iTotal = pC->m_iTotal+1;
+
+	//Step2 : adding a new element
+	if(nMatchedIndex==-1){
+		if(pC->m_iElementArraySize == pC->m_iNumEntries){
+			pC->m_iElementArraySize = pC->m_iElementArraySize + 5;
+			ColorCodeword **temp = (ColorCodeword**)malloc(sizeof(ColorCodeword*)*pC->m_iElementArraySize);
+			for(j=0;j<pC->m_iNumEntries;j++){
+				temp[j] = pC->m_Codewords[j];
+				pC->m_Codewords[j]= NULL;
+			}
+			free(pC->m_Codewords);
+			pC->m_Codewords = temp;
+
+		}
+		pC->m_Codewords[pC->m_iNumEntries] = (ColorCodeword*)malloc(sizeof(ColorCodeword));
+
+		pC->m_Codewords[pC->m_iNumEntries]->m_dMean[0] = aP[0];//X
+		pC->m_Codewords[pC->m_iNumEntries]->m_dMean[1] = aP[1];//Y
+		pC->m_Codewords[pC->m_iNumEntries]->m_dMean[2] = aP[2];//Z
+
+		pC->m_Codewords[pC->m_iNumEntries]->m_iT_first_time = pC->m_iTotal;
+		pC->m_Codewords[pC->m_iNumEntries]->m_iT_last_time = pC->m_iTotal;
+		pC->m_Codewords[pC->m_iNumEntries]->m_iMNRL = pC->m_iTotal-1;
+		pC->m_iNumEntries = pC->m_iNumEntries + 1;
+	}
+
+	//Step3 : update
+	else{		
+		//m_dMean update
+		pC->m_Codewords[nMatchedIndex]->m_dMean[0] = (fLearningRate*aP[0]) + fNegLearningRate*pC->m_Codewords[nMatchedIndex]->m_dMean[0];//X
+		pC->m_Codewords[nMatchedIndex]->m_dMean[1] = (fLearningRate*aP[1]) + fNegLearningRate*pC->m_Codewords[nMatchedIndex]->m_dMean[1];//Y
+		pC->m_Codewords[nMatchedIndex]->m_dMean[2] = (fLearningRate*aP[2]) + fNegLearningRate*pC->m_Codewords[nMatchedIndex]->m_dMean[2];//Z
+
+		pC->m_Codewords[nMatchedIndex]->m_iT_last_time = pC->m_iTotal;	
+	}
+
+	//cache-book handling
+	if(pC->m_bID==1){
+		//1. m_iMNRL update
+		int iNegTime;
+		for(i=0;i<pC->m_iNumEntries;i++){
+			//m_iMNRL update
+			iNegTime = pC->m_iTotal - pC->m_Codewords[i]->m_iT_last_time + pC->m_Codewords[i]->m_iT_first_time - 1;
+			if(pC->m_Codewords[i]->m_iMNRL < iNegTime) pC->m_Codewords[i]->m_iMNRL = iNegTime;
+		}
+
+		//2. g_aCReferredIndex[iPosY][iPosX] update
+		if(g_bAbsorptionEnable == TRUE) g_aCReferredIndex[iPosY][iPosX] = -1;
+	}
+	
+	else{
+		//1. m_iMNRL update:
+		if(nMatchedIndex == -1) pC->m_Codewords[pC->m_iNumEntries-1]->m_iMNRL = 0;
+		
+		//2. g_aCReferredIndex[iPosY][iPosX] update
+		if(nMatchedIndex==-1){
+			g_aCReferredIndex[iPosY][iPosX] = pC->m_iNumEntries-1;
+			g_aCContinuousCnt[iPosY][iPosX] = 1;
+		}
+		else{
+			if(nMatchedIndex == g_aCReferredIndex[iPosY][iPosX]) g_aCContinuousCnt[iPosY][iPosX]++;
+			else{
+				g_aCReferredIndex[iPosY][iPosX] = nMatchedIndex;
+				g_aCContinuousCnt[iPosY][iPosX] = 1;
+			}
+		}
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//												Clear non-essential codewords of the given codebook							               //																													   //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::C_ClearNonEssentialEntries(short nClearNum, ColorModel* pModel){
+	int i;
+	short nStaleThresh = (int)(nClearNum*0.5);
+	short nKeepCnt;
+	int* aKeep;
+
+	ColorModel* pC = pModel;
+
+	if(pC->m_iTotal < nClearNum) return; //(Being operated only when pC->t >= nClearNum)
+
+	//Step1:initialization
+	aKeep = (int*)malloc(sizeof(int)*pC->m_iNumEntries);
+
+	nKeepCnt = 0;
+
+	//Step2: Find non-essential codewords
+	for(i=0;i<pC->m_iNumEntries;i++){
+		if(pC->m_Codewords[i]->m_iMNRL > nStaleThresh) {
+			aKeep[i] = 0; //removal
+		}
+		else {
+			aKeep[i] = 1; //keep
+			nKeepCnt++;
+		}
+	}
+
+	//Step3: Perform removal
+	if(nKeepCnt==0 || nKeepCnt==pC->m_iNumEntries){
+		for(i=0;i<pC->m_iNumEntries;i++){
+			pC->m_Codewords[i]->m_iT_first_time = 1;
+			pC->m_Codewords[i]->m_iT_last_time = 1;
+			pC->m_Codewords[i]->m_iMNRL = 0;
+		}
+	}
+	else{
+		nKeepCnt = 0;
+		ColorCodeword** temp = (ColorCodeword**)malloc(sizeof(ColorCodeword*)*pC->m_iNumEntries);
+
+		for(i=0;i<pC->m_iNumEntries;i++){
+			if(aKeep[i] == 1){
+				temp[nKeepCnt] = pC->m_Codewords[i];
+				temp[nKeepCnt]->m_iT_first_time = 1;
+				temp[nKeepCnt]->m_iT_last_time = 1;
+				temp[nKeepCnt]->m_iMNRL = 0;
+				nKeepCnt++;
+			}
+			else free(pC->m_Codewords[i]);
+		}
+
+		//ending..
+		free(pC->m_Codewords);
+		pC->m_Codewords = temp;
+		pC->m_iElementArraySize = pC->m_iNumEntries;
+		pC->m_iNumEntries = nKeepCnt;
+	}
+
+	pC->m_iTotal=0;
+	free(aKeep);
+
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//										Clear non-essential codewords of the given codebook (for cache-book)				               //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::C_ClearNonEssentialEntriesForCachebook(uchar bLandmark, short nReferredIdx, short nClearNum, ColorModel* pCachebook){
+	int i;
+
+	if(pCachebook->m_iTotal<nClearNum) {
+		for(i=0;i<pCachebook->m_iNumEntries;i++){
+			if(bLandmark == 255 && i == nReferredIdx) pCachebook->m_Codewords[i]->m_iMNRL = 0;
+			else pCachebook->m_Codewords[i]->m_iMNRL++;
+		}
+
+		pCachebook->m_iTotal++;
+	}
+
+	else{
+		int iStaleThreshold = 5;
+
+		int* aKeep;
+		short nKeepCnt;
+
+		aKeep = (int*)malloc(sizeof(int)*pCachebook->m_iNumEntries);
+		nKeepCnt = 0;
+
+		for(i=0;i<pCachebook->m_iNumEntries;i++){
+			if(pCachebook->m_Codewords[i]->m_iMNRL<iStaleThreshold){
+				aKeep[i] = 1;
+				nKeepCnt++;
+			}
+			else aKeep[i] = 0;
+		}
+
+		pCachebook->m_iElementArraySize = nKeepCnt+2;
+		if(pCachebook->m_iElementArraySize<3) pCachebook->m_iElementArraySize = 3;
+
+		ColorCodeword** temp = (ColorCodeword**)malloc(sizeof(ColorCodeword*)*pCachebook->m_iElementArraySize);
+		nKeepCnt = 0;
+
+		for(i=0;i<pCachebook->m_iNumEntries;i++){
+			if(aKeep[i]==1){			
+				temp[nKeepCnt] = pCachebook->m_Codewords[i];
+				temp[nKeepCnt]->m_iMNRL = 0;
+				nKeepCnt++;
+			}
+			else {	
+				free(pCachebook->m_Codewords[i]);
+			}
+
+		}
+
+		//ending..
+		free(pCachebook->m_Codewords);
+		pCachebook->m_Codewords = temp;
+		pCachebook->m_iNumEntries = nKeepCnt;
+		pCachebook->m_iTotal = 0;
+
+		free(aKeep);
+	}
+}
+
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+//														the ghost-region absorption function										       //
+//-----------------------------------------------------------------------------------------------------------------------------------------//
+void SJN_MultiCueBGS::C_Absorption(int iAbsorbCnt, point pos, short** aContinuCnt, short** aRefferedIndex, ColorModel* pModel, ColorModel* pCache){
+
+	//set iLeavingIndex
+	if(aContinuCnt[pos.m_nY][pos.m_nX]<iAbsorbCnt) return;
+
+	int iLeavingIndex = aRefferedIndex[pos.m_nY][pos.m_nX];
+
+	//array expansion
+	if(pModel->m_iElementArraySize==pModel->m_iNumEntries){
+		pModel->m_iElementArraySize = pModel->m_iElementArraySize+5;
+		ColorCodeword** temp = (ColorCodeword**)malloc(sizeof(ColorCodeword*)*pModel->m_iElementArraySize);
+		for(int i=0;i<pModel->m_iNumEntries;i++) temp[i] = pModel->m_Codewords[i];
+		free(pModel->m_Codewords);
+		pModel->m_Codewords = temp;
+	}
+
+	//movement from the cache-book to the codebook
+	pModel->m_Codewords[pModel->m_iNumEntries] = pCache->m_Codewords[iLeavingIndex];
+
+	pModel->m_iTotal = pModel->m_iTotal+1;
+
+	pModel->m_Codewords[pModel->m_iNumEntries]->m_iT_first_time = pModel->m_iTotal;
+	pModel->m_Codewords[pModel->m_iNumEntries]->m_iT_last_time = pModel->m_iTotal;
+	pModel->m_Codewords[pModel->m_iNumEntries]->m_iMNRL = pModel->m_iTotal-1;
+
+	pModel->m_iNumEntries = pModel->m_iNumEntries + 1;
+
+	int k=0;
+	ColorCodeword **pTempCache = (ColorCodeword**)malloc(sizeof(ColorCodeword*)*pCache->m_iElementArraySize);
+	for(int i=0;i<pCache->m_iNumEntries;i++){
+		if(i==iLeavingIndex) continue;
+		else{
+			pTempCache[k] = pCache->m_Codewords[i];
+			k++;
+		}
+	}
+	free(pCache->m_Codewords);
+	pCache->m_Codewords = pTempCache;
+	pCache->m_iNumEntries = k;
+}
\ No newline at end of file
diff --git a/package_bgs/sjn/SJN_MultiCueBGS.h b/package_bgs/sjn/SJN_MultiCueBGS.h
new file mode 100644
index 0000000..1d5dd73
--- /dev/null
+++ b/package_bgs/sjn/SJN_MultiCueBGS.h
@@ -0,0 +1,243 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#define MIN3(x,y,z)  ((y) <= (z) ? ((x) <= (y) ? (x) : (y)) : ((x) <= (z) ? (x) : (z)))
+#define MAX3(x,y,z)  ((y) >= (z) ? ((x) >= (y) ? (x) : (y)) : ((x) >= (z) ? (x) : (z)))
+#define PI 3.14159
+
+typedef int BOOL;
+
+#ifndef FALSE
+  #define FALSE 0
+#endif
+
+#ifndef TRUE
+  #define TRUE 1
+#endif
+
+#include <malloc.h>
+#include "math.h"
+
+#include <vector>
+using std::vector;
+
+#include <algorithm>
+using std::sort;
+
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+
+//------------------------------------Structure Lists-------------------------------------//
+struct point{
+	short m_nX;
+	short m_nY;
+};
+
+struct neighbor_pos{
+	short m_nX;
+	short m_nY;
+};
+//1) Bounding Box Structure
+struct BoundingBoxInfo{
+	int m_iBoundBoxNum;										//# of bounding boxes for all foreground and false-positive blobs
+	int m_iArraySize;										//the size of the below arrays to store bounding box information
+
+	short *m_aLeft, *m_aRight, *m_aUpper, *m_aBottom;		//arrays to store bounding box information for (the original frame size)
+	short *m_aRLeft, *m_aRRight, *m_aRUpper, *m_aRBottom;	//arrays to store bounding box information for (the reduced frame size)
+	BOOL* m_ValidBox;										//If this value is true, the corresponding bounding box is for a foreground blob.
+															//Else, it is for a false-positive blob
+};
+
+//2) Texture Model Structure
+struct TextureCodeword{
+	int m_iMNRL;											//the maximum negative run-length
+	int m_iT_first_time;									//the first access time
+	int m_iT_last_time;										//the last access time
+
+	//��� MTLBP��
+	float m_fLowThre;										//a low threshold for the matching 
+	float m_fHighThre;										//a high threshold for the matching
+	float m_fMean;											//mean of the codeword
+};
+
+struct TextureModel{
+	TextureCodeword** m_Codewords;							//the texture-codeword Array
+
+	int m_iTotal;											//# of learned samples after the last clear process
+	int m_iElementArraySize;								//the array size of m_Codewords
+	int m_iNumEntries;										//# of codewords
+
+	BOOL m_bID;												//id=1 --> background model, id=0 --> cachebook
+};
+
+//3) Color Model Structure
+struct ColorCodeword{	
+	int m_iMNRL;											//the maximum negative run-length
+	int m_iT_first_time;									//the first access time
+	int m_iT_last_time;										//the last access time
+
+	double m_dMean[3];										//mean vector of the codeword
+
+};
+
+struct ColorModel{
+	ColorCodeword** m_Codewords;							//the color-codeword Array
+
+	int m_iTotal;											//# of learned samples after the last clear process
+	int m_iElementArraySize;								//the array size of m_Codewords
+	int m_iNumEntries;										//# of codewords
+
+	BOOL m_bID;												//id=1 --> background model, id=0 --> cachebookk
+};
+
+
+class SJN_MultiCueBGS : public IBGS
+{
+private:
+  bool firstTime;
+  bool showOutput;
+  void saveConfig();
+  void loadConfig();
+
+public:
+	SJN_MultiCueBGS();
+	~SJN_MultiCueBGS(void);
+
+public:
+	//----------------------------------------------------
+	//		APIs and User-Adjustable Parameters
+	//----------------------------------------------------
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);			//the main function to background modeling and subtraction
+  
+  void GetForegroundMap(IplImage* return_image, IplImage* input_frame=NULL);					//the function returning a foreground binary-map
+	void Destroy();																				//the function to release allocated memories
+
+	int g_iTrainingPeriod;										//the training period								(The parameter t in the paper)
+	int g_iT_ModelThreshold;									//the threshold for texture-model based BGS.		(The parameter tau_T in the paper)
+	int g_iC_ModelThreshold;									//the threshold for appearance based verification.  (The parameter tau_A in the paper)
+
+	float g_fLearningRate;										//the learning rate for background models.			(The parameter alpha in the paper)
+
+	short g_nTextureTrainVolRange;								//the codebook size factor for texture models.		(The parameter k in the paper)
+	short g_nColorTrainVolRange;								//the codebook size factor for color models.		(The parameter eta_1 in the paper)
+
+public:
+	//----------------------------------------------------
+	//	Implemented Function Lists
+	//----------------------------------------------------
+
+	//--1) General Functions
+	void Initialize(IplImage* frame);
+
+	void PreProcessing(IplImage* frame);
+	void ReduceImageSize(IplImage* SrcImage, IplImage* DstImage);
+	void GaussianFiltering(IplImage* frame, uchar*** aFilteredFrame);
+	void BGR2HSVxyz_Par(uchar*** aBGR, uchar*** aXYZ);
+
+	void BackgroundModeling_Par(IplImage* frame);
+	void ForegroundExtraction(IplImage* frame);
+	void CreateLandmarkArray_Par(float fConfThre, short nTrainVolRange, float**aConfMap, int iNehborNum, uchar*** aXYZ, 
+		point*** aNeiDir, TextureModel**** TModel, ColorModel*** CModel, uchar**aLandmarkArr);
+
+	void PostProcessing(IplImage* frame);
+	void MorphologicalOpearions(uchar** aInput, uchar** aOutput, double dThresholdRatio, int iMaskSize, int iWidth, int iHeight);
+	void Labeling(uchar** aBinaryArray, int* pLabelCount, int** aLabelTable);
+	void SetBoundingBox(int iLabelCount, int** aLabelTable);
+	void BoundBoxVerification(IplImage* frame, uchar** aResForeMap, BoundingBoxInfo* BoundBoxInfo);
+	void EvaluateBoxSize( BoundingBoxInfo* BoundBoxInfo);
+	void EvaluateOverlapRegionSize(BoundingBoxInfo* SrcBoxInfo);
+	void EvaluateGhostRegion(IplImage* frame, uchar** aResForeMap, BoundingBoxInfo* BoundBoxInfo);
+	double CalculateHausdorffDist(IplImage* input_image, IplImage* model_image);
+	void RemovingInvalidForeRegions(uchar** aResForeMap, BoundingBoxInfo* BoundBoxInfo);
+	
+	void UpdateModel_Par();
+	void GetEnlargedMap(float** aOriginMap, float** aEnlargedMap);
+
+	//--2) Texture Model Related Functions
+	void T_AllocateTextureModelRelatedMemory();
+	void T_ReleaseTextureModelRelatedMemory();
+	void T_SetNeighborDirection(point*** aNeighborPos);
+	void T_ModelConstruction(short nTrainVolRange,float fLearningRate, uchar*** aXYZ,point center, point* aNei, TextureModel** aModel);
+	void T_ClearNonEssentialEntries(short nClearNum, TextureModel** aModel);
+	void T_ClearNonEssentialEntriesForCachebook(uchar bLandmark, short* nReferredIdxArr, short nClearNum, TextureModel** pCachebook);
+	void T_GetConfidenceMap_Par(uchar*** aXYZ, float** aTextureMap, point*** aNeiDirArr, TextureModel**** aModel);
+	void T_Absorption(int iAbsorbCnt, point pos, short*** aContinuCnt, short*** aRefferedIndex, TextureModel** pModel, TextureModel** pCache);
+
+	//--3) Color Model Related Functions
+	void C_AllocateColorModelRelatedMemory();
+	void C_ReleaseColorModelRelatedMemory();
+	void C_CodebookConstruction(uchar* aP,int iPosX, int iPosY, short nTrainVolRange, float fLearningRate, ColorModel* pC);
+	void C_ClearNonEssentialEntries(short nClearNum, ColorModel* pModel);
+	void C_ClearNonEssentialEntriesForCachebook(uchar bLandmark, short nReferredIdx, short nClearNum, ColorModel* pCachebook);
+	void C_Absorption(int iAbsorbCnt, point pos , short** aContinuCnt, short** aRefferedIndex, ColorModel* pModel, ColorModel* pCache);
+public: 
+	//----------------------------------------------------
+	//	Implemented Variable Lists
+	//----------------------------------------------------
+	
+	//--1) General Variables
+	int g_iFrameCount;							//the counter of processed frames
+
+	int g_iBackClearPeriod;						//the period to clear background models
+	int g_iCacheClearPeriod;					//the period to clear cache-book models
+
+	int g_iAbsortionPeriod;						//the period to absorb static ghost regions 
+	BOOL g_bAbsorptionEnable;					//If True, procedures for ghost region absorption are activated.
+
+	BOOL g_bModelMemAllocated;					//To handle memory..
+	BOOL g_bNonModelMemAllocated;				//To handle memory..
+
+	float g_fConfidenceThre;					//the final decision threshold
+
+	int g_iWidth, g_iHeight;					//width and height of input frames
+	int g_iRWidth, g_iRHeight;					//width and height of reduced frames (For efficiency, the reduced size of frames are processed) 
+	int g_iForegroundNum;						//# of detected foreground regions
+	BOOL g_bForegroundMapEnable;				//TRUE only when BGS is successful
+
+	IplImage* g_ResizedFrame;					//reduced size of frame (For efficiency, the reduced size of frames are processed) 
+	uchar*** g_aGaussFilteredFrame;				
+	uchar*** g_aXYZFrame;						
+	uchar** g_aLandmarkArray;					//the landmark map
+	uchar** g_aResizedForeMap;					//the resized foreground map
+	uchar** g_aForegroundMap;					//the final foreground map
+	BOOL** g_aUpdateMap;						//the location map of update candidate pixels
+
+	BoundingBoxInfo* g_BoundBoxInfo;			//the array of bounding boxes of each foreground blob
+
+	//--2) Texture Model Related
+	TextureModel**** g_TextureModel;			//the texture background model
+	TextureModel**** g_TCacheBook;				//the texture cache-book
+	short*** g_aTReferredIndex;					//To handle cache-book
+	short*** g_aTContinuousCnt;					//To handle cache-book
+	point*** g_aNeighborDirection;				
+	float**g_aTextureConfMap;					//the texture confidence map
+
+	short g_nNeighborNum;						//# of neighborhoods
+	short g_nRadius;							
+	short g_nBoundarySize;						
+	
+	//--3) Texture Model Related
+	ColorModel*** g_ColorModel;					//the color background model
+	ColorModel*** g_CCacheBook;					//the color cache-book
+	short** g_aCReferredIndex;					//To handle cache-book
+	short** g_aCContinuousCnt;					//To handle cache-book
+};
+
+
diff --git a/package_bgs/tb/FuzzyChoquetIntegral.cpp b/package_bgs/tb/FuzzyChoquetIntegral.cpp
new file mode 100644
index 0000000..7d0bf90
--- /dev/null
+++ b/package_bgs/tb/FuzzyChoquetIntegral.cpp
@@ -0,0 +1,204 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "FuzzyChoquetIntegral.h"
+
+FuzzyChoquetIntegral::FuzzyChoquetIntegral() : firstTime(true), frameNumber(0), showOutput(true),
+  framesToLearn(10), alphaLearn(0.1), alphaUpdate(0.01), colorSpace(1), option(2), smooth(true), threshold(0.67)
+{
+  std::cout << "FuzzyChoquetIntegral()" << std::endl;
+}
+
+FuzzyChoquetIntegral::~FuzzyChoquetIntegral()
+{
+  std::cout << "~FuzzyChoquetIntegral()" << std::endl;
+}
+
+void FuzzyChoquetIntegral::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  cv::Mat img_input_f3(img_input.size(), CV_32F);
+  img_input.convertTo(img_input_f3, CV_32F, 1./255.);
+
+  loadConfig();
+
+  if(firstTime)
+  {
+    std::cout << "FuzzyChoquetIntegral parameters:" << std::endl;
+      
+    std::string colorSpaceName = "";
+    switch(colorSpace)
+    {
+      case 1: colorSpaceName = "RGB";  break;
+      case 2: colorSpaceName = "OHTA"; break;
+      case 3: colorSpaceName = "HSV";  break;
+      case 4: colorSpaceName = "YCrCb"; break;
+    }
+    std::cout << "Color space: " << colorSpaceName << std::endl;
+
+    if(option == 1)
+      std::cout << "Fuzzing by 3 color components" << std::endl;
+    if(option == 2)
+      std::cout << "Fuzzing by 2 color components + 1 texture component" << std::endl;
+    
+    saveConfig();
+  }
+
+  if(frameNumber <= framesToLearn)
+  {
+    if(frameNumber == 0)
+      std::cout << "FuzzyChoquetIntegral initializing background model by adaptive learning..." << std::endl;
+
+    if(img_background_f3.empty())
+      img_input_f3.copyTo(img_background_f3);
+    else
+      img_background_f3 = alphaLearn*img_input_f3 + (1-alphaLearn)*img_background_f3;
+
+    if(showOutput)
+      cv::imshow("CI BG Model", img_background_f3);
+  }
+  else
+  {
+    cv::Mat img_input_f1;
+    cv::cvtColor(img_input_f3, img_input_f1, CV_BGR2GRAY);
+
+    cv::Mat img_background_f1;
+    cv::cvtColor(img_background_f3, img_background_f1, CV_BGR2GRAY);
+
+    IplImage* input_f3 = new IplImage(img_input_f3);
+    IplImage* input_f1 = new IplImage(img_input_f1);
+    IplImage* background_f3 = new IplImage(img_background_f3);
+    IplImage* background_f1 = new IplImage(img_background_f1);
+
+    IplImage* lbp_input_f1 = cvCreateImage(cvSize(input_f1->width, input_f1->height), IPL_DEPTH_32F, 1);
+    cvFillImage(lbp_input_f1, 0.0);
+    fu.LBP(input_f1, lbp_input_f1);
+
+    IplImage* lbp_background_f1 = cvCreateImage(cvSize(background_f1->width, background_f1->height), IPL_DEPTH_32F , 1);
+    cvFillImage(lbp_background_f1, 0.0);
+    fu.LBP(background_f1, lbp_background_f1);
+
+    IplImage* sim_texture_f1 = cvCreateImage(cvSize(input_f1->width, input_f1->height), IPL_DEPTH_32F, 1);
+    fu.SimilarityDegreesImage(lbp_input_f1, lbp_background_f1, sim_texture_f1, 1, colorSpace);
+
+    IplImage* sim_color_f3 = cvCreateImage(cvSize(input_f3->width, input_f3->height), IPL_DEPTH_32F, 3);
+    fu.SimilarityDegreesImage(input_f3, background_f3, sim_color_f3, 3, colorSpace);	
+
+    float* measureG = (float*) malloc(3*(sizeof(float)));
+    IplImage* integral_choquet_f1 = cvCreateImage(cvSize(input_f1->width, input_f1->height), IPL_DEPTH_32F, 1);
+
+    // 3 color components
+    if(option == 1)
+    {
+      fu.FuzzyMeasureG(0.4, 0.3, 0.3, measureG);
+      fu.getFuzzyIntegralChoquet(sim_texture_f1, sim_color_f3, option, measureG, integral_choquet_f1);
+    }
+
+    // 2 color components + 1 texture component
+    if(option == 2)
+    {
+      fu.FuzzyMeasureG(0.6, 0.3, 0.1, measureG);
+      fu.getFuzzyIntegralChoquet(sim_texture_f1, sim_color_f3, option, measureG, integral_choquet_f1);
+    }
+
+    free(measureG);
+    cv::Mat img_integral_choquet_f1(integral_choquet_f1);
+
+    if(smooth)
+      cv::medianBlur(img_integral_choquet_f1, img_integral_choquet_f1, 3);
+
+    cv::Mat img_foreground_f1(img_input.size(), CV_32F);
+    cv::threshold(img_integral_choquet_f1, img_foreground_f1, threshold, 255, cv::THRESH_BINARY_INV);
+
+    cv::Mat img_foreground_u1(img_input.size(), CV_8U);
+    double minVal = 0., maxVal = 1.;
+    img_foreground_f1.convertTo(img_foreground_u1, CV_8U, 255.0/(maxVal - minVal), -minVal);
+    img_foreground_u1.copyTo(img_output);
+
+    cv::Mat img_background_u3(img_input.size(), CV_8U);
+    //double minVal = 0., maxVal = 1.;
+    img_background_f3.convertTo(img_background_u3, CV_8U, 255.0/(maxVal - minVal), -minVal);
+    img_background_u3.copyTo(img_bgmodel);
+
+    if(showOutput)
+    {
+      cvShowImage("CI LBP Input", lbp_input_f1);
+      cvShowImage("CI LBP Background", lbp_background_f1);
+      cvShowImage("CI Prob FG Mask", integral_choquet_f1);
+
+      cv::imshow("CI BG Model", img_background_f3);
+      cv::imshow("CI FG Mask", img_foreground_u1);
+    }
+
+    if(frameNumber == (framesToLearn + 1))
+      std::cout << "FuzzyChoquetIntegral updating background model by adaptive-selective learning..." << std::endl;
+
+    IplImage* updated_background_f3 = cvCreateImage(cvSize(input_f1->width, input_f1->height), IPL_DEPTH_32F, 3);
+    cvFillImage(updated_background_f3, 0.0);
+    fu.AdaptativeSelectiveBackgroundModelUpdate(input_f3, background_f3, updated_background_f3, integral_choquet_f1, threshold, alphaUpdate);
+    cv::Mat img_updated_background_f3(updated_background_f3);
+    img_updated_background_f3.copyTo(img_background_f3);
+
+    cvReleaseImage(&lbp_input_f1);
+    cvReleaseImage(&lbp_background_f1);
+    cvReleaseImage(&sim_texture_f1);
+    cvReleaseImage(&sim_color_f3);
+    cvReleaseImage(&integral_choquet_f1);
+    cvReleaseImage(&updated_background_f3);
+    
+    delete background_f1;
+    delete background_f3;
+    delete input_f1;
+    delete input_f3;
+  }
+
+  firstTime = false;
+  frameNumber++;
+}
+
+void FuzzyChoquetIntegral::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/FuzzyChoquetIntegral.xml", 0, CV_STORAGE_WRITE);
+  
+  cvWriteInt(fs, "showOutput", showOutput);
+  cvWriteInt(fs, "framesToLearn", framesToLearn);
+  cvWriteReal(fs, "alphaLearn", alphaLearn);
+  cvWriteReal(fs, "alphaUpdate", alphaUpdate);
+  cvWriteInt(fs, "colorSpace", colorSpace);
+  cvWriteInt(fs, "option", option);
+  cvWriteInt(fs, "smooth", smooth);
+  cvWriteReal(fs, "threshold", threshold);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void FuzzyChoquetIntegral::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/FuzzyChoquetIntegral.xml", 0, CV_STORAGE_READ);
+  
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+  framesToLearn = cvReadIntByName(fs, 0, "framesToLearn", 10);
+  alphaLearn = cvReadRealByName(fs, 0, "alphaLearn", 0.1);
+  alphaUpdate = cvReadRealByName(fs, 0, "alphaUpdate", 0.01);
+  colorSpace = cvReadIntByName(fs, 0, "colorSpace", 1);
+  option = cvReadIntByName(fs, 0, "option", 2);
+  smooth = cvReadIntByName(fs, 0, "smooth", true);
+  threshold = cvReadRealByName(fs, 0, "threshold", 0.67);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/tb/FuzzyChoquetIntegral.h b/package_bgs/tb/FuzzyChoquetIntegral.h
new file mode 100644
index 0000000..a52a52d
--- /dev/null
+++ b/package_bgs/tb/FuzzyChoquetIntegral.h
@@ -0,0 +1,55 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+
+#include "FuzzyUtils.h"
+
+class FuzzyChoquetIntegral : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  bool showOutput;
+  
+  int framesToLearn;
+  double alphaLearn;
+  double alphaUpdate;
+  int colorSpace;
+  int option;
+  bool smooth;
+  double threshold;
+
+  FuzzyUtils fu;
+  cv::Mat img_background_f3;
+
+public:
+  FuzzyChoquetIntegral();
+  ~FuzzyChoquetIntegral();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/tb/FuzzySugenoIntegral.cpp b/package_bgs/tb/FuzzySugenoIntegral.cpp
new file mode 100644
index 0000000..34b1c02
--- /dev/null
+++ b/package_bgs/tb/FuzzySugenoIntegral.cpp
@@ -0,0 +1,204 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "FuzzySugenoIntegral.h"
+
+FuzzySugenoIntegral::FuzzySugenoIntegral() : firstTime(true), frameNumber(0), showOutput(true),
+  framesToLearn(10), alphaLearn(0.1), alphaUpdate(0.01), colorSpace(1), option(2), smooth(true), threshold(0.67)
+{
+  std::cout << "FuzzySugenoIntegral()" << std::endl;
+}
+
+FuzzySugenoIntegral::~FuzzySugenoIntegral()
+{
+  std::cout << "~FuzzySugenoIntegral()" << std::endl;
+}
+
+void FuzzySugenoIntegral::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  cv::Mat img_input_f3(img_input.size(), CV_32F);
+  img_input.convertTo(img_input_f3, CV_32F, 1./255.);
+
+  loadConfig();
+
+  if(firstTime)
+  {
+    std::cout << "FuzzySugenoIntegral parameters:" << std::endl;
+      
+    std::string colorSpaceName = "";
+    switch(colorSpace)
+    {
+      case 1: colorSpaceName = "RGB";  break;
+      case 2: colorSpaceName = "OHTA"; break;
+      case 3: colorSpaceName = "HSV";  break;
+      case 4: colorSpaceName = "YCrCb"; break;
+    }
+    std::cout << "Color space: " << colorSpaceName << std::endl;
+
+    if(option == 1)
+      std::cout << "Fuzzing by 3 color components" << std::endl;
+    if(option == 2)
+      std::cout << "Fuzzing by 2 color components + 1 texture component" << std::endl;
+    
+    saveConfig();
+  }
+
+  if(frameNumber <= framesToLearn)
+  {
+    if(frameNumber == 0)
+      std::cout << "FuzzySugenoIntegral initializing background model by adaptive learning..." << std::endl;
+
+    if(img_background_f3.empty())
+      img_input_f3.copyTo(img_background_f3);
+    else
+      img_background_f3 = alphaLearn*img_input_f3 + (1-alphaLearn)*img_background_f3;
+
+    if(showOutput)
+      cv::imshow("SI BG Model", img_background_f3);
+  }
+  else
+  {
+    cv::Mat img_input_f1;
+    cv::cvtColor(img_input_f3, img_input_f1, CV_BGR2GRAY);
+
+    cv::Mat img_background_f1;
+    cv::cvtColor(img_background_f3, img_background_f1, CV_BGR2GRAY);
+
+    IplImage* input_f3 = new IplImage(img_input_f3);
+    IplImage* input_f1 = new IplImage(img_input_f1);
+    IplImage* background_f3 = new IplImage(img_background_f3);
+    IplImage* background_f1 = new IplImage(img_background_f1);
+
+    IplImage* lbp_input_f1 = cvCreateImage(cvSize(input_f1->width, input_f1->height), IPL_DEPTH_32F, 1);
+    cvFillImage(lbp_input_f1, 0.0);
+    fu.LBP(input_f1, lbp_input_f1);
+
+    IplImage* lbp_background_f1 = cvCreateImage(cvSize(background_f1->width, background_f1->height), IPL_DEPTH_32F , 1);
+    cvFillImage(lbp_background_f1, 0.0);
+    fu.LBP(background_f1, lbp_background_f1);
+
+    IplImage* sim_texture_f1 = cvCreateImage(cvSize(input_f1->width, input_f1->height), IPL_DEPTH_32F, 1);
+    fu.SimilarityDegreesImage(lbp_input_f1, lbp_background_f1, sim_texture_f1, 1, colorSpace);
+
+    IplImage* sim_color_f3 = cvCreateImage(cvSize(input_f3->width, input_f3->height), IPL_DEPTH_32F, 3);
+    fu.SimilarityDegreesImage(input_f3, background_f3, sim_color_f3, 3, colorSpace);	
+
+    float* measureG = (float*) malloc(3*(sizeof(float)));
+    IplImage* integral_sugeno_f1 = cvCreateImage(cvSize(input_f1->width, input_f1->height), IPL_DEPTH_32F, 1);
+
+    // 3 color components
+    if(option == 1)
+    {
+      fu.FuzzyMeasureG(0.4, 0.3, 0.3, measureG);
+      fu.getFuzzyIntegralSugeno(sim_texture_f1, sim_color_f3, option, measureG, integral_sugeno_f1);
+    }
+
+    // 2 color components + 1 texture component
+    if(option == 2)
+    {
+      fu.FuzzyMeasureG(0.6, 0.3, 0.1, measureG);
+      fu.getFuzzyIntegralSugeno(sim_texture_f1, sim_color_f3, option, measureG, integral_sugeno_f1);
+    }
+
+    free(measureG);
+    cv::Mat img_integral_sugeno_f1(integral_sugeno_f1);
+
+    if(smooth)
+      cv::medianBlur(img_integral_sugeno_f1, img_integral_sugeno_f1, 3);
+
+    cv::Mat img_foreground_f1(img_input.size(), CV_32F);
+    cv::threshold(img_integral_sugeno_f1, img_foreground_f1, threshold, 255, cv::THRESH_BINARY_INV);
+
+    cv::Mat img_foreground_u1(img_input.size(), CV_8U);
+    double minVal = 0., maxVal = 1.;
+    img_foreground_f1.convertTo(img_foreground_u1, CV_8U, 255.0/(maxVal - minVal), -minVal);
+    img_foreground_u1.copyTo(img_output);
+    
+    cv::Mat img_background_u3(img_input.size(), CV_8U);
+    //double minVal = 0., maxVal = 1.;
+    img_background_f3.convertTo(img_background_u3, CV_8U, 255.0/(maxVal - minVal), -minVal);
+    img_background_u3.copyTo(img_bgmodel);
+
+    if(showOutput)
+    {
+      cvShowImage("SI LBP Input", lbp_input_f1);
+      cvShowImage("SI LBP Background", lbp_background_f1);
+      cvShowImage("SI Prob FG Mask", integral_sugeno_f1);
+
+      cv::imshow("SI BG Model", img_background_f3);
+      cv::imshow("SI FG Mask", img_foreground_u1);
+    }
+
+    if(frameNumber == (framesToLearn + 1))
+      std::cout << "FuzzySugenoIntegral updating background model by adaptive-selective learning..." << std::endl;
+
+    IplImage* updated_background_f3 = cvCreateImage(cvSize(input_f1->width, input_f1->height), IPL_DEPTH_32F, 3);
+    cvFillImage(updated_background_f3, 0.0);
+    fu.AdaptativeSelectiveBackgroundModelUpdate(input_f3, background_f3, updated_background_f3, integral_sugeno_f1, threshold, alphaUpdate);
+    cv::Mat img_updated_background_f3(updated_background_f3);
+    img_updated_background_f3.copyTo(img_background_f3);
+
+    cvReleaseImage(&lbp_input_f1);
+    cvReleaseImage(&lbp_background_f1);
+    cvReleaseImage(&sim_texture_f1);
+    cvReleaseImage(&sim_color_f3);
+    cvReleaseImage(&integral_sugeno_f1);
+    cvReleaseImage(&updated_background_f3);
+    
+    delete background_f1;
+    delete background_f3;
+    delete input_f1;
+    delete input_f3;
+  }
+
+  firstTime = false;
+  frameNumber++;
+}
+
+void FuzzySugenoIntegral::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/FuzzySugenoIntegral.xml", 0, CV_STORAGE_WRITE);
+  
+  cvWriteInt(fs, "showOutput", showOutput);
+  cvWriteInt(fs, "framesToLearn", framesToLearn);
+  cvWriteReal(fs, "alphaLearn", alphaLearn);
+  cvWriteReal(fs, "alphaUpdate", alphaUpdate);
+  cvWriteInt(fs, "colorSpace", colorSpace);
+  cvWriteInt(fs, "option", option);
+  cvWriteInt(fs, "smooth", smooth);
+  cvWriteReal(fs, "threshold", threshold);
+  
+  cvReleaseFileStorage(&fs);
+}
+
+void FuzzySugenoIntegral::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/FuzzySugenoIntegral.xml", 0, CV_STORAGE_READ);
+  
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+  framesToLearn = cvReadIntByName(fs, 0, "framesToLearn", 10);
+  alphaLearn = cvReadRealByName(fs, 0, "alphaLearn", 0.1);
+  alphaUpdate = cvReadRealByName(fs, 0, "alphaUpdate", 0.01);
+  colorSpace = cvReadIntByName(fs, 0, "colorSpace", 1);
+  option = cvReadIntByName(fs, 0, "option", 2);
+  smooth = cvReadIntByName(fs, 0, "smooth", true);
+  threshold = cvReadRealByName(fs, 0, "threshold", 0.67);
+  
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/tb/FuzzySugenoIntegral.h b/package_bgs/tb/FuzzySugenoIntegral.h
new file mode 100644
index 0000000..1144559
--- /dev/null
+++ b/package_bgs/tb/FuzzySugenoIntegral.h
@@ -0,0 +1,55 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+
+#include "FuzzyUtils.h"
+
+class FuzzySugenoIntegral : public IBGS
+{
+private:
+  bool firstTime;
+  long long frameNumber;
+  bool showOutput;
+  
+  int framesToLearn;
+  double alphaLearn;
+  double alphaUpdate;
+  int colorSpace;
+  int option;
+  bool smooth;
+  double threshold;
+
+  FuzzyUtils fu;
+  cv::Mat img_background_f3;
+  
+public:
+  FuzzySugenoIntegral();
+  ~FuzzySugenoIntegral();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/tb/FuzzyUtils.cpp b/package_bgs/tb/FuzzyUtils.cpp
new file mode 100644
index 0000000..84d5a50
--- /dev/null
+++ b/package_bgs/tb/FuzzyUtils.cpp
@@ -0,0 +1,511 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "FuzzyUtils.h"
+
+FuzzyUtils::FuzzyUtils(void){}
+
+FuzzyUtils::~FuzzyUtils(void){}
+
+void FuzzyUtils::LBP(IplImage* InputImage, IplImage* LBPimage)
+{
+  PixelUtils p;
+
+  float* neighberPixel = (float*) malloc(9*sizeof(float));   
+  float* BinaryValue = (float*) malloc(9*sizeof(float));
+  float* CarreExp = (float*) malloc(9*sizeof(float));
+  float* valLBP = (float*) malloc(1*sizeof(float));
+
+  *valLBP = 0;
+
+  int x = 0, y = 0;
+
+  // on implemente les 8 valeurs puissance de 2 qui correspondent aux 8 elem. d'image voisins au elem. d'image central
+  *(CarreExp+0)=1.0;
+  *(CarreExp+1)=2.0;
+  *(CarreExp+2)=4.0;
+  *(CarreExp+3)=8.0;
+  *(CarreExp+4)=0.0;
+  *(CarreExp+5)=16.0;
+  *(CarreExp+6)=32.0;
+  *(CarreExp+7)=64.0;
+  *(CarreExp+8)=128.0;
+
+  //le calcule de LBP
+  //pour les 4 coins
+  /* 1.*/
+  if(x==0 && y==0)
+  {
+    p.getNeighberhoodGrayPixel(InputImage, x,y,neighberPixel);
+    getBinValue(neighberPixel,BinaryValue,4,0);
+    *valLBP=*valLBP+((*(BinaryValue+1))*(*(CarreExp+1))+(*(BinaryValue+2))*(*(CarreExp+2))+(*(BinaryValue+3))*(*(CarreExp+3)))/255.0;
+    p.PutGrayPixel(LBPimage,x,y,*valLBP);	
+  }
+
+  /* 2.*/
+  if(x==0 && y==InputImage->width)
+  {
+    *valLBP=0;
+    p.getNeighberhoodGrayPixel(InputImage, x,y,neighberPixel);
+    getBinValue(neighberPixel,BinaryValue,4,1);
+    *valLBP=*valLBP+((*(BinaryValue))*(*(CarreExp))+(*(BinaryValue+2))*(*(CarreExp+2))+(*(BinaryValue+3))*(*(CarreExp+3)))/255.0;
+    p.PutGrayPixel(LBPimage,x,y,*valLBP);	
+  }
+
+  /* 3.*/
+  if(x==InputImage->height && y==0)
+  {
+    *valLBP=0;
+    p.getNeighberhoodGrayPixel(InputImage, x,y,neighberPixel);
+    getBinValue(neighberPixel,BinaryValue,4,2);
+    *valLBP=*valLBP+((*(BinaryValue))*(*(CarreExp))+(*(BinaryValue+1))*(*(CarreExp+1))+(*(BinaryValue+3))*(*(CarreExp+3)))/255.0;
+    p.PutGrayPixel(LBPimage,x,y,*valLBP);	
+  }
+
+  /* 4.*/
+  if(x==InputImage->height && y==InputImage->width)
+  {
+    *valLBP=0;
+    p.getNeighberhoodGrayPixel(InputImage, x,y,neighberPixel);
+    getBinValue(neighberPixel,BinaryValue,4,3);
+    *valLBP=*valLBP+((*(BinaryValue))*(*(CarreExp))+(*(BinaryValue+1))*(*(CarreExp+1))+(*(BinaryValue+2))*(*(CarreExp+2)))/255.0;
+    p.PutGrayPixel(LBPimage,x,y,*valLBP);	
+  }
+
+  //le calcul de LBP pour la premi�re ligne : L(0)
+  if(x==0 && (y!=0 && y!=InputImage->width))
+  {
+    for(int y = 1; y < InputImage->width-1; y++)
+    {
+      p.getNeighberhoodGrayPixel(InputImage, x,y,neighberPixel);
+      getBinValue(neighberPixel,BinaryValue,6,4);
+      *valLBP=0;
+      *valLBP=*valLBP+((*(BinaryValue))*(*(CarreExp))+(*(BinaryValue+1))*(*(CarreExp+1))+(*(BinaryValue+2))*(*(CarreExp+2))+(*(BinaryValue+3))*(*(CarreExp+3))+(*(BinaryValue+5))*(*(CarreExp+5)))/255.0;
+      p.PutGrayPixel(LBPimage,x,y,*valLBP);
+    }
+  }
+
+  //le calcul de LBP pour la derni�re colonne : C(w)
+  if((x!=0 && x!=InputImage->height) && y==InputImage->width) 
+  {
+    for(int x = 1; x < InputImage->height-1; x++)
+    {
+      p.getNeighberhoodGrayPixel(InputImage, x,y,neighberPixel);
+      getBinValue(neighberPixel,BinaryValue,6,4);
+      *valLBP=0;
+      *valLBP=*valLBP+((*(BinaryValue))*(*(CarreExp))+(*(BinaryValue+1))*(*(CarreExp+1))+(*(BinaryValue+2))*(*(CarreExp+2))+(*(BinaryValue+3))*(*(CarreExp+3))+(*(BinaryValue+5))*(*(CarreExp+5)))/255.0;
+      p.PutGrayPixel(LBPimage,x,y,*valLBP);
+    }
+  }
+
+  //le calcul de LBP pour la derni�re ligne : L(h)
+  if(x==InputImage->height && (y!=0 && y!=InputImage->width))
+  {
+    for(int y = 1; y < InputImage->width-1; y++)
+    {
+      p.getNeighberhoodGrayPixel(InputImage, x,y,neighberPixel);
+      getBinValue(neighberPixel,BinaryValue,6,1);
+      *valLBP=0;
+      *valLBP=*valLBP+((*(BinaryValue))*(*(CarreExp))+(*(BinaryValue+2))*(*(CarreExp+2))+(*(BinaryValue+3))*(*(CarreExp+3))+(*(BinaryValue+4))*(*(CarreExp+4))+(*(BinaryValue+5))*(*(CarreExp+5)))/255.0;
+      p.PutGrayPixel(LBPimage,x,y,*valLBP);
+    }
+  }
+
+  //le calcul de LBP pour la premi�re colonne : C(0)
+  if((x!=0 && x!=InputImage->height) && y==0)
+  {
+    for(int x = 1; x <InputImage->height-1; x++)
+    {
+      p.getNeighberhoodGrayPixel(InputImage, x,y,neighberPixel);
+      getBinValue(neighberPixel,BinaryValue,6,2);
+      *valLBP=0;
+      *valLBP=*valLBP+((*(BinaryValue))*(*(CarreExp+5))+(*(BinaryValue+1))*(*(CarreExp+6))+(*(BinaryValue+3))*(*(CarreExp+3))+(*(BinaryValue+4))*(*(CarreExp))+(*(BinaryValue+5))*(*(CarreExp+1)))/255.0;
+      p.PutGrayPixel(LBPimage,x,y,*valLBP);
+    }
+  }
+
+  //pour le reste des elements d'image
+  for(int y = 1; y < InputImage->height-1; y++)
+  {
+    for(int x = 1; x < InputImage->width-1; x++)
+    {
+      p.getNeighberhoodGrayPixel(InputImage, x,y,neighberPixel);
+      getBinValue(neighberPixel,BinaryValue,9,4);
+      //le calcul de la valeur du LBP pour chaque elem. d'im.
+      *valLBP=0;
+      for(int l = 0; l < 9; l++)
+        *valLBP = *valLBP + ((*(BinaryValue+l)) * (*(CarreExp+l))) / 255.0;
+      //printf("\nvalLBP(%d,%d)=%f",x,y,*valLBP);
+      p.PutGrayPixel(LBPimage,x,y,*valLBP);	
+    }
+  }
+
+  free(neighberPixel);
+  free(BinaryValue);
+  free(CarreExp);
+  free(valLBP);
+}
+
+void FuzzyUtils::getBinValue(float* neighberGrayPixel, float* BinaryValue, int m, int n)
+{
+  // la comparaison entre la valeur d'elem d'image central et les valeurs des elem. d'im. voisins
+  // m = le numero des elements (4, 6 ou 9);
+  // n = la position de l'element central; 
+
+  int h = 0;
+  for(int k = 0; k < m; k++)
+  {
+    if(*(neighberGrayPixel+k) >= *(neighberGrayPixel+n))
+    {
+      *(BinaryValue+h)=1;
+      h++;
+    }
+    else
+    {
+      *(BinaryValue+h)=0;
+      h++;
+    }	
+  }
+}
+
+void FuzzyUtils::SimilarityDegreesImage(IplImage* CurrentImage, IplImage* BGImage, IplImage* DeltaImage, int n, int color_space)
+{
+  PixelUtils p;
+  int i, j;
+
+  if(n == 1)
+  {
+    float* CurrentGrayPixel = (float*) malloc (1*(sizeof(float)));
+    float* BGGrayPixel = (float*) malloc (1*(sizeof(float)));
+    float* DeltaGrayPixel = (float*) malloc (1*(sizeof(float)));
+
+    for(i = 0; i < CurrentImage->width; i++)
+    {
+      for(j = 0; j < CurrentImage->height; j++)
+      {
+        p.GetGrayPixel(CurrentImage,i,j,CurrentGrayPixel);
+        p.GetGrayPixel(BGImage,i,j,BGGrayPixel);
+        RatioPixels(CurrentGrayPixel,BGGrayPixel,DeltaGrayPixel,1);
+        p.PutGrayPixel(DeltaImage,i,j,*DeltaGrayPixel);
+      }
+    }
+
+    free(CurrentGrayPixel);
+    free(BGGrayPixel);
+    free(DeltaGrayPixel);
+  }
+
+  if(n != 1)
+  {   
+    IplImage* ConvertedCurrentImage = cvCreateImage(cvSize(CurrentImage->width, CurrentImage->height), IPL_DEPTH_32F, 3);
+    IplImage* ConvertedBGImage = cvCreateImage(cvSize(CurrentImage->width, CurrentImage->height), IPL_DEPTH_32F, 3);
+
+    float* ConvertedCurrentPixel = (float*) malloc(3*(sizeof(float)));
+    float* ConvertedBGPixel = (float*) malloc(3*(sizeof(float)));
+    float* DeltaConvertedPixel = (float*) malloc(3*(sizeof(float)));
+
+    p.ColorConversion(CurrentImage,ConvertedCurrentImage,color_space);
+    p.ColorConversion(BGImage,ConvertedBGImage,color_space);
+
+    for(i = 0; i < CurrentImage->width; i++)
+    {
+      for(j = 0; j < CurrentImage->height; j++)
+      {
+        p.GetPixel(ConvertedCurrentImage,i,j,ConvertedCurrentPixel);
+        p.GetPixel(ConvertedBGImage,i,j,ConvertedBGPixel);
+        RatioPixels(ConvertedCurrentPixel,ConvertedBGPixel,DeltaConvertedPixel,3);
+        p.PutPixel(DeltaImage,i,j,DeltaConvertedPixel);
+      }
+    }
+
+    free(ConvertedCurrentPixel);
+    free(ConvertedBGPixel);
+    free(DeltaConvertedPixel);
+
+    cvReleaseImage(&ConvertedCurrentImage);
+    cvReleaseImage(&ConvertedBGImage);
+  }
+}
+
+void FuzzyUtils::RatioPixels(float* CurrentPixel, float* BGPixel, float* DeltaPixel, int n)
+{
+  if(n == 1)
+  {
+    if(*CurrentPixel < *BGPixel)
+      *DeltaPixel = *CurrentPixel / *BGPixel;
+
+    if(*CurrentPixel > *BGPixel)
+      *DeltaPixel = *BGPixel / *CurrentPixel;
+
+    if(*CurrentPixel == *BGPixel)
+      *DeltaPixel = 1.0;
+  }
+
+  if(n == 3)
+    for(int i = 0; i < 3; i++)
+    {
+      if(*(CurrentPixel+i) < *(BGPixel+i))
+        *(DeltaPixel+i) = *(CurrentPixel+i) / *(BGPixel+i);
+
+      if(*(CurrentPixel+i) > *(BGPixel+i))
+        *(DeltaPixel+i) = *(BGPixel+i) / *(CurrentPixel+i);
+
+      if(*(CurrentPixel+i) == *(BGPixel+i))
+        *(DeltaPixel+i) = 1.0;			
+    }
+}
+
+void FuzzyUtils::getFuzzyIntegralSugeno(IplImage* H, IplImage* Delta, int n, float *MeasureG, IplImage* OutputImage)
+{
+  // MeasureG : est un vecteur contenant 3 mesure g (g1,g2,g3) tel que : g1+g2+g3=1
+  // n : =2 cad aggreger les 2 images "H" et "Delta" 
+  //	   =1 cad aggreger uniquement les valeurs des composantes couleurs de l'image "Delta"
+
+  PixelUtils p;
+
+  float* HTexturePixel = (float*) malloc(1*sizeof(float));   
+  float* DeltaOhtaPixel = (float*) malloc(3*(sizeof(float)));
+  int *Indice = (int*) malloc(3*(sizeof(int)));
+  float *HI = (float*) malloc(3*(sizeof(float)));
+  float *Integral = (float*) malloc(3*(sizeof(float)));
+  float* X = (float*) malloc(1*sizeof(float));
+  float* XiXj = (float*) malloc(1*sizeof(float));
+  float IntegralFlou;
+
+  *Indice = 0;
+  *(Indice+1) = 1;
+  *(Indice+2) = 2;
+  *X = 1.0;
+
+  for(int i = 0; i < H->width; i++)
+  {
+    for(int j = 0; j < H->height; j++)
+    {	
+      p.GetGrayPixel(H,i,j,HTexturePixel);
+      p.GetPixel(Delta,i,j,DeltaOhtaPixel);
+
+      *(HI+0) = *(HTexturePixel+0);
+      *(HI+1) = *(DeltaOhtaPixel+0);
+      *(HI+2) = *(DeltaOhtaPixel+1);
+
+      Trier(HI,3,Indice);
+
+      *XiXj = *(MeasureG + (*(Indice+1))) + (*(MeasureG + (*(Indice+2))));			
+
+      *(Integral+0) = min((HI + (*(Indice+0))), X);
+      *(Integral+1) = min((HI + (*(Indice+1))), XiXj);
+      *(Integral+2) = min((HI + (*(Indice+2))), ((MeasureG+(*(Indice+2)))));
+
+      IntegralFlou = max(Integral,3);
+      p.PutGrayPixel(OutputImage,i,j,IntegralFlou);
+    }
+  }
+
+  free(HTexturePixel);
+  free(DeltaOhtaPixel);
+  free(Indice);
+  free(HI);
+  free(X);
+  free(XiXj);
+  free(Integral);
+}
+
+void FuzzyUtils::getFuzzyIntegralChoquet(IplImage* H, IplImage* Delta, int n, float *MeasureG, IplImage* OutputImage)
+{
+  // MeasureG : est un vecteur contenant 3 mesure g (g1,g2,g3) tel que : g1+g2+g3=1
+  // n : =2 cad aggreger les 2 images "H" et "Delta" 
+  //	   =1 cad aggreger uniquement les valeurs des composantes couleurs de l'image "Delta"
+
+  PixelUtils p;
+
+  float* HTexturePixel = (float*) malloc(1*sizeof(float));   
+  float* DeltaOhtaPixel = (float*) malloc(3*(sizeof(float)));
+  int *Indice = (int*) malloc(3*(sizeof(int)));
+  float *HI = (float*) malloc(3*(sizeof(float)));
+  float *Integral = (float*) malloc(3*(sizeof(float)));
+  float* X = (float*) malloc(1*sizeof(float));
+  float* XiXj = (float*) malloc(1*sizeof(float));
+  float* IntegralFlou1 = (float*) malloc(1*sizeof(float));
+  float IntegralFlou;
+
+  *Indice = 0;
+  *(Indice+1) = 1;
+  *(Indice+2) = 2;
+  *X = 1.0;
+
+  for(int i = 0; i < Delta->width; i++)
+  {
+    for(int j = 0; j < Delta->height; j++)
+    {
+      if(n == 2)
+      {
+        p.GetGrayPixel(H,i,j,HTexturePixel);
+        p.GetPixel(Delta,i,j,DeltaOhtaPixel);
+
+        *(HI+0) = *(HTexturePixel+0);
+        *(HI+1) = *(DeltaOhtaPixel+0);
+        *(HI+2) = *(DeltaOhtaPixel+1);
+      }
+
+      if(n==1)
+      {
+        //remplir HI par les valeurs des 3 composantes couleurs uniquement
+        p.GetPixel(Delta,i,j,DeltaOhtaPixel);
+
+        *(HI+0) = *(DeltaOhtaPixel+0);
+        //*(HI+0) = *(DeltaOhtaPixel+2);
+        *(HI+1) = *(DeltaOhtaPixel+1);
+        *(HI+2) = *(DeltaOhtaPixel+2);
+      }
+
+      Trier(HI,3,Indice);
+      *XiXj = *(MeasureG + (*(Indice+1))) + (*(MeasureG + (*(Indice+2))));
+
+      *(Integral+0) = *(HI+(*(Indice+0)))* (*X-*XiXj);
+      *(Integral+1) = *(HI+(*(Indice+1)))* (*XiXj-*(MeasureG+(*(Indice+2))));
+      *(Integral+2) = *(HI+(*(Indice+2)))* (*(MeasureG+(*(Indice+2))));
+
+      IntegralFlou = *(Integral+0) + *(Integral+1) + *(Integral+2);
+      p.PutGrayPixel(OutputImage,i,j,IntegralFlou);
+    }
+  }
+
+  free(HTexturePixel);
+  free(DeltaOhtaPixel);
+  free(Indice);
+  free(HI);
+  free(X);
+  free(XiXj);
+  free(Integral);
+}
+
+void FuzzyUtils::FuzzyMeasureG(float g1, float g2, float g3, float *G)
+{
+  *(G+0) = g1;
+  *(G+1) = g2;
+  *(G+2) = g3;
+}
+
+void FuzzyUtils::Trier(float* g,int n,int* index)
+{
+  // Cette fonction trie un vecteur g par ordre croissant et 
+  // sort egalement l'indice des elements selon le trie dans le vecteur "index" suppos� initialis� par des valeurs de 1 a n
+
+  float t;	
+  int r,a,b;
+
+  for(a = 1; a <= n; a++)
+  {
+    for(b = n-1; b >= a; b--)
+      if(*(g + b-1) < (*(g + b))) 
+      {
+        // ordre croissant des �lements
+        t = *(g + b-1);
+        *(g + b-1) = *(g + b);
+        *(g + b) = t;
+
+        // ordre des indices des �lements du vecteur g
+        r = *(index + b-1);
+        *(index + b-1) = *(index + b);
+        *(index + b) = r;
+      }		
+  }
+}
+
+float FuzzyUtils::min(float *a,float *b)
+{
+  float min = 0;
+
+  if(*a >= (*b)) 
+    min = *b;
+  else
+    min = *a;
+
+  return min;
+}
+
+float FuzzyUtils::max(float* g , int n)
+{
+  float max = 0;
+
+  for(int i = 0; i < n; i++)
+  {
+    if(*(g+i) >= max)
+      max = *(g+i);
+  }
+  
+  return max;
+}
+
+void FuzzyUtils::gDeDeux(float* a, float* b, float* lambda)
+{
+  float* c = (float*) malloc(1*sizeof(float));
+  *c = *a + (*b) + (*lambda) * (*a) * (*b);
+}
+
+void FuzzyUtils::getLambda(float* g)
+{
+  float a,b;
+  float* lambda = (float*) malloc(1*sizeof(float)); 
+
+  a = (*(g+0) * (*(g+1)) + (*(g+1)) * (*(g+2)) + (*(g+0)) * (*(g+2)));
+  *lambda = -(*(g+0) * (*(g+1)) + (*(g+1)) * (*(g+2)) + (*(g+0)) * (*(g+2))) / (*(g+0) * (*(g+1)) * (*(g+2)));
+  b = (*(g+0) * (*(g+1)) * (*(g+2)));
+  
+  //printf("\na:%f",a);
+  //printf("\nb:%f",b);
+  //printf("\nlambda:%f", *lambda);
+
+  free(lambda);
+}
+
+void FuzzyUtils::AdaptativeSelectiveBackgroundModelUpdate(IplImage* CurrentImage, IplImage* BGImage, IplImage* OutputImage, IplImage* Integral, float seuil, float alpha)
+{
+  PixelUtils p;
+
+  float beta = 0.0;
+  float* CurentImagePixel = (float*) malloc(3*sizeof(float));
+  float* BGImagePixel = (float*) malloc(3*sizeof(float));
+  float* OutputImagePixel = (float*) malloc(3*sizeof(float));
+  float* IntegralImagePixel = (float*) malloc(1*sizeof(float));
+  float *Maximum = (float*) malloc(1*sizeof(float));
+  float *Minimum = (float*) malloc(1*sizeof(float));
+
+  p.ForegroundMaximum(Integral, Maximum, 1);
+  p.ForegroundMinimum(Integral, Minimum, 1);
+
+  for(int i = 0; i < CurrentImage->width; i++)
+  {
+    for(int j = 0; j < CurrentImage->height; j++)
+    {
+      p.GetPixel(CurrentImage, i, j, CurentImagePixel);
+      p.GetPixel(BGImage, i, j, BGImagePixel);
+      p.GetGrayPixel(Integral, i, j, IntegralImagePixel);
+      
+      beta = 1 - ((*IntegralImagePixel) - ((*Minimum / (*Minimum - *Maximum)) * (*IntegralImagePixel) - (*Minimum * (*Maximum) / (*Minimum - *Maximum))));
+      
+      for(int k = 0; k < 3; k++)
+        *(OutputImagePixel + k) = beta * (*(BGImagePixel + k)) + (1 - beta) * (alpha * (*(CurentImagePixel+k)) + (1-alpha) * (*(BGImagePixel+k)));
+      
+      p.PutPixel(OutputImage, i, j, OutputImagePixel);
+    }
+  }
+
+  free(CurentImagePixel);
+  free(BGImagePixel);
+  free(OutputImagePixel);
+  free(IntegralImagePixel);
+}
diff --git a/package_bgs/tb/FuzzyUtils.h b/package_bgs/tb/FuzzyUtils.h
new file mode 100644
index 0000000..43fc9ad
--- /dev/null
+++ b/package_bgs/tb/FuzzyUtils.h
@@ -0,0 +1,54 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+/*
+Code provided by Thierry BOUWMANS
+
+Maitre de Conf�rences
+Laboratoire MIA
+Universit� de La Rochelle
+17000 La Rochelle
+France
+tbouwman@univ-lr.fr
+
+http://sites.google.com/site/thierrybouwmans/
+*/
+#include "PixelUtils.h"
+
+class FuzzyUtils
+{
+public:
+  FuzzyUtils(void);
+  ~FuzzyUtils(void);
+
+  void LBP(IplImage* InputImage, IplImage* LBP);
+  void getBinValue(float* neighberGrayPixel, float* BinaryValue, int m, int n);
+
+  void SimilarityDegreesImage(IplImage* CurrentImage, IplImage* BGImage, IplImage* DeltaImage, int n, int color_space);
+  void RatioPixels(float* CurrentPixel, float* BGPixel, float* DeltaPixel, int n);
+
+  void getFuzzyIntegralSugeno(IplImage* H, IplImage* Delta, int n, float *MeasureG, IplImage* OutputImage);
+  void getFuzzyIntegralChoquet(IplImage* H, IplImage* Delta, int n, float *MeasureG, IplImage* OutputImage);
+  void FuzzyMeasureG(float g1, float g2, float g3, float *G);
+  void Trier(float* g, int n, int* index);		
+  float min(float *a, float *b);
+  float max(float *g, int n);
+  void gDeDeux(float* a, float* b, float* lambda);
+  void getLambda(float* g);
+
+  void AdaptativeSelectiveBackgroundModelUpdate(IplImage* CurrentImage, IplImage* BGImage, IplImage* OutputImage, IplImage* Integral, float seuil, float alpha);
+};
diff --git a/package_bgs/tb/MRF.cpp b/package_bgs/tb/MRF.cpp
new file mode 100644
index 0000000..1dbc69e
--- /dev/null
+++ b/package_bgs/tb/MRF.cpp
@@ -0,0 +1,339 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "MRF.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+//init the basic MRF
+MRF::MRF()
+{
+  in_image = out_image = 0;
+  width = height = 0;
+
+  //////////////////////////////////////////////////////////////////////////
+  no_regions = 2;
+  beta = 2.8;// 0.9;
+  t = 10;//0.05
+
+  //////////////////////////////////////////////////////////////////////////
+  K = 0;
+  E = E_old = 0;
+
+  //////////////////////////////////////////////////////////////////////////
+  T0 = 4;
+  c = 0.98;
+  T = 0;
+
+  //////////////////////////////////////////////////////////////////////////
+  alpha = 0.1;
+
+  //////////////////////////////////////////////////////////////////////////
+  classes = 0;
+  in_image_data = 0;
+  local_evidence = 0;
+}
+
+/************************************************************************/
+/* the Markov Random Field with time constraints for T2FGMM    */
+/************************************************************************/
+
+MRF_TC::MRF_TC()
+{
+  beta_time = 0.9;
+}
+
+MRF_TC::~MRF_TC()
+{
+  delete []classes;
+  delete []old_labeling;
+  delete []in_image_data;
+  delete []local_evidence;
+}
+
+double MRF_TC::TimeEnergy2(int i, int j, int label)
+{
+  double energy = 0.0;
+  
+  if(old_labeling[i][j] == (label*255))
+    energy -= beta_time;
+  else
+    energy += beta_time;
+
+  if(i != height-1) // south
+  {
+    if(label*255 == old_labeling[i+1][j])
+      energy -= beta_time;
+    else
+      energy += beta_time;
+
+    if((j != width-1) && (label*255 == old_labeling[i+1][j+1]))
+      energy -= beta_time;
+    else
+      energy += beta_time;
+    
+    if((j != 0) && (label*255 == old_labeling[i+1][j-1]))
+      energy -= beta_time;
+    else
+      energy += beta_time;
+  }
+
+  if(j != width-1) // east
+  {
+    if(label*255 == old_labeling[i][j+1])
+      energy -= beta_time;
+    else
+      energy += beta_time;
+  }
+
+  if(i != 0) // nord
+  {
+    if(label*255 == old_labeling[i-1][j])
+      energy -= beta_time;
+    else
+      energy += beta_time;
+
+    if((j != width-1) && (label*255 == old_labeling[i-1][j+1]))
+      energy -= beta_time;
+    else
+      energy += beta_time;
+    
+    if((j != 0) && (label*255 == old_labeling[i-1][j-1]))
+      energy -= beta_time;
+    else
+      energy += beta_time;
+  }
+
+  if(j != 0) // west
+  {
+    if(label*255 == old_labeling[i][j-1])
+      energy -= beta_time;
+    else
+      energy += beta_time;
+  }
+
+  return energy;
+}
+
+double MRF_TC::Doubleton2(int i, int j, int label)
+{
+  double energy = 0.0;
+
+  if(i != height-1) // south
+  {
+    if(label == classes[i+1][j])
+      energy -= beta;
+    else
+      energy += beta;
+
+    if((j != width-1) && (label == classes[i+1][j+1]))
+      energy -= beta;
+    else
+      energy += beta;
+    
+    if((j != 0) && (label == classes[i+1][j-1]))
+      energy -= beta;
+    else
+      energy += beta;
+  }
+
+  if(j != width-1) // east
+  {
+    if(label == classes[i][j+1])
+      energy -= beta;
+    else
+      energy += beta;
+  }
+
+  if(i != 0) // nord
+  {
+    if(label == classes[i-1][j])
+      energy -= beta;
+    else
+      energy += beta;
+
+    if((j != width-1) && (label == classes[i-1][j+1]))
+      energy -= beta;
+    else
+      energy += beta;
+
+    if((j != 0) && (label == classes[i-1][j-1]))
+      energy -= beta;
+    else
+      energy += beta;
+  }
+
+  if(j != 0) // west
+  {
+    if(label == classes[i][j-1])
+      energy -= beta;
+    else
+      energy += beta;
+  }
+
+  return energy;
+}
+
+void MRF_TC::OnIterationOver2(void)
+{
+  CreateOutput2();
+  //cout<<"\rI="<<K<<", ";
+}
+
+void MRF_TC::Build_Classes_OldLabeling_InImage_LocalEnergy()
+{
+  int i;
+  classes = new int* [height];
+  old_labeling = new int *[height];
+  in_image_data = new int* [height];
+  local_evidence = new float* [height];
+
+  for(i = 0; i < height; ++i)
+  {
+    classes[i] = new int[width];
+    old_labeling[i] = new int[width];
+    in_image_data[i] = new int[width];
+    local_evidence[i] = new float[width*2];
+  }
+}
+
+void MRF_TC::InitEvidence2(GMM *gmm, HMM *hmm, IplImage *labeling)
+{
+  int i, j;
+
+  background = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
+  cvCopyImage(background2,background.Ptr());
+
+  unsigned char *in_data = (unsigned char *)(in_image->imageData);
+  unsigned char *labeling_data = (unsigned char *)(labeling->imageData);
+
+  for(i = 0; i < height; ++i)
+  {
+    for(j = 0; j < width; ++j)
+    {
+      in_image_data[i][j] = in_data[(i*in_image->widthStep)+j];
+      old_labeling[i][j] = labeling_data[i*width+j];
+      
+      if(in_image_data[i][j] == 255)
+        classes[i][j] = 1;
+      else
+        classes[i][j] = 0;
+    }
+
+    float variance;
+    float muR;
+    float muG;
+    float muB;
+
+    float pixel;
+
+    int modes = 3;
+    float mu;	
+
+    for(i = 0; i < height; ++i)
+    {
+      for(j = 0; j < width; ++j)
+      {
+        variance = gmm[(i*width+j) * modes+0].variance;
+        muR = gmm[(i*width+j) * modes+0].muR;
+        muG = gmm[(i*width+j) * modes+0].muG;
+        muB = gmm[(i*width+j) * modes+0].muB;
+
+        mu = (muR + muG + muB)/3;
+
+        pixel = (background(i,j,0) + background(i,j,1) + background(i,j,2))/3;
+
+        if(variance == 0) variance = 1;
+
+        local_evidence[i][j*2+0] = pow((pixel-mu),2)/2/variance;
+
+        if(pixel >= mu)
+          local_evidence[i][j*2+1] = pow((pixel - mu - 2.5*sqrt(variance)),2)/2/variance;
+        else
+          local_evidence[i][j*2+1] = pow((pixel - mu + 2.5*sqrt(variance)),2)/2/variance;
+      }
+    }
+  }
+}
+
+void MRF_TC::CreateOutput2()
+{
+  int i, j;
+  unsigned char *out_data;
+
+  out_data = (unsigned char *) out_image->imageData;
+
+  // create output image
+  for (i = 0; i < height; ++i)
+    for(j = 0; j < width; ++j)
+      out_data[(i*width) + j] = (unsigned char)((classes[i][j])*255);
+}
+
+//calculate the whole energy
+double MRF_TC::CalculateEnergy2()
+{
+  double sum = 0.0;
+  int i, j, k;
+  // !FAIL!
+  for(i = 0; i < height; ++i)
+  {
+    for(j = 0; j < width; ++j)
+    {
+      k = classes[i][j];
+      sum = sum + local_evidence[i][j*2+k] + Doubleton2(i,j,k) + TimeEnergy2(i, j, k);//min the value
+    }
+  }
+  //sum = 0.1;
+  return sum;
+}
+
+// local energy
+double MRF_TC::LocalEnergy2(int i, int j, int label)
+{
+  return local_evidence[i][j*2+label] + Doubleton2(i,j,label) + TimeEnergy2(i,j,label);
+}
+
+void MRF_TC::ICM2()
+{
+  int i, j;
+  int r;
+  //double summa_deltaE = 0;
+  double localenergy0 = 0, localenergy1 = 0;
+
+  K = 0;
+  //E_old = CalculateEnergy2();
+
+  do
+  {
+    for(i = 0; i < height; ++i)
+      for(j = 0; j < width; ++j)
+      {
+        localenergy0 = LocalEnergy2(i,j,0);
+        localenergy1 = LocalEnergy2(i,j,1);
+        
+        if(localenergy0 < localenergy1)
+          classes[i][j] = 0;
+        else
+          classes[i][j] = 1;
+      }
+
+      //E = CalculateEnergy2();
+      //summa_deltaE = fabs(E_old-E);
+      //E_old = E;
+      ++K;
+      OnIterationOver2();
+  }while(K < 2);
+}
diff --git a/package_bgs/tb/MRF.h b/package_bgs/tb/MRF.h
new file mode 100644
index 0000000..457bbbc
--- /dev/null
+++ b/package_bgs/tb/MRF.h
@@ -0,0 +1,107 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef MRF_H
+#define MRF_H
+
+#include "T2FMRF.h"
+
+namespace Algorithms
+{
+  namespace BackgroundSubtraction
+  {
+    // base class
+    class MRF
+    {
+    public:
+      IplImage *in_image, *out_image;
+      //image's width and height
+      int width, height;
+
+    public:
+      MRF();
+
+    protected:
+
+      //////////////////////////////////////////////////////////////////////////
+      //the number of labeling
+      int no_regions;
+      //potential of Space  Constraint
+      double beta;
+      //terminal condition when (deltaE < t)
+      double t;
+
+      //////////////////////////////////////////////////////////////////////////
+      //for gibbs
+      double T0;
+      //current temperature
+      double T;
+      double c;
+
+      //////////////////////////////////////////////////////////////////////////
+      // alpha value for MMD
+      double alpha;		            
+
+      //////////////////////////////////////////////////////////////////////////
+      //current global energy
+      double E;
+      //old global energy
+      double E_old;
+      //number of iteration
+      int K;
+
+      //////////////////////////////////////////////////////////////////////////
+      //labeling image 
+      int **classes;
+      //input image
+      int **in_image_data;
+      //evidence
+      float ** local_evidence;
+    };
+
+    /************************************************************************/
+    /* the Markov Random Field with time constraints for T2FGMM   */
+    /************************************************************************/
+    class MRF_TC: public MRF
+    {
+    private:
+      double beta_time;
+
+    public:
+      IplImage *background2;
+      RgbImage background;
+      int **old_labeling;
+
+    public:
+      MRF_TC();
+      ~MRF_TC();
+      double TimeEnergy2(int i, int j, int label);
+      void OnIterationOver2(void);
+      void Build_Classes_OldLabeling_InImage_LocalEnergy();
+      void InitEvidence2(GMM *gmm, HMM *hmm, IplImage *labeling);
+      void CreateOutput2();
+      double CalculateEnergy2();
+      double LocalEnergy2(int i, int j, int label);
+      double Doubleton2(int i, int j, int label);
+
+      void Gibbs2();
+      void ICM2();
+      void Metropolis2(bool mmd);
+    };
+  };
+};
+
+#endif
\ No newline at end of file
diff --git a/package_bgs/tb/PerformanceUtils.cpp b/package_bgs/tb/PerformanceUtils.cpp
new file mode 100644
index 0000000..30f89b7
--- /dev/null
+++ b/package_bgs/tb/PerformanceUtils.cpp
@@ -0,0 +1,521 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "PerformanceUtils.h"
+
+PerformanceUtils::PerformanceUtils(void){}
+
+PerformanceUtils::~PerformanceUtils(void){}
+
+float PerformanceUtils::NrPixels(IplImage *image)
+{
+  return (float) (image->width * image->height);
+}
+
+float PerformanceUtils::NrAllDetectedPixNotNULL(IplImage *image, IplImage *ground_truth)
+{
+  //Nombre de tous les pixels non nuls dans Groundthruth et dans image
+  float Union12 = 0.0;
+
+  unsigned char *pixelGT = (unsigned char*) malloc(1*sizeof(unsigned char));
+  unsigned char *pixelI = (unsigned char*) malloc(1*sizeof(unsigned char));
+
+  PixelUtils p;
+
+  for(int y = 0; y < image->height; y++) 
+  {
+    for(int x = 0; x < image->width; x++) 
+    { 
+      p.GetGrayPixel(ground_truth,x,y,pixelGT); 
+      p.GetGrayPixel(image,x,y,pixelI);
+
+      if((pixelGT[0] != 0) || (pixelI[0] != 0))	
+        Union12++;
+    }
+  }
+
+  free(pixelGT);
+  free(pixelI);
+
+  return Union12;	
+}
+
+float PerformanceUtils::NrTruePositives(IplImage *image, IplImage *ground_truth, bool debug)
+{
+  float nTP = 0.0;
+
+  unsigned char *pixelGT = (unsigned char*) malloc(1*sizeof(unsigned char));
+  unsigned char *pixelI = (unsigned char*) malloc(1*sizeof(unsigned char));
+
+  IplImage *TPimage = 0;
+
+  if(debug)
+  {
+    TPimage = cvCreateImage(cvSize(image->width,image->height),image->depth,image->nChannels);
+    cvFillImage(TPimage,0.0);
+  }
+
+  PixelUtils p;
+
+  for(int y = 0; y < image->height; y++) 
+  {
+    for(int x = 0; x < image->width; x++) 
+    { 
+      p.GetGrayPixel(ground_truth,x,y,pixelGT); 
+      p.GetGrayPixel(image,x,y,pixelI);
+
+      if((pixelGT[0] != 0) && (pixelI[0] != 0))	
+      {
+        if(debug)
+          p.PutGrayPixel(TPimage,x,y,*pixelI);
+
+        nTP++;
+      }
+    }
+  }
+
+  if(debug)
+  {
+    cvNamedWindow("TPImage", 0);
+    cvShowImage("TPImage", TPimage);
+    //std::cout << "True Positives: " << nTP << std::endl;
+    //<< " press ENTER to continue" << std::endl;
+    //cvWaitKey(0);
+    cvReleaseImage(&TPimage);
+  }
+
+  free(pixelGT);
+  free(pixelI);
+
+  return nTP;	
+}
+
+float PerformanceUtils::NrTrueNegatives(IplImage* image, IplImage* ground_truth, bool debug)
+{
+  float nTN = 0.0;
+
+  unsigned char *pixelGT = (unsigned char *)malloc(1*sizeof(unsigned char));
+  unsigned char *pixelI = (unsigned char *)malloc(1*sizeof(unsigned char));
+
+  IplImage *TNimage = 0;
+
+  if(debug)
+  {
+    TNimage = cvCreateImage(cvSize(image->width,image->height),image->depth,image->nChannels);
+    cvFillImage(TNimage, 0.0);
+  }
+
+  PixelUtils p;
+
+  for(int y = 0; y < image->height; y++) 
+  {
+    for(int x = 0; x < image->width; x++) 
+    {
+      p.GetGrayPixel(ground_truth,x,y,pixelGT);                
+      p.GetGrayPixel(image,x,y,pixelI);
+
+      if((pixelGT[0] == 0) && (pixelI[0] == 0.0))
+      {
+        *pixelI = 255;
+
+        if(debug)
+          p.PutGrayPixel(TNimage,x,y,*pixelI);
+
+        nTN++;
+      }				
+    }
+  }
+
+  if(debug)
+  {
+    cvNamedWindow("TNImage", 0);
+    cvShowImage("TNImage", TNimage);
+    //std::cout << "True Negatives: " << nTN << std::endl;
+    //<< " press ENTER to continue" << std::endl;
+    //cvWaitKey(0);
+    cvReleaseImage(&TNimage);
+  }
+
+  free(pixelGT);
+  free(pixelI);
+
+  return nTN;
+}
+
+float PerformanceUtils::NrFalsePositives(IplImage *image, IplImage *ground_truth,bool debug)
+{
+  float nFP = 0.0;
+
+  unsigned char *pixelGT = (unsigned char*) malloc(1*sizeof(unsigned char));
+  unsigned char *pixelI = (unsigned char*) malloc(1*sizeof(unsigned char));
+
+  IplImage *FPimage = 0;
+
+  if(debug)
+  {
+    FPimage = cvCreateImage(cvSize(image->width,image->height),image->depth,image->nChannels);
+    cvFillImage(FPimage, 0.0);
+  }
+
+  PixelUtils p;
+
+  for(int y = 0; y < image->height; y++) 
+  {
+    for(int x = 0; x < image->width; x++) 
+    {
+      p.GetGrayPixel(ground_truth,x,y,pixelGT);                
+      p.GetGrayPixel(image,x,y,pixelI);
+
+      if((pixelGT[0] == 0) && (pixelI[0] != 0))
+      {
+        if(debug)
+          p.PutGrayPixel(FPimage,x,y,*pixelI);
+
+        nFP++;
+      }
+    }
+  }
+
+  if(debug)
+  {
+    cvNamedWindow("FPImage", 0);
+    cvShowImage("FPImage", FPimage);
+    //std::cout << "False Positives: " << nFP << std::endl;
+    //<< " press ENTER to continue" << std::endl;
+    //cvWaitKey(0);
+    cvReleaseImage(&FPimage);
+  }
+
+  free(pixelGT);
+  free(pixelI);
+
+  return nFP;	
+}
+
+float PerformanceUtils::NrFalseNegatives(IplImage * image, IplImage *ground_truth, bool debug)
+{
+  float nFN = 0.0;
+
+  unsigned char *pixelGT = (unsigned char*) malloc(1*sizeof(unsigned char));
+  unsigned char *pixelI = (unsigned char*) malloc(1*sizeof(unsigned char));
+
+  IplImage *FNimage = 0;
+
+  if(debug)
+  {
+    FNimage = cvCreateImage(cvSize(image->width,image->height),image->depth,image->nChannels);
+    cvFillImage(FNimage, 0.0);
+  }
+
+  PixelUtils p;
+
+  for(int y = 0; y < image->height; y++) 
+  {
+    for(int x = 0; x < image->width; x++) 
+    {
+      p.GetGrayPixel(ground_truth,x,y,pixelGT);
+      p.GetGrayPixel(image,x,y,pixelI);
+
+      if((pixelGT[0] != 0) && (pixelI[0] == 0))
+      {
+        if(debug)
+          p.PutGrayPixel(FNimage,x,y,*pixelGT);
+
+        nFN++;
+      }
+    }
+  }
+
+  if(debug)
+  {
+    cvNamedWindow("FNImage", 0);
+    cvShowImage("FNImage", FNimage);
+    //std::cout << "False Negatives: " << nFN << std::endl;
+    //<< " press ENTER to continue" << std::endl;
+    //cvWaitKey(0);
+    cvReleaseImage(&FNimage);
+  }
+
+  free(pixelGT);
+  free(pixelI);
+
+  return nFN;	
+}
+
+float PerformanceUtils::SimilarityMeasure(IplImage *image, IplImage *ground_truth, bool debug)
+{
+  cv::Mat img_input(image,true);
+  cv::Mat img_ref(ground_truth,true);
+
+  int rn = cv::countNonZero(img_ref);
+  cv::Mat i;
+  cv::Mat u;
+
+  if(rn > 0)
+  {
+    i = img_input & img_ref;
+    u = img_input | img_ref;
+  }
+  else
+  {
+    i = (~img_input) & (~img_ref);
+    u = (~img_input) | (~img_ref);
+  }
+
+  int in = cv::countNonZero(i);
+  int un = cv::countNonZero(u);
+    
+  double s = (((double)in) / ((double)un));
+  
+  if(debug)
+  {
+    cv::imshow("A^B", i);
+    cv::imshow("AvB", u);
+
+    //std::cout << "Similarity Measure: " << s  << std::endl;
+    
+    //<< " press ENTER to continue" << std::endl;
+    //cv::waitKey(0);
+  }
+
+  return s;
+}
+
+void PerformanceUtils::ImageROC(IplImage *image, IplImage* ground_truth, bool saveResults, char* filename)
+{
+  unsigned char *pixelGT = (unsigned char*) malloc(1*sizeof(unsigned char));
+  unsigned char *pixelI = (unsigned char*) malloc(1*sizeof(unsigned char));
+
+  IplImage *ROCimage = cvCreateImage(cvSize(image->width,image->height),image->depth,image->nChannels);
+  cvFillImage(ROCimage, 0.0);
+
+  PixelUtils p;
+
+  for(int y = 0; y < image->height; y++) 
+  {
+    for(int x = 0; x < image->width; x++) 
+    {
+      p.GetGrayPixel(ground_truth,x,y,pixelGT);                
+      p.GetGrayPixel(image,x,y,pixelI);
+
+      if((pixelGT[0] != 0) && (pixelI[0] != 0)) // TP
+      {
+        *pixelI = 30;
+        p.PutGrayPixel(ROCimage,x,y,*pixelI);
+      }
+
+      if((pixelGT[0] == 0) && (pixelI[0] == 0.0)) // TN
+      {
+        *pixelI = 0;
+        p.PutGrayPixel(ROCimage,x,y,*pixelI);
+      }	
+
+      if((pixelGT[0] == 0) && (pixelI[0] != 0)) // FP
+      {
+        *pixelI = 255;
+        p.PutGrayPixel(ROCimage,x,y,*pixelI);
+      }
+
+      if((pixelGT[0] != 0) && (pixelI[0] == 0)) // FN
+      {
+        *pixelI = 100;
+        p.PutGrayPixel(ROCimage,x,y,*pixelI);
+      }
+    }
+  }
+
+  cvNamedWindow("ROC image", 0);
+  cvShowImage("ROC image", ROCimage);
+
+  if(saveResults)
+  {
+    unsigned char *pixelOI = (unsigned char*) malloc(1*sizeof(unsigned char));
+    unsigned char *pixelROC = (unsigned char*) malloc(1*sizeof(unsigned char));
+
+    float** freq;
+    float nTP = 0.0;
+    float nTN = 0.0;
+    float nFP = 0.0;
+    float nFN = 0.0;
+
+    freq = (float**) malloc(256*(sizeof(float*)));
+    for(int i = 0; i < 256; i++)
+      freq[i] = (float*) malloc(7 * (sizeof(float)));
+
+    for(int i = 0; i < 256; i++)
+      for(int j = 0; j < 6; j++) 
+        freq[i][j] = 0.0;
+
+    for(int y = 0; y < image->height; y++)
+    {
+      for(int x = 0; x < image->width; x++) 
+      {
+        for(int i = 0; i < 256; i++)
+        {
+          p.GetGrayPixel(image,x,y,pixelOI);                
+          p.GetGrayPixel(ROCimage,x,y,pixelROC);
+
+          if((pixelOI[0] == i) && (pixelROC[0] == 30.0)) // TP
+          {
+            nTP++;
+            freq[i][0] = nTP;
+            break;
+          }
+
+          if((pixelOI[0] == i) && (pixelROC[0] == 0.0)) // TN
+          {
+            nTN++;
+            freq[i][1] = nTN;
+            break;
+          }
+
+          if((pixelOI[0] == i) && (pixelROC[0] == 255.0)) // FP
+          {
+            nFP++;
+            freq[i][2] = nFP;
+            break;
+          }
+
+          if((pixelOI[0] == i) && (pixelROC[0] == 100)) // FN
+          {
+            nFN++;
+            freq[i][3] = nFN;
+            break;
+          }
+        }
+      }
+    }
+
+    //freq[i][0] = TP
+    //freq[i][1] = TN
+    //freq[i][2] = FP
+    //freq[i][3] = FN
+    //freq[i][4] = FNR
+    //freq[i][5] = FPR
+
+    std::ofstream f(filename);
+
+    if(!f.is_open())
+      std::cout << "Failed to open file " << filename << " for writing!" << std::endl;
+    else
+    {
+      f << "  I     TP     TN     FP     FN    FPR      FNR      DR   \n" << std::endl;
+      
+      for(int i = 0; i < 256; i++)
+      {
+        //printf("%4d - TP:%5.0f, TN:%5.0f, FP:%5.0f, FN:%5.0f,", i, freq[i][0], freq[i][1], freq[i][2], freq[i][3]);
+
+        if((freq[i][3] + freq[i][0] != 0.0) && (freq[i][2] + freq[i][1] != 0.0))
+        {
+          freq[i][4] = freq[i][3] / (freq[i][3] + freq[i][0]);  // FNR = FN / (TP + FN);
+          freq[i][5] = freq[i][2] / (freq[i][2] + freq[i][1]);	// FPR = FP / (FP + TN);
+          freq[i][6] = freq[i][0] / (freq[i][0] + freq[i][3]);	// DR = TP / (TP+FN);
+
+          //printf(" FPR:%1.5f, FNR:%1.5f, D:%1.5f\n", freq[i][5], freq[i][4], freq[i][6]);
+          ////fprintf(f," %4d     %1.6f     %1.6f\n",i,freq[i][5],freq[i][4]);
+          ////fprintf(f,"  %1.6f     %1.6f\n",freq[i][5],freq[i][4]);
+          char line[255];
+          sprintf(line,"%3d %6.0f %6.0f %6.0f %6.0f %1.6f %1.6f %1.6f\n", 
+            i, freq[i][0], freq[i][1], freq[i][2], freq[i][3], freq[i][5], freq[i][4], freq[i][6]);
+          f << line;
+        }
+        //else
+          //printf("\n");
+      }
+
+      std::cout << "Results saved in " << filename << std::endl;
+      f.close();
+    }
+
+    free(freq);
+    free(pixelOI);
+    free(pixelROC);
+  }
+
+  //std::cout << "press ENTER to continue" << std::endl;
+  //cvWaitKey(0);
+  cvReleaseImage(&ROCimage);
+
+  free(pixelGT);
+  free(pixelI);
+}
+
+void PerformanceUtils::PerformanceEvaluation(IplImage *image, IplImage *ground_truth, bool saveResults, char* filename, bool debug)
+{
+  float N = 0;
+  N = NrPixels(image);
+
+  float U = 0;
+  U = NrAllDetectedPixNotNULL(image, ground_truth);
+  
+  float TP = 0;
+  TP = NrTruePositives(image, ground_truth, debug);
+  
+  float TN = 0;
+  TN = NrTrueNegatives(image, ground_truth, debug);
+  
+  float FP = 0;
+  FP = NrFalsePositives(image, ground_truth, debug);
+  
+  float FN = 0;
+  FN = NrFalseNegatives(image, ground_truth, debug);
+  
+  float DetectionRate = TP / (TP + FN);
+  float Precision = TP / (TP + FP);
+  float Fmeasure = (2 * DetectionRate * Precision) / (DetectionRate + Precision);
+
+  float Accuracy = (TN + TP) / N;
+  float FalseNegativeRate = FN / (TP + FN);
+  
+  float FalsePositiveRate = FP / (FP + TN);
+  float TruePositiveRate = TP / (TP + FN);
+  
+  float SM = 0;
+  SM = SimilarityMeasure(image, ground_truth, debug);
+
+  std::stringstream sstm;
+  sstm << "N = " << N << std::endl;
+  sstm << "U = " << U << std::endl;
+  sstm << "TP = " << TP << std::endl;
+  sstm << "TN = " << TN << std::endl;
+  sstm << "FP = " << FP << std::endl;
+  sstm << "FN = " << FN << std::endl;
+  sstm << "DetectionRate     = " << DetectionRate << std::endl;
+  sstm << "Precision         = " << Precision << std::endl;
+  sstm << "Fmeasure          = " << Fmeasure << std::endl;
+  sstm << "Accuracy          = " << Accuracy << std::endl;
+  sstm << "FalseNegativeRate = " << FalseNegativeRate << std::endl;
+  sstm << "FalsePositiveRate = " << FalsePositiveRate << std::endl;
+  sstm << "TruePositiveRate  = " << TruePositiveRate << std::endl;
+  sstm << "SimilarityMeasure = " << SM << std::endl;
+
+  std::string results = sstm.str();
+  std::cout << results;
+
+  if(saveResults)
+  {
+    std::ofstream f(filename);
+
+    if(!f.is_open())
+      std::cout << "Failed to open file " << filename << " for writing!" << std::endl;
+    else
+    {
+      f << results;
+      std::cout << "Results saved in " << filename << std::endl;
+      f.close();
+    }
+  }
+}
\ No newline at end of file
diff --git a/package_bgs/tb/PerformanceUtils.h b/package_bgs/tb/PerformanceUtils.h
new file mode 100644
index 0000000..c608264
--- /dev/null
+++ b/package_bgs/tb/PerformanceUtils.h
@@ -0,0 +1,54 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+/*
+Code provided by Thierry BOUWMANS
+
+Maitre de Conf�rences
+Laboratoire MIA
+Universit� de La Rochelle
+17000 La Rochelle
+France
+tbouwman@univ-lr.fr
+
+http://sites.google.com/site/thierrybouwmans/
+*/
+#include <stdio.h>
+#include <fstream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "PixelUtils.h"
+
+class PerformanceUtils
+{
+public:
+  PerformanceUtils(void);
+  ~PerformanceUtils(void);
+
+  float NrPixels(IplImage *image);
+  float NrAllDetectedPixNotNULL(IplImage *image, IplImage *ground_truth);
+  float NrTruePositives(IplImage *image, IplImage *ground_truth, bool debug = false);
+  float NrTrueNegatives(IplImage *image, IplImage *ground_truth, bool debug = false);
+  float NrFalsePositives(IplImage *image, IplImage *ground_truth, bool debug = false);
+  float NrFalseNegatives(IplImage *image, IplImage *ground_truth, bool debug = false);
+  float SimilarityMeasure(IplImage *image, IplImage *ground_truth, bool debug = false);
+
+  void ImageROC(IplImage *image, IplImage* ground_truth, bool saveResults = false, char* filename = "");
+  void PerformanceEvaluation(IplImage *image, IplImage *ground_truth, bool saveResults = false, char* filename = "", bool debug = false);
+};
+
diff --git a/package_bgs/tb/PixelUtils.cpp b/package_bgs/tb/PixelUtils.cpp
new file mode 100644
index 0000000..bc61cc5
--- /dev/null
+++ b/package_bgs/tb/PixelUtils.cpp
@@ -0,0 +1,351 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "PixelUtils.h"
+
+PixelUtils::PixelUtils(void){}
+PixelUtils::~PixelUtils(void){}
+
+void PixelUtils::ColorConversion(IplImage* RGBImage, IplImage* ConvertedImage, int color_space)
+{
+  // Space Color RGB - Nothing to do!
+  if(color_space == 1)
+    cvCopyImage(RGBImage, ConvertedImage);
+
+  // Space Color Ohta
+  if(color_space == 2) 
+    cvttoOTHA(RGBImage, ConvertedImage);
+
+  // Space Color HSV - V Intensity - (H,S) Chromaticity
+  if(color_space == 3)
+    cvCvtColor(RGBImage, ConvertedImage, CV_BGR2HSV);
+
+  // Space Color YCrCb - Y Intensity - (Cr,Cb) Chromaticity
+  if(color_space == 4)
+    cvCvtColor(RGBImage,ConvertedImage,CV_BGR2YCrCb);
+}
+
+void PixelUtils::cvttoOTHA(IplImage* RGBImage, IplImage* OthaImage)
+{
+  float* OhtaPixel = (float*) malloc(3*(sizeof(float)));
+  float* RGBPixel = (float*) malloc(3*(sizeof(float)));
+
+  for(int i = 0; i < RGBImage->width; i++)
+  {
+    for(int j = 0;j < RGBImage->height; j++)
+    {
+      GetPixel(RGBImage, i, j, RGBPixel);
+
+      // I1 = (R + G + B) / 3
+      *OhtaPixel = (*(RGBPixel) + (*(RGBPixel + 1)) + (*(RGBPixel + 2))) / 3.0;
+
+      // I2 = (R - B) / 2
+      *(OhtaPixel+1) = (*RGBPixel - (*(RGBPixel + 2))) / 2.0;
+
+      // I3 = (2G - R - B) / 4
+      *(OhtaPixel+2) = (2 * (*(RGBPixel + 1)) - (*RGBPixel) - (*(RGBPixel + 2))) / 4.0;		
+      
+      PutPixel(OthaImage, i, j, OhtaPixel);
+    }
+  }
+
+  free(OhtaPixel);
+  free(RGBPixel);
+}
+
+void PixelUtils::PostProcessing(IplImage *InputImage)
+{
+  IplImage *ResultImage = cvCreateImage(cvSize(InputImage->width, InputImage->height), IPL_DEPTH_32F, 3);
+
+  cvErode(InputImage, ResultImage, NULL, 1);
+  cvDilate(ResultImage, InputImage, NULL, 0);
+
+  cvReleaseImage(&ResultImage);
+}	
+
+void PixelUtils::GetPixel(IplImage *image, int m, int n, unsigned char *pixelcourant)
+{	
+  for(int k = 0; k < 3; k++)
+    pixelcourant[k] = ((unsigned char*)(image->imageData + image->widthStep*n))[m*3 + k];
+}
+
+void PixelUtils::GetGrayPixel(IplImage *image, int m, int n, unsigned char *pixelcourant)
+{	
+  *pixelcourant = ((unsigned char*)(image->imageData + image->widthStep*n))[m];
+}
+
+void PixelUtils::PutPixel(IplImage *image,int p,int q,unsigned char *pixelcourant)
+{	
+  for(int r = 0; r < 3; r++)
+    ((unsigned char*)(image->imageData + image->widthStep*q))[p*3 + r] = pixelcourant[r];
+}
+
+void PixelUtils::PutGrayPixel(IplImage *image, int p, int q, unsigned char pixelcourant)
+{	
+  ((unsigned char*)(image->imageData + image->widthStep*q))[p] = pixelcourant; 
+}
+
+void PixelUtils::GetPixel(IplImage *image, int m, int n, float *pixelcourant)
+{	
+  for(int k = 0; k < 3; k++)
+    pixelcourant[k] = ((float*)(image->imageData + image->widthStep*n))[m*3 + k];
+}
+
+void PixelUtils::GetGrayPixel(IplImage *image, int m, int n, float *pixelcourant)
+{	
+  *pixelcourant = ((float*)(image->imageData + image->widthStep*n))[m];
+}
+
+void PixelUtils::PutPixel(IplImage *image, int p, int q, float *pixelcourant)
+{	
+  for(int r = 0; r < 3; r++)
+    ((float*)(image->imageData + image->widthStep*q))[p*3 + r] = pixelcourant[r];
+}
+
+void PixelUtils::PutGrayPixel(IplImage *image,int p,int q,float pixelcourant)
+{	
+  ((float*)(image->imageData + image->widthStep*q))[p] = pixelcourant;
+}
+
+void PixelUtils::getNeighberhoodGrayPixel(IplImage* InputImage, int x, int y, float* neighberPixel)
+{
+  int i,j,k;
+  
+  float* pixelCourant = (float*) malloc(1*(sizeof(float)));
+  
+  //le calcul de voisinage pour les 4 coins;
+  /* 1.*/
+  if(x==0 && y==0)
+  {
+    k = 0;
+    for(i = x; i < x+2; i++)
+      for(j = y; j < y+2; j++)
+      {  
+        GetGrayPixel(InputImage,i,j,pixelCourant);
+        *(neighberPixel+k) = *pixelCourant;
+        k++;
+      }
+  }
+
+  /* 2.*/
+  if(x==0 && y==InputImage->width)
+  {
+    k = 0;
+    for(i = x; i < x+2; i++)
+      for(j = y-1; j < y+1; j++)
+      {  
+        GetGrayPixel(InputImage,i,j,pixelCourant);
+        *(neighberPixel+k) = *pixelCourant;
+        k++;
+      }
+  }
+
+  /* 3.*/
+  if(x==InputImage->height && y==0)
+  {
+    k = 0;
+    for(i = x-1; i < x+1; i++)
+      for(j = y; j < y+2; j++)
+      {  
+        GetGrayPixel(InputImage,i,j,pixelCourant);
+        *(neighberPixel+k) = *pixelCourant;
+        k++;
+      }
+  }	
+
+  /* 4.*/
+  if(x==InputImage->height && y==InputImage->width)
+  {
+    k = 0;
+    for(i = x-1; i <x+1; i++)
+      for(j = y-1; j < y+1; j++)
+      {  
+        GetGrayPixel(InputImage,i,j,pixelCourant);
+        *(neighberPixel+k) = *pixelCourant;
+        k++;
+      }
+  }	
+
+  // Voisinage de la premiere ligne : L(0) 
+  if(x==0 && (y!=0 && y!=InputImage->width)) 
+  {
+    k = 0;
+    for(i = x+1; i >= x; i--)
+      for(j = y-1; j < y+2; j++)
+      {
+        GetGrayPixel(InputImage,i,j,pixelCourant);
+        *(neighberPixel+k) = *pixelCourant;
+        k++;
+      }
+  }
+
+  // Voisinage de la derni�re colonne : C(w)
+  if((x!=0 && x!=InputImage->height) && y==InputImage->width) 
+  {
+    k = 0;
+    for(i = x+1; i > x-2; i--)
+      for(j = y-1; j < y+1; j++)
+      {  
+        GetGrayPixel(InputImage,i,j,pixelCourant);
+        *(neighberPixel+k) = *pixelCourant;
+        k++;
+      }
+  }
+
+  // Voisinage de la derni�re ligne : L(h)    
+  if(x==InputImage->height && (y!=0 && y!=InputImage->width)) 
+  {
+    k = 0;
+    for(i = x; i > x-2; i--)
+      for(j = y-1; j < y+2; j++)
+      {  
+        GetGrayPixel(InputImage,i,j,pixelCourant);
+        *(neighberPixel+k) = *pixelCourant;
+        k++;
+      }
+  }
+
+  // Voisinage de la premiere colonne : C(0) 
+  if((x!=0 && x!=InputImage->height) && y==0) 
+  {
+    k = 0;
+    for(i = x-1; i < x+2; i++)
+      for(j = y; j < y+2; j++)
+      {  
+        GetGrayPixel(InputImage,i,j,pixelCourant);
+        *(neighberPixel+k) = *pixelCourant;
+        k++;
+      }
+  }  
+
+  //le calcul du voisinage pour le reste des elementes d'image
+  if((x!=0 && x!=InputImage->height)&&(y!=0 && y!=InputImage->width))
+  {
+    k = 0; 
+    for(i = x+1;i > x-2; i--)
+      for(j = y-1; j < y+2; j++)
+      {  
+        GetGrayPixel(InputImage,i,j,pixelCourant);
+        *(neighberPixel+k) = *pixelCourant;
+        k++;
+      }
+  }
+
+  free(pixelCourant);
+}
+
+void PixelUtils::ForegroundMinimum(IplImage *Foreground, float *Minimum, int n)
+{
+  int i,j,k;
+  float *pixelcourant;
+  
+  pixelcourant = (float *) malloc(n*sizeof(float));
+  
+  for(k = 0; k < n; k++)
+    *(Minimum + k) = 255;
+
+  for(i = 0; i < Foreground->width; i++)
+    for(j = 0; j < Foreground->height; j++)
+    {
+      if(n == 3)
+      {
+        GetPixel(Foreground,i,j,pixelcourant);
+
+        for(k = 0; k < n; k++)
+          if(*(pixelcourant + k) < *(Minimum + k))
+            *(Minimum + k) = *(pixelcourant + k);
+      }
+
+      if(n==1)
+      {
+        GetGrayPixel(Foreground,i,j,pixelcourant);
+
+        if(*pixelcourant < *Minimum)
+          *Minimum = *pixelcourant;
+      }
+    }
+
+    free(pixelcourant);
+}
+
+void PixelUtils::ForegroundMaximum(IplImage *Foreground, float *Maximum, int n)
+{
+  int i,j,k;
+  float *pixelcourant;
+  
+  pixelcourant = (float *) malloc(n*sizeof(float));
+  
+  for(k = 0; k < n; k++)
+    *(Maximum + k) = 0;
+  
+  for(i = 0; i < Foreground->width; i++)
+    for(j = 0; j < Foreground->height; j++)
+    {
+      if(n == 3)
+      {
+        GetPixel(Foreground,i,j,pixelcourant);
+
+        for(k = 0; k < n; k++)
+          if(*(pixelcourant + k) > *(Maximum + k))
+            *(Maximum + k) = *(pixelcourant + k);
+      }
+
+      if(n == 1)
+      {
+        GetGrayPixel(Foreground,i,j,pixelcourant);
+
+        if(*pixelcourant > *Maximum)
+          *Maximum = *pixelcourant;
+      }
+    }
+
+    free(pixelcourant);
+}
+
+void PixelUtils::ComplementaryAlphaImageCreation(IplImage *AlphaImage, IplImage *ComplementaryAlphaImage, int n)
+{
+  int i,j,k;
+  float *pixelcourant, *pixelcourant1;
+  
+  pixelcourant = (float *) malloc(n * sizeof(float));
+  pixelcourant1 = (float *) malloc(n * sizeof(float));
+
+  for(i = 0; i < AlphaImage->width; i++)
+    for(j = 0; j < AlphaImage->height; j++)
+    {
+      if(n == 1)
+      {
+        GetGrayPixel(AlphaImage,i,j,pixelcourant);
+        *pixelcourant1 = 1 - *(pixelcourant);
+        PutGrayPixel(ComplementaryAlphaImage,i,j,*pixelcourant1);
+      }
+
+      if(n == 3)
+      {
+        GetPixel(AlphaImage,i,j,pixelcourant);
+        for(k = 0; k < 3; k++)
+        {
+          *pixelcourant1 = 1.0 - *(pixelcourant);
+          *(pixelcourant1+1) = 1.0 - *(pixelcourant+1);
+          *(pixelcourant1+2) = 1.0 - *(pixelcourant+2);
+        }
+        PutPixel(ComplementaryAlphaImage,i,j,pixelcourant1);
+      }
+    }
+
+    free(pixelcourant);
+    free(pixelcourant1);
+}
diff --git a/package_bgs/tb/PixelUtils.h b/package_bgs/tb/PixelUtils.h
new file mode 100644
index 0000000..efbfdd9
--- /dev/null
+++ b/package_bgs/tb/PixelUtils.h
@@ -0,0 +1,61 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+/*
+Code provided by Thierry BOUWMANS
+
+Maitre de Conf�rences
+Laboratoire MIA
+Universit� de La Rochelle
+17000 La Rochelle
+France
+tbouwman@univ-lr.fr
+
+http://sites.google.com/site/thierrybouwmans/
+*/
+#include <stdio.h>
+#include <cv.h>
+#include <highgui.h>
+
+class PixelUtils
+{
+public:
+  PixelUtils(void);
+  ~PixelUtils(void);
+
+  void ColorConversion(IplImage* RGBImage, IplImage* ConvertedImage, int color_space);
+  void cvttoOTHA(IplImage* RGBImage, IplImage* OthaImage);
+  
+  void PostProcessing(IplImage *InputImage);
+  
+  void GetPixel(IplImage *image, int m, int n, unsigned char *pixelcourant);
+  void GetGrayPixel(IplImage *image, int m, int n, unsigned char *pixelcourant);
+
+  void PutPixel(IplImage *image, int p, int q, unsigned char *pixelcourant);
+  void PutGrayPixel(IplImage *image, int p, int q, unsigned char pixelcourant);
+
+  void GetPixel(IplImage *image, int m, int n, float *pixelcourant);
+  void GetGrayPixel(IplImage *image, int m, int n, float *pixelcourant);
+
+  void PutPixel(IplImage *image, int p, int q, float *pixelcourant);
+  void PutGrayPixel(IplImage *image, int p, int q, float pixelcourant);
+
+  void getNeighberhoodGrayPixel(IplImage* InputImage, int x, int y, float* neighberPixel);
+  void ForegroundMaximum(IplImage *Foreground, float *Maximum, int n);
+  void ForegroundMinimum(IplImage *Foreground, float *Minimum, int n);
+  void ComplementaryAlphaImageCreation(IplImage *AlphaImage, IplImage *ComplementaryAlphaImage, int n);
+};
\ No newline at end of file
diff --git a/package_bgs/tb/T2FGMM.cpp b/package_bgs/tb/T2FGMM.cpp
new file mode 100644
index 0000000..70d5749
--- /dev/null
+++ b/package_bgs/tb/T2FGMM.cpp
@@ -0,0 +1,337 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* T2FGMM.cpp
+* 
+* Purpose: Implementation of the T2 Fuzzy Gaussian Mixture Models (T2GMMs) 
+* "Modeling of Dynamic Backgrounds by Type-2 Fuzzy Gaussians Mixture Models"
+* Author: Fida El Baf, Thierry Bouwmans, September 2008.
+
+******************************************************************************/
+
+#include "T2FGMM.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+int compareT2FGMM(const void* _gmm1, const void* _gmm2)
+{
+  GMM gmm1 = *(GMM*)_gmm1;
+  GMM gmm2 = *(GMM*)_gmm2;
+
+  if(gmm1.significants < gmm2.significants)
+    return 1;
+  else if(gmm1.significants == gmm2.significants)
+    return 0;
+  else
+    return -1;
+}
+
+T2FGMM::T2FGMM()
+{
+  m_modes = NULL;
+}
+
+T2FGMM::~T2FGMM()
+{
+  if(m_modes != NULL) 
+    delete[] m_modes;
+}
+
+void T2FGMM::Initalize(const BgsParams& param)
+{
+  m_params = (T2FGMMParams&) param;
+
+  // Tbf - the threshold
+  m_bg_threshold = 0.75f;	// 1-cf from the paper 
+
+  // Tgenerate - the threshold
+  m_variance = 36.0f;		// sigma for the new mode
+
+  // GMM for each pixel
+  m_modes = new GMM[m_params.Size()*m_params.MaxModes()];
+
+  // used modes per pixel
+  m_modes_per_pixel = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 1);
+
+  m_background = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 3);
+
+  // Factor control for the T2FGMM-UM [0,3]
+  //km = (float) 1.5;
+  km = (float) m_params.KM();
+
+  // Factor control for the T2FGMM-UV [0.3,1]
+  //kv = (float) 0.6;
+  kv = (float) m_params.KV();
+}
+
+RgbImage* T2FGMM::Background()
+{
+  return &m_background;
+}
+
+void T2FGMM::InitModel(const RgbImage& data)
+{
+  m_modes_per_pixel.Clear();
+
+  for(unsigned int i = 0; i < m_params.Size()*m_params.MaxModes(); ++i)
+  {
+    m_modes[i].weight = 0;
+    m_modes[i].variance = 0;
+    m_modes[i].muR = 0;
+    m_modes[i].muG = 0;
+    m_modes[i].muB = 0;
+    m_modes[i].significants = 0;
+  }
+}
+
+void T2FGMM::Update(int frame_num, const RgbImage& data,  const BwImage& update_mask)
+{
+  // it doesn't make sense to have conditional updates in the GMM framework
+}
+
+void T2FGMM::SubtractPixel(long posPixel, const RgbPixel& pixel, unsigned char& numModes, 
+                           unsigned char& low_threshold, unsigned char& high_threshold)
+{
+  // calculate distances to the modes (+ sort???)
+  // here we need to go in descending order!!!
+  long pos;
+  bool bFitsPDF = false;
+  bool bBackgroundLow = false;
+  bool bBackgroundHigh = false;
+
+  float fOneMinAlpha = 1 - m_params.Alpha();
+  float totalWeight = 0.0f;
+
+  // calculate number of Gaussians to include in the background model
+  int backgroundGaussians = 0;
+  double sum = 0.0;
+  for(int i = 0; i < numModes; ++i)
+  {
+    if(sum < m_bg_threshold)
+    {
+      backgroundGaussians++;
+      sum += m_modes[posPixel+i].weight;
+    }
+    else
+      break;
+  }
+
+  // update all distributions and check for match with current pixel
+  for(int iModes = 0; iModes < numModes; iModes++)
+  {
+    pos = posPixel + iModes;
+    float weight = m_modes[pos].weight;
+
+    // fit not found yet
+    if (!bFitsPDF)
+    {
+      //check if it belongs to some of the modes
+      //calculate distance
+      float var = m_modes[pos].variance;
+      float muR = m_modes[pos].muR;
+      float muG = m_modes[pos].muG;
+      float muB = m_modes[pos].muB;
+
+      //float km = 2;
+      //float kv = 0.9;
+
+      float dR = fabs(muR - pixel(0));
+      float dG = fabs(muG - pixel(1));
+      float dB = fabs(muB - pixel(2));
+
+      // calculate the squared distance
+      float HR;
+      float HG;
+      float HB;
+
+      // T2FGMM-UM
+      if(m_params.Type() == TYPE_T2FGMM_UM)
+      {
+        if((pixel(0)<muR-km*var)|| (pixel(0)>muR+km*var))
+          HR=2*km*dR/var;
+        else
+          HR=dR*dR/(2*var*var)+km*dR/var+km*km/2;
+
+        if((pixel(1)<muG-km*var)|| (pixel(1)>muG+km*var))
+          HG=2*km*dG/var;
+        else
+          HG=dG*dG/(2*var*var)+km*dG/var+km*km/2;
+
+        if((pixel(2)<muB-km*var)|| (pixel(2)>muB+km*var))
+          HB=2*km*dB/var;
+        else
+          HB=dB*dB/(2*var*var)+km*dB/var+km*km/2;
+      }
+
+      // T2FGMM-UV
+      if(m_params.Type() == TYPE_T2FGMM_UV)
+      {
+        HR = (1/(kv*kv)-kv*kv) * (pixel(0)-muR) * (pixel(0)-muR)/(2*var);
+        HG = (1/(kv*kv)-kv*kv) * (pixel(1)-muG) * (pixel(1)-muG)/(2*var);
+        HB = (1/(kv*kv)-kv*kv) * (pixel(2)-muB) * (pixel(2)-muB)/(2*var);
+      }
+      
+      // calculate the squared distance
+      float dist = (HR*HR + HG*HG + HB*HB);
+
+      if(dist < m_params.HighThreshold()*var && iModes < backgroundGaussians)
+        bBackgroundHigh = true;
+
+      // a match occurs when the pixel is within sqrt(fTg) standard deviations of the distribution
+      if(dist < m_params.LowThreshold()*var)
+      {
+        bFitsPDF = true;
+
+        // check if this Gaussian is part of the background model
+        if(iModes < backgroundGaussians) 
+          bBackgroundLow = true;
+
+        //update distribution
+        float k = m_params.Alpha() / weight;
+        weight = fOneMinAlpha*weight + m_params.Alpha();
+        m_modes[pos].weight = weight;
+        m_modes[pos].muR = muR - k*(dR);
+        m_modes[pos].muG = muG - k*(dG);
+        m_modes[pos].muB = muB - k*(dB);
+
+        //limit the variance
+        float sigmanew = var + k*(dist-var);
+        m_modes[pos].variance = sigmanew < 4 ? 4 : sigmanew > 5*m_variance ? 5*m_variance : sigmanew;
+        m_modes[pos].significants = m_modes[pos].weight / sqrt(m_modes[pos].variance);
+      }
+      else
+      {
+        weight = fOneMinAlpha*weight;
+        if(weight < 0.0)
+        {
+          weight=0.0;
+          numModes--;
+        }
+
+        m_modes[pos].weight = weight;
+        m_modes[pos].significants = m_modes[pos].weight / sqrt(m_modes[pos].variance);
+      }
+    }
+    else
+    {
+      weight = fOneMinAlpha*weight;
+      if(weight < 0.0)
+      {
+        weight=0.0;
+        numModes--;
+      }
+      m_modes[pos].weight = weight;
+      m_modes[pos].significants = m_modes[pos].weight / sqrt(m_modes[pos].variance);
+    }
+
+    totalWeight += weight;
+  }
+
+  // renormalize weights so they add to one
+  double invTotalWeight = 1.0 / totalWeight;
+  for(int iLocal = 0; iLocal < numModes; iLocal++)
+  {
+    m_modes[posPixel + iLocal].weight *= (float)invTotalWeight;
+    m_modes[posPixel + iLocal].significants = m_modes[posPixel + iLocal].weight 
+      / sqrt(m_modes[posPixel + iLocal].variance);
+  }
+
+  // Sort significance values so they are in desending order. 
+  qsort(&m_modes[posPixel],  numModes, sizeof(GMM), compareT2FGMM);
+
+  // make new mode if needed and exit
+  if(!bFitsPDF)
+  {
+    if(numModes < m_params.MaxModes())
+      numModes++;
+    //else
+      // the weakest mode will be replaced
+    
+    pos = posPixel + numModes-1;
+
+    m_modes[pos].muR = pixel.ch[0];
+    m_modes[pos].muG = pixel.ch[1];
+    m_modes[pos].muB = pixel.ch[2];
+    m_modes[pos].variance = m_variance;
+    m_modes[pos].significants = 0;			// will be set below
+
+    if (numModes == 1)
+      m_modes[pos].weight = 1;
+    else
+      m_modes[pos].weight = m_params.Alpha();
+
+    //renormalize weights
+    int iLocal;
+    float sum = 0.0;
+    for(iLocal = 0; iLocal < numModes; iLocal++)
+      sum += m_modes[posPixel+ iLocal].weight;
+    
+    double invSum = 1.0/sum;
+    for(iLocal = 0; iLocal < numModes; iLocal++)
+    {
+      m_modes[posPixel + iLocal].weight *= (float)invSum;
+      m_modes[posPixel + iLocal].significants = m_modes[posPixel + iLocal].weight / sqrt(m_modes[posPixel + iLocal].variance);
+    }
+  }
+
+  // Sort significance values so they are in desending order. 
+  qsort(&(m_modes[posPixel]), numModes, sizeof(GMM), compareT2FGMM);
+
+  if(bBackgroundLow)
+    low_threshold = BACKGROUND;
+  else
+    low_threshold = FOREGROUND;
+  
+  if(bBackgroundHigh)
+    high_threshold = BACKGROUND;
+  else
+    high_threshold = FOREGROUND;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Input:
+//  data - a pointer to the data of a RGB image of the same size
+//Output:
+//  output - a pointer to the data of a gray value image of the same size 
+//					(the memory should already be reserved) 
+//					values: 255-foreground, 125-shadow, 0-background
+///////////////////////////////////////////////////////////////////////////////
+void T2FGMM::Subtract(int frame_num, const RgbImage& data, BwImage& low_threshold_mask, BwImage& high_threshold_mask)
+{
+  unsigned char low_threshold, high_threshold;
+  long posPixel;
+
+  // update each pixel of the image
+  for(unsigned int r = 0; r < m_params.Height(); ++r)
+  {
+    for(unsigned int c = 0; c < m_params.Width(); ++c)
+    {		
+      // update model + background subtract
+      posPixel = (r*m_params.Width() + c) * m_params.MaxModes();
+
+      SubtractPixel(posPixel, data(r,c), m_modes_per_pixel(r,c), low_threshold, high_threshold);
+
+      low_threshold_mask(r,c) = low_threshold;
+      high_threshold_mask(r,c) = high_threshold;
+
+      m_background(r,c,0) = (unsigned char) m_modes[posPixel].muR;
+      m_background(r,c,1) = (unsigned char) m_modes[posPixel].muG;
+      m_background(r,c,2) = (unsigned char) m_modes[posPixel].muB;
+    }
+  }
+}
diff --git a/package_bgs/tb/T2FGMM.h b/package_bgs/tb/T2FGMM.h
new file mode 100644
index 0000000..a698e5a
--- /dev/null
+++ b/package_bgs/tb/T2FGMM.h
@@ -0,0 +1,135 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* T2FGMM.h
+*
+* Purpose: Implementation of the T2 Fuzzy Gaussian Mixture Models (T2GMMs) 
+* "Modeling of Dynamic Backgrounds by Type-2 Fuzzy Gaussians Mixture Models"
+* Author: Fida El Baf, Thierry Bouwmans, September 2008
+*
+* This code is based on code by Z. Zivkovic's written for his enhanced GMM
+* background subtraction algorithm: 
+*
+* Zivkovic's code can be obtained at: www.zoranz.net
+******************************************************************************/
+
+#ifndef T2F_GMM_
+#define T2F_GMM_
+
+#include "../dp/Bgs.h"
+#include "../dp/GrimsonGMM.h"
+
+namespace Algorithms
+{
+  namespace BackgroundSubtraction
+  {
+    const int TYPE_T2FGMM_UM = 0;
+    const int TYPE_T2FGMM_UV = 1;
+
+    // --- User adjustable parameters used by the T2F GMM BGS algorithm ---
+    class T2FGMMParams : public BgsParams
+    {
+    public:
+      float &LowThreshold() { return m_low_threshold; }
+      float &HighThreshold() { return m_high_threshold; }
+
+      float &Alpha() { return m_alpha; }
+      int &MaxModes() { return m_max_modes; }
+      int &Type() { return m_type; }
+      float &KM() { return m_km; }
+      float &KV() { return m_kv; }
+
+    private:
+      // Threshold on the squared dist. to decide when a sample is close to an existing 
+      // components. If it is not close to any a new component will be generated. 
+      // Smaller threshold values lead to more generated components and higher threshold values 
+      // lead to a small number of components but they can grow too large.
+      //
+      // It is usual easiest to think of these thresholds as being the number of variances away
+      // from the mean of a pixel before it is considered to be from the foreground.
+      float m_low_threshold;
+      float m_high_threshold;
+
+      // alpha - speed of update - if the time interval you want to average over is T
+      // set alpha=1/T. 
+      float m_alpha;
+
+      // Maximum number of modes (Gaussian components) that will be used per pixel
+      int m_max_modes;
+
+      // T2FGMM_UM / T2FGMM_UV
+      int m_type;
+
+      // Factor control for the T2FGMM-UM
+      float m_km;
+
+      // Factor control for the T2FGMM-UV
+      float m_kv;
+    };
+
+    // --- T2FGMM BGS algorithm ---
+    class T2FGMM : public Bgs
+    {
+    public:
+      T2FGMM();
+      ~T2FGMM();
+
+      void Initalize(const BgsParams& param);
+
+      void InitModel(const RgbImage& data);
+      void Subtract(int frame_num, const RgbImage& data, BwImage& low_threshold_mask, BwImage& high_threshold_mask);	
+      void Update(int frame_num, const RgbImage& data, const BwImage& update_mask);
+
+      RgbImage* Background();
+
+    private:	
+      void SubtractPixel(long posPixel, const RgbPixel& pixel, unsigned char& numModes, unsigned char& lowThreshold, unsigned char& highThreshold);
+
+      // User adjustable parameters
+      T2FGMMParams m_params;
+
+      // Threshold when the component becomes significant enough to be included into
+      // the background model. It is the TB = 1-cf from the paper. So I use cf=0.1 => TB=0.9
+      // For alpha=0.001 it means that the mode should exist for approximately 105 frames before
+      // it is considered foreground
+      float m_bg_threshold; //1-cf from the paper
+
+      // Initial variance for the newly generated components. 
+      // It will will influence the speed of adaptation. A good guess should be made. 
+      // A simple way is to estimate the typical standard deviation from the images.
+      float m_variance;
+
+      // Dynamic array for the mixture of Gaussians
+      GMM* m_modes;
+
+      // Number of Gaussian components per pixel
+      BwImage m_modes_per_pixel;
+
+      // Current background model
+      RgbImage m_background;
+
+      // Factor control for the T2FGMM-UM
+      float km;
+
+      // Factor control for the T2FGMM-UV
+      float kv;
+    };
+  };
+};
+
+#endif
diff --git a/package_bgs/tb/T2FGMM_UM.cpp b/package_bgs/tb/T2FGMM_UM.cpp
new file mode 100644
index 0000000..aaf280f
--- /dev/null
+++ b/package_bgs/tb/T2FGMM_UM.cpp
@@ -0,0 +1,111 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "T2FGMM_UM.h"
+
+T2FGMM_UM::T2FGMM_UM() : firstTime(true), frameNumber(0), showOutput(true), threshold(9.0), alpha(0.01), gaussians(3), km(1.5), kv(0.6)
+{
+  std::cout << "T2FGMM_UM()" << std::endl;
+}
+
+T2FGMM_UM::~T2FGMM_UM()
+{
+  std::cout << "~T2FGMM_UM()" << std::endl;
+}
+
+void T2FGMM_UM::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold;
+    params.HighThreshold() = 2*params.LowThreshold();
+    params.Alpha() = alpha;
+    params.MaxModes() = gaussians;
+    params.Type() = TYPE_T2FGMM_UM;
+    params.KM() = km; // Factor control for the T2FGMM-UM [0,3] default: 1.5
+    params.KV() = kv; // Factor control for the T2FGMM-UV [0.3,1] default: 0.6
+
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("T2FGMM-UM", foreground);
+  
+  foreground.copyTo(img_output);
+
+  delete frame;
+  firstTime = false;
+  frameNumber++;
+}
+
+void T2FGMM_UM::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/T2FGMM_UM.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteReal(fs, "threshold", threshold);
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteReal(fs, "km", km);
+  cvWriteReal(fs, "kv", kv);
+  cvWriteInt(fs, "gaussians", gaussians);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void T2FGMM_UM::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/T2FGMM_UM.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadRealByName(fs, 0, "threshold", 9.0);
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.01);
+  km = cvReadRealByName(fs, 0, "km", 1.5);
+  kv = cvReadRealByName(fs, 0, "kv", 0.6);
+  gaussians = cvReadIntByName(fs, 0, "gaussians", 3);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/tb/T2FGMM_UM.h b/package_bgs/tb/T2FGMM_UM.h
new file mode 100644
index 0000000..17e06c5
--- /dev/null
+++ b/package_bgs/tb/T2FGMM_UM.h
@@ -0,0 +1,58 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "T2FGMM.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class T2FGMM_UM : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage* frame;
+  RgbImage frame_data;
+
+  T2FGMMParams params;
+  T2FGMM bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  double threshold;
+  double alpha;
+  float km;
+  float kv;
+  int gaussians;
+  bool showOutput;
+
+public:
+  T2FGMM_UM();
+  ~T2FGMM_UM();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/tb/T2FGMM_UV.cpp b/package_bgs/tb/T2FGMM_UV.cpp
new file mode 100644
index 0000000..6094fe3
--- /dev/null
+++ b/package_bgs/tb/T2FGMM_UV.cpp
@@ -0,0 +1,111 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "T2FGMM_UV.h"
+
+T2FGMM_UV::T2FGMM_UV() : firstTime(true), frameNumber(0), showOutput(true), threshold(9.0), alpha(0.01), gaussians(3), km(1.5), kv(0.6)
+{
+  std::cout << "T2FGMM_UV()" << std::endl;
+}
+
+T2FGMM_UV::~T2FGMM_UV()
+{
+  std::cout << "~T2FGMM_UV()" << std::endl;
+}
+
+void T2FGMM_UV::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold;
+    params.HighThreshold() = 2*params.LowThreshold();
+    params.Alpha() = alpha;
+    params.MaxModes() = gaussians;
+    params.Type() = TYPE_T2FGMM_UV;
+    params.KM() = km; // Factor control for the T2FGMM-UM [0,3] default: 1.5
+    params.KV() = kv; // Factor control for the T2FGMM-UV [0.3,1] default: 0.6
+
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("T2FGMM-UV", foreground);
+  
+  foreground.copyTo(img_output);
+
+  delete frame;
+  firstTime = false;
+  frameNumber++;
+}
+
+void T2FGMM_UV::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/T2FGMM_UV.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteReal(fs, "threshold", threshold);
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteReal(fs, "km", km);
+  cvWriteReal(fs, "kv", kv);
+  cvWriteInt(fs, "gaussians", gaussians);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void T2FGMM_UV::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/T2FGMM_UV.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadRealByName(fs, 0, "threshold", 9.0);
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.01);
+  km = cvReadRealByName(fs, 0, "km", 1.5);
+  kv = cvReadRealByName(fs, 0, "kv", 0.6);
+  gaussians = cvReadIntByName(fs, 0, "gaussians", 3);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
\ No newline at end of file
diff --git a/package_bgs/tb/T2FGMM_UV.h b/package_bgs/tb/T2FGMM_UV.h
new file mode 100644
index 0000000..23c0bf1
--- /dev/null
+++ b/package_bgs/tb/T2FGMM_UV.h
@@ -0,0 +1,58 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "T2FGMM.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class T2FGMM_UV : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage* frame;
+  RgbImage frame_data;
+
+  T2FGMMParams params;
+  T2FGMM bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  double threshold;
+  double alpha;
+  float km;
+  float kv;
+  int gaussians;
+  bool showOutput;
+
+public:
+  T2FGMM_UV();
+  ~T2FGMM_UV();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
+
diff --git a/package_bgs/tb/T2FMRF.cpp b/package_bgs/tb/T2FMRF.cpp
new file mode 100644
index 0000000..3d486bb
--- /dev/null
+++ b/package_bgs/tb/T2FMRF.cpp
@@ -0,0 +1,432 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* T2FMRF.cpp
+*
+* Purpose: Implementation of the T2 Fuzzy Gaussian Mixture Models (T2GMMs) 
+* "Modeling of Dynamic Backgrounds by Type-2 Fuzzy Gaussians Mixture Models"
+* Author: Fida El Baf, Thierry Bouwmans, September 2008
+*
+* This code is based on code by Z. Zivkovic's written for his enhanced GMM
+* background subtraction algorithm: 
+*
+* Zivkovic's code can be obtained at: www.zoranz.net
+******************************************************************************/
+
+#include "T2FMRF.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+int compareT2FMRF(const void* _gmm1, const void* _gmm2)
+{
+  GMM gmm1 = *(GMM*)_gmm1;
+  GMM gmm2 = *(GMM*)_gmm2;
+
+  if(gmm1.significants < gmm2.significants)
+    return 1;
+  else if(gmm1.significants == gmm2.significants)
+    return 0;
+  else
+    return -1;
+}
+
+GMM* T2FMRF::gmm()
+{
+  return m_modes;
+}
+HMM* T2FMRF::hmm()
+{
+  return m_state;
+}
+
+T2FMRF::T2FMRF()
+{
+  m_modes = NULL;
+}
+
+T2FMRF::~T2FMRF()
+{
+  if(m_modes != NULL) 
+    delete[] m_modes;
+}
+
+void T2FMRF::Initalize(const BgsParams& param)
+{
+  m_params = (T2FMRFParams&) param;
+
+  // Tbf - the threshold
+  m_bg_threshold = 0.75f;	// 1-cf from the paper 
+
+  // Tgenerate - the threshold
+  m_variance = 36.0f;		// sigma for the new mode
+
+  // GMM for each pixel
+  m_modes = new GMM[m_params.Size()*m_params.MaxModes()];
+
+  //HMM for each pixel
+  m_state = new HMM[m_params.Size()];
+
+  // used modes per pixel
+  m_modes_per_pixel = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 1);
+
+  m_background = cvCreateImage(cvSize(m_params.Width(), m_params.Height()), IPL_DEPTH_8U, 3);
+
+  // Factor control for the T2FGMM-UM [0,3]
+  // km = (float) 2; //1.5;
+  km = (float) m_params.KM();
+
+  // Factor control for the T2FGMM-UV [0.3,1]
+  // kv = (float) 0.9; //0.6;
+  kv = (float) m_params.KV();
+}
+
+RgbImage* T2FMRF::Background()
+{
+  return &m_background;
+}
+
+void T2FMRF::InitModel(const RgbImage& data)
+{
+  m_modes_per_pixel.Clear();
+
+  for(unsigned int i = 0; i < m_params.Size()*m_params.MaxModes(); ++i)
+  {
+    m_modes[i].weight = 0;
+    m_modes[i].variance = 0;
+    m_modes[i].muR = 0;
+    m_modes[i].muG = 0;
+    m_modes[i].muB = 0;
+    m_modes[i].significants = 0;
+  }
+
+  for (unsigned int j = 0; j < m_params.Size(); ++j)
+  {
+    m_state[j].State = background;
+    m_state[j].Ab2b = 0.7;
+    m_state[j].Ab2f = 0.3;
+    m_state[j].Af2b = 0.4;
+    m_state[j].Af2f = 0.6;
+    m_state[j].T = 0.7;
+  }
+}
+
+void T2FMRF::Update(int frame_num, const RgbImage& data,  const BwImage& update_mask)
+{
+  // it doesn't make sense to have conditional updates in the GMM framework
+}
+
+void T2FMRF::SubtractPixel(long posPixel, long posGMode, const RgbPixel& pixel, unsigned char& numModes, 
+                           unsigned char& low_threshold, unsigned char& high_threshold)
+{
+  // calculate distances to the modes (+ sort???)
+  // here we need to go in descending order!!!
+  long pos;
+  bool bFitsPDF = false;
+  bool bBackgroundLow = false;
+  bool bBackgroundHigh = false;
+
+  HiddenState CurrentState = m_state[posPixel].State;
+  float Ab2b = m_state[posPixel].Ab2b;
+  float Ab2f = m_state[posPixel].Ab2f;
+  float Af2b = m_state[posPixel].Af2b;
+  float Af2f = m_state[posPixel].Af2f;
+  float T = m_state[posPixel].T;
+
+  float fOneMinAlpha = 1 - m_params.Alpha();
+  float totalWeight = 0.0f;
+
+  // calculate number of Gaussians to include in the background model
+  int backgroundGaussians = 0;
+  double sum = 0.0;
+  for(int i = 0; i < numModes; ++i)
+  {
+    if(sum < m_bg_threshold)
+    {
+      backgroundGaussians++;
+      sum += m_modes[posGMode+i].weight;
+    }
+    else
+      break;
+  }
+
+  // update all distributions and check for match with current pixel
+  for (int iModes = 0; iModes < numModes; iModes++)
+  {
+    pos = posGMode + iModes;
+    float weight = m_modes[pos].weight;
+
+    // fit not found yet
+    if (!bFitsPDF)
+    {
+      //check if it belongs to some of the modes
+      //calculate distance
+      float var = m_modes[pos].variance;
+      float muR = m_modes[pos].muR;
+      float muG = m_modes[pos].muG;
+      float muB = m_modes[pos].muB;
+
+      //float km = 2;
+      //float kv = 0.9;
+
+      float dR = fabs(muR - pixel(0));
+      float dG = fabs(muG - pixel(1));
+      float dB = fabs(muB - pixel(2));
+
+      // calculate the squared distance
+      float HR;
+      float HG;
+      float HB;
+
+      // T2FMRF-UM
+      if(m_params.Type() == TYPE_T2FMRF_UM)
+      {
+        if((pixel(0) < muR-km*var) || (pixel(0) > muR+km*var))
+          HR = 2*km*dR/var;
+        else
+          HR = dR*dR/(2*var*var)+km*dR/var+km*km/2;
+
+        if((pixel(1) < muG-km*var) || (pixel(1) > muG+km*var))
+          HG = 2*km*dG/var;
+        else
+          HG = dG*dG/(2*var*var)+km*dG/var+km*km/2;
+
+        if((pixel(2) < muB-km*var) || (pixel(2) > muB+km*var))
+          HB = 2*km*dB/var;
+        else
+          HB = dB*dB/(2*var*var)+km*dB/var+km*km/2;
+      }
+
+      // T2FGMM-UV
+      if(m_params.Type() == TYPE_T2FMRF_UV)
+      {
+        HR = (1/(kv*kv)-kv*kv) * (pixel(0)-muR) * (pixel(0)-muR)/(2*var);
+        HG = (1/(kv*kv)-kv*kv) * (pixel(1)-muG) * (pixel(1)-muG)/(2*var);
+        HB = (1/(kv*kv)-kv*kv) * (pixel(2)-muB) * (pixel(2)-muB)/(2*var);
+      }
+
+      float ro;
+      if (CurrentState == background)
+      {
+        if (Ab2b!=0) ro = (Ab2f/Ab2b);
+        else ro = 10;
+      }
+      else
+      {
+        if(Af2b!=0) ro = (Af2f/Af2b);
+        else ro = 10;
+      }
+      
+      // calculate the squared distance
+      float dist = (HR*HR + HG*HG + HB*HB);
+
+      if(dist < m_params.HighThreshold()*var && iModes < backgroundGaussians)
+        bBackgroundHigh = true;
+
+      // a match occurs when the pixel is within sqrt(fTg) standard deviations of the distribution
+      if(dist < m_params.LowThreshold()*var)
+      {
+        bFitsPDF = true;
+
+        // check if this Gaussian is part of the background model
+        if(iModes < backgroundGaussians) 
+          bBackgroundLow = true;
+
+        //update distribution
+        float k = m_params.Alpha() / weight;
+        weight = fOneMinAlpha*weight + m_params.Alpha();
+        m_modes[pos].weight = weight;
+        m_modes[pos].muR = muR - k*(dR);
+        m_modes[pos].muG = muG - k*(dG);
+        m_modes[pos].muB = muB - k*(dB);
+
+        //limit the variance
+        float sigmanew = var + k*(dist-var);
+        m_modes[pos].variance = sigmanew < 4 ? 4 : sigmanew > 5*m_variance ? 5*m_variance : sigmanew;
+        m_modes[pos].significants = m_modes[pos].weight / sqrt(m_modes[pos].variance);
+      }
+      else
+      {
+        weight = fOneMinAlpha*weight;
+        if (weight < 0.0)
+        {
+          weight=0.0;
+          numModes--;
+        }
+
+        m_modes[pos].weight = weight;
+        m_modes[pos].significants = m_modes[pos].weight / sqrt(m_modes[pos].variance);
+      }
+    }
+    else
+    {
+      weight = fOneMinAlpha*weight;
+      if (weight < 0.0)
+      {
+        weight=0.0;
+        numModes--;
+      }
+      m_modes[pos].weight = weight;
+      m_modes[pos].significants = m_modes[pos].weight / sqrt(m_modes[pos].variance);
+    }
+
+    totalWeight += weight;
+  }
+
+  // renormalize weights so they add to one
+  double invTotalWeight = 1.0 / totalWeight;
+  for (int iLocal = 0; iLocal < numModes; iLocal++)
+  {
+    m_modes[posGMode + iLocal].weight *= (float)invTotalWeight;
+    m_modes[posGMode + iLocal].significants = m_modes[posGMode + iLocal].weight / sqrt(m_modes[posGMode + iLocal].variance);
+  }
+
+  // Sort significance values so they are in desending order. 
+  qsort(&m_modes[posGMode],  numModes, sizeof(GMM), compareT2FMRF);
+
+  // make new mode if needed and exit
+  if(!bFitsPDF)
+  {
+    if(numModes < m_params.MaxModes())
+      numModes++;
+    //else
+      // the weakest mode will be replaced
+    
+    pos = posGMode + numModes-1;
+
+    m_modes[pos].muR = pixel.ch[0];
+    m_modes[pos].muG = pixel.ch[1];
+    m_modes[pos].muB = pixel.ch[2];
+    m_modes[pos].variance = m_variance;
+    m_modes[pos].significants = 0;			// will be set below
+
+    if(numModes == 1)
+      m_modes[pos].weight = 1;
+    else
+      m_modes[pos].weight = m_params.Alpha();
+
+    //renormalize weights
+    int iLocal;
+    float sum = 0.0;
+    for(iLocal = 0; iLocal < numModes; iLocal++)
+      sum += m_modes[posGMode+ iLocal].weight;
+    
+    double invSum = 1.0/sum;
+    for(iLocal = 0; iLocal < numModes; iLocal++)
+    {
+      m_modes[posGMode + iLocal].weight *= (float)invSum;
+      m_modes[posGMode + iLocal].significants = m_modes[posPixel + iLocal].weight / sqrt(m_modes[posGMode + iLocal].variance);
+    }
+  }
+
+  // Sort significance values so they are in desending order. 
+  qsort(&(m_modes[posGMode]), numModes, sizeof(GMM), compareT2FMRF);
+
+  if(bBackgroundLow)
+  {
+    low_threshold = BACKGROUND;
+    m_state[posPixel].State = background;
+
+    if(CurrentState == background)
+    {
+      float b2b = fOneMinAlpha*Ab2b + m_params.Alpha();
+      float b2f = fOneMinAlpha*Ab2f;
+
+      float b = b2b + b2f;
+      m_state[posPixel].Ab2b = b2b/b;
+      m_state[posPixel].Ab2f = b2f/b;
+      m_state[posPixel].T = m_state[posPixel].Ab2b;
+    }
+    else
+    {
+      float f2b = fOneMinAlpha*Af2b + m_params.Alpha();
+      float f2f = fOneMinAlpha*Af2f;
+
+      float f = f2b + f2f;
+      m_state[posPixel].Af2b = f2b/f;
+      m_state[posPixel].Af2f = f2f/f;
+      m_state[posPixel].T = m_state[posPixel].Af2b;
+    }
+  }
+  else
+  {
+    low_threshold = FOREGROUND;
+    m_state[posPixel].State = foreground;
+
+    if(CurrentState == background)
+    {
+      float b2b = fOneMinAlpha*Ab2b;
+      float b2f = fOneMinAlpha*Ab2f + m_params.Alpha();
+
+      float b = b2b + b2f;
+      m_state[posPixel].Ab2b = b2b/b;
+      m_state[posPixel].Ab2f = b2f/b;
+      m_state[posPixel].T = m_state[posPixel].Ab2b;
+    }
+    else
+    {
+      float f2b = fOneMinAlpha*Af2b;
+      float f2f = fOneMinAlpha*Af2f + m_params.Alpha();
+
+      float f = f2b + f2f;
+      m_state[posPixel].Af2b = f2b/f;
+      m_state[posPixel].Af2f = f2f/f;
+      m_state[posPixel].T = m_state[posPixel].Af2b;
+    }
+  }
+
+  if(bBackgroundHigh)
+    high_threshold = BACKGROUND;
+  else
+    high_threshold = FOREGROUND;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//Input:
+//  data - a pointer to the data of a RGB image of the same size
+//Output:
+//  output - a pointer to the data of a gray value image of the same size 
+//					(the memory should already be reserved) 
+//					values: 255-foreground, 125-shadow, 0-background
+///////////////////////////////////////////////////////////////////////////////
+void T2FMRF::Subtract(int frame_num, const RgbImage& data,  
+                      BwImage& low_threshold_mask, BwImage& high_threshold_mask)
+{
+  unsigned char low_threshold, high_threshold;
+  long posPixel;
+  long posGMode;
+
+  // update each pixel of the image
+  for(unsigned int r = 0; r < m_params.Height(); ++r)
+  {
+    for(unsigned int c = 0; c < m_params.Width(); ++c)
+    {		
+      // update model + background subtract
+      posPixel = r*m_params.Width() + c;
+      posGMode = (r*m_params.Width() + c) * m_params.MaxModes();
+
+      SubtractPixel(posPixel, posGMode, data(r,c), m_modes_per_pixel(r,c), low_threshold, high_threshold);
+
+      low_threshold_mask(r,c) = low_threshold;
+      high_threshold_mask(r,c) = high_threshold;
+
+      m_background(r,c,0) = (unsigned char) m_modes[posGMode].muR;
+      m_background(r,c,1) = (unsigned char) m_modes[posGMode].muG;
+      m_background(r,c,2) = (unsigned char) m_modes[posGMode].muB;
+    }
+  }
+}
diff --git a/package_bgs/tb/T2FMRF.h b/package_bgs/tb/T2FMRF.h
new file mode 100644
index 0000000..e6fb449
--- /dev/null
+++ b/package_bgs/tb/T2FMRF.h
@@ -0,0 +1,164 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/****************************************************************************
+*
+* T2FMRF.h
+*
+* Purpose: Implementation of the T2 Fuzzy Gaussian Mixture Models (T2GMMs) 
+* "Modeling of Dynamic Backgrounds by Type-2 Fuzzy Gaussians Mixture Models"
+* Author: Fida El Baf, Thierry Bouwmans, September 2008
+*
+* This code is based on code by Z. Zivkovic's written for his enhanced GMM
+* background subtraction algorithm: 
+*
+* Zivkovic's code can be obtained at: www.zoranz.net
+******************************************************************************/
+
+#ifndef T2F_MRF_
+#define T2F_MRF_
+
+#include "../dp/Bgs.h"
+#include "../dp/GrimsonGMM.h"
+
+namespace Algorithms
+{
+  namespace BackgroundSubtraction
+  {
+    const int TYPE_T2FMRF_UM = 0;
+    const int TYPE_T2FMRF_UV = 1;
+
+    enum HiddenState {background, foreground};
+
+    typedef struct HMMState 
+    {
+      float T;
+      //Hidden State
+      HiddenState State;
+      //transition probability
+      float Ab2b;
+      float Ab2f;
+      float Af2f;
+      float Af2b;
+    } HMM;
+
+    //typedef struct GMMGaussian
+    //{
+    //  float variance;
+    //  float muR;
+    //  float muG;
+    //  float muB;
+    //  float weight;
+    //  float significants; // this is equal to weight / standard deviation and is used to
+    //  // determine which Gaussians should be part of the background model
+    //} GMM;
+
+    // --- User adjustable parameters used by the T2F GMM BGS algorithm ---
+    class T2FMRFParams : public BgsParams
+    {
+    public:
+      float &LowThreshold() { return m_low_threshold; }
+      float &HighThreshold() { return m_high_threshold; }
+
+      float &Alpha() { return m_alpha; }
+      int &MaxModes() { return m_max_modes; }
+      int &Type() { return m_type; }
+      float &KM() { return m_km; }
+      float &KV() { return m_kv; }
+
+    private:
+      // Threshold on the squared dist. to decide when a sample is close to an existing 
+      // components. If it is not close to any a new component will be generated. 
+      // Smaller threshold values lead to more generated components and higher threshold values 
+      // lead to a small number of components but they can grow too large.
+      //
+      // It is usual easiest to think of these thresholds as being the number of variances away
+      // from the mean of a pixel before it is considered to be from the foreground.
+      float m_low_threshold;
+      float m_high_threshold;
+
+      // alpha - speed of update - if the time interval you want to average over is T
+      // set alpha=1/T. 
+      float m_alpha;
+
+      // Maximum number of modes (Gaussian components) that will be used per pixel
+      int m_max_modes;
+
+      // T2FMRF_UM / T2FMRF_UV
+      int m_type;
+
+      // Factor control for the T2FMRF-UM
+      float m_km;
+
+      // Factor control for the T2FMRF-UV
+      float m_kv;
+    };
+
+    // --- T2FGMM BGS algorithm ---
+    class T2FMRF : public Bgs
+    {
+    public:
+      T2FMRF();
+      ~T2FMRF();
+
+      void Initalize(const BgsParams& param);
+      void InitModel(const RgbImage& data);
+      void Subtract(int frame_num, const RgbImage& data, BwImage& low_threshold_mask, BwImage& high_threshold_mask);	
+      void Update(int frame_num, const RgbImage& data, const BwImage& update_mask);
+
+      RgbImage* Background();
+
+      GMM *gmm(void);
+      HMM *hmm(void);
+
+    private:	
+      void SubtractPixel(long posPixel, long posGMode, const RgbPixel& pixel, unsigned char& numModes, unsigned char& lowThreshold, unsigned char& highThreshold);
+
+      // User adjustable parameters
+      T2FMRFParams m_params;
+
+      // Threshold when the component becomes significant enough to be included into
+      // the background model. It is the TB = 1-cf from the paper. So I use cf=0.1 => TB=0.9
+      // For alpha=0.001 it means that the mode should exist for approximately 105 frames before
+      // it is considered foreground
+      float m_bg_threshold; //1-cf from the paper
+
+      // Initial variance for the newly generated components. 
+      // It will will influence the speed of adaptation. A good guess should be made. 
+      // A simple way is to estimate the typical standard deviation from the images.
+      float m_variance;
+
+      // Dynamic array for the mixture of Gaussians
+      GMM* m_modes;
+
+      //Dynamic array for the hidden state
+      HMM* m_state;
+
+      // Number of Gaussian components per pixel
+      BwImage m_modes_per_pixel;
+
+      // Current background model
+      RgbImage m_background;
+
+      // Factor control for the T2FGMM-UM
+      float km;
+      // Factor control for the T2FGMM-UV
+      float kv;
+    };
+  };
+};
+
+#endif
diff --git a/package_bgs/tb/T2FMRF_UM.cpp b/package_bgs/tb/T2FMRF_UM.cpp
new file mode 100644
index 0000000..768db39
--- /dev/null
+++ b/package_bgs/tb/T2FMRF_UM.cpp
@@ -0,0 +1,140 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "T2FMRF_UM.h"
+
+T2FMRF_UM::T2FMRF_UM() : firstTime(true), frameNumber(0), showOutput(true), threshold(9.0), alpha(0.01), 
+gaussians(3), km(2), kv(0.9)
+{
+  std::cout << "T2FMRF_UM()" << std::endl;
+}
+
+T2FMRF_UM::~T2FMRF_UM()
+{
+  std::cout << "~T2FMRF_UM()" << std::endl;
+}
+
+void T2FMRF_UM::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold;
+    params.HighThreshold() = 2*params.LowThreshold();
+    params.Alpha() = alpha;
+    params.MaxModes() = gaussians;
+    params.Type() = TYPE_T2FMRF_UM;
+    params.KM() = km; // Factor control for the T2FMRF-UM [0,3] default: 2
+    params.KV() = kv; // Factor control for the T2FMRF-UV [0.3,1] default: 0.9
+
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+
+    old_labeling = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    old = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+
+    mrf.height = height;
+	  mrf.width = width;
+    mrf.Build_Classes_OldLabeling_InImage_LocalEnergy();
+
+    firstTime = false;
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  cvCopyImage(lowThresholdMask.Ptr(), old);
+
+  /************************************************************************/
+	/* the code for MRF, it can be noted when using other methods   */
+	/************************************************************************/
+	//the optimization process is done when the foreground detection is stable, 
+	if(frameNumber >= 10)
+	{
+		gmm = bgs.gmm();
+		hmm = bgs.hmm();
+		mrf.background2 = frame_data.Ptr();
+		mrf.in_image = lowThresholdMask.Ptr();
+		mrf.out_image = lowThresholdMask.Ptr();
+		mrf.InitEvidence2(gmm,hmm,old_labeling);
+		mrf.ICM2();
+		cvCopyImage(mrf.out_image, lowThresholdMask.Ptr());
+	}
+
+  cvCopyImage(old, old_labeling);
+
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("T2FMRF-UM", foreground);
+  
+  foreground.copyTo(img_output);
+
+  delete frame;
+  frameNumber++;
+}
+
+void T2FMRF_UM::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/T2FMRF_UM.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteReal(fs, "threshold", threshold);
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteReal(fs, "km", km);
+  cvWriteReal(fs, "kv", kv);
+  cvWriteInt(fs, "gaussians", gaussians);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void T2FMRF_UM::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/T2FMRF_UM.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadRealByName(fs, 0, "threshold", 9.0);
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.01);
+  km = cvReadRealByName(fs, 0, "km", 2);
+  kv = cvReadRealByName(fs, 0, "kv", 0.9);
+  gaussians = cvReadIntByName(fs, 0, "gaussians", 3);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/tb/T2FMRF_UM.h b/package_bgs/tb/T2FMRF_UM.h
new file mode 100644
index 0000000..6066834
--- /dev/null
+++ b/package_bgs/tb/T2FMRF_UM.h
@@ -0,0 +1,64 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "MRF.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class T2FMRF_UM : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage *frame;
+  RgbImage frame_data;
+
+  IplImage *old_labeling;
+  IplImage *old;
+
+  T2FMRFParams params;
+  T2FMRF bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  double threshold;
+  double alpha;
+  float km;
+  float kv;
+  int gaussians;
+  bool showOutput;
+
+  MRF_TC mrf;
+  GMM *gmm;
+  HMM *hmm;
+
+public:
+  T2FMRF_UM();
+  ~T2FMRF_UM();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
diff --git a/package_bgs/tb/T2FMRF_UV.cpp b/package_bgs/tb/T2FMRF_UV.cpp
new file mode 100644
index 0000000..6b6fcc0
--- /dev/null
+++ b/package_bgs/tb/T2FMRF_UV.cpp
@@ -0,0 +1,140 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "T2FMRF_UV.h"
+
+T2FMRF_UV::T2FMRF_UV() : firstTime(true), frameNumber(0), showOutput(true), threshold(9.0), alpha(0.01), 
+gaussians(3), km(2), kv(0.9)
+{
+  std::cout << "T2FMRF_UV()" << std::endl;
+}
+
+T2FMRF_UV::~T2FMRF_UV()
+{
+  std::cout << "~T2FMRF_UV()" << std::endl;
+}
+
+void T2FMRF_UV::process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel)
+{
+  if(img_input.empty())
+    return;
+
+  loadConfig();
+
+  if(firstTime)
+    saveConfig();
+
+  frame = new IplImage(img_input);
+  
+  if(firstTime)
+    frame_data.ReleaseMemory(false);
+  frame_data = frame;
+
+  if(firstTime)
+  {
+    int width	= img_input.size().width;
+    int height = img_input.size().height;
+
+    lowThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    lowThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    highThresholdMask = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    highThresholdMask.Ptr()->origin = IPL_ORIGIN_BL;
+
+    params.SetFrameSize(width, height);
+    params.LowThreshold() = threshold;
+    params.HighThreshold() = 2*params.LowThreshold();
+    params.Alpha() = alpha;
+    params.MaxModes() = gaussians;
+    params.Type() = TYPE_T2FMRF_UV;
+    params.KM() = km; // Factor control for the T2FMRF-UM [0,3] default: 2
+    params.KV() = kv; // Factor control for the T2FMRF-UV [0.3,1] default: 0.9
+
+    bgs.Initalize(params);
+    bgs.InitModel(frame_data);
+
+    old_labeling = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+    old = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
+
+    mrf.height = height;
+	  mrf.width = width;
+    mrf.Build_Classes_OldLabeling_InImage_LocalEnergy();
+
+    firstTime = false;
+  }
+
+  bgs.Subtract(frameNumber, frame_data, lowThresholdMask, highThresholdMask);
+  cvCopyImage(lowThresholdMask.Ptr(), old);
+
+  /************************************************************************/
+	/* the code for MRF, it can be noted when using other methods   */
+	/************************************************************************/
+	//the optimization process is done when the foreground detection is stable, 
+	if(frameNumber >= 10)
+	{
+		gmm = bgs.gmm();
+		hmm = bgs.hmm();
+		mrf.background2 = frame_data.Ptr();
+		mrf.in_image = lowThresholdMask.Ptr();
+		mrf.out_image = lowThresholdMask.Ptr();
+		mrf.InitEvidence2(gmm,hmm,old_labeling);
+		mrf.ICM2();
+		cvCopyImage(mrf.out_image, lowThresholdMask.Ptr());
+	}
+
+  cvCopyImage(old, old_labeling);
+
+  lowThresholdMask.Clear();
+  bgs.Update(frameNumber, frame_data, lowThresholdMask);
+  
+  cv::Mat foreground(highThresholdMask.Ptr());
+
+  if(showOutput)
+    cv::imshow("T2FMRF-UV", foreground);
+  
+  foreground.copyTo(img_output);
+
+  delete frame;
+  frameNumber++;
+}
+
+void T2FMRF_UV::saveConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/T2FMRF_UV.xml", 0, CV_STORAGE_WRITE);
+
+  cvWriteReal(fs, "threshold", threshold);
+  cvWriteReal(fs, "alpha", alpha);
+  cvWriteReal(fs, "km", km);
+  cvWriteReal(fs, "kv", kv);
+  cvWriteInt(fs, "gaussians", gaussians);
+  cvWriteInt(fs, "showOutput", showOutput);
+
+  cvReleaseFileStorage(&fs);
+}
+
+void T2FMRF_UV::loadConfig()
+{
+  CvFileStorage* fs = cvOpenFileStorage("./config/T2FMRF_UV.xml", 0, CV_STORAGE_READ);
+  
+  threshold = cvReadRealByName(fs, 0, "threshold", 9.0);
+  alpha = cvReadRealByName(fs, 0, "alpha", 0.01);
+  km = cvReadRealByName(fs, 0, "km", 2);
+  kv = cvReadRealByName(fs, 0, "kv", 0.9);
+  gaussians = cvReadIntByName(fs, 0, "gaussians", 3);
+  showOutput = cvReadIntByName(fs, 0, "showOutput", true);
+
+  cvReleaseFileStorage(&fs);
+}
diff --git a/package_bgs/tb/T2FMRF_UV.h b/package_bgs/tb/T2FMRF_UV.h
new file mode 100644
index 0000000..b8c0ff0
--- /dev/null
+++ b/package_bgs/tb/T2FMRF_UV.h
@@ -0,0 +1,64 @@
+/*
+This file is part of BGSLibrary.
+
+BGSLibrary is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+BGSLibrary is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include <iostream>
+#include <cv.h>
+#include <highgui.h>
+
+#include "../IBGS.h"
+#include "MRF.h"
+
+using namespace Algorithms::BackgroundSubtraction;
+
+class T2FMRF_UV : public IBGS
+{
+private:
+  bool firstTime;
+  long frameNumber;
+  IplImage *frame;
+  RgbImage frame_data;
+
+  IplImage *old_labeling;
+  IplImage *old;
+
+  T2FMRFParams params;
+  T2FMRF bgs;
+  BwImage lowThresholdMask;
+  BwImage highThresholdMask;
+
+  double threshold;
+  double alpha;
+  float km;
+  float kv;
+  int gaussians;
+  bool showOutput;
+
+  MRF_TC mrf;
+  GMM *gmm;
+  HMM *hmm;
+
+public:
+  T2FMRF_UV();
+  ~T2FMRF_UV();
+
+  void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
+
+private:
+  void saveConfig();
+  void loadConfig();
+};
diff --git a/run_camera.sh b/run_camera.sh
new file mode 100644
index 0000000..f000519
--- /dev/null
+++ b/run_camera.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+./build/bgs --use_cam --camera=0
+
diff --git a/run_demo.sh b/run_demo.sh
new file mode 100644
index 0000000..e734f06
--- /dev/null
+++ b/run_demo.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+./build/bgs_demo dataset/video.avi
+
diff --git a/run_video.sh b/run_video.sh
new file mode 100644
index 0000000..0ae1bcb
--- /dev/null
+++ b/run_video.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+./build/bgs -uf -fn=dataset/video.avi
+
diff --git a/vs2010/bgslibrary.sln b/vs2010/bgslibrary.sln
new file mode 100644
index 0000000..06187d0
--- /dev/null
+++ b/vs2010/bgslibrary.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bgslibrary", "bgslibrary.vcxproj", "{3B6BF763-9CDE-4859-ADD9-8EB7B282659F}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{3B6BF763-9CDE-4859-ADD9-8EB7B282659F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{3B6BF763-9CDE-4859-ADD9-8EB7B282659F}.Debug|Win32.Build.0 = Debug|Win32
+		{3B6BF763-9CDE-4859-ADD9-8EB7B282659F}.Release|Win32.ActiveCfg = Release|Win32
+		{3B6BF763-9CDE-4859-ADD9-8EB7B282659F}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/vs2010/bgslibrary.suo b/vs2010/bgslibrary.suo
new file mode 100644
index 0000000000000000000000000000000000000000..3dc8e43797f0d1ee8f60b5d84b6328c180a83479
GIT binary patch
literal 11776
zcmca`Uhu)fjZzO8(10BSGsD0CoD6J8;*1Oo3?K{^5@29pg7W|U|NkE>#=yYve-sR<
z5cvE5|9=(+1_n?ZvNA9*urn}#<D8R$fq{d8fq|QWfq{#Gfq{pCfq|ESfq|cafq{>K
zfkBXgfkA+QfkB9YfkBvofk6anhA5OCQh_jn9UH`u&ydeh!l1z5%8<uU!cfFe3Cqev
z(P9j&@I22<K*xs%Y|1x+&M|`2HGmQd0|P?<LlHwhLl%Q4LmopKLq3BmLj?g-P^HBf
znBew<q7hXVHxHC{L9!tXi44UI*$h4mnGD4YB@Ceq#SEzoMGP?UVvr&{SOsdo6142Y
zqZBR$Dnmhe3nUQ2kjYTM5CFEb80v;phCGI3hExU@hE#?!215n|25pd1tXPYIi4jyr
zgMyP-|AWeHSb+`7_aF?46Hqw-Dg!`#5C*vsM1wG>9DtPpp!^Ri2S8y6DhFU?07xCk
z9UvNn4Hy_0BpDbOq!<_&q!}0(WEdD2WEmJ3<QNzj<QW(k6c`v76d4#8d>I%Rlo=Qp
zRG?*t8Uq7^Is*fP1_J|wCIbV51p@<vB?AM44piO>N`ve$WME)0Vqjn}W?*12VPIe|
zWnf@1V_;w~M^Xb)XU)LC;K0DZV238|$iTqh&%nUo%)r3l0+n-PU|?{EvOS@+Hv<EM
z50vc(r2`lk7y=m>7=obu5C#T@P$(M|7efK>YJT@ti!I!L*Cx?3ypJY;f*5N$!zK8^
z8B|l?k|jbMlo>z)1)@R9c|fT%F09xkHK{Z`peVICHLoPGBr`uRATc>RF+EjBAuP41
zI5R)b*3du?40RNoOLIy}i&Aa#QcFvU5_5DE0!ou|GLyYiD?{?LQ}b+-42;uE)6CNh
z4O2`F5{(nt!Ipsu1_lO}Qs2zvqWt3gv=Y6r%;M6-oZynul+1iRuoKc#i{Olq{QR8o
z%)FHR@?t%g#FE62%z|RQfXuwS#H5^5Fvqo`BsH%%GbuACv!qfl0OZo*lGME9RBfM3
z5F@n+q%XK6zbF;tPi{ne3gmY(Fvt@*;Ph+75Cbp0iWy=U92xQ$QW%ODQW?q_KzvYX
z0xIcB81fkk7-ATb7}6Pv!DUPmLn%W#Lprz&3TH@UC}Buu$Y4liAXN5&oU6dV#0bjE
zpf&&~8bM-&FsQr&wHH9@K(0cz-wEvEM22jJ0)~8sOmLlq&m9^JOpKs53#eQn)_#zB
zSS^EYKdAlzmAwTFB@CGi`3!jkLP3pzi4jzWfyzx{?FZ!;P}z#j|88JEr!WLF<TI2q
z6oKmjkUCr#WIxDWP}vHiaj8QV2es$?K*^7Rfgy(>lOc(rh#?VN^Xo!GKZQXT?Drgo
zN`@GQGKOLXBL)L-O%#J{5GeDY@yX?a>YfI8I)=0g(!uV^Wl&%Mg-Q-MMJh08FjO#D
zFqkoDGQ=?WGGsC&gIf^A4EYRc;C4(HxE3vCNMy)iP+$mVC}AjNNCC&C0@w$73<eA_
z3}Fn;3^8E6B@8hP#o&+z`K^!cZUE)C9EMzmG=^j(m%#W841>i*5O)rSFanhd$qYH*
zcui#hxrp3U2hj)33J?yIq(lsA1W^>I{3c2v4n<rHa!jCJ`8-A!D+4P7t7>B>GbcB5
zGh<y#XBSsp6AM#IT}KxeOI-_BCvztw3nMdAOSjsZr1avP%%q~kBJ}bPl+!@<MleGq
zLoP!SLp}qjcEMpe0|SE^wEYVzdq5bsN`wrkJqF{U+waSe%8<*D4=#<up=Dt{xCVpi
zK&5raupd<SfZA#xlhEzQUjHDw1f&arO&FLMLH-7{k3lp-1~*F#+P4O&0M$1o;F>oN
zTw;O3A5zjm%D^m!REA`R5(Z~*c??ns>ZKuSL@P4<@5R8tFbQNixXqi-kjzlZkjnt-
zb(An5`!s+dp8?b-!B-O+FfcKK`U4=pgD})syp%Yotq;v$E)2NshxNr=z-^L5tY+$w
z;eX`x2dZa5B?-)rkZ?|8$Ye+d*T0}r57G|6YCVGv0}~^tJ_n7B5bJ*l1_p*FQ2+Zg
zBr#+$_%eX%I*8qfI1U5%e6ZUK6IEhhVg%KlpgtC{_JjJWO;7_s{Wo8RQidFGdk0io
zf?5KgIuq0@Eduw=85nFCK>b4o25WF1tD3=>!HL0)!HL0*!JNU2!I(jp!IHt5!G*z<
zL6^aV!Ggh*!ID9j!I8m*!3E5+U~pw{VlZcLVlZN`U@&4Z1FLXjsAbS&NMR@k*U|`k
z{TV>5FJxOmy-n<HgX9j7S`G$Kzmb}5vu3boU|^u8iFyn{45<vD{0$m)NM)#j<~L&o
zBL+Q&GzKSdN(Z&RofvW$QW!w~f`z;-)!l+9`$%yIsFz*M;K*Ra;Kty}V9sE|;L2dg
zpbL&)6L4BEWH4lKVK4xv0Fay`gD!&sg8_phg8_pxgC&CjgBut+GZ-@jGpKO?b=2-X
z=&|wEs`J82!})y}_)bdY{NYsgpYXr^$N57`TtP|IhvB)1>ZSF{%I@2qKCD$w$^|)t
zfq@~I!6HrM(7!`+K1=4NteY<P-jX!^AhRjKfeH)^6BwKs$m@NP-ug}g_u5eP=`oZs
zBr{Yn6o6a8S<q2=;#}p-kOLk8D`o(-n?Zd=^il|a=%_&JKTw%YZ25y+{=#ZGP(4_{
zkOQvyLE~?b+zu)W3EEHc_@62R149Y4;T6h|2evhlA%!88Aq74j2`N_)^(-z|fXZKx
zzhM}cI%IKV|9dcGGNgd*&SMB>$YIE1a09owK&~kw(DwwHsYGG@2kPZ#GoX$Mpr$Tj
z`h>)#N|1Y{7(5tK86cru#Gn8g|KLjgo^5?^PNc`$n|<3iHKoo6sRQAMCI1#VZ@(b8
zPKsf{N&f$bL1O3_6pbJZO7+w%scrF;)W~iC_4}t#kpEQ}oWLXS*$lbhK6o}mF@pj_
z7`VJNWB~P5K_i^VHlng4&VzdMsA8n>Ks8P>LpHem0UB`twf%h<^1(5LuiXW+gPiui
z76SvgZUdPC%m0x47Q#@(PzoN0hs_5Rfx`vXIs@rI#h~^lXj~c;3ZOiQDvO<moc}=M
z019Zi9=k5=qGAk8jG*)fYSR&GKWH?+3~HP|Ln%WEcoZfN+}lZqwuL|?p9@1KLlIOR
zE($jP0J0l|aj8QV*9FbzLEE3`sgKxl7iOLe8Rd^2bZj4F25g=MHvbaLkO8g(Kx2@g
zkRen8gX$kp8y4gpV*Rg=)c*=&C}s!&=fE6rZ?}RW7~C5x1CK1Ff}DsKgUVmf{0C?*
zgjoAQEjdt|9b_=R_y^UA_;WvK&V-2()H(*ur4Vbs4Fdy1Ey!{P28K$#vgC?_qWr8H
zXRDad;?$zz7{|PnqSW%@7?;%I?2`O~82DI0rEXDbVv25lUQT6<OKNVuUUES}O-;3n
zfvcgTsk51`ld-9#u8FIOp{}KqnSrjcv6-o*k&&~JqmfZ9BWREUVrQlUxq}t-bF9l?
zcOoPx5u^kIBNGDyC}yEz2S77gpj^SgfEtOYQHL0BfasG#8F@w?d4<S>$VBj5K|FW{
z0mR2ue}m)*VZx)&1q_J{pc)F<R?vJ#3V0R+)KAK1NCMZ^#n67N9zzBL1GvW;MX+X$
zptR{u$b*FBLET=^AUmit1{(O%V@PHwU?^ai_~BSv!&=?#E`L5rDGMHc1S&8<85|ii
zFfgzh>KW(}DkSi@0apGNLwlm2)<0-GB$pu%J|~YyJ81lm5j2+pn$rb24WC+=9CH1O
zZofOY4^zre03Pvzxdf&Ylhz=k{=sKIXgsJ0I^IUucFM;;A@wh0L;%zSNM$GikHqAG
z`+1oDMHd0hzk$XRL17QV=<?Y3pivD_dkG{L1D*lIoEOYNnHPenLQbBL;(QV`e?eMt
zpfRjO2GZthCNWZ)0U;R(doP8&vg7|c9x-Qq&csUdb;oXtUt9`W(*O!vWDE*B5S{>a
zKlvd5YVCv8o{%?V1sb6RjaEWd&wvV#=H5Q<cjbF*HpPEgVI_0?G;C%Ro9jVqA3&`v
zP;6tiKSAve(7FncKXGAD`wO&o17<odb;#mQ3=9lApaO*2KhR+wsA^0K)cysnEdi}F
z0l5KF1*QmSKxrFPID#RUA%`IVrH+A&KSD-*iD`d=>;=s!fM}?(cqtDC28MX33PSz|
zt!;rS#Y%zv53(1Au_{6n3}#?pm<SaE^<6;Nm9*wxS+S9Up+QVgYEEimacWFbPJWVJ
zeiEn?&cJ4qSDKRpT4w{b0xw0&+>bhMjXLrQTK@nVZAxO$V*s@uvKV;5>m2bq7K<dY
zBiNww))73DlgUuVkjmi9kj9V>9^d5vud76L9rAcAXyp<Xi=jf)E<G3+Kn;yNXt@rX
zfdRF*h+9trDoF^fCqQrNKvoh%JwzgvL(2q&?$ClOTi*UJxe#)k<LgYxLY;%4p?O%w
MgV7|qf1s5E0LfUny8r+H

literal 0
HcmV?d00001

diff --git a/vs2010/bgslibrary.vcxproj b/vs2010/bgslibrary.vcxproj
new file mode 100644
index 0000000..5a1b829
--- /dev/null
+++ b/vs2010/bgslibrary.vcxproj
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{3B6BF763-9CDE-4859-ADD9-8EB7B282659F}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>bgslibrary</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>..\</OutDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>C:\OpenCV2.4.5\build\include;C:\OpenCV2.4.5\build\include\opencv;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>C:\OpenCV2.4.5\build\x86\vc10\staticlib\*.lib;comctl32.lib;VFW32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Demo.cpp" />
+    <ClCompile Include="..\package_analysis\ForegroundMaskAnalysis.cpp" />
+    <ClCompile Include="..\package_bgs\AdaptiveBackgroundLearning.cpp" />
+    <ClCompile Include="..\package_bgs\ae\KDE.cpp" />
+    <ClCompile Include="..\package_bgs\ae\KernelTable.cpp" />
+    <ClCompile Include="..\package_bgs\ae\NPBGmodel.cpp" />
+    <ClCompile Include="..\package_bgs\ae\NPBGSubtractor.cpp" />
+    <ClCompile Include="..\package_bgs\av\TBackground.cpp" />
+    <ClCompile Include="..\package_bgs\av\TBackgroundVuMeter.cpp" />
+    <ClCompile Include="..\package_bgs\av\VuMeter.cpp" />
+    <ClCompile Include="..\package_bgs\dp\AdaptiveMedianBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\Blob.cpp" />
+    <ClCompile Include="..\package_bgs\dp\BlobExtraction.cpp" />
+    <ClCompile Include="..\package_bgs\dp\BlobResult.cpp" />
+    <ClCompile Include="..\package_bgs\dp\ConnectedComponents.cpp" />
+    <ClCompile Include="..\package_bgs\dp\DPAdaptiveMedianBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\DPEigenbackgroundBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\DPGrimsonGMMBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\DPMeanBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\DPPratiMediodBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\DPTextureBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\DPWrenGABGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\DPZivkovicAGMMBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\Eigenbackground.cpp" />
+    <ClCompile Include="..\package_bgs\dp\Error.cpp" />
+    <ClCompile Include="..\package_bgs\dp\GrimsonGMM.cpp" />
+    <ClCompile Include="..\package_bgs\dp\Image.cpp" />
+    <ClCompile Include="..\package_bgs\dp\MeanBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\PratiMediodBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\TextureBGS.cpp" />
+    <ClCompile Include="..\package_bgs\dp\WrenGA.cpp" />
+    <ClCompile Include="..\package_bgs\dp\ZivkovicAGMM.cpp" />
+    <ClCompile Include="..\package_bgs\FrameDifferenceBGS.cpp" />
+    <ClCompile Include="..\package_bgs\jmo\blob.cpp" />
+    <ClCompile Include="..\package_bgs\jmo\BlobExtraction.cpp" />
+    <ClCompile Include="..\package_bgs\jmo\BlobResult.cpp" />
+    <ClCompile Include="..\package_bgs\jmo\CMultiLayerBGS.cpp" />
+    <ClCompile Include="..\package_bgs\jmo\LocalBinaryPattern.cpp" />
+    <ClCompile Include="..\package_bgs\jmo\MultiLayerBGS.cpp" />
+    <ClCompile Include="..\package_bgs\lb\BGModel.cpp" />
+    <ClCompile Include="..\package_bgs\lb\BGModelFuzzyGauss.cpp" />
+    <ClCompile Include="..\package_bgs\lb\BGModelFuzzySom.cpp" />
+    <ClCompile Include="..\package_bgs\lb\BGModelGauss.cpp" />
+    <ClCompile Include="..\package_bgs\lb\BGModelMog.cpp" />
+    <ClCompile Include="..\package_bgs\lb\BGModelSom.cpp" />
+    <ClCompile Include="..\package_bgs\lb\LBAdaptiveSOM.cpp" />
+    <ClCompile Include="..\package_bgs\lb\LBFuzzyAdaptiveSOM.cpp" />
+    <ClCompile Include="..\package_bgs\lb\LBFuzzyGaussian.cpp" />
+    <ClCompile Include="..\package_bgs\lb\LBMixtureOfGaussians.cpp" />
+    <ClCompile Include="..\package_bgs\lb\LBSimpleGaussian.cpp" />
+    <ClCompile Include="..\package_bgs\MixtureOfGaussianV1BGS.cpp" />
+    <ClCompile Include="..\package_bgs\MixtureOfGaussianV2BGS.cpp" />
+    <ClCompile Include="..\package_bgs\StaticFrameDifferenceBGS.cpp" />
+    <ClCompile Include="..\package_bgs\tb\FuzzyChoquetIntegral.cpp" />
+    <ClCompile Include="..\package_bgs\tb\FuzzySugenoIntegral.cpp" />
+    <ClCompile Include="..\package_bgs\tb\FuzzyUtils.cpp" />
+    <ClCompile Include="..\package_bgs\tb\PerformanceUtils.cpp" />
+    <ClCompile Include="..\package_bgs\tb\PixelUtils.cpp" />
+    <ClCompile Include="..\package_bgs\tb\T2FGMM.cpp" />
+    <ClCompile Include="..\package_bgs\tb\T2FGMM_UM.cpp" />
+    <ClCompile Include="..\package_bgs\tb\T2FGMM_UV.cpp" />
+    <ClCompile Include="..\package_bgs\WeightedMovingMeanBGS.cpp" />
+    <ClCompile Include="..\package_bgs\WeightedMovingVarianceBGS.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\package_analysis\ForegroundMaskAnalysis.h" />
+    <ClInclude Include="..\package_bgs\AdaptiveBackgroundLearning.h" />
+    <ClInclude Include="..\package_bgs\ae\KDE.h" />
+    <ClInclude Include="..\package_bgs\ae\KernelTable.h" />
+    <ClInclude Include="..\package_bgs\ae\NPBGmodel.h" />
+    <ClInclude Include="..\package_bgs\ae\NPBGSubtractor.h" />
+    <ClInclude Include="..\package_bgs\av\TBackground.h" />
+    <ClInclude Include="..\package_bgs\av\TBackgroundVuMeter.h" />
+    <ClInclude Include="..\package_bgs\av\VuMeter.h" />
+    <ClInclude Include="..\package_bgs\dp\AdaptiveMedianBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\Bgs.h" />
+    <ClInclude Include="..\package_bgs\dp\BgsParams.h" />
+    <ClInclude Include="..\package_bgs\dp\Blob.h" />
+    <ClInclude Include="..\package_bgs\dp\BlobExtraction.h" />
+    <ClInclude Include="..\package_bgs\dp\BlobResult.h" />
+    <ClInclude Include="..\package_bgs\dp\ConnectedComponents.h" />
+    <ClInclude Include="..\package_bgs\dp\DPAdaptiveMedianBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\DPEigenbackgroundBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\DPGrimsonGMMBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\DPMeanBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\DPPratiMediodBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\DPTextureBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\DPWrenGABGS.h" />
+    <ClInclude Include="..\package_bgs\dp\DPZivkovicAGMMBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\Eigenbackground.h" />
+    <ClInclude Include="..\package_bgs\dp\Error.h" />
+    <ClInclude Include="..\package_bgs\dp\GrimsonGMM.h" />
+    <ClInclude Include="..\package_bgs\dp\Image.h" />
+    <ClInclude Include="..\package_bgs\dp\MeanBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\PratiMediodBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\TextureBGS.h" />
+    <ClInclude Include="..\package_bgs\dp\WrenGA.h" />
+    <ClInclude Include="..\package_bgs\dp\ZivkovicAGMM.h" />
+    <ClInclude Include="..\package_bgs\FrameDifferenceBGS.h" />
+    <ClInclude Include="..\package_bgs\IBGS.h" />
+    <ClInclude Include="..\package_bgs\jmo\BackgroundSubtractionAPI.h" />
+    <ClInclude Include="..\package_bgs\jmo\BGS.h" />
+    <ClInclude Include="..\package_bgs\jmo\blob.h" />
+    <ClInclude Include="..\package_bgs\jmo\BlobExtraction.h" />
+    <ClInclude Include="..\package_bgs\jmo\BlobLibraryConfiguration.h" />
+    <ClInclude Include="..\package_bgs\jmo\BlobResult.h" />
+    <ClInclude Include="..\package_bgs\jmo\CMultiLayerBGS.h" />
+    <ClInclude Include="..\package_bgs\jmo\LocalBinaryPattern.h" />
+    <ClInclude Include="..\package_bgs\jmo\MultiLayerBGS.h" />
+    <ClInclude Include="..\package_bgs\jmo\OpenCvDataConversion.h" />
+    <ClInclude Include="..\package_bgs\lb\BGModel.h" />
+    <ClInclude Include="..\package_bgs\lb\BGModelFuzzyGauss.h" />
+    <ClInclude Include="..\package_bgs\lb\BGModelFuzzySom.h" />
+    <ClInclude Include="..\package_bgs\lb\BGModelGauss.h" />
+    <ClInclude Include="..\package_bgs\lb\BGModelMog.h" />
+    <ClInclude Include="..\package_bgs\lb\BGModelSom.h" />
+    <ClInclude Include="..\package_bgs\lb\LBAdaptiveSOM.h" />
+    <ClInclude Include="..\package_bgs\lb\LBFuzzyAdaptiveSOM.h" />
+    <ClInclude Include="..\package_bgs\lb\LBFuzzyGaussian.h" />
+    <ClInclude Include="..\package_bgs\lb\LBMixtureOfGaussians.h" />
+    <ClInclude Include="..\package_bgs\lb\LBSimpleGaussian.h" />
+    <ClInclude Include="..\package_bgs\lb\Types.h" />
+    <ClInclude Include="..\package_bgs\MixtureOfGaussianV1BGS.h" />
+    <ClInclude Include="..\package_bgs\MixtureOfGaussianV2BGS.h" />
+    <ClInclude Include="..\package_bgs\StaticFrameDifferenceBGS.h" />
+    <ClInclude Include="..\package_bgs\tb\FuzzyChoquetIntegral.h" />
+    <ClInclude Include="..\package_bgs\tb\FuzzySugenoIntegral.h" />
+    <ClInclude Include="..\package_bgs\tb\FuzzyUtils.h" />
+    <ClInclude Include="..\package_bgs\tb\PerformanceUtils.h" />
+    <ClInclude Include="..\package_bgs\tb\PixelUtils.h" />
+    <ClInclude Include="..\package_bgs\tb\T2FGMM.h" />
+    <ClInclude Include="..\package_bgs\tb\T2FGMM_UM.h" />
+    <ClInclude Include="..\package_bgs\tb\T2FGMM_UV.h" />
+    <ClInclude Include="..\package_bgs\WeightedMovingMeanBGS.h" />
+    <ClInclude Include="..\package_bgs\WeightedMovingVarianceBGS.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/vs2010/bgslibrary.vcxproj.filters b/vs2010/bgslibrary.vcxproj.filters
new file mode 100644
index 0000000..7e5b5bb
--- /dev/null
+++ b/vs2010/bgslibrary.vcxproj.filters
@@ -0,0 +1,444 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+    <Filter Include="Header Files\package_analysis">
+      <UniqueIdentifier>{c0cc904e-4bfa-4fd6-ae45-1fe712768308}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\package_bgs">
+      <UniqueIdentifier>{7d606ab8-5bf7-4ec2-b897-d15eb1de0263}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\package_bgs\dp">
+      <UniqueIdentifier>{dba27670-a93f-4a25-99e1-948bac19456b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\package_bgs\jmo">
+      <UniqueIdentifier>{c2f770a4-2284-4a79-a4e3-f4cbf57b3f29}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\package_bgs\lb">
+      <UniqueIdentifier>{6830e1db-4298-4dae-87c8-615340f28f8f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\package_bgs\tb">
+      <UniqueIdentifier>{781e472a-2256-437a-ae26-8611653f8882}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\package_bgs\ae">
+      <UniqueIdentifier>{ec53c3c1-ec12-4d06-a330-dcc626d220f8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\package_bgs\av">
+      <UniqueIdentifier>{5c8f2d51-2d62-4d20-a7bb-b18a28688acd}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\Demo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_analysis\ForegroundMaskAnalysis.cpp">
+      <Filter>Header Files\package_analysis</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\AdaptiveBackgroundLearning.cpp">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\FrameDifferenceBGS.cpp">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\MixtureOfGaussianV1BGS.cpp">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\MixtureOfGaussianV2BGS.cpp">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\StaticFrameDifferenceBGS.cpp">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\WeightedMovingMeanBGS.cpp">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\WeightedMovingVarianceBGS.cpp">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\jmo\blob.cpp">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\jmo\BlobExtraction.cpp">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\jmo\BlobResult.cpp">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\jmo\CMultiLayerBGS.cpp">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\jmo\LocalBinaryPattern.cpp">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\jmo\MultiLayerBGS.cpp">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\BGModel.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\BGModelFuzzyGauss.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\BGModelFuzzySom.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\BGModelGauss.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\BGModelMog.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\BGModelSom.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\LBAdaptiveSOM.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\LBFuzzyAdaptiveSOM.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\LBFuzzyGaussian.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\LBMixtureOfGaussians.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\lb\LBSimpleGaussian.cpp">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\tb\FuzzyChoquetIntegral.cpp">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\tb\FuzzySugenoIntegral.cpp">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\tb\FuzzyUtils.cpp">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\tb\PerformanceUtils.cpp">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\tb\PixelUtils.cpp">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\tb\T2FGMM.cpp">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\tb\T2FGMM_UM.cpp">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\tb\T2FGMM_UV.cpp">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\ae\KDE.cpp">
+      <Filter>Header Files\package_bgs\ae</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\ae\KernelTable.cpp">
+      <Filter>Header Files\package_bgs\ae</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\ae\NPBGmodel.cpp">
+      <Filter>Header Files\package_bgs\ae</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\ae\NPBGSubtractor.cpp">
+      <Filter>Header Files\package_bgs\ae</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\av\TBackground.cpp">
+      <Filter>Header Files\package_bgs\av</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\av\TBackgroundVuMeter.cpp">
+      <Filter>Header Files\package_bgs\av</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\av\VuMeter.cpp">
+      <Filter>Header Files\package_bgs\av</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\AdaptiveMedianBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\Blob.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\BlobExtraction.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\BlobResult.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\ConnectedComponents.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\DPAdaptiveMedianBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\DPEigenbackgroundBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\DPGrimsonGMMBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\DPMeanBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\DPPratiMediodBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\DPTextureBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\DPWrenGABGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\DPZivkovicAGMMBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\Eigenbackground.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\Error.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\GrimsonGMM.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\Image.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\MeanBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\PratiMediodBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\TextureBGS.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\WrenGA.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+    <ClCompile Include="..\package_bgs\dp\ZivkovicAGMM.cpp">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\package_analysis\ForegroundMaskAnalysis.h">
+      <Filter>Header Files\package_analysis</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\AdaptiveBackgroundLearning.h">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\FrameDifferenceBGS.h">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\IBGS.h">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\MixtureOfGaussianV1BGS.h">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\MixtureOfGaussianV2BGS.h">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\StaticFrameDifferenceBGS.h">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\WeightedMovingMeanBGS.h">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\WeightedMovingVarianceBGS.h">
+      <Filter>Header Files\package_bgs</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\jmo\BackgroundSubtractionAPI.h">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\jmo\BGS.h">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\jmo\blob.h">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\jmo\BlobExtraction.h">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\jmo\BlobLibraryConfiguration.h">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\jmo\BlobResult.h">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\jmo\CMultiLayerBGS.h">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\jmo\LocalBinaryPattern.h">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\jmo\MultiLayerBGS.h">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\jmo\OpenCvDataConversion.h">
+      <Filter>Header Files\package_bgs\jmo</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\BGModel.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\BGModelFuzzyGauss.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\BGModelFuzzySom.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\BGModelGauss.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\BGModelMog.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\BGModelSom.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\LBAdaptiveSOM.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\LBFuzzyAdaptiveSOM.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\LBFuzzyGaussian.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\LBMixtureOfGaussians.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\LBSimpleGaussian.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\lb\Types.h">
+      <Filter>Header Files\package_bgs\lb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\tb\FuzzyChoquetIntegral.h">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\tb\FuzzySugenoIntegral.h">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\tb\FuzzyUtils.h">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\tb\PerformanceUtils.h">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\tb\PixelUtils.h">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\tb\T2FGMM.h">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\tb\T2FGMM_UM.h">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\tb\T2FGMM_UV.h">
+      <Filter>Header Files\package_bgs\tb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\ae\KDE.h">
+      <Filter>Header Files\package_bgs\ae</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\ae\KernelTable.h">
+      <Filter>Header Files\package_bgs\ae</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\ae\NPBGmodel.h">
+      <Filter>Header Files\package_bgs\ae</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\ae\NPBGSubtractor.h">
+      <Filter>Header Files\package_bgs\ae</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\av\TBackground.h">
+      <Filter>Header Files\package_bgs\av</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\av\TBackgroundVuMeter.h">
+      <Filter>Header Files\package_bgs\av</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\av\VuMeter.h">
+      <Filter>Header Files\package_bgs\av</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\AdaptiveMedianBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\Bgs.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\BgsParams.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\Blob.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\BlobExtraction.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\BlobResult.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\ConnectedComponents.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\DPAdaptiveMedianBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\DPEigenbackgroundBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\DPGrimsonGMMBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\DPMeanBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\DPPratiMediodBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\DPTextureBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\DPWrenGABGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\DPZivkovicAGMMBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\Eigenbackground.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\Error.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\GrimsonGMM.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\Image.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\MeanBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\PratiMediodBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\TextureBGS.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\WrenGA.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+    <ClInclude Include="..\package_bgs\dp\ZivkovicAGMM.h">
+      <Filter>Header Files\package_bgs\dp</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/vs2010/bgslibrary.vcxproj.user b/vs2010/bgslibrary.vcxproj.user
new file mode 100644
index 0000000..2dd78fa
--- /dev/null
+++ b/vs2010/bgslibrary.vcxproj.user
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LocalDebuggerWorkingDirectory>../</LocalDebuggerWorkingDirectory>
+    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+    <LocalDebuggerCommandArguments>./dataset/video.avi</LocalDebuggerCommandArguments>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
-- 
GitLab