Mantiuk's tonemapping
This commit is contained in:
commit
cb999a231e
@ -59,8 +59,6 @@ enum
|
|||||||
INPAINT_TELEA = 1 // A. Telea algorithm
|
INPAINT_TELEA = 1 // A. Telea algorithm
|
||||||
};
|
};
|
||||||
|
|
||||||
CV_EXPORTS_W bool initModule_photo();
|
|
||||||
|
|
||||||
//! restores the damaged image areas using one of the available intpainting algorithms
|
//! restores the damaged image areas using one of the available intpainting algorithms
|
||||||
CV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask,
|
CV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask,
|
||||||
OutputArray dst, double inpaintRadius, int flags );
|
OutputArray dst, double inpaintRadius, int flags );
|
||||||
@ -91,11 +89,7 @@ public:
|
|||||||
CV_WRAP virtual void setGamma(float gamma) = 0;
|
CV_WRAP virtual void setGamma(float gamma) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CV_EXPORTS_W TonemapLinear : public Tonemap
|
CV_EXPORTS_W Ptr<Tonemap> createTonemap(float gamma = 1.0f);
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
CV_EXPORTS_W Ptr<TonemapLinear> createTonemapLinear(float gamma = 1.0f);
|
|
||||||
|
|
||||||
// "Adaptive Logarithmic Mapping For Displaying HighContrast Scenes", Drago et al., 2003
|
// "Adaptive Logarithmic Mapping For Displaying HighContrast Scenes", Drago et al., 2003
|
||||||
|
|
||||||
|
@ -10,8 +10,7 @@
|
|||||||
// License Agreement
|
// License Agreement
|
||||||
// For Open Source Computer Vision Library
|
// For Open Source Computer Vision Library
|
||||||
//
|
//
|
||||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
|
||||||
// Third party copyrights are property of their respective owners.
|
// Third party copyrights are property of their respective owners.
|
||||||
//
|
//
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -232,4 +231,4 @@ CV_EXPORTS_W Ptr<AlignMTB> createAlignMTB(int max_bits, int exclude_range)
|
|||||||
return new AlignMTBImpl(max_bits, exclude_range);
|
return new AlignMTBImpl(max_bits, exclude_range);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,7 @@
|
|||||||
// License Agreement
|
// License Agreement
|
||||||
// For Open Source Computer Vision Library
|
// For Open Source Computer Vision Library
|
||||||
//
|
//
|
||||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
|
||||||
// Third party copyrights are property of their respective owners.
|
// Third party copyrights are property of their respective owners.
|
||||||
//
|
//
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -83,4 +82,4 @@ void mapLuminance(Mat src, Mat dst, Mat lum, Mat new_lum, float saturation)
|
|||||||
merge(channels, dst);
|
merge(channels, dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -10,8 +10,7 @@
|
|||||||
// License Agreement
|
// License Agreement
|
||||||
// For Open Source Computer Vision Library
|
// For Open Source Computer Vision Library
|
||||||
//
|
//
|
||||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
|
||||||
// Third party copyrights are property of their respective owners.
|
// Third party copyrights are property of their respective owners.
|
||||||
//
|
//
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -57,4 +56,4 @@ void mapLuminance(Mat src, Mat dst, Mat lum, Mat new_lum, float saturation);
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -10,8 +10,7 @@
|
|||||||
// License Agreement
|
// License Agreement
|
||||||
// For Open Source Computer Vision Library
|
// For Open Source Computer Vision Library
|
||||||
//
|
//
|
||||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
|
||||||
// Third party copyrights are property of their respective owners.
|
// Third party copyrights are property of their respective owners.
|
||||||
//
|
//
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -260,4 +259,4 @@ Ptr<MergeMertens> createMergeMertens(float wcon, float wsat, float wexp)
|
|||||||
return new MergeMertensImpl(wcon, wsat, wexp);
|
return new MergeMertensImpl(wcon, wsat, wexp);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,7 @@
|
|||||||
// License Agreement
|
// License Agreement
|
||||||
// For Open Source Computer Vision Library
|
// For Open Source Computer Vision Library
|
||||||
//
|
//
|
||||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
|
||||||
// Third party copyrights are property of their respective owners.
|
// Third party copyrights are property of their respective owners.
|
||||||
//
|
//
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -48,10 +47,10 @@
|
|||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
|
|
||||||
class TonemapLinearImpl : public TonemapLinear
|
class TonemapImpl : public Tonemap
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TonemapLinearImpl(float gamma) : gamma(gamma), name("TonemapLinear")
|
TonemapImpl(float gamma) : gamma(gamma), name("Tonemap")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,9 +93,9 @@ protected:
|
|||||||
float gamma;
|
float gamma;
|
||||||
};
|
};
|
||||||
|
|
||||||
Ptr<TonemapLinear> createTonemapLinear(float gamma)
|
Ptr<Tonemap> createTonemap(float gamma)
|
||||||
{
|
{
|
||||||
return new TonemapLinearImpl(gamma);
|
return new TonemapImpl(gamma);
|
||||||
}
|
}
|
||||||
|
|
||||||
class TonemapDragoImpl : public TonemapDrago
|
class TonemapDragoImpl : public TonemapDrago
|
||||||
@ -117,7 +116,7 @@ public:
|
|||||||
_dst.create(src.size(), CV_32FC3);
|
_dst.create(src.size(), CV_32FC3);
|
||||||
Mat img = _dst.getMat();
|
Mat img = _dst.getMat();
|
||||||
|
|
||||||
Ptr<TonemapLinear> linear = createTonemapLinear(1.0f);
|
Ptr<Tonemap> linear = createTonemap(1.0f);
|
||||||
linear->process(src, img);
|
linear->process(src, img);
|
||||||
|
|
||||||
Mat gray_img;
|
Mat gray_img;
|
||||||
@ -200,7 +199,7 @@ public:
|
|||||||
CV_Assert(!src.empty());
|
CV_Assert(!src.empty());
|
||||||
_dst.create(src.size(), CV_32FC3);
|
_dst.create(src.size(), CV_32FC3);
|
||||||
Mat img = _dst.getMat();
|
Mat img = _dst.getMat();
|
||||||
Ptr<TonemapLinear> linear = createTonemapLinear(1.0f);
|
Ptr<Tonemap> linear = createTonemap(1.0f);
|
||||||
linear->process(src, img);
|
linear->process(src, img);
|
||||||
|
|
||||||
Mat gray_img;
|
Mat gray_img;
|
||||||
@ -284,7 +283,7 @@ public:
|
|||||||
CV_Assert(!src.empty());
|
CV_Assert(!src.empty());
|
||||||
_dst.create(src.size(), CV_32FC3);
|
_dst.create(src.size(), CV_32FC3);
|
||||||
Mat img = _dst.getMat();
|
Mat img = _dst.getMat();
|
||||||
Ptr<TonemapLinear> linear = createTonemapLinear(1.0f);
|
Ptr<Tonemap> linear = createTonemap(1.0f);
|
||||||
linear->process(src, img);
|
linear->process(src, img);
|
||||||
|
|
||||||
Mat gray_img;
|
Mat gray_img;
|
||||||
@ -378,7 +377,7 @@ public:
|
|||||||
CV_Assert(!src.empty());
|
CV_Assert(!src.empty());
|
||||||
_dst.create(src.size(), CV_32FC3);
|
_dst.create(src.size(), CV_32FC3);
|
||||||
Mat img = _dst.getMat();
|
Mat img = _dst.getMat();
|
||||||
Ptr<TonemapLinear> linear = createTonemapLinear(1.0f);
|
Ptr<Tonemap> linear = createTonemap(1.0f);
|
||||||
linear->process(src, img);
|
linear->process(src, img);
|
||||||
|
|
||||||
Mat gray_img;
|
Mat gray_img;
|
||||||
@ -426,7 +425,7 @@ public:
|
|||||||
exp(x, x);
|
exp(x, x);
|
||||||
mapLuminance(img, img, gray_img, x, saturation);
|
mapLuminance(img, img, gray_img, x, saturation);
|
||||||
|
|
||||||
linear = createTonemapLinear(gamma);
|
linear = createTonemap(gamma);
|
||||||
linear->process(img, img);
|
linear->process(img, img);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -529,4 +528,4 @@ Ptr<TonemapMantiuk> createTonemapMantiuk(float gamma, float scale, float saturat
|
|||||||
return new TonemapMantiukImpl(gamma, scale, saturation);
|
return new TonemapMantiukImpl(gamma, scale, saturation);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,7 @@
|
|||||||
// License Agreement
|
// License Agreement
|
||||||
// For Open Source Computer Vision Library
|
// For Open Source Computer Vision Library
|
||||||
//
|
//
|
||||||
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
|
||||||
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
|
|
||||||
// Third party copyrights are property of their respective owners.
|
// Third party copyrights are property of their respective owners.
|
||||||
//
|
//
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
// Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -61,9 +60,10 @@ void checkEqual(Mat img0, Mat img1, double threshold)
|
|||||||
ASSERT_FALSE(max > threshold) << max;
|
ASSERT_FALSE(max > threshold) << max;
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadExposureSeq(String path, vector<Mat>& images, vector<float>& times = vector<float>())
|
static vector<float> DEFAULT_VECTOR;
|
||||||
|
void loadExposureSeq(String path, vector<Mat>& images, vector<float>& times = DEFAULT_VECTOR)
|
||||||
{
|
{
|
||||||
ifstream list_file(path + "list.txt");
|
ifstream list_file((path + "list.txt").c_str());
|
||||||
ASSERT_TRUE(list_file.is_open());
|
ASSERT_TRUE(list_file.is_open());
|
||||||
string name;
|
string name;
|
||||||
float val;
|
float val;
|
||||||
@ -79,7 +79,7 @@ void loadExposureSeq(String path, vector<Mat>& images, vector<float>& times = ve
|
|||||||
void loadResponseCSV(String path, Mat& response)
|
void loadResponseCSV(String path, Mat& response)
|
||||||
{
|
{
|
||||||
response = Mat(256, 3, CV_32F);
|
response = Mat(256, 3, CV_32F);
|
||||||
ifstream resp_file(path);
|
ifstream resp_file(path.c_str());
|
||||||
for(int i = 0; i < 256; i++) {
|
for(int i = 0; i < 256; i++) {
|
||||||
for(int channel = 0; channel < 3; channel++) {
|
for(int channel = 0; channel < 3; channel++) {
|
||||||
resp_file >> response.at<float>(i, channel);
|
resp_file >> response.at<float>(i, channel);
|
||||||
@ -97,7 +97,7 @@ TEST(Photo_Tonemap, regression)
|
|||||||
loadImage(test_path + "image.hdr", img);
|
loadImage(test_path + "image.hdr", img);
|
||||||
float gamma = 2.2f;
|
float gamma = 2.2f;
|
||||||
|
|
||||||
Ptr<TonemapLinear> linear = createTonemapLinear(gamma);
|
Ptr<Tonemap> linear = createTonemapLinear(gamma);
|
||||||
linear->process(img, result);
|
linear->process(img, result);
|
||||||
loadImage(test_path + "linear.png", expected);
|
loadImage(test_path + "linear.png", expected);
|
||||||
result.convertTo(result, CV_8UC3, 255);
|
result.convertTo(result, CV_8UC3, 255);
|
||||||
@ -161,7 +161,7 @@ TEST(Photo_MergeMertens, regression)
|
|||||||
string test_path = string(cvtest::TS::ptr()->get_data_path()) + "hdr/";
|
string test_path = string(cvtest::TS::ptr()->get_data_path()) + "hdr/";
|
||||||
|
|
||||||
vector<Mat> images;
|
vector<Mat> images;
|
||||||
loadExposureSeq(test_path + "exposures/", images);
|
loadExposureSeq((test_path + "exposures/").c_str() , images);
|
||||||
|
|
||||||
Ptr<MergeMertens> merge = createMergeMertens();
|
Ptr<MergeMertens> merge = createMergeMertens();
|
||||||
|
|
||||||
|
@ -131,6 +131,15 @@ typedef Ptr<StereoMatcher> Ptr_StereoMatcher;
|
|||||||
typedef Ptr<StereoBM> Ptr_StereoBM;
|
typedef Ptr<StereoBM> Ptr_StereoBM;
|
||||||
typedef Ptr<StereoSGBM> Ptr_StereoSGBM;
|
typedef Ptr<StereoSGBM> Ptr_StereoSGBM;
|
||||||
|
|
||||||
|
typedef Ptr<Tonemap> Ptr_Tonemap;
|
||||||
|
typedef Ptr<TonemapDrago> Ptr_TonemapDrago;
|
||||||
|
typedef Ptr<TonemapReinhardDevlin> Ptr_TonemapReinhardDevlin;
|
||||||
|
typedef Ptr<TonemapDurand> Ptr_TonemapDurand;
|
||||||
|
typedef Ptr<AlignMTB> Ptr_AlignMTB;
|
||||||
|
typedef Ptr<CalibrateDebevec> Ptr_CalibrateDebevec;
|
||||||
|
typedef Ptr<MergeDebevec> Ptr_MergeDebevec;
|
||||||
|
typedef Ptr<MergeMertens> Ptr_MergeMertens;
|
||||||
|
|
||||||
typedef Ptr<cv::softcascade::ChannelFeatureBuilder> Ptr_ChannelFeatureBuilder;
|
typedef Ptr<cv::softcascade::ChannelFeatureBuilder> Ptr_ChannelFeatureBuilder;
|
||||||
|
|
||||||
typedef SimpleBlobDetector::Params SimpleBlobDetector_Params;
|
typedef SimpleBlobDetector::Params SimpleBlobDetector_Params;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user