1 #ifndef FILE_openCVtrilateralFilter_h 2 #define FILE_openCVtrilateralFilter_h 5 #include <opencv/cxcore.h> 17 enum{TYPE_LUT, TYPE_FAST};
19 bool trilateralFilter(cv::Mat& input, cv::Mat& output,
const float sigmaC,
const float epsilon,
20 const int filterType = TYPE_FAST);
22 cv::Mat trilateralFilter(cv::Mat& input,
const float sigmaC,
const float epsilon,
const int filterType = TYPE_FAST)
24 cv::Mat output = cv::Mat( input.rows, input.cols, input.depth(), cv::Scalar(1));
25 if ( trilateralFilter(input, output, sigmaC, epsilon, filterType) )
35 void computeGradients(
37 cv::Mat& xGradient, cv::Mat& yGradient);
40 void computeMagnitude(
41 cv::Mat& xGradient, cv::Mat& yGradient,
42 cv::Mat& gradientMagnitude);
46 void setAdaptiveNeighbourHood(
47 cv::Mat& gradientMagnitude,
48 const float sigmaR,
const int maxLevel,
49 cv::Mat& adaptiveNeighbourhood );
52 void buildMinMaxImageStack(
53 cv::Mat& gradientMagnitude,
54 vector<cv::Mat> minStack, vector<cv::Mat> maxStack );
59 void BilateralGradientFilter(
60 cv::Mat& xGradient, cv::Mat& yGradient,
61 cv::Mat& gradientMagnitude,
const float sigmaC,
62 const float sigmaR,
const float epsilon,
63 cv::Mat& xGradientSmooth, cv::Mat& yGradientSmooth );
66 void DetailBilateralFilter(
67 cv::Mat& inputImage, cv::Mat& adaptiveRegion,
68 cv::Mat& xGradientSmooth, cv::Mat& yGradientSmooth,
69 const float sigmaC,
const float sigmaR,
70 const int maxDomainSize,
const float epsilon,
76 void BilateralGradientFilterLUT(
77 cv::Mat& xGradient, cv::Mat& yGradient,
78 cv::Mat& gradientMagnitude,
79 const float sigmaC,
const float sigmaR,
80 cv::Mat& xGradientSmooth, cv::Mat& yGradientSmooth );
82 void DetailBilateralFilterLUT(
83 cv::Mat& inputImage, cv::Mat& adaptiveRegion,
84 cv::Mat& xGradientSmooth, cv::Mat& yGradientSmooth,
85 const float sigmaC,
const float sigmaR,
const int maxDomainSize,
89 inline float getNorm(
float g1,
float g2)
91 return (
float) sqrt( (
float) ( pow(g1,2) + pow(g2,2) ) );
94 inline int log2(
int input,
bool roundUp =
false)
96 float temp = log10(
float(input) ) / log10(2.f);
98 return int( ceil(temp) );
105 #endif // FILE_openCVtrilateralFilter_h