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

WeibullSim.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Vector_WeibullSim_h
00002 #define Impala_Core_Vector_WeibullSim_h
00003 
00004 #include "Core/Vector/VectorTem.h"
00005 #include "Basis/NativeTypes.h"
00006 
00007 namespace Impala
00008 {
00009 namespace Core
00010 {
00011 namespace Vector
00012 {
00013 
00014 
00017 inline Real64
00018 WeibullSim(Real64 b1, Real64 g1, Real64 b2, Real64 g2)
00019 {
00020     if (g1==0 || g2==0 || b1==0 || b2==0)
00021         return 0;
00022     Real64 g = (g1>g2 ? g2/g1 : g1/g2);
00023     Real64 b = (b1>b2 ? b2/b1 : b1/b2);
00024     return g*b;
00025 }
00026 
00029 template <class ElemT>
00030 inline Real64
00031 WeibullSim(const VectorTem<ElemT>& v1, const VectorTem<ElemT>& v2)
00032 {
00033     Real64 score = 0;
00034     for (int i=0 ; i<v1.Size() ; i+=2)
00035     {
00036         //score += WeibullSim((Real64) v1[i], (Real64) v1[i+1],
00037         //                    (Real64) v2[i], (Real64) v2[i+1]);
00038         // This seems to be about 10% faster on windows...
00039         Real64 b1 = v1[i];
00040         Real64 g1 = v1[i+1];
00041         Real64 b2 = v2[i];
00042         Real64 g2 = v2[i+1];
00043         if (g1!=0 && g2!=0 && b1!=0 && b2!=0)
00044         {
00045             Real64 g = (g1>g2 ? g2/g1 : g1/g2);
00046             Real64 b = (b1>b2 ? b2/b1 : b1/b2);
00047             score += g*b;
00048         }
00049     }
00050     return score / (v1.Size() / 2);
00051 }
00052 
00055 template <class ElemT>
00056 class WeibullSimFtor
00057 {
00058 public:
00059 
00060     Real64
00061     DoIt(const VectorTem<ElemT>& v1, const VectorTem<ElemT>& v2)
00062     {
00063         Real64 score = 0;
00064         for (int i=0 ; i<v1.Size() ; i+=2)
00065         {
00066             //score += WeibullSim((Real64) v1[i], (Real64) v1[i+1],
00067             //                    (Real64) v2[i], (Real64) v2[i+1]);
00068             // This seems to be about 10% faster on windows...
00069             Real64 b1 = v1[i];
00070             Real64 g1 = v1[i+1];
00071             Real64 b2 = v2[i];
00072             Real64 g2 = v2[i+1];
00073             if (g1!=0 && g2!=0 && b1!=0 && b2!=0)
00074             {
00075                 Real64 g = (g1>g2 ? g2/g1 : g1/g2);
00076                 Real64 b = (b1>b2 ? b2/b1 : b1/b2);
00077                 score += g*b;
00078             }
00079         }
00080         return score;
00081         //return score / (v1.Size() / 2);
00082     }
00083 };
00084 
00085 } // namespace Vector
00086 } // namespace Core
00087 } // namespace Impala
00088 
00089 #endif

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