00001 #ifndef Impala_Core_Geometry_MaskedInterestPointSelector_h 00002 #define Impala_Core_Geometry_MaskedInterestPointSelector_h 00003 00004 #include "Core/Array/Arrays.h" 00005 00006 namespace Impala 00007 { 00008 namespace Core 00009 { 00010 namespace Geometry 00011 { 00012 00013 00014 class MaskedInterestPointSelector : public InterestPointSelector 00015 { 00016 public: 00017 00018 MaskedInterestPointSelector(Array::Array2dScalarInt32* pointList, int index) 00019 : mPointList(pointList), mIndex(index+2) 00020 { 00021 mIter = 0; 00022 } 00023 00024 bool 00025 Accept(int x, int y, int imageWidth, int imageHeight) 00026 { 00027 bool restarted = false; 00028 while(true) 00029 { 00030 if(mIter >= mPointList->CH()) 00031 { 00032 if(restarted) break; 00033 restarted = true; 00034 mIter = 0; 00035 } 00036 if((x == mPointList->Value(0,mIter)) && (y == mPointList->Value(1,mIter))) 00037 { 00038 // found it 00039 Int32 value = mPointList->Value(mIndex,mIter); 00040 if(value) return true; 00041 return false; 00042 } 00043 mIter++; 00044 } 00045 ILOG_VAR(Impala.Core.Geometry.MaskedInterestPointSelector); 00046 ILOG_WARN("not found: " << x << " " << y); 00047 return false; 00048 } 00049 private: 00050 Array::Array2dScalarInt32* mPointList; 00051 int mIndex; 00052 int mIter; 00053 }; 00054 00055 00056 } // namespace Geometry 00057 } // namespace Core 00058 } // namespace Impala 00059 00060 #endif