Example #1
0
WarpingField<T> STWarp<T>::computeWarp() {
    if(params.verbosity >0) {
        printf("=== Computing warping field for %s, size %dx%dx%d(%d) ===\n",
            params.name.c_str(),
            dimensions[1],
            dimensions[0],
            dimensions[2],
            videoA->channelCount());
    }

    if(params.verbosity >0) {
        if(typeid(T)==typeid(float)) {
            printf("+ Single-precision computation\n");
        } else{
            printf("+ Double-precision computation\n");
        }
        if(params.bypassTimeWarp){
            printf("+ By-passing timewarp map\n");
        }
        printf("+ Regularizing lambda [%5f,%5f,%5f,%5f]\n",
                params.lambda[0],
                params.lambda[1],
                params.lambda[2],
                params.lambda[3]);
    }
    
    // Get dimensions of the pyramid levels
    vector<vector<int> > pyrSizes = getPyramidSizes();
    int nLevels = pyrSizes.size();

    // Build Pyramids
    vector<Video<stwarp_video_t>*> pyramidA(nLevels);
    vector<Video<stwarp_video_t>*> pyramidB(nLevels);
    buildPyramid(pyrSizes,pyramidA,pyramidB);

    WarpingField<T> warpField;
    if(initialWarpField) {
        warpField = *initialWarpField;
    } else {
        if(params.verbosity >0) {
            printf("+ Generating initial warp field\n");
        }
        warpField = WarpingField<T>(dimensions[0], dimensions[1], 
                dimensions[2], 3);
    }

    for (int i = nLevels-1; i >= 0 ; --i) {
        videoA = pyramidA[i];
        videoB = pyramidB[i];

        // update dimensions
        this->dimensions = videoA->dimensions();
        if(params.verbosity >0) {
            printf("+ Multiscale level %02d: %dx%dx%d (B:%d)\n", i+1,dimensions[1],
                dimensions[0],dimensions[2],videoB->frameCount());
        }

        // resample warping field
        resampleWarpingField(warpField,pyrSizes[i]);

        // computeUVW
        multiscaleIteration(warpField);

        if(params.verbosity >0) {
            printf("  x[%.4f, %.4f] ", warpField.min(0), warpField.max(0));
            printf("  y[%.4f, %.4f] ", warpField.min(1), warpField.max(1));
            printf("  t[%.4f, %.4f]\n", warpField.min(2), warpField.max(2));
        }

        // Cleanup allocated videos
        if (i != 0) {
            if( videoA != nullptr ){
                delete videoA;
                videoA = nullptr;
            }
            if( videoB != nullptr ){
                delete videoB;
                videoB = nullptr;
            }
        }
    }

    return warpField;
}
Example #2
0
int IKNSaliencyMap::calculate()
{
  calculated = false;

  int rt_code = checkParameters();
  if(rt_code != AM_OK)
    return(rt_code);

  printf("[INFO]: %s: Computation started.\n",mapName.c_str());

  createColorChannels();
  
  //----
  // I
  IttiPyramid::Ptr pyramidI( new IttiPyramid() );
  initializePyramid(pyramidI,I);
  
  // R
  IttiPyramid::Ptr pyramidR( new IttiPyramid() );
  initializePyramid(pyramidR,R);
  
  // G
  IttiPyramid::Ptr pyramidG( new IttiPyramid() );
  initializePyramid(pyramidG,G);
  
  // B
  IttiPyramid::Ptr pyramidB( new IttiPyramid() );
  initializePyramid(pyramidB,B);
  
  // Y
  IttiPyramid::Ptr pyramidY( new IttiPyramid() );
  initializePyramid(pyramidY,Y);
  
  // O
  std::vector<IttiPyramid::Ptr> pyramidO;
  pyramidO.resize(numberOfOrientations);
  for(int i = 0; i < numberOfOrientations; ++ i)
  {
    pyramidO.at(i) = IttiPyramid::Ptr( new IttiPyramid() );
    initializePyramid(pyramidO.at(i),I);
  }
  
  // create feature maps
  rt_code = createFeatureMapsI(pyramidI);
  if(rt_code != AM_OK)
    return(rt_code);
    
  for(int i = 0; i < numberOfOrientations; ++ i)
  {
    float angle = i*180.0/numberOfOrientations;
    rt_code = createFeatureMapsO(pyramidO.at(i),angle);
    if(rt_code != AM_OK)
      return(rt_code);
  }
  
  rt_code = createFeatureMapsRG(pyramidR,pyramidG);
  if(rt_code != AM_OK)
    return(rt_code);
  
  rt_code = createFeatureMapsRG(pyramidB,pyramidY);
  if(rt_code != AM_OK)
    return(rt_code);
  
//   for(unsigned int i = pyramidG->getStartLevel(); i <= (unsigned int)pyramidG->getMaxLevel(); ++i)
//   {
//     cv::Mat tempG;
//     if(pyramidG->getImage(i,tempG))
//     {
//       cv::imshow("G",tempG);
//       cv::waitKey(-1);
//     }
//   }
  
  float totalWeight = weightOfColor + weightOfIntensities + weightOfOrientations;
  
  cv::Mat intensity;
  if(!pyramidI->getMap(intensity))
  {
    printf("[ERROR]: Something went wrong! Can't get saliency map from the pyramid!\n");
    return(AM_CUSTOM);
  }
  intensity = weightOfIntensities*intensity/totalWeight;
  
//   cv::imshow("intensity",intensity);
//   cv::waitKey(-1);
  
  cv::Mat orientation;
  for(int i = 0; i < numberOfOrientations; ++i)
  {
    cv::Mat orientation_temp;
    
    if(!pyramidO.at(i)->getMap(orientation_temp))
    {
      printf("[ERROR]: Something went wrong! Can't get saliency map from the pyramid!\n");
      return(AM_CUSTOM);
    }
    
    if(i==0)
      orientation_temp.copyTo(orientation);
    else
      orientation = orientation + orientation_temp;
  }
  v4r::normalize(orientation,normalization_type);
  orientation = weightOfOrientations*orientation/totalWeight;
  
//   cv::imshow("orientation",orientation);
//   cv::waitKey(-1);
  
  cv::Mat colorRG;
  if(!pyramidR->getMap(colorRG))
  {
    printf("[ERROR]: Something went wrong! Can't get saliency map from the pyramid!\n");
    return(AM_CUSTOM);
  }
  
//   cv::imshow("colorRG",colorRG);
//   cv::waitKey(-1);
  
  cv::Mat colorBY;
  if(!pyramidB->getMap(colorBY))
  {
    printf("[ERROR]: Something went wrong! Can't get saliency map from the pyramid!\n");
    return(AM_CUSTOM);
  }
  
//   cv::imshow("colorBY",colorBY);
//   cv::waitKey(-1);
  
  cv::Mat color = colorRG + colorBY;
  v4r::normalize(color,normalization_type);
  color = weightOfColor*color/totalWeight;
  
//   cv::imshow("color",color);
//   cv::waitKey(-1);
  
  map = intensity + color + orientation;
  
  calculated = true;
  
  printf("[INFO]: %s: Computation finished.\n",mapName.c_str());

  return(AM_OK);
}