Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

Similarity.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Vector_Similarity_h
00002 #define Impala_Core_Vector_Similarity_h
00003 
00004 #include "Core/Vector/VectorSet.h"
00005 
00006 namespace Impala
00007 {
00008 namespace Core
00009 {
00010 namespace Vector
00011 {
00012 
00013 
00017 template <class ArrayT, class SimFuncT>
00018 inline Real64
00019 Similarity(VectorSet<ArrayT>* example, VectorSet<ArrayT>* src, int exStartIdx,
00020            int srcStartIdx, int setSize, SimFuncT simFunc)
00021 {
00022     Real64 score = 0;
00023     for (int i=0 ; i<setSize ; i++)
00024         score += simFunc(example->GetVector(exStartIdx + i, true),
00025                          src->GetVector(srcStartIdx + i, true));
00026     return (score / setSize);
00027 }
00028 
00029 
00035 template <class ArrayT, class SimFuncT>
00036 inline void
00037 Similarity(Real64* dst, typename VectorSet<ArrayT>::VectorT example,
00038            VectorSet<ArrayT>* src, bool* filter, int subSetSize, SimFuncT simFunc)
00039 {
00040     int nrSubSets = src->Size() / subSetSize;
00041     for (int s=0 ; s<nrSubSets ; s++)
00042     {
00043         if (filter && (!filter[s]))
00044             continue;
00045         Real64 maxScore = -1;
00046         int srcIdx = s * subSetSize;
00047         for (int i=0 ; i<subSetSize ; i++)
00048         {
00049             typename VectorSet<ArrayT>::VectorT temp(src->GetVector(srcIdx + i, true));
00050             Real64 score = simFunc(example, temp);
00051             if (score > maxScore)
00052                 maxScore = score;
00053         }
00054         dst[s] = maxScore;
00055     }
00056 }
00057 
00058 
00071 template <class ArrayT, class SimFuncT>
00072 inline void
00073 Similarity(VectorTem<Real64>* dst, VectorSet<ArrayT>* example,
00074            VectorSet<ArrayT>* src, bool* filter, int subSetSize,
00075            int subSubSetSize, int activeSubSubSet, bool doMax, SimFuncT simFunc)
00076 {
00077     int nrSubSets = src->Size() / subSetSize;
00078     int nrSubSubSet = 1;
00079     bool reUseEx = false;
00080     if ((subSetSize != subSubSetSize) && (example->Size() == subSubSetSize))
00081         reUseEx = true;
00082     nrSubSubSet = subSetSize / subSubSetSize;
00083     for (int s=0 ; s<nrSubSets ; s++)
00084     {
00085         if (filter && (!filter[s]))
00086             continue;
00087         Real64 totScore = 0;
00088         int srcBase = s * subSetSize;
00089         int exBase = 0;
00090         for (int ss=0 ; ss<nrSubSubSet ; ss++)
00091         {
00092             Real64 score = Similarity(example, src, exBase, srcBase,
00093                                       subSubSetSize, simFunc);
00094             srcBase += subSubSetSize;
00095             if (!reUseEx)
00096                 exBase += subSubSetSize;
00097             totScore = (doMax) ? Max(totScore, score) : totScore + score;
00098         }
00099         if (!doMax)
00100             totScore /= nrSubSubSet;
00101         dst->Elem(s) = totScore;
00102     }
00103 }
00104 
00105 } // namespace Vector
00106 } // namespace Core
00107 } // namespace Impala
00108 
00109 #endif

Generated on Fri Mar 19 09:31:28 2010 for ImpalaSrc by  doxygen 1.5.1