pixel_match.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:5k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2. *
  3. * $Id: pixel_match.h,v 1.2 2005/01/30 05:11:42 gabest Exp $ $Name:  $
  4. *
  5. * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  6. *
  7. * The contents of this file are subject to the Mozilla Public License
  8. * Version 1.1 (the "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. * http://www.mozilla.org/MPL/
  11. *
  12. * Software distributed under the License is distributed on an "AS IS" basis,
  13. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
  14. * the specific language governing rights and limitations under the License.
  15. *
  16. * The Original Code is BBC Research and Development code.
  17. *
  18. * The Initial Developer of the Original Code is the British Broadcasting
  19. * Corporation.
  20. * Portions created by the Initial Developer are Copyright (C) 2004.
  21. * All Rights Reserved.
  22. *
  23. * Contributor(s): Thomas Davies (Original Author)
  24. *
  25. * Alternatively, the contents of this file may be used under the terms of
  26. * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
  27. * Public License Version 2.1 (the "LGPL"), in which case the provisions of
  28. * the GPL or the LGPL are applicable instead of those above. If you wish to
  29. * allow use of your version of this file only under the terms of the either
  30. * the GPL or LGPL and not to allow others to use your version of this file
  31. * under the MPL, indicate your decision by deleting the provisions above
  32. * and replace them with the notice and other provisions required by the GPL
  33. * or LGPL. If you do not delete the provisions above, a recipient may use
  34. * your version of this file under the terms of any one of the MPL, the GPL
  35. * or the LGPL.
  36. * ***** END LICENSE BLOCK ***** */
  37. #ifndef _PIXEL_MATCH_H_
  38. #define _PIXEL_MATCH_H_
  39. /* *************************************************************************
  40. *
  41. * Class for getting motion vectors to pixel-accuracy
  42. *
  43. * The class could be implemented in any number of ways. The approach taken
  44. * has been to do hierarchical matching, which means doing block matching
  45. * on smaller, downcoverted versions of the pictures in order to get a wider
  46. * effective search range. At each level of searching the vectors discovered
  47. * can be used as guides to the next level of searching, and in this way
  48. * large motions can be detected easily. The danger is that the motions of
  49. * small objects can be overlooked.
  50. *
  51. * *************************************************************************/
  52. #include <libdirac_common/common.h>
  53. #include <libdirac_common/motion.h>
  54. #include <libdirac_motionest/block_match.h>
  55. namespace dirac
  56. {
  57.     class FrameBuffer;
  58.     class MvData;
  59.     class EncoderParams;
  60.     class PicArray;
  61.     class PixelMatcher
  62.     {
  63.     public:
  64.         //! Constructor
  65.         PixelMatcher( const EncoderParams& encp);
  66.         //! Do the actual search
  67.         /* Do the searching.
  68.         param  my_buffer  the buffer of pictures from which frames are taken
  69.         param  frame_num  the number of the frame for which motion is to be estimated
  70.         param  mv_data    class in which the measured motion vectors are stored, together with costs
  71.         
  72.         */
  73.         void DoSearch(const FrameBuffer& my_buffer, 
  74.                       int frame_num, 
  75.                       MEData& me_data);
  76.     private:
  77.         // Member variables
  78.         //! Local reference to the encoder 
  79.         const EncoderParams& m_encparams;
  80.         // the depth of the hierarchical match 
  81.         int m_depth;
  82.         // the level we're at (from 0 to depth)
  83.         int m_level;
  84.         // the search-range sizes for the hierarchical match
  85.         int m_xr, m_yr;
  86.         // the frame sort - I, L1 or L2
  87.         FrameSort m_fsort;
  88.         // list of candidate vectors for checking
  89.         CandidateList m_cand_list;
  90.         // Lagrangian lambda used for matching
  91.         float m_lambda;
  92.         // Prediction used for each block. This is derived from neighbouring blocks
  93.         // and is used to control the variation in the motion vector field.
  94.         MVector m_mv_prediction;
  95.         // Functions
  96.         //! Make down-converted pictures
  97.         void MakePicHierarchy(const PicArray& data, OneDArray< PicArray* >& down_data);
  98.         //! Make a hierarchy of MvData structures
  99.         void MakeMEDataHierarchy(const OneDArray< PicArray*>& down_data,
  100.                                            OneDArray< MEData* >& me_data_set );
  101.         //! Tidy up the allocations made in building the picture hirearchy
  102.         void TidyPics( OneDArray< PicArray*>& down_data );
  103.         //! Tidy up the allocations made in building the MV data hirearchy
  104.         void TidyMEData( OneDArray< MEData*>& me_data_set );
  105.         //! Match the picture data 
  106.         void MatchPic(const PicArray& ref_data , const PicArray& pic_data , MEData& me_data ,
  107.                       const MvData& guide_data, int ref_id);
  108.         //! Do a given block
  109.         void DoBlock(int xpos, int ypos , 
  110.                      TwoDArray<MvCostData>& pred_costs,
  111.                      MvArray& mv_array,
  112.                      const MvArray& guide_array,
  113.                      BlockMatcher& block_match);
  114.     };
  115. } // namespace dirac
  116. #endif