Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Mat test_bilateral_filter(cv::Mat imageS, double sigmaS, double sigmaR, double tol, bool sw_imshow, bool last)
- {
- //cv::Mat imageS = cv::imread(pathS, -1);
- if (imageS.empty())
- {
- std::cerr << "Source image loading failed!" << std::endl;
- return imageS;
- }
- std::cerr << "[Loaded Image]" << std::endl;
- std::cerr << cv::format("Source: \"\" # (w,h,ch)=(%d,%d,%d)", imageS.cols, imageS.rows, imageS.channels()) << std::endl;
- std::cerr << "[Filter Parameters]" << std::endl;
- std::cerr << cv::format("sigmaS=%f sigmaR=%f tolerance=%f", sigmaS, sigmaR, tol) << std::endl;
- cv::Mat src;
- imageS.convertTo(src, CV_64F);
- std::vector<cv::Mat_<double> > srcsp;
- cv::split(src, srcsp);
- std::vector<cv::Mat_<double> > dstsp0(src.channels());
- //std::vector<cv::Mat_<double> > dstsp1(src.channels());
- for (int c = 0; c<int(src.channels()); ++c)
- {
- dstsp0[c] = cv::Mat_<double>(src.size());
- //dstsp1[c] = cv::Mat_<double>(src.size());
- }
- cv::TickMeter tm;
- // Original bilateral filtering
- tm.start();
- //for (int i = 0; i < 1; i++) {
- for (int c = 0; c < src.channels(); ++c)
- apply_bilateral_filter(srcsp[c], dstsp0[c], sigmaS, sigmaR);
- //}
- if (last)
- {
- for (int c = 0; c < src.channels(); ++c)
- {
- for (int i = 0; i < src.rows; i++)
- {
- for (int j = 0; j < src.cols; j++)
- {
- double p = dstsp0[c](i, j);
- p = ((p /255.0f) / 24) * 24;
- dstsp0[c](i, j) = p;
- }
- }
- }
- }
- tm.stop();
- std::cerr << cv::format("Original BF: %7.1f [ms]", tm.getTimeMilli()) << std::endl;
- tm.reset();
- cv::Mat dst0, dst1;
- cv::merge(dstsp0, dst0);
- const double tone = 256.0;
- if (sw_imshow)
- {
- cv::imshow("dst0", dst0 / (tone - 1.0));/// (tone - 1.0));
- cv::waitKey();
- }
- return dst0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement