Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include <pcl/pcl_config.h>
00039 #ifdef HAVE_OPENNI
00040
00041 #ifndef __OPENNI_SHIFT_TO_DEPTH_CONVERSION
00042 #define __OPENNI_SHIFT_TO_DEPTH_CONVERSION
00043
00044 #include <vector>
00045 #include <limits>
00046
00047 namespace openni_wrapper
00048 {
00051 class PCL_EXPORTS ShiftToDepthConverter
00052 {
00053 public:
00055 ShiftToDepthConverter () : init_(false) {}
00056
00058 virtual ~ShiftToDepthConverter () {};
00059
00062 void
00063 generateLookupTable ()
00064 {
00065
00066 const std::size_t table_size = 1<<10;
00067
00068 lookupTable_.clear();
00069 lookupTable_.resize(table_size);
00070
00071
00072 static const int16_t nConstShift = 800;
00073 static const double nParamCoeff = 4.000000;
00074 static const double dPlanePixelSize = 0.104200;
00075 static const double nShiftScale = 10.000000;
00076 static const double dPlaneDsr = 120.000000;
00077 static const double dPlaneDcl = 7.500000;
00078
00079 std::size_t i;
00080 double dFixedRefX;
00081 double dMetric;
00082
00083 for (i=0; i<table_size; ++i)
00084 {
00085
00086 dFixedRefX = (static_cast<double>(i - nConstShift) / nParamCoeff)-0.375;
00087 dMetric = dFixedRefX * dPlanePixelSize;
00088 lookupTable_[i] = static_cast<float>((nShiftScale * ((dMetric * dPlaneDsr / (dPlaneDcl - dMetric)) + dPlaneDsr) ) / 1000.0f);
00089 }
00090
00091 init_ = true;
00092 }
00093
00096 inline float
00097 shiftToDepth (uint16_t shift_val)
00098 {
00099 assert (init_);
00100
00101 static const float bad_point = std::numeric_limits<float>::quiet_NaN ();
00102
00103 float ret = bad_point;
00104
00105
00106 if (shift_val<lookupTable_.size())
00107 ret = lookupTable_[shift_val];
00108
00109 return ret;
00110 }
00111
00112 inline bool isInitialized() const
00113 {
00114 return init_;
00115 }
00116
00117 protected:
00118 std::vector<float> lookupTable_;
00119 bool init_;
00120 } ;
00121 }
00122
00123 #endif
00124 #endif //__OPENNI_SHIFT_TO_DEPTH_CONVERSION