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

视频捕捉/采集

开发平台:

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: IntegralFeatures.h,v 1.37 2005/10/28 17:47:04 matz Exp $
  13. **/
  14. // IntegralFeatures describe the rectangular areas whose pixel
  15. // sums are compared to a weak classifier's threshold.  There
  16. // are many different types of IntegralFeatures.
  17. //
  18. ////////////////////////////////////////////////////////////////////
  19. //
  20. // By downloading, copying, installing or using the software you 
  21. // agree to this license.  If you do not agree to this license, 
  22. // do not download, install, copy or use the software.
  23. //
  24. // Copyright (C) 2004, Mathias Kolsch, all rights reserved.
  25. // Third party copyrights are property of their respective owners.
  26. //
  27. // Redistribution and use in binary form, with or without 
  28. // modification, is permitted for non-commercial purposes only.
  29. // Redistribution in source, with or without modification, is 
  30. // prohibited without prior written permission.
  31. // If granted in writing in another document, personal use and 
  32. // modification are permitted provided that the following two
  33. // conditions are met:
  34. //
  35. // 1.Any modification of source code must retain the above 
  36. //   copyright notice, this list of conditions and the following 
  37. //   disclaimer.
  38. //
  39. // 2.Redistribution's in binary form must reproduce the above 
  40. //   copyright notice, this list of conditions and the following 
  41. //   disclaimer in the documentation and/or other materials provided
  42. //   with the distribution.
  43. //
  44. // This software is provided by the copyright holders and 
  45. // contributors "as is" and any express or implied warranties, 
  46. // including, but not limited to, the implied warranties of 
  47. // merchantability and fitness for a particular purpose are 
  48. // disclaimed.  In no event shall the copyright holder or 
  49. // contributors be liable for any direct, indirect, incidental, 
  50. // special, exemplary, or consequential damages (including, but not 
  51. // limited to, procurement of substitute goods or services; loss of 
  52. // use, data, or profits; or business interruption) however caused
  53. // and on any theory of liability, whether in contract, strict 
  54. // liability, or tort (including negligence or otherwise) arising 
  55. // in any way out of the use of this software, even if advised of 
  56. // the possibility of such damage.
  57. //
  58. ////////////////////////////////////////////////////////////////////
  59. #if !defined(_INTEGRALFEATURES_H__INCLUDED_)
  60. #define _INTEGRALFEATURES_H__INCLUDED_
  61. #if _MSC_VER > 1000
  62. #pragma once
  63. #endif // _MSC_VER > 1000
  64. // IntegralFeatures.h : header file
  65. //
  66. /*
  67. * IntegrationTemplates
  68. *
  69. * This is an implementation of the object recognition method suggested
  70. * by Viola and Jones.
  71. *
  72. * Matz matz@cs.ucsb.edu
  73. */
  74. #include "IntegralImage.h"
  75. //#include "FeatureTransformers.h"
  76. #ifdef WITH_TRAINING
  77. #include "ExampleIntegral.h"
  78. #endif // WITH_TRAINING
  79. #pragma warning (disable: 1125)
  80. //namespace {  // cubicles
  81. // define the "featnum" data type - it should be larger than a 32bit integer
  82. #ifdef WIN32
  83. typedef unsigned __int64 featnum;
  84. #define FEATNUM_MAX 0xffffffffffffffff
  85. #define IT_INVALID_FEATURE FEATNUM_MAX
  86. #define IT_MAX_VALID_FEATURE (FEATNUM_MAX-1)
  87. #else
  88. typedef unsigned long long int featnum;
  89. #define FEATNUM_MAX ULONG_LONG_MAX
  90. #define IT_INVALID_FEATURE ULONG_LONG_MAX
  91. #define IT_MAX_VALID_FEATURE (ULONG_LONG_MAX-1)
  92. #endif // WIN32
  93. typedef vector<featnum> CFeatnumVector;
  94. /////////////////////////////////////////////////////////////////////////////
  95. //
  96. // class CIntegralFeature
  97. //
  98. class CIntegralFeature {
  99. protected:
  100.   CIntegralFeature(int templateWidth, int templateHeight, 
  101.                    featnum num_incarnations, bool is_partial, int cost);
  102.   
  103.  public:
  104.   virtual II_TYPE Compute(const CIntegralImage& image) const = 0;
  105.   virtual II_TYPE ComputeScaled(const CIntegralImage& image, 
  106.                                II_TYPE mean, int left, int top) const = 0;
  107. #ifdef WITH_TRAINING
  108.   II_TYPE Compute(ExampleList::const_iterator example) const;
  109. #endif // WITH_TRAINING
  110.   virtual void SetToFirstIncarnation() = 0;
  111.   virtual bool SetToNextIncarnation() = 0;   // true if has more incarnations
  112.   virtual CIntegralFeature* Copy() const = 0;
  113.   virtual void MakePartialFromCurrentForNumIncarnations(featnum num) = 0;
  114.   static CIntegralFeature* CreateFrom(istream& is, 
  115.                                       int template_width, int template_height);
  116.   featnum GetNumIncarnations() const;
  117.   int GetTemplateWidth() const { return m_template_width; }
  118.   int GetTemplateHeight() const { return m_template_height; }
  119.   void ScaleEvenly(II_TYPE scale_x, II_TYPE scale_y, 
  120.                    int scaled_template_width, int scaled_template_height);
  121.   int GetComputeCost() const {return m_cost;};
  122.   virtual bool Equals(const CIntegralFeature& /*from*/) const 
  123.     { return false; }
  124.   //virtual void Transform(const CFeatureTransformer& transformer) = 0;
  125. #ifdef USE_MFC
  126.   virtual void Draw(CDC* pDC, int x_off, int y_off, int zoomfactor) const = 0;
  127. #endif // USE_MFC
  128.   
  129.   virtual ostream& output(ostream& os) const = 0;
  130.   friend ostream& operator<<(ostream& os, const CIntegralFeature& clsf);
  131.   
  132.  protected:
  133.   virtual void Scale(II_TYPE scale_x, II_TYPE scale_y) = 0;
  134.   virtual void SetNonOverlap() = 0;
  135.   virtual void EvenOutScales(II_TYPE* pScale_x, II_TYPE* pScale_y, 
  136.                              int scaled_template_width, 
  137.                              int scaled_template_height) = 0;
  138.   enum {
  139.     COST_ADD = 0,
  140.     COST_GET = 1
  141.   };
  142.   static const II_TYPE SCALE_DIFFERENCE_EPSILON;
  143.   
  144.  protected:
  145.   int           m_template_width, m_template_height;
  146.   featnum       m_num_incarnations;
  147.   bool          m_is_partial;
  148.   featnum       m_remaining_incarnations, m_stop_after_num_incarnations;
  149.   II_TYPE        m_global_scale;
  150.   int           m_non_overlap;
  151.   int           m_cost;
  152. };
  153. /////////////////////////////////////////////////////////////////////////////
  154. //
  155. // class CLeftRightIF
  156. //
  157. class CLeftRightIF : public CIntegralFeature {
  158. public:
  159.   CLeftRightIF(int templateWidth, int templateHeight);
  160.   CLeftRightIF(int templateWidth, int templateHeight,
  161.                int _toprow, int _bottomrow,
  162.                int _leftrect_leftcol, int _centercol,
  163.                int _rightrect_rightcol);
  164.   CLeftRightIF(const CLeftRightIF& frm);
  165.   CLeftRightIF(istream& is, int template_width, int template_height);
  166.   
  167.   virtual II_TYPE Compute(const CIntegralImage& image) const;
  168.   virtual II_TYPE ComputeScaled(const CIntegralImage& image, 
  169.                                II_TYPE mean, int left, int top) const;
  170.   virtual void SetToFirstIncarnation();
  171.   virtual bool SetToNextIncarnation();
  172.   virtual CIntegralFeature* Copy() const;
  173.   virtual void MakePartialFromCurrentForNumIncarnations(featnum num);
  174.   virtual bool Equals(const CLeftRightIF& from) const;
  175.   //virtual void Transform(const CFeatureTransformer& transformer);
  176. #ifdef USE_MFC
  177.   virtual void Draw(CDC* pDC, int x_off, int y_off, int zoomfactor) const;
  178. #endif // USE_MFC
  179.   
  180.   virtual ostream& output(ostream& os) const;
  181.   
  182.  protected:
  183.   virtual void Scale(II_TYPE scale_x, II_TYPE scale_y);
  184.   virtual void SetNonOverlap();
  185.   virtual void EvenOutScales(II_TYPE* pScale_x, II_TYPE* pScale_y, 
  186.                              int scaled_template_width, 
  187.                              int scaled_template_height);
  188.   
  189.   
  190.  protected:
  191.   int bottomrow, toprow;
  192.   int leftrect_leftcol, centercol, rightrect_rightcol;
  193.   int start_bottomrow, start_toprow;
  194.   int start_leftrect_leftcol, start_centercol, start_rightrect_rightcol;
  195.   int scaled_bottomrow, scaled_toprow;
  196.   int scaled_leftrect_leftcol, scaled_centercol, scaled_rightrect_rightcol;
  197. };
  198. /////////////////////////////////////////////////////////////////////////////
  199. //
  200. // class CUpDownIF
  201. //
  202. class CUpDownIF : public CIntegralFeature {
  203. public:
  204.   CUpDownIF(int templateWidth, int templateHeight);
  205.   CUpDownIF(int templateWidth, int templateHeight,
  206.             int _toprect_toprow, int _centerrow,
  207.             int _bottomrect_bottomrow,
  208.             int _leftcol, int _rightcol);
  209.   CUpDownIF(const CUpDownIF& frm);
  210.   CUpDownIF(istream& is, int template_width, int template_height);
  211.   
  212.   virtual II_TYPE Compute(const CIntegralImage& image) const;
  213.   virtual II_TYPE ComputeScaled(const CIntegralImage& image, 
  214.                                II_TYPE mean, int left, int top) const;
  215.   virtual void SetToFirstIncarnation();
  216.   virtual bool SetToNextIncarnation();
  217.   virtual CIntegralFeature* Copy() const;
  218.   virtual void MakePartialFromCurrentForNumIncarnations(featnum num);
  219.   virtual bool Equals(const CUpDownIF& from) const;
  220. //virtual void Transform(const CFeatureTransformer& transformer);
  221. #ifdef USE_MFC
  222.   virtual void Draw(CDC* pDC, int x_off, int y_off, int zoomfactor) const;
  223. #endif // USE_MFC
  224.   
  225.   virtual ostream& output(ostream& os) const;
  226.   
  227.  protected:
  228.   virtual void Scale(II_TYPE scale_x, II_TYPE scale_y);
  229.   virtual void SetNonOverlap();
  230.   virtual void EvenOutScales(II_TYPE* pScale_x, II_TYPE* pScale_y, 
  231.                              int scaled_template_width, 
  232.                              int scaled_template_height);
  233. protected:
  234.   int toprect_toprow, centerrow, bottomrect_bottomrow;
  235.   int leftcol, rightcol;
  236.   int start_toprect_toprow, start_centerrow, start_bottomrect_bottomrow;
  237.   int start_leftcol, start_rightcol;
  238.   int scaled_toprect_toprow, scaled_centerrow, scaled_bottomrect_bottomrow;
  239.   int scaled_leftcol, scaled_rightcol;
  240. };
  241. /////////////////////////////////////////////////////////////////////////////
  242. //
  243. // class CLeftCenterRightIF
  244. //
  245. class CLeftCenterRightIF : public CIntegralFeature {
  246. public:
  247.   CLeftCenterRightIF(int templateWidth, int templateHeight);
  248.   CLeftCenterRightIF(int templateWidth, int templateHeight,
  249.                      int _toprow, int _bottomrow,
  250.                      int _leftrect_leftcol, int _leftrect_rightcol,
  251.                      int _rightrect_leftcol, int _rightrect_rightcol);
  252.   CLeftCenterRightIF(const CLeftCenterRightIF& frm);
  253.   CLeftCenterRightIF(istream& is, int template_width, int template_height);
  254.   
  255.   virtual II_TYPE Compute(const CIntegralImage& image) const;
  256.   virtual II_TYPE ComputeScaled(const CIntegralImage& image, 
  257.                                II_TYPE mean, int left, int top) const;
  258.   virtual void SetToFirstIncarnation();
  259.   virtual bool SetToNextIncarnation();
  260.   virtual CIntegralFeature* Copy() const;
  261.   virtual void MakePartialFromCurrentForNumIncarnations(featnum num);
  262.   virtual bool Equals(const CLeftCenterRightIF& from) const;
  263.   //virtual void Transform(const CFeatureTransformer& transformer);
  264. #ifdef USE_MFC
  265.   virtual void Draw(CDC* pDC, int x_off, int y_off, int zoomfactor) const;
  266. #endif // USE_MFC
  267.   
  268.   virtual ostream& output(ostream& os) const;
  269.   
  270.  protected:
  271.   virtual void Scale(II_TYPE scale_x, II_TYPE scale_y);
  272.   virtual void SetNonOverlap();
  273.   virtual void EvenOutScales(II_TYPE* pScale_x, II_TYPE* pScale_y, 
  274.                              int scaled_template_width, 
  275.                              int scaled_template_height);
  276.   
  277.   
  278.  protected:
  279.   int toprow, bottomrow;
  280.   int leftrect_leftcol, leftrect_rightcol;
  281.   int rightrect_leftcol, rightrect_rightcol;
  282.   int start_toprow, start_bottomrow;
  283.   int start_leftrect_leftcol, start_leftrect_rightcol;
  284.   int start_rightrect_leftcol, start_rightrect_rightcol;
  285.   int scaled_toprow, scaled_bottomrow;
  286.   int scaled_leftrect_leftcol, scaled_leftrect_rightcol;
  287.   int scaled_rightrect_leftcol, scaled_rightrect_rightcol;
  288. };
  289. /////////////////////////////////////////////////////////////////////////////
  290. //
  291. // class CSevenColumnsIF
  292. //
  293. class CSevenColumnsIF : public CIntegralFeature {
  294.  public:
  295.   CSevenColumnsIF(int templateWidth, int templateHeight);
  296.   CSevenColumnsIF(int templateWidth, int templateHeight,
  297.                   int _toprow, int _bottomrow,
  298.                   int _1, int _2, int _3, int _4, int _5, int _6,
  299.                   int _7, int _8);
  300.   CSevenColumnsIF(const CSevenColumnsIF& frm);
  301.   CSevenColumnsIF(istream& is, int template_width, int template_height);
  302.   
  303.   virtual II_TYPE Compute(const CIntegralImage& image) const;
  304.   virtual II_TYPE ComputeScaled(const CIntegralImage& image, 
  305.                                II_TYPE mean, int left, int top) const;
  306.   virtual void SetToFirstIncarnation();
  307.   virtual bool SetToNextIncarnation();
  308.   virtual CIntegralFeature* Copy() const;
  309.   virtual void MakePartialFromCurrentForNumIncarnations(featnum num);
  310.   virtual bool Equals(const CSevenColumnsIF& from) const;
  311. #ifdef USE_MFC
  312.   virtual void Draw(CDC* pDC, int x_off, int y_off, int zoomfactor) const;
  313. #endif // USE_MFC
  314.   virtual ostream& output(ostream& os) const;
  315.   
  316.  protected:
  317.   virtual void Scale(II_TYPE scale_x, II_TYPE scale_y);
  318.   virtual void SetNonOverlap();
  319.   virtual void EvenOutScales(II_TYPE* pScale_x, II_TYPE* pScale_y, 
  320.                              int scaled_template_width, 
  321.                              int scaled_template_height);
  322.   
  323.  protected:
  324.   int bottomrow, toprow;
  325.   int col1_left, col2_left, col3_left, col4_left, 
  326.     col5_left, col6_left, col7_left, col7_right;
  327.   int start_bottomrow, start_toprow;
  328.   int start_col1_left, start_col2_left, start_col3_left, start_col4_left, 
  329.     start_col5_left, start_col6_left, start_col7_left, start_col7_right;
  330.   int scaled_bottomrow, scaled_toprow;
  331.   int scaled_col1_left, scaled_col2_left, scaled_col3_left, scaled_col4_left, 
  332.     scaled_col5_left, scaled_col6_left, scaled_col7_left, scaled_col7_right;
  333. };
  334. /////////////////////////////////////////////////////////////////////////////
  335. //
  336. // class CDiagIF
  337. //
  338. class CDiagIF : public CIntegralFeature {
  339.  public:
  340.   CDiagIF(int templateWidth, int templateHeight);
  341.   CDiagIF(int templateWidth, int templateHeight,
  342.           int _toprect_toprow, int _centerrow,
  343.           int _bottomrect_bottomrow,
  344.           int _leftrect_leftcol, int _centercol,
  345.           int _rightrect_rightcol);
  346.   CDiagIF(const CDiagIF& frm);
  347.   CDiagIF(istream& is, int template_width, int template_height);
  348.   
  349.   virtual II_TYPE Compute(const CIntegralImage& image) const;
  350.   virtual II_TYPE ComputeScaled(const CIntegralImage& image, 
  351.                                II_TYPE mean, int left, int top) const;
  352.   virtual void SetToFirstIncarnation();
  353.   virtual bool SetToNextIncarnation();
  354.   virtual CIntegralFeature* Copy() const;
  355.   virtual void MakePartialFromCurrentForNumIncarnations(featnum num);
  356.   void ScaleX(II_TYPE scale_x);
  357.   void ScaleY(II_TYPE scale_y);
  358.   virtual bool Equals(const CDiagIF& from) const;
  359.   //virtual void Transform(const CFeatureTransformer& transformer);
  360. #ifdef USE_MFC
  361.   virtual void Draw(CDC* pDC, int x_off, int y_off, int zoomfactor) const;
  362. #endif // USE_MFC
  363.   
  364.   virtual ostream& output(ostream& os) const;
  365.   
  366.  protected:
  367.   virtual void Scale(II_TYPE scale_x, II_TYPE scale_y);
  368.   virtual void SetNonOverlap();
  369.   virtual void EvenOutScales(II_TYPE* pScale_x, II_TYPE* pScale_y, 
  370.                              int scaled_template_width, 
  371.                              int scaled_template_height);
  372.   
  373.   
  374.  protected:
  375.   int toprect_toprow, centerrow, bottomrect_bottomrow;
  376.   int leftrect_leftcol, centercol, rightrect_rightcol;
  377.   int start_toprect_toprow, start_centerrow, start_bottomrect_bottomrow;
  378.   int start_leftrect_leftcol, start_centercol, start_rightrect_rightcol;
  379.   int scaled_toprect_toprow, scaled_centerrow, scaled_bottomrect_bottomrow;
  380.   int scaled_leftrect_leftcol, scaled_centercol, scaled_rightrect_rightcol;
  381. };
  382. /////////////////////////////////////////////////////////////////////////////
  383. //
  384. // class CFourBoxesIF
  385. //
  386. class CFourBoxesIF : public CIntegralFeature {
  387.  public:
  388.   CFourBoxesIF(int templateWidth, int templateHeight);
  389.   CFourBoxesIF(int templateWidth, int templateHeight,
  390.                const CRect* pB1, const CRect* pB2,
  391.                const CRect* pB3, const CRect* pB4);
  392.   CFourBoxesIF(const CFourBoxesIF& frm);
  393.   CFourBoxesIF(istream& is, int template_width, int template_height);
  394.   
  395.   virtual II_TYPE Compute(const CIntegralImage& image) const;
  396.   virtual II_TYPE ComputeScaled(const CIntegralImage& image, 
  397.                                II_TYPE mean, int left, int top) const;
  398.   virtual void SetToFirstIncarnation();
  399.   virtual bool SetToNextIncarnation();
  400.   virtual CIntegralFeature* Copy() const;
  401.   virtual void MakePartialFromCurrentForNumIncarnations(featnum num);
  402.   void ScaleX(II_TYPE scale_x);
  403.   void ScaleY(II_TYPE scale_y);
  404.   virtual bool Equals(const CFourBoxesIF& from) const;
  405.   //virtual voiad Transform(const CFeatureTransformer& transformer);
  406. #ifdef USE_MFC
  407.   virtual void Draw(CDC* pDC, int x_off, int y_off, int zoomfactor) const;
  408. #endif // USE_MFC
  409.   
  410.   virtual ostream& output(ostream& os) const;
  411.   
  412.  protected:
  413.   virtual void Scale(II_TYPE scale_x, II_TYPE scale_y);
  414.   virtual void SetNonOverlap();
  415.   virtual void EvenOutScales(II_TYPE* pScale_x, II_TYPE* pScale_y, 
  416.                              int scaled_template_width, 
  417.                              int scaled_template_height);
  418.   
  419.  protected:
  420.   int b1_left, b1_top, b1_right, b1_bottom;
  421.   int b2_left, b2_top, b2_right, b2_bottom;
  422.   int b3_left, b3_top, b3_right, b3_bottom;
  423.   int b4_left, b4_top, b4_right, b4_bottom;
  424.   int start_b1_left, start_b1_top, start_b1_right, start_b1_bottom;
  425.   int start_b2_left, start_b2_top, start_b2_right, start_b2_bottom;
  426.   int start_b3_left, start_b3_top, start_b3_right, start_b3_bottom;
  427.   int start_b4_left, start_b4_top, start_b4_right, start_b4_bottom;
  428.   int scaled_b1_left, scaled_b1_top, scaled_b1_right, scaled_b1_bottom;
  429.   int scaled_b2_left, scaled_b2_top, scaled_b2_right, scaled_b2_bottom;
  430.   int scaled_b3_left, scaled_b3_top, scaled_b3_right, scaled_b3_bottom;
  431.   int scaled_b4_left, scaled_b4_top, scaled_b4_right, scaled_b4_bottom;
  432. };
  433. /////////////////////////////////////////////////////////////////////////////
  434. //
  435. // class CLeftRightSameIF
  436. //
  437. class CLeftRightSameIF : public CLeftRightIF {
  438.  public:
  439.   CLeftRightSameIF(int templateWidth, int templateHeight);
  440.   CLeftRightSameIF(int templateWidth, int templateHeight,
  441.                    int _toprow, int _bottomrow,
  442.                    int _leftrect_leftcol, int _centercol,
  443.                    int _rightrect_rightcol);
  444.   CLeftRightSameIF(const CLeftRightSameIF& frm);
  445.   CLeftRightSameIF(istream& is, int template_width, int template_height);
  446.   
  447.   virtual bool SetToNextIncarnation();
  448.   virtual CIntegralFeature* Copy() const;
  449.   virtual ostream& output(ostream& os) const;
  450. };
  451. /////////////////////////////////////////////////////////////////////////////
  452. //
  453. // class CUpDownSameIF
  454. //
  455. class CUpDownSameIF : public CUpDownIF {
  456.  public:
  457.   CUpDownSameIF(int templateWidth, int templateHeight);
  458.   CUpDownSameIF(int templateWidth, int templateHeight,
  459.                 int _toprect_toprow, int _centerrow,
  460.                 int _bottomrect_bottomrow,
  461.                 int _leftcol, int _rightcol);
  462.   CUpDownSameIF(const CUpDownSameIF& frm);
  463.   CUpDownSameIF(istream& is, int template_width, int template_height);
  464.   
  465.   virtual bool SetToNextIncarnation();
  466.   virtual CIntegralFeature* Copy() const;
  467.   virtual ostream& output(ostream& os) const;
  468. };
  469. /////////////////////////////////////////////////////////////////////////////
  470. //
  471. // class CLeftCenterRightSameIF
  472. //
  473. class CLeftCenterRightSameIF : public CLeftCenterRightIF {
  474.  public:
  475.   CLeftCenterRightSameIF(int templateWidth, int templateHeight);
  476.   CLeftCenterRightSameIF(int templateWidth, int templateHeight,
  477.                          int _toprow, int _bottomrow,
  478.                          int _leftrect_leftcol, int _leftrect_rightcol,
  479.                          int _rightrect_leftcol,
  480.                          int _rightrect_rightcol);
  481.   CLeftCenterRightSameIF(const CLeftCenterRightSameIF& frm);
  482.   CLeftCenterRightSameIF(istream& is, int template_width, int template_height);
  483.   
  484.   virtual bool SetToNextIncarnation();
  485.   virtual CIntegralFeature* Copy() const;
  486.   virtual ostream& output(ostream& os) const;
  487. };
  488. /////////////////////////////////////////////////////////////////////////////
  489. //
  490. // class CSevenColumnsSameIF
  491. //
  492. class CSevenColumnsSameIF : public CSevenColumnsIF {
  493.  public:
  494.   CSevenColumnsSameIF(int templateWidth, int templateHeight);
  495.   CSevenColumnsSameIF(int templateWidth, int templateHeight,
  496.                       int _toprow, int _bottomrow,
  497.                       int _1, int _2, int _3, int _4, int _5, int _6,
  498.                       int _7, int _8);
  499.   CSevenColumnsSameIF(const CSevenColumnsSameIF& frm);
  500.   CSevenColumnsSameIF(istream& is, int template_width, int template_height);
  501.   
  502.   
  503.   virtual bool SetToNextIncarnation();
  504.   virtual CIntegralFeature* Copy() const;
  505.   virtual ostream& output(ostream& os) const;
  506. };
  507. /////////////////////////////////////////////////////////////////////////////
  508. //
  509. // class CSevenColumnsSimilarIF
  510. //
  511. class CSevenColumnsSimilarIF : public CSevenColumnsIF {
  512.  public:
  513.   CSevenColumnsSimilarIF(int templateWidth, int templateHeight);
  514.   CSevenColumnsSimilarIF(int templateWidth, int templateHeight,
  515.                          int _toprow, int _bottomrow,
  516.                          int _1, int _2, int _3, int _4, int _5, int _6,
  517.                          int _7, int _8);
  518.   CSevenColumnsSimilarIF(const CSevenColumnsSimilarIF& frm);
  519.   CSevenColumnsSimilarIF(istream& is, int template_width, int template_height);
  520.   
  521.   virtual bool SetToNextIncarnation();
  522.   virtual CIntegralFeature* Copy() const;
  523.   virtual ostream& output(ostream& os) const;
  524. };
  525. /////////////////////////////////////////////////////////////////////////////
  526. //
  527. // class CDiagSameIF
  528. //
  529. class CDiagSameIF : public CDiagIF {
  530.  public:
  531.   CDiagSameIF(int templateWidth, int templateHeight);
  532.   CDiagSameIF(int templateWidth, int templateHeight,
  533.               int _toprect_toprow, int _centerrow,
  534.               int _bottomrect_bottomrow,
  535.               int _leftrect_leftcol, int _centercol,
  536.               int _rightrect_rightcol);
  537.   CDiagSameIF(const CDiagSameIF& frm);
  538.   CDiagSameIF(istream& is, int template_width, int template_height);
  539.   
  540.   virtual bool SetToNextIncarnation();
  541.   virtual CIntegralFeature* Copy() const;
  542.   virtual ostream& output(ostream& os) const;
  543. };
  544. /////////////////////////////////////////////////////////////////////////////
  545. //
  546. // class CDiagSimilarIF
  547. //
  548. class CDiagSimilarIF : public CDiagIF {
  549.  public:
  550.   CDiagSimilarIF(int templateWidth, int templateHeight);
  551.   CDiagSimilarIF(int templateWidth, int templateHeight,
  552.                  int _toprect_toprow, int _centerrow,
  553.                  int _bottomrect_bottomrow,
  554.                  int _leftrect_leftcol, int _centercol,
  555.                  int _rightrect_rightcol);
  556.   CDiagSimilarIF(const CDiagSimilarIF& frm);
  557.   CDiagSimilarIF(istream& is, int template_width, int template_height);
  558.   
  559.   virtual bool SetToNextIncarnation();
  560.   virtual CIntegralFeature* Copy() const;
  561.   virtual ostream& output(ostream& os) const;
  562. };
  563. /////////////////////////////////////////////////////////////////////////////
  564. //
  565. // class CFourBoxesSameIF
  566. //
  567. class CFourBoxesSameIF : public CFourBoxesIF {
  568.  public:
  569.   CFourBoxesSameIF(int templateWidth, int templateHeight);
  570.   CFourBoxesSameIF(int templateWidth, int templateHeight,
  571.                    const CRect* pB1, const CRect* pB2,
  572.                    const CRect* pB3, const CRect* pB4);
  573.   CFourBoxesSameIF(const CFourBoxesSameIF& frm);
  574.   CFourBoxesSameIF(istream& is, int template_width, int template_height);
  575.   
  576.   virtual void SetToFirstIncarnation();
  577.   virtual bool SetToNextIncarnation();
  578.   virtual CIntegralFeature* Copy() const;
  579.   virtual ostream& output(ostream& os) const;
  580. };
  581. //} // namespace cubicles 
  582. /////////////////////////////////////////////////////////////////////////////
  583. #pragma warning (default: 1125)
  584. #endif // !defined(_INTEGRALFEATURES_H__INCLUDED_)