From 4c0f7f9e5948ad67c0d0ed3d57542d2e7a6d3ff3 Mon Sep 17 00:00:00 2001 From: Fedor Morozov Date: Mon, 5 Aug 2013 20:35:48 +0400 Subject: [PATCH] Tonemapping documentation update --- modules/photo/doc/hdr_imaging.rst | 40 +++++++++++++++++-------- modules/photo/include/opencv2/photo.hpp | 8 +++-- modules/photo/src/tonemap.cpp | 8 ++--- modules/photo/test/test_hdr.cpp | 2 +- 4 files changed, 38 insertions(+), 20 deletions(-) diff --git a/modules/photo/doc/hdr_imaging.rst b/modules/photo/doc/hdr_imaging.rst index 6b2997c2d..1e150ee25 100644 --- a/modules/photo/doc/hdr_imaging.rst +++ b/modules/photo/doc/hdr_imaging.rst @@ -19,17 +19,11 @@ Tonemaps image :param src: source image - 32-bit 3-channel Mat :param dst: destination image - 32-bit 3-channel Mat with values in [0, 1] range -TonemapLinear --------- -.. ocv:class:: TonemapLinear : public Tonemap - -Simple linear mapper with gamma correction. - -createTonemapLinear +createTonemap ------------------ -Creates TonemapLinear object +Creates simple linear mapper with gamma correction -.. ocv:function:: Ptr createTonemapLinear(float gamma = 1.0f); +.. ocv:function:: Ptr createTonemap(float gamma = 1.0f); :param gamma: gamma value for gamma correction @@ -47,6 +41,8 @@ Creates TonemapDrago object :param gamma: gamma value for gamma correction + :param saturation: saturation enhancement value + :param bias: value for bias function in [0, 1] range TonemapDurand @@ -61,15 +57,17 @@ createTonemapDurand ------------------ Creates TonemapDurand object -.. ocv:function:: Ptr createTonemapDurand(float gamma = 1.0f, float contrast = 4.0f, float sigma_space = 2.0f, float sigma_color = 2.0f); +.. ocv:function:: Ptr createTonemapDurand(float gamma = 1.0f, float contrast = 4.0f, float saturation = 1.0f, float sigma_space = 2.0f, float sigma_color = 2.0f); :param gamma: gamma value for gamma correction :param contrast: resulting contrast on logarithmic scale - :param sigma_space: filter sigma in the color space + :param saturation: saturation enhancement value - :param sigma_color: filter sigma in the coordinate space + :param sigma_space: filter sigma in color space + + :param sigma_color: filter sigma in coordinate space TonemapReinhardDevlin -------- @@ -91,6 +89,24 @@ Creates TonemapReinhardDevlin object :param color_adapt: chromatic adaptation in [0, 1] range. If 1 channels are treated independently, if 0 adaptation level is the same for each channel +TonemapMantiuk +-------- +.. ocv:class:: TonemapMantiuk : public Tonemap + +"Perceptual Framework for Contrast Processing of High Dynamic Range Images", Mantiuk et al., 2006 + +createTonemapMantiuk +------------------ +Creates TonemapMantiuk object + +.. ocv:function:: CV_EXPORTS_W Ptr createTonemapMantiuk(float gamma = 1.0f, float scale = 0.7f, float saturation = 1.0f); + + :param gamma: gamma value for gamma correction + + :param scale: contrast scale factor + + :param saturation: saturation enhancement value + ExposureAlign ------------- .. ocv:class:: ExposureAlign : public Algorithm diff --git a/modules/photo/include/opencv2/photo.hpp b/modules/photo/include/opencv2/photo.hpp index 258c9881b..8c709b379 100644 --- a/modules/photo/include/opencv2/photo.hpp +++ b/modules/photo/include/opencv2/photo.hpp @@ -126,7 +126,7 @@ public: }; CV_EXPORTS_W Ptr -createTonemapDurand(float gamma = 1.0f, float saturation = 1.0f, float contrast = 4.0f, float sigma_space = 2.0f, float sigma_color = 2.0f); +createTonemapDurand(float gamma = 1.0f, float contrast = 4.0f, float saturation = 1.0f, float sigma_space = 2.0f, float sigma_color = 2.0f); // "Dynamic Range Reduction Inspired by Photoreceptor Physiology", Reinhard, Devlin, 2005 @@ -146,6 +146,8 @@ public: CV_EXPORTS_W Ptr createTonemapReinhardDevlin(float gamma = 1.0f, float intensity = 0.0f, float light_adapt = 1.0f, float color_adapt = 0.0f); +// "Perceptual Framework for Contrast Processing of High Dynamic Range Images", Mantiuk et al., 2006 + class CV_EXPORTS_W TonemapMantiuk : public Tonemap { public: @@ -166,6 +168,8 @@ public: const std::vector& times, InputArray response) = 0; }; +// "Fast, Robust Image Registration for Compositing High Dynamic Range Photographs from Handheld Exposures", Ward, 2003 + class CV_EXPORTS_W AlignMTB : public ExposureAlign { public: @@ -184,8 +188,6 @@ public: CV_WRAP virtual void setExcludeRange(int exclude_range) = 0; }; -// "Fast, Robust Image Registration for Compositing High Dynamic Range Photographs from Handheld Exposures", Ward, 2003 - CV_EXPORTS_W Ptr createAlignMTB(int max_bits = 6, int exclude_range = 4); class CV_EXPORTS_W ExposureCalibrate : public Algorithm diff --git a/modules/photo/src/tonemap.cpp b/modules/photo/src/tonemap.cpp index 6088b856d..9115b09f8 100644 --- a/modules/photo/src/tonemap.cpp +++ b/modules/photo/src/tonemap.cpp @@ -183,10 +183,10 @@ Ptr createTonemapDrago(float gamma, float saturation, float bias) class TonemapDurandImpl : public TonemapDurand { public: - TonemapDurandImpl(float gamma, float saturation, float contrast, float sigma_color, float sigma_space) : + TonemapDurandImpl(float gamma, float contrast, float saturation, float sigma_color, float sigma_space) : gamma(gamma), + contrast(contrast), saturation(saturation), - contrast(contrast), sigma_color(sigma_color), sigma_space(sigma_space), name("TonemapDurand") @@ -260,9 +260,9 @@ protected: float gamma, saturation, contrast, sigma_color, sigma_space; }; -Ptr createTonemapDurand(float gamma, float saturation, float contrast, float sigma_color, float sigma_space) +Ptr createTonemapDurand(float gamma, float contrast, float saturation, float sigma_color, float sigma_space) { - return new TonemapDurandImpl(gamma, saturation, contrast, sigma_color, sigma_space); + return new TonemapDurandImpl(gamma, contrast, saturation, sigma_color, sigma_space); } class TonemapReinhardDevlinImpl : public TonemapReinhardDevlin diff --git a/modules/photo/test/test_hdr.cpp b/modules/photo/test/test_hdr.cpp index 2f2dfe2b0..693eac79b 100644 --- a/modules/photo/test/test_hdr.cpp +++ b/modules/photo/test/test_hdr.cpp @@ -97,7 +97,7 @@ TEST(Photo_Tonemap, regression) loadImage(test_path + "image.hdr", img); float gamma = 2.2f; - Ptr linear = createTonemapLinear(gamma); + Ptr linear = createTonemap(gamma); linear->process(img, result); loadImage(test_path + "linear.png", expected); result.convertTo(result, CV_8UC3, 255);