grayi.hpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:10k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*************************************************************************
  2. This software module was originally developed by 
  3. Ming-Chieh Lee (mingcl@microsoft.com), Microsoft Corporation
  4. Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation
  5. Bruce Lin (blin@microsoft.com), Microsoft Corporation
  6. Chuang Gu (chuanggu@microsoft.com), Microsoft Corporation
  7. (date: March, 1996)
  8. in the course of development of the MPEG-4 Video (ISO/IEC 14496-2). 
  9. This software module is an implementation of a part of one or more MPEG-4 Video tools 
  10. as specified by the MPEG-4 Video. 
  11. ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications 
  12. thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. 
  13. Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents. 
  14. The original developer of this software module and his/her company, 
  15. the subsequent editors and their companies, 
  16. and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation. 
  17. Copyright is not released for non MPEG-4 Video conforming products. 
  18. Microsoft retains full right to use the code for his/her own purpose, 
  19. assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products. 
  20. This copyright notice must be included in all copies or derivative works. 
  21. Copyright (c) 1996, 1997.
  22. Module Name:
  23. grayf.hpp
  24. Abstract:
  25. Float image class for gray (one-plane) pictures 
  26. Revision History:
  27. *************************************************************************/
  28. #ifndef __GRAYI_HPP_ 
  29. #define __GRAYI_HPP_
  30. typedef int PixelI;
  31. #ifndef MAX_NUM_CONTOUR
  32. #define MAX_NUM_CONTOUR 200
  33. #endif
  34. Class CVideoObjectPlane;
  35. Class CIntImage
  36. {
  37. public:
  38. // Constructors
  39. ~CIntImage ();
  40. CIntImage (const CIntImage& ii, const CRct& r = CRct ()); // crop from a floatimage
  41. CIntImage (const CVideoObjectPlane& vop, RGBA comp);
  42. CIntImage (const CRct& r = CRct (), PixelI px = 0); // floatimage with same pixel value everywhere
  43. CIntImage (const CPolygonI& plg, const CRct& rct); // fill in the polygon (interior boundary)
  44. CIntImage (
  45. const Char* pchFileName, // MPEG4 file format
  46. UInt ifr, // frame number
  47. const CRct& rct, // final rect 
  48. UInt nszHeader = 0 // number of header to be skipped
  49. );
  50. CIntImage (const Char* vdlFileName); // read from a VM file.
  51. // Attributes
  52. Bool valid () const {return this != 0;}
  53. const CRct& where () const {return m_rc;}
  54. CRct boundingBox (const PixelI pxliOutsideColor = (PixelI) transpValue) const;
  55. PixelI pixel (CoordI x, CoordI y) const {return m_ppxli [m_rc.offset (x, y)];}
  56. PixelI pixel (const CSite& st) const {return pixel (st.x, st.y);}
  57. const PixelI* pixels () const {return (this == NULL) ? NULL : m_ppxli;} // return pointer
  58. const PixelI* pixels (CoordI x, CoordI y) const {return m_ppxli + m_rc.offset (x, y);}
  59. const PixelI* pixels (const CSite& st) const {return pixels (st.x, st.y);}
  60. // Resultants
  61. own CIntImage* decimate (UInt rateX, UInt rateY) const; // decimate the vframe by rateX and rateY.
  62. own CIntImage* decimateBinaryShape (UInt rateX, UInt rateY) const; // decimate by rateX and rateY in a conservative way
  63. own CIntImage* zoomup (UInt rateX, UInt rateY) const;
  64. own CIntImage* expand (UInt rateX, UInt rateY) const;  // expand by putting zeros in between
  65. own CIntImage* biInterpolate () const; // bilinearly interpolate 
  66. own CIntImage* downsampleForSpatialScalability () const;
  67. own CIntImage* upsampleForSpatialScalability () const;
  68. own CIntImage* biInterpolate (UInt accuracy) const; // bilinearly interpolate using 2/4/8/16 quantization
  69. own CIntImage* transpose () const; // transpose the floatimge
  70. own CIntImage* complement () const; // complement a binarized ii
  71. own CIntImage* warp (const CAffine2D& aff) const; // affine warp
  72. own CIntImage* warp (const CPerspective2D& persp) const; // perspective warp
  73. own CIntImage* warp (const CPerspective2D& persp, const CRct& rctWarp) const; // perspective warp to rctWarp
  74. own CIntImage* warp (const CPerspective2D& persp, const CRct& rctWarp, const UInt accuracy) const; // perspective warp to rctWarp
  75. own CIntImage* smooth (UInt window) const; // smooth a binarized ii of window
  76. PixelI pixel (CoordD x, CoordD y) const; // bi-linear interpolation
  77. PixelI pixel (CoordI x, CoordI y, UInt accuracy) const; // bi-linear interpolation using 2/4/8/16 quantization
  78. PixelI pixel (const CSiteD& std) const {return pixel (std.x, std.y);} // bi-linear interpolation
  79. PixelI pixel (const CSite& std, UInt accuracy) const {return pixel (std.x, std.y, accuracy);} // bi-linear interpolation
  80. Int mean () const; // mean
  81. Int mean (const CIntImage* pfiMsk) const; // mean
  82. Int sumAbs (const CRct& rct = CRct ()) const;
  83. Int sumDeviation () const; // sum of first-order deviation
  84. Int sumDeviation (const CIntImage* piiMsk) const; // sum of first-order deviation
  85. Bool allValue (Int ucVl, const CRct& rct = CRct ()) const; // whether all pixels have value of vl
  86. Bool biLevel (const CRct& rct = CRct ()) const; // whether it is a binary image
  87. Bool atLeastOneValue (Int ucVl, const CRct& rct = CRct ()) const; // whether at least one pixel has value of vl
  88. CRct whereVisible () const; // the tightest bounding box of non-transparent pixels
  89. UInt numPixelsNotValued (Int ucVl, const CRct& rct = CRct ()) const; // number of pixels not valued vl in region rct
  90. Double mse (const CIntImage& iiCompare) const;
  91. Double mse (const CIntImage& iiCompare, const CIntImage& iiMsk) const;
  92. Double snr (const CIntImage& iiCompare) const;
  93. Double snr (const CIntImage& iiCompare, const CIntImage& iiMsk) const;
  94. Void vdlDump (const Char* fileName = "tmp.vdl") const;
  95. Void dump (FILE *) const;
  96. Void txtDump (const Char* fileName = "tmp.txt") const;
  97. Void txtDump (FILE *) const;
  98. Void txtDumpMask (FILE *) const;
  99. own CIntImage* extendPadLeft ();  // for block padding
  100. own CIntImage* extendPadRight ();  // for block padding
  101. own CIntImage* extendPadTop ();  // for block padding
  102. own CIntImage* extendPadDown ();  // for block padding
  103. own CIntImage* average (const CIntImage& ii) const;
  104. // Overloaded operators
  105. own CIntImage* operator + (const CIntImage& ii) const;
  106. own CIntImage* operator - (const CIntImage& ii) const;
  107. own CIntImage* operator * (Int scale) const; // multiply every pixel by scale
  108. own CIntImage* operator / (Int scale) const; // divide every pixel by scale
  109. own CIntImage* operator * (const CTransform& tf) const;
  110. own CIntImage* operator * (const CAffine2D& aff) const {return warp (aff);} // affine warp
  111. own CIntImage* operator * (const CPerspective2D& persp) const {return warp (persp);} // perspective warp
  112. Bool operator == (const CIntImage& ii) const;
  113. // Operations
  114. Void where (const CRct& r); // crop based on r
  115. Void pixel (CoordI x, CoordI y, PixelI p) {m_ppxli [m_rc.offset (x, y)] = p;} // set a pixel
  116. Void pixel (const CSite& st, PixelI p) {pixel (st.x, st.y, p);} //  set a pixel
  117. Void setRect (const CRct& rct); // set the rect
  118. Void shift (Int nX, Int nY) {m_rc.shift (nX, nY);} // shift CRct by nX and nY
  119. Void zeroPad (const CIntImage* piimsk); // zero padding
  120. Void LPEPad (const CIntImage* piimsk); // Low Pass Extrapolation Padding
  121. Void simplifiedRepeatPad (const CIntImage*); // simplified repetitive padding
  122. Void modifiedSimplifiedRepeatPad (const CIntImage*);
  123. Void originalRepeatPad (const CIntImage*);
  124. Void modifiedVMRepeatPad(const CIntImage *piiMask);
  125. Void repeatPad (const CIntImage* piimsk); // repetitive padding
  126. Void sHorRepeatPad (const CIntImage* piimsk); // simplified horizontal repetitive padding
  127. Void sVerRepeatPad (const CIntImage* piimsk); // simplified vertical repetitive padding
  128. Void mrepeatPad (const CIntImage* piimsk); // modified repetitive padding
  129. Void blockPad (const CIntImage* piiOrigMask, const UInt uintBlockSize); // block padding
  130. Void averagePad (const CIntImage* piiOrigMask); // averaging padding
  131. Void repeatPadNew (const CIntImage* piimsk); // repetitive padding
  132. Void threshold (Int ucThresh);    // cut < thresh to be zero
  133. Void binarize (Int ucThresh); // binarize it
  134. Void checkRange (Int ucMin, Int ucMax); 
  135. Void overlay (const CIntImage& ii); // overlay ii on top of *this
  136. Void overlay (const CFloatImage& fi);
  137. Void xorIi (const CIntImage& ii); // xor two binarized ii
  138. Void orIi (const CIntImage& ii); // or of two binarized ii
  139. Void andIi (const CIntImage& ii); // or of two binarized ii
  140. Void maskOut (const CIntImage& ii); // mask out ii
  141. Void mutiplyAlpha (const CIntImage& ii); //multiply by alpha channel
  142. Void cropOnAlpha (); //  crop the image based on non-transparent value
  143. Void operator = (const CIntImage& ii);
  144. ///////////////// implementation /////////////////
  145. protected:
  146. PixelI* m_ppxli;
  147. CRct m_rc;
  148. Void allocate (const CRct& r, PixelI pxli);
  149. Void allocate (const CRct& r);
  150. Void copyConstruct (const CIntImage& ii, const CRct& rct);
  151. Void swap (CIntImage& ii);
  152. Void fillColumnDownward (
  153. const PixelI*& pxlOrigMask, 
  154. const PixelI*& ppxlOrigData, 
  155. PixelI*& ppxlFillMask, 
  156. PixelI*& ppxlFillData
  157. ) const;
  158. Void fillColumnUpward (
  159. const PixelI*& ppxlOrigMask, 
  160. const PixelI*& ppxlOrigData, 
  161. PixelI*& ppxlFillMask, 
  162. PixelI*& ppxlMaskData
  163. ) const;
  164. Void fillRowRightward (
  165. const PixelI*& ppxlOrigMask, 
  166. const PixelI*& ppxlOrigData, 
  167. PixelI*& ppxlFillMask, 
  168. PixelI*& ppxlFillData
  169. ) const;
  170. Void fillRowLeftward (
  171. const PixelI*& ppxlOrigMask, 
  172. const PixelI*& ppxlOrigData, 
  173. PixelI*& ppxlFillMask, 
  174. PixelI*& ppxlFillData
  175. ) const;
  176. Void fillCorners (CRct& nBlkRct);
  177. Void fillHoles (const CIntImage *piiFillMask);
  178. own CIntImage* smooth_ (UInt window) const; // smooth a binarized ii of window
  179. // for block padding
  180. Void dilation4 (CIntImage* pMask);
  181. Void dilation8 (CIntImage* pMask);
  182. };
  183. #endif //_GRAYF_HPP_  
  184.