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

template<int INDEX_SIZE, int ORI_SIZE>
Matrix::Mat* Impala::Core::Feature::FISTDescriptor< INDEX_SIZE, ORI_SIZE >::DoCalculateFISTDescriptors ( Array::Array2dScalarReal64 im,
PointDescriptorTable pointData 
) [inline]

Definition at line 378 of file KoenFIST2.h.

References Impala::Core::Feature::FISTDescriptor< INDEX_SIZE, ORI_SIZE >::ComputeGradient(), Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::CPB(), Impala::Core::Feature::PointDescriptorTable::GetOrientation(), Impala::Core::Feature::PointDescriptorTable::GetScale(), Impala::Core::Feature::PointDescriptorTable::GetX(), Impala::Core::Feature::PointDescriptorTable::GetY(), Impala::Core::Array::MulVal(), Impala::Core::Feature::FISTDescriptor< INDEX_SIZE, ORI_SIZE >::SamplePoint(), Impala::Core::Table::Table::Size(), and Impala::Core::Feature::FISTDescriptor< INDEX_SIZE, ORI_SIZE >::VecLength.

Referenced by Impala::Core::Feature::FISTDescriptor< INDEX_SIZE, ORI_SIZE >::DoCalculateFISTDescriptorsAndEat().

00380     {
00381         using namespace Impala::Core::Array;
00382 
00383         /* Scales used by Lowe */
00384         const int clampScaleCount = 18;
00385         Real64 clampScales[clampScaleCount+1] = { 1.00794,
00386                                                   1.26992,
00387                                                   1.6,
00388                                                   2.01587,
00389                                                   2.53984,
00390                                                   3.2,
00391                                                   4.03175,
00392                                                   5.07968,
00393                                                   6.4,
00394                                                   8.06349,
00395                                                   10.1594,
00396                                                   12.8,
00397                                                   16.127,
00398                                                   20.3187,
00399                                                   25.6,
00400                                                   32.254,
00401                                                   40.6375,
00402                                                   51.2,
00403                                                   -1};
00404     
00405         bool warned = false;
00406         Matrix::Mat* allDescriptors = new Array2dScalarReal64(
00407                                            VecLength, pointData->Size(), 0, 0);
00408         for(int i = 0; i < clampScaleCount; i++) {
00409             Array2dScalarReal64* magnitude = 0; 
00410             Array2dScalarReal64* direction = 0;
00411             bool haveSome = false;
00412             for(int iter = 0; iter < pointData->Size(); iter++)
00413             {
00414                 Real64 scale = pointData->GetScale(iter);
00415                 if((clampScales[i] > scale) && (i != 0)) continue;
00416                 if(clampScales[i+1] <= scale) continue;
00417                 haveSome = true;
00418                 break;
00419             }
00420             if(haveSome)
00421             {
00422                 ComputeGradient(magnitude, direction, im, clampScales[i]);
00423                 MulVal(direction, direction, -1);
00424 
00425                 #pragma omp parallel for private(iter) shared(pointData, allDescriptors, magnitude, direction)
00426                 for(int iter = 0; iter < pointData->Size(); iter++)
00427                 {
00428                     Real64 scale = pointData->GetScale(iter);
00429                 
00430                     // check if this is the scale to compute the descriptor at
00431                     if((clampScales[i] > scale) && (i != 0)) continue;
00432                     if(clampScales[i+1] <= scale) continue;
00433 
00434                     Real64 x = pointData->GetX(iter);
00435                     Real64 y = pointData->GetY(iter);
00436                     Real64 pointOrientation = pointData->GetOrientation(iter);
00437     
00438                     SamplePoint(allDescriptors->CPB(0, iter), magnitude, direction, scale, y, x, pointOrientation);
00439                 }
00440             }
00441             /* clean up */
00442             if(magnitude) delete magnitude;
00443             if(direction) delete direction;
00444         }
00445         return allDescriptors;
00446     }

Here is the call graph for this function:


Generated on Fri Mar 19 11:10:15 2010 for ImpalaSrc by  doxygen 1.5.1