template<int INDEX_SIZE, int ORI_SIZE>
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:
|