Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _XNV_POINT_DENOISER_H_
00010 #define _XNV_POINT_DENOISER_H_
00011
00012 #include "XnVPointFilter.h"
00013
00014
00021 class XNV_NITE_API XnVPointDenoiser :
00022 public XnVPointFilter
00023 {
00024 public:
00031 XnVPointDenoiser(XnFloat fDistanceThreshold = ms_fDefaultDistanceThreshold,
00032 const XnChar* strName = "XnVPointDenoiser");
00033 ~XnVPointDenoiser();
00034
00040 void Update(XnVMessage* pMessage);
00041
00047 void OnPointCreate(const XnVHandPointContext* pContext);
00053 void OnPointUpdate(const XnVHandPointContext* pContext);
00059 void OnPointDestroy(XnUInt32 nID);
00066 void OnPrimaryPointCreate(const XnVHandPointContext* pContext, const XnPoint3D& ptSessionStarter);
00067
00073 XnFloat GetDistanceThreshold() const;
00079 void SetDistanceThreshold(XnFloat fDistanceThreshold);
00080
00081 XnFloat GetCloseRatio() const;
00082 XnFloat GetFarRatio() const;
00083
00089 void SetCloseRatio(XnFloat fCloseRatio);
00095 void SetFarRatio(XnFloat fFarRatio);
00096
00097 protected:
00098 #define XNV_SMOOTHER_AVERAGE_SIZE 3
00099 struct LocalContext
00100 {
00101 XnPoint3D ptBuffer[XNV_SMOOTHER_AVERAGE_SIZE];
00102 XnUInt32 nCount;
00103 XnUInt32 nNextIndex;
00104 };
00105
00106 XN_DECLARE_DEFAULT_HASH_DECL(XNV_NITE_API, XnUInt32, LocalContext*, XnVIntLocalHash);
00107
00108 LocalContext* GetLocalContext(XnUInt32 nID);
00109 XnFloat Distance(XnPoint3D& pt1, XnPoint3D& pt2) const;
00110 void UpdatePointDenoise(XnPoint3D& ptToChange, const XnPoint3D& ptDontChange);
00111
00112 void Clear();
00113
00114 XnVIntLocalHash m_ActivePoints;
00115
00116 static const XnFloat ms_fDefaultDistanceThreshold;
00117 static const XnFloat ms_fDefaultCloseRatio;
00118 static const XnFloat ms_fDefaultFarRatio;
00119
00120 XnFloat m_fDistanceThreshold;
00121 XnFloat m_fCloseRatio;
00122 XnFloat m_fFarRatio;
00123
00124 XnVMultipleHands m_DenoisedHands;
00125 };
00126
00127 #endif