Cleaned up adaptive bilateral filtering, added support for gaussian interpolation, updated sample and docs
This commit is contained in:

committed by
Andrey Pavlenko

parent
370235c07b
commit
a1de91a4fd
@@ -12,7 +12,9 @@ int main( int argc, const char** argv )
|
||||
{
|
||||
const char* keys =
|
||||
"{ i | input | | specify input image }"
|
||||
"{ k | ksize | 5 | specify kernel size }"
|
||||
"{ k | ksize | 11 | specify kernel size }"
|
||||
"{ s | sSpace | 3 | specify sigma space }"
|
||||
"{ c | sColor | 30 | specify max color }"
|
||||
"{ h | help | false | print help message }";
|
||||
|
||||
CommandLineParser cmd(argc, argv, keys);
|
||||
@@ -26,27 +28,36 @@ int main( int argc, const char** argv )
|
||||
|
||||
string src_path = cmd.get<string>("i");
|
||||
int ks = cmd.get<int>("k");
|
||||
const char * winName[] = {"input", "adaptive bilateral CPU", "adaptive bilateral OpenCL", "bilateralFilter OpenCL"};
|
||||
const char * winName[] = {"input", "ABF OpenCL", "BF OpenCL"};
|
||||
|
||||
Mat src = imread(src_path), abFilterCPU;
|
||||
Mat src = imread(src_path);
|
||||
if (src.empty())
|
||||
{
|
||||
cout << "error read image: " << src_path << endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
double sigmaSpace = cmd.get<int>("s");
|
||||
|
||||
// sigma for checking pixel values. This is used as is in the "normal" bilateral filter,
|
||||
// and it is used as an upper clamp on the adaptive case.
|
||||
double sigmacolor = cmd.get<int>("c");
|
||||
|
||||
ocl::oclMat dsrc(src), dABFilter, dBFilter;
|
||||
|
||||
Size ksize(ks, ks);
|
||||
adaptiveBilateralFilter(src,abFilterCPU, ksize, 10);
|
||||
ocl::adaptiveBilateralFilter(dsrc, dABFilter, ksize, 10);
|
||||
ocl::bilateralFilter(dsrc, dBFilter, ks, 30, 9);
|
||||
|
||||
// ksize is the total width/height of neighborhood used to calculate local variance.
|
||||
// sigmaSpace is not a priori related to ksize/2.
|
||||
ocl::adaptiveBilateralFilter(dsrc, dABFilter, ksize, sigmaSpace, sigmacolor);
|
||||
ocl::bilateralFilter(dsrc, dBFilter, ks, sigmacolor, sigmaSpace);
|
||||
Mat abFilter = dABFilter, bFilter = dBFilter;
|
||||
|
||||
ocl::finish();
|
||||
|
||||
imshow(winName[0], src);
|
||||
imshow(winName[1], abFilterCPU);
|
||||
imshow(winName[2], abFilter);
|
||||
imshow(winName[3], bFilter);
|
||||
imshow(winName[1], abFilter);
|
||||
imshow(winName[2], bFilter);
|
||||
|
||||
waitKey();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
Reference in New Issue
Block a user