datastructures.h
上传用户:fengshi120
上传日期:2014-07-17
资源大小:6155k
文件大小:5k
源码类别:

3D图形编程

开发平台:

C/C++

  1. /*************************************************************************** 
  2. *
  3. * Copyright 2000 by David Demirdjian.   All rights reserved. 
  4. *  
  5. * Developed  by David Demirdjian
  6. *  
  7. * Permission to use, copy, or modify this software and  its documentation 
  8. * for  educational  and  research purposes only and without fee  is hereby 
  9. * granted, provided  that this copyright notice and the original authors's 
  10. * names appear  on all copies and supporting documentation.  If individual 
  11. * files are  separated from  this  distribution directory  structure, this 
  12. * copyright notice must be included.  For any other uses of this software, 
  13. * in original or  modified form, including but not limited to distribution 
  14. * in whole or in  part, specific  prior permission  must be  obtained from 
  15. * MIT.  These programs shall not  be  used, rewritten, or  adapted as  the 
  16. * basis  of  a  commercial  software  or  hardware product  without  first 
  17. * obtaining appropriate  licenses from David Demirdjian.  The author makes 
  18. * no representations about the suitability of this software for any purpose.  
  19. * It is provided "as is" without express or implied warranty. 
  20. *  
  21. **************************************************************************/
  22. #ifndef _DATASTRUCTURES_H
  23. #define _DATASTRUCTURES_H
  24. // ********************************************************************
  25. // ********************************************************************
  26. // InputImages: structure containing the input images (at a given scale)
  27. class InputImages {
  28. public:
  29. InputImages();
  30. ~InputImages();
  31. void alloc(int w, int h, int extra_margin);
  32. void deAlloc();
  33. int numImages; // 2 (pair) or 3
  34. unsigned char *subIm_l,  *subIm_r,  *subIm_t; 
  35. unsigned char *subIm_l_origin,  *subIm_r_origin,  *subIm_t_origin; 
  36. };
  37. // **********************************************************************
  38. // StereoImage: structure representing the depth information (disparity and sub-pixel) 
  39. // at a given scale. 
  40. // This contains in particular: imDepth8u and imDepth32f
  41. // which contain the disparity images (size width*height, 8bits unsigned char 
  42. // and 32bits float) stored as 1-dim. arrays.
  43. class StereoImage {
  44. public:
  45. StereoImage();
  46. ~StereoImage();
  47. void alloc(int w, int h);
  48. void deAlloc();
  49. void Reset(void);
  50. void createValidPixelsList(int topmargin);
  51. // create some 'borders' around the stereo image
  52. void setUndefinedBorders(int leftMargin, int rightMargin);
  53. // set the undefined depth value ... 
  54. void setUndefinedDepthValue(const unsigned char undefined_val);
  55. void generateDepth32f();
  56. void generateDepth8uFromDepth32f();
  57. // ***** dense representation *************
  58. int width,height;
  59. // disparity image (8bits unsigned char)
  60. unsigned char *imDepth8u, *imDepth8u_origin; 
  61. // disparity image (32bits float)
  62. float *imDepth32f, *imDepth32f_origin; 
  63. // ***** sparse representation *************
  64. // index of valid pixels in imDepth
  65. int *valid_pixels;
  66. short *x, *y;
  67. float *depth_float_list;
  68. unsigned int m_nGood3DPoints; // nb of valid pixels
  69. // undefined depth value: all undefined pixels in the disp. image  will have this value
  70. unsigned char UNDEFINED_DEPTH;
  71. private:
  72. int *valid_pixels_origin;
  73. short *x_origin, *y_origin;
  74. float *depth_float_list_origin;
  75. };
  76. // ***********************************************************************
  77. // ***********************************************************************
  78. // ReconstPoints3D: structure representing a 3D Euclidean reconstruction
  79. class ReconstPoints3D {
  80. public:
  81. ReconstPoints3D();
  82. ~ReconstPoints3D();
  83. void alloc(int N);
  84. void FreeMemoryBuffers(void);
  85. // I/O functions to load/save a 3D reconstruction
  86. int load(char* filename);
  87. int save(char* filename);
  88. // return arrays containing 3-D reconstruction
  89. float* getXlist() const;
  90. float* getYlist() const;
  91. float* getZlist() const;
  92. unsigned char* getARGBlist() const; // color (ARGB) list
  93. float* getPointSizelist() const; // size of the points
  94. // return num. of reconstructed points
  95. int getNumPoints() const;
  96. // return 3 images containing X,Y and Z values
  97. void getImages_3D(float* X_im, float* Y_im, float* Z_im, const int* valid_pixels);
  98. friend class Reconst3D;
  99. // ROI of thte scene
  100. float m_fExtentMinX;
  101. float m_fExtentMaxX;
  102. float m_fExtentMinY;
  103. float m_fExtentMaxY;
  104. float m_fExtentMinZ;
  105. float m_fExtentMaxZ;
  106. protected:
  107. // 3D reconstruction
  108. float *m_p3DPointsX;
  109. float *m_p3DPointsY;
  110. float *m_p3DPointsZ;
  111. unsigned char *m_p3DPointsC; // list of RGBA values
  112. float *m_p3DPointsS; // size of the 3D points
  113. unsigned int m_nGood3DPoints; // number of points in the scene
  114. private:
  115. // original data pointers
  116. float *m_p3DPointsX_origin;
  117. float *m_p3DPointsY_origin;
  118. float *m_p3DPointsZ_origin;
  119. };
  120. #endif