Classifiers.h
上传用户:lijia5631
上传日期:2008-11-10
资源大小:1214k
文件大小:6k
源码类别:

视频捕捉/采集

开发平台:

MultiPlatform

  1. /**
  2.   * cubicles
  3.   *
  4.   * This is an implementation of the Viola-Jones object detection 
  5.   * method and some extensions.  The code is mostly platform-
  6.   * independent and uses only standard C and C++ libraries.  It
  7.   * can make use of MPI for parallel training and a few Windows
  8.   * MFC functions for classifier display.
  9.   *
  10.   * Mathias Kolsch, matz@cs.ucsb.edu
  11.   *
  12.   * $Id: Classifiers.h,v 1.34 2004/11/17 00:12:13 matz Exp $
  13. **/
  14. // Classifiers.h: header file for weak and strong
  15. // classifiers.  A weak classifier is an IntegralFeature and
  16. // a threshold.  A strong classifier is a linear combination
  17. // of weak classifiers.
  18. //
  19. ////////////////////////////////////////////////////////////////////
  20. //
  21. // By downloading, copying, installing or using the software you 
  22. // agree to this license.  If you do not agree to this license, 
  23. // do not download, install, copy or use the software.
  24. //
  25. // Copyright (C) 2004, Mathias Kolsch, all rights reserved.
  26. // Third party copyrights are property of their respective owners.
  27. //
  28. // Redistribution and use in binary form, with or without 
  29. // modification, is permitted for non-commercial purposes only.
  30. // Redistribution in source, with or without modification, is 
  31. // prohibited without prior written permission.
  32. // If granted in writing in another document, personal use and 
  33. // modification are permitted provided that the following two
  34. // conditions are met:
  35. //
  36. // 1.Any modification of source code must retain the above 
  37. //   copyright notice, this list of conditions and the following 
  38. //   disclaimer.
  39. //
  40. // 2.Redistribution's in binary form must reproduce the above 
  41. //   copyright notice, this list of conditions and the following 
  42. //   disclaimer in the documentation and/or other materials provided
  43. //   with the distribution.
  44. //
  45. // This software is provided by the copyright holders and 
  46. // contributors "as is" and any express or implied warranties, 
  47. // including, but not limited to, the implied warranties of 
  48. // merchantability and fitness for a particular purpose are 
  49. // disclaimed.  In no event shall the copyright holder or 
  50. // contributors be liable for any direct, indirect, incidental, 
  51. // special, exemplary, or consequential damages (including, but not 
  52. // limited to, procurement of substitute goods or services; loss of 
  53. // use, data, or profits; or business interruption) however caused
  54. // and on any theory of liability, whether in contract, strict 
  55. // liability, or tort (including negligence or otherwise) arising 
  56. // in any way out of the use of this software, even if advised of 
  57. // the possibility of such damage.
  58. //
  59. ////////////////////////////////////////////////////////////////////
  60. #if !defined(_CLASSIFIERS_H__INCLUDED_)
  61. #define _CLASSIFIERS_H__INCLUDED_
  62. #if _MSC_VER > 1000
  63. #pragma once
  64. #endif // _MSC_VER > 1000
  65. #include "IntegralImage.h"
  66. #include "IntegralFeatures.h"
  67. /////////////////////////////////////////////////////////////////////////////
  68. //
  69. // class CWeakClassifier
  70. //
  71. class CWeakClassifier {
  72.  public:
  73.   CWeakClassifier();
  74.   CWeakClassifier(const CWeakClassifier& frm);
  75.   CWeakClassifier(CIntegralFeature* pFeature, 
  76.                   bool is_lt, double thresh, double error);
  77.   ~CWeakClassifier();
  78.   
  79.   CWeakClassifier& operator=(const CWeakClassifier& from);
  80.   bool operator==(const CWeakClassifier& from) const;
  81.   
  82.   bool Evaluate(const CIntegralImage& image) const;
  83.   bool Evaluate(const CIntegralImage& image, 
  84.                 double mean_adjust, double stddev, int left, int top) const;
  85. #ifdef WITH_TRAINING
  86.   bool Evaluate(const ExampleList::const_iterator example) const;
  87. #endif // WITH_TRAINING
  88.   void ScaleFeatureEvenly(double scale_x, double scale_y,
  89.                           int scaled_template_width, 
  90.                           int scaled_template_height);
  91.   bool IsValid() const;
  92.   void CopyFrom(const CWeakClassifier& frm, 
  93.                 const CIntegralFeature& feature);
  94.   void CopyFrom(const CWeakClassifier& frm);
  95.   const CIntegralFeature& GetFeature() const;
  96.   void ParseFrom(istream& is, int template_width, int template_height);
  97.   int GetComputeCost() const;
  98.   double GetThreshold() const { return threshold; }
  99.   void SetThreshold(double thresh);
  100.   bool GetSignLT() const { return sign_lt; }
  101.   void SetSignLT(bool lt) { sign_lt = lt; }
  102.   double GetTrainingError() const { return train_error; }
  103.   void SetTrainingError(double error) { train_error = error; }
  104.   friend ostream& operator<<(ostream& os, const CWeakClassifier& clsf);
  105.   
  106.  private:
  107.   bool  sign_lt;
  108.   double  threshold;
  109.   double  train_error;
  110.  public:
  111.   CIntegralFeature*          feature;
  112.   // less than if true, greater than otherwise
  113.   static const double            MAX_THRESHOLD;
  114.   static const double            MIN_THRESHOLD;
  115.   static const double            EPSILON_THRESHOLD;
  116.   static const int               THRESHOLD_PRECISION;
  117. };
  118. /////////////////////////////////////////////////////////////////////////////
  119. //
  120. // class CStrongClassifier
  121. //
  122. class CStrongClassifier {
  123.  public:
  124.   CStrongClassifier();
  125.   CStrongClassifier(const CStrongClassifier& from);
  126.   ~CStrongClassifier();
  127.   
  128.   CStrongClassifier& operator=(const CStrongClassifier& from);
  129.   
  130.   void AddWeakClassifier(CWeakClassifier* pClassifier, double alpha);
  131.   int RemoveLastWeakClassifier();
  132.   bool Evaluate(const CIntegralImage& image) const;
  133.   bool Evaluate(const CIntegralImage& image,
  134.                 double mean_adjust, double stddev, int left, int top) const;
  135.   void EvaluateThreshs(const CIntegralImage& image,
  136.                        double mean_adjust, double stddev,
  137.                        int left, int top,
  138.                        CIntVector& numMatches,
  139.                        const CDoubleVector& threshs) const;
  140.   double GetAlphasThreshold() {return m_alphas_thresh;}
  141.   void SetAlphasThreshold(double thresh) {m_alphas_thresh=thresh;}
  142.   void ScaleFeaturesEvenly(double scale_x, double scale_y,
  143.                            int scaled_template_width, 
  144.                            int scaled_template_height);
  145.   void ParseFrom(istream& is, int template_width, int template_height);
  146.   int GetComputeCost() const;
  147.   
  148.   // member access
  149.   int GetNumWeakClassifiers() const {return m_num_hyps; }
  150.   const CWeakClassifier& GetWeakClassifier(int num) const;
  151.   
  152.   friend ostream& operator<<(ostream& os, const CStrongClassifier& clsf);
  153.   
  154.  private:
  155.   CWeakClassifier**                 m_pClassifiers;
  156.   int m_num_hyps; 
  157.   double* m_alphas;
  158.   double m_sum_alphas;
  159.   double m_alphas_thresh;
  160. };
  161. /////////////////////////////////////////////////////////////////////////////
  162. #endif // !defined(_CLASSIFIERS_H__INCLUDED_)