Advertisement
Guest User

Untitled

a guest
May 27th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.76 KB | None | 0 0
  1. Mat test_bilateral_filter(cv::Mat imageS, double sigmaS, double sigmaR, double tol, bool sw_imshow, bool last)
  2. {
  3.     //cv::Mat imageS = cv::imread(pathS, -1);
  4.     if (imageS.empty())
  5.     {
  6.         std::cerr << "Source image loading failed!" << std::endl;
  7.         return imageS;
  8.     }
  9.  
  10.     std::cerr << "[Loaded Image]" << std::endl;
  11.     std::cerr << cv::format("Source: \"\"  # (w,h,ch)=(%d,%d,%d)",  imageS.cols, imageS.rows, imageS.channels()) << std::endl;
  12.     std::cerr << "[Filter Parameters]" << std::endl;
  13.     std::cerr << cv::format("sigmaS=%f  sigmaR=%f  tolerance=%f", sigmaS, sigmaR, tol) << std::endl;
  14.  
  15.     cv::Mat src;
  16.     imageS.convertTo(src, CV_64F);
  17.  
  18.     std::vector<cv::Mat_<double> > srcsp;
  19.     cv::split(src, srcsp);
  20.  
  21.     std::vector<cv::Mat_<double> > dstsp0(src.channels());
  22.     //std::vector<cv::Mat_<double> > dstsp1(src.channels());
  23.     for (int c = 0; c<int(src.channels()); ++c)
  24.     {
  25.         dstsp0[c] = cv::Mat_<double>(src.size());
  26.         //dstsp1[c] = cv::Mat_<double>(src.size());
  27.     }
  28.  
  29.     cv::TickMeter tm;
  30.     // Original bilateral filtering
  31.     tm.start();
  32.     //for (int i = 0; i < 1; i++) {
  33.         for (int c = 0; c < src.channels(); ++c)
  34.             apply_bilateral_filter(srcsp[c], dstsp0[c], sigmaS, sigmaR);
  35.     //}
  36.    
  37.         if (last)
  38.         {
  39.             for (int c = 0; c < src.channels(); ++c)
  40.             {
  41.                 for (int i = 0; i < src.rows; i++)
  42.                 {
  43.                     for (int j = 0; j < src.cols; j++)
  44.                     {
  45.                         double p = dstsp0[c](i, j);
  46.                         p = ((p /255.0f) / 24) * 24;
  47.                         dstsp0[c](i, j) = p;
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.     tm.stop();
  53.     std::cerr << cv::format("Original BF:     %7.1f [ms]", tm.getTimeMilli()) << std::endl;
  54.     tm.reset();
  55.  
  56.     cv::Mat dst0, dst1;
  57.     cv::merge(dstsp0, dst0);
  58.  
  59.     const double tone = 256.0;
  60.     if (sw_imshow)
  61.     {
  62.         cv::imshow("dst0", dst0 / (tone - 1.0));/// (tone - 1.0));
  63.         cv::waitKey();
  64.     }
  65.     return dst0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement