Guest User

Untitled

a guest
Jun 26th, 2016
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.06 KB | None | 0 0
  1. template<typename MatType, typename CubeType>
  2. void StructuredForests<MatType, CubeType>::
  3. ConvTriangle(CubeType &InImage, const size_t radius)
  4. {
  5.   Timer::Start("ConvTriangle_my");
  6.   if (radius == 0)
  7.   {
  8.     //nothing to do
  9.   }
  10.   else if (radius <= 1)
  11.   {
  12.     const double p = 12.0 / radius / (radius + 2) - 2;
  13.     arma::vec kernel = {1, p, 1};
  14.     kernel /= (p + 2);
  15.    
  16.     this->SepFilter2D(InImage, kernel, radius);
  17.   }
  18.   else
  19.   {
  20.     const size_t len = 2 * radius + 1;
  21.     arma::vec kernel(len);
  22.     for( size_t i = 0; i < radius; ++i)
  23.       kernel(i) = i + 1;
  24.    
  25.     kernel(radius) = radius + 1;
  26.    
  27.     size_t r = radius;
  28.     for( size_t i = radius + 1; i < len; ++i)
  29.       kernel(i) = r--;
  30.  
  31.     kernel /= std::pow(radius + 1, 2);
  32.     this->SepFilter2D(InImage, kernel, radius);
  33.   }
  34.   Timer::Stop("ConvTriangle_my");
  35. }
  36.  
  37. template<typename MatType, typename CubeType>
  38. void StructuredForests<MatType, CubeType>::
  39. ConvTriangle2(CubeType& InImage, const size_t radius, CubeType& Output)
  40. {
  41.   Timer::Start("ConvTriangle_mlpack");
  42.   if (radius != 0)
  43.   {
  44.     if (radius <= 1)
  45.     {
  46.       const double p = 12.0 / radius / (radius + 2) - 2;
  47.       arma::vec kernel = {1, p, 1};
  48.       kernel /= (p + 2);
  49.       MatType k_mat = MatType(kernel.n_elem, kernel.n_elem);
  50.       k_mat = kernel * kernel.t();
  51.       NaiveConvolution<FullConvolution>::Convolution(InImage, k_mat, Output);
  52.       //this->SepFilter2D(InImage, kernel, radius);
  53.     }
  54.     else
  55.     {
  56.       const size_t len = 2 * radius + 1;
  57.       arma::vec kernel(len);
  58.       for( size_t i = 0; i < radius; ++i)
  59.         kernel(i) = i + 1;
  60.       kernel(radius) = radius + 1;
  61.       size_t r = radius;
  62.       for( size_t i = radius + 1; i < len; ++i)
  63.         kernel(i) = r--;
  64.       kernel /= std::pow(radius + 1, 2);
  65.       MatType k_mat = MatType(kernel.n_elem, kernel.n_elem);
  66.       k_mat = kernel * kernel.t();
  67.       NaiveConvolution<FullConvolution>::Convolution(InImage, k_mat, Output);
  68.       //this->SepFilter2D(InImage, kernel, radius);
  69.     }
  70.   }
  71.   Timer::Stop("ConvTriangle_mlpack");
  72.  
  73. }
Add Comment
Please, Sign In to add comment