NITE 1.4.1 - API Reference
|
00001 /******************************************************************************* 00002 * * 00003 * PrimeSense NITE 1.3 * 00004 * Copyright (C) 2010 PrimeSense Ltd. * 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; // = 10 00117 static const XnFloat ms_fDefaultCloseRatio; // = 0.0 00118 static const XnFloat ms_fDefaultFarRatio; // = 1.0 00119 00120 XnFloat m_fDistanceThreshold; 00121 XnFloat m_fCloseRatio; 00122 XnFloat m_fFarRatio; 00123 00124 XnVMultipleHands m_DenoisedHands; 00125 }; 00126 00127 #endif