opencv/modules/photo/include/opencv2/photo.hpp

296 lines
11 KiB
C++
Raw Normal View History

/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2008-2012, Willow Garage Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#ifndef __OPENCV_PHOTO_HPP__
#define __OPENCV_PHOTO_HPP__
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
/*! \namespace cv
Namespace where all the C++ OpenCV functionality resides
*/
namespace cv
{
//! the inpainting algorithm
enum
{
2013-04-08 03:23:53 +08:00
INPAINT_NS = 0, // Navier-Stokes algorithm
INPAINT_TELEA = 1 // A. Telea algorithm
};
//! restores the damaged image areas using one of the available intpainting algorithms
CV_EXPORTS_W void inpaint( InputArray src, InputArray inpaintMask,
2012-03-21 22:59:56 +08:00
OutputArray dst, double inpaintRadius, int flags );
CV_EXPORTS_W void fastNlMeansDenoising( InputArray src, OutputArray dst, float h = 3,
int templateWindowSize = 7, int searchWindowSize = 21);
CV_EXPORTS_W void fastNlMeansDenoisingColored( InputArray src, OutputArray dst,
float h = 3, float hColor = 3,
int templateWindowSize = 7, int searchWindowSize = 21);
CV_EXPORTS_W void fastNlMeansDenoisingMulti( InputArrayOfArrays srcImgs, OutputArray dst,
int imgToDenoiseIndex, int temporalWindowSize,
float h = 3, int templateWindowSize = 7, int searchWindowSize = 21);
CV_EXPORTS_W void fastNlMeansDenoisingColoredMulti( InputArrayOfArrays srcImgs, OutputArray dst,
int imgToDenoiseIndex, int temporalWindowSize,
float h = 3, float hColor = 3,
int templateWindowSize = 7, int searchWindowSize = 21);
2013-09-06 21:30:43 +08:00
enum { LDR_SIZE = 256 };
2013-07-30 01:35:10 +08:00
class CV_EXPORTS_W Tonemap : public Algorithm
{
public:
2013-07-31 20:05:31 +08:00
CV_WRAP virtual void process(InputArray src, OutputArray dst) = 0;
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getGamma() const = 0;
CV_WRAP virtual void setGamma(float gamma) = 0;
2013-07-30 01:35:10 +08:00
};
2013-08-05 23:31:10 +08:00
CV_EXPORTS_W Ptr<Tonemap> createTonemap(float gamma = 1.0f);
2013-07-31 20:05:31 +08:00
2013-08-02 04:01:15 +08:00
// "Adaptive Logarithmic Mapping For Displaying HighContrast Scenes", Drago et al., 2003
2013-07-30 01:35:10 +08:00
class CV_EXPORTS_W TonemapDrago : public Tonemap
{
public:
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getSaturation() const = 0;
CV_WRAP virtual void setSaturation(float saturation) = 0;
CV_WRAP virtual float getBias() const = 0;
CV_WRAP virtual void setBias(float bias) = 0;
2013-07-30 01:35:10 +08:00
};
2013-08-05 23:22:42 +08:00
CV_EXPORTS_W Ptr<TonemapDrago> createTonemapDrago(float gamma = 1.0f, float saturation = 1.0f, float bias = 0.85f);
2013-07-31 20:05:31 +08:00
2013-08-02 04:01:15 +08:00
// "Fast Bilateral Filtering for the Display of High-Dynamic-Range Images", Durand, Dorsey, 2002
2013-07-30 01:35:10 +08:00
class CV_EXPORTS_W TonemapDurand : public Tonemap
{
public:
2013-07-31 20:05:31 +08:00
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getSaturation() const = 0;
CV_WRAP virtual void setSaturation(float saturation) = 0;
CV_WRAP virtual float getContrast() const = 0;
CV_WRAP virtual void setContrast(float contrast) = 0;
2013-07-31 20:05:31 +08:00
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getSigmaSpace() const = 0;
CV_WRAP virtual void setSigmaSpace(float sigma_space) = 0;
CV_WRAP virtual float getSigmaColor() const = 0;
CV_WRAP virtual void setSigmaColor(float sigma_color) = 0;
2013-07-30 01:35:10 +08:00
};
CV_EXPORTS_W Ptr<TonemapDurand>
2013-08-06 00:35:48 +08:00
createTonemapDurand(float gamma = 1.0f, float contrast = 4.0f, float saturation = 1.0f, float sigma_space = 2.0f, float sigma_color = 2.0f);
2013-07-31 20:05:31 +08:00
2013-08-02 04:01:15 +08:00
// "Dynamic Range Reduction Inspired by Photoreceptor Physiology", Reinhard, Devlin, 2005
class CV_EXPORTS_W TonemapReinhard : public Tonemap
2013-07-30 01:35:10 +08:00
{
public:
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getIntensity() const = 0;
CV_WRAP virtual void setIntensity(float intensity) = 0;
2013-07-31 20:05:31 +08:00
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getLightAdaptation() const = 0;
CV_WRAP virtual void setLightAdaptation(float light_adapt) = 0;
2013-07-31 20:05:31 +08:00
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getColorAdaptation() const = 0;
CV_WRAP virtual void setColorAdaptation(float color_adapt) = 0;
2013-07-30 01:35:10 +08:00
};
CV_EXPORTS_W Ptr<TonemapReinhard>
createTonemapReinhard(float gamma = 1.0f, float intensity = 0.0f, float light_adapt = 1.0f, float color_adapt = 0.0f);
2013-07-31 20:05:31 +08:00
2013-08-06 00:35:48 +08:00
// "Perceptual Framework for Contrast Processing of High Dynamic Range Images", Mantiuk et al., 2006
2013-08-05 23:22:42 +08:00
class CV_EXPORTS_W TonemapMantiuk : public Tonemap
{
public:
CV_WRAP virtual float getScale() const = 0;
CV_WRAP virtual void setScale(float scale) = 0;
CV_WRAP virtual float getSaturation() const = 0;
CV_WRAP virtual void setSaturation(float saturation) = 0;
};
CV_EXPORTS_W Ptr<TonemapMantiuk>
2013-08-05 23:22:42 +08:00
createTonemapMantiuk(float gamma = 1.0f, float scale = 0.7f, float saturation = 1.0f);
class CV_EXPORTS_W AlignExposures : public Algorithm
2013-08-01 07:24:47 +08:00
{
public:
2013-09-02 20:03:10 +08:00
CV_WRAP virtual void process(InputArrayOfArrays src, std::vector<Mat>& dst,
InputArray times, InputArray response) = 0;
2013-08-01 07:24:47 +08:00
};
2013-08-06 00:35:48 +08:00
// "Fast, Robust Image Registration for Compositing High Dynamic Range Photographs from Handheld Exposures", Ward, 2003
class CV_EXPORTS_W AlignMTB : public AlignExposures
2013-08-01 07:24:47 +08:00
{
public:
2013-09-02 20:03:10 +08:00
CV_WRAP virtual void process(InputArrayOfArrays src, std::vector<Mat>& dst,
InputArray times, InputArray response) = 0;
2013-08-01 07:24:47 +08:00
2013-09-02 20:03:10 +08:00
CV_WRAP virtual void process(InputArrayOfArrays src, std::vector<Mat>& dst) = 0;
2013-08-01 07:24:47 +08:00
CV_WRAP virtual Point calculateShift(InputArray img0, InputArray img1) = 0;
2013-08-05 23:22:42 +08:00
CV_WRAP virtual void shiftMat(InputArray src, OutputArray dst, const Point shift) = 0;
CV_WRAP virtual void computeBitmaps(InputArray img, OutputArray tb, OutputArray eb) = 0;
2013-08-01 07:24:47 +08:00
2013-08-05 23:22:42 +08:00
CV_WRAP virtual int getMaxBits() const = 0;
CV_WRAP virtual void setMaxBits(int max_bits) = 0;
2013-08-01 07:24:47 +08:00
2013-08-05 23:22:42 +08:00
CV_WRAP virtual int getExcludeRange() const = 0;
CV_WRAP virtual void setExcludeRange(int exclude_range) = 0;
2013-09-02 20:03:10 +08:00
CV_WRAP virtual bool getCut() const = 0;
CV_WRAP virtual void setCut(bool value) = 0;
2013-08-01 07:24:47 +08:00
};
2013-09-02 20:03:10 +08:00
CV_EXPORTS_W Ptr<AlignMTB> createAlignMTB(int max_bits = 6, int exclude_range = 4, bool cut = true);
2013-08-01 07:24:47 +08:00
class CV_EXPORTS_W CalibrateCRF : public Algorithm
2013-08-01 07:24:47 +08:00
{
public:
CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, InputArray times) = 0;
2013-08-01 07:24:47 +08:00
};
2013-08-02 04:01:15 +08:00
// "Recovering High Dynamic Range Radiance Maps from Photographs", Debevec, Malik, 1997
class CV_EXPORTS_W CalibrateDebevec : public CalibrateCRF
2013-08-01 07:24:47 +08:00
{
public:
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getLambda() const = 0;
2013-08-01 07:24:47 +08:00
CV_WRAP virtual void setLambda(float lambda) = 0;
2013-08-05 23:22:42 +08:00
CV_WRAP virtual int getSamples() const = 0;
CV_WRAP virtual void setSamples(int samples) = 0;
2013-09-05 18:10:53 +08:00
CV_WRAP virtual bool getRandom() const = 0;
CV_WRAP virtual void setRandom(bool random) = 0;
2013-08-01 07:24:47 +08:00
};
2013-09-05 18:10:53 +08:00
CV_EXPORTS_W Ptr<CalibrateDebevec> createCalibrateDebevec(int samples = 70, float lambda = 10.0f, bool random = false);
2013-08-01 07:24:47 +08:00
2013-08-26 19:23:37 +08:00
// "Dynamic range improvement through multiple exposures", Robertson et al., 1999
class CV_EXPORTS_W CalibrateRobertson : public CalibrateCRF
2013-08-26 19:23:37 +08:00
{
public:
CV_WRAP virtual int getMaxIter() const = 0;
CV_WRAP virtual void setMaxIter(int max_iter) = 0;
2013-08-26 19:23:37 +08:00
CV_WRAP virtual float getThreshold() const = 0;
CV_WRAP virtual void setThreshold(float threshold) = 0;
2013-09-06 21:30:43 +08:00
CV_WRAP virtual Mat getRadiance() const = 0;
2013-08-26 19:23:37 +08:00
};
2013-09-06 21:30:43 +08:00
CV_EXPORTS_W Ptr<CalibrateRobertson> createCalibrateRobertson(int max_iter = 30, float threshold = 0.01f);
2013-08-26 19:23:37 +08:00
class CV_EXPORTS_W MergeExposures : public Algorithm
2013-08-01 07:24:47 +08:00
{
public:
2013-08-05 23:22:42 +08:00
CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst,
InputArray times, InputArray response) = 0;
2013-08-01 07:24:47 +08:00
};
2013-08-02 04:01:15 +08:00
// "Recovering High Dynamic Range Radiance Maps from Photographs", Debevec, Malik, 1997
class CV_EXPORTS_W MergeDebevec : public MergeExposures
2013-08-01 07:24:47 +08:00
{
public:
2013-08-05 23:22:42 +08:00
CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst,
InputArray times, InputArray response) = 0;
CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, InputArray times) = 0;
2013-08-01 07:24:47 +08:00
};
CV_EXPORTS_W Ptr<MergeDebevec> createMergeDebevec();
2013-08-02 04:01:15 +08:00
// "Exposure Fusion", Mertens et al., 2007
class CV_EXPORTS_W MergeMertens : public MergeExposures
2013-08-01 07:24:47 +08:00
{
public:
2013-08-05 23:22:42 +08:00
CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst,
InputArray times, InputArray response) = 0;
2013-08-05 23:22:42 +08:00
CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst) = 0;
2013-08-01 07:24:47 +08:00
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getContrastWeight() const = 0;
CV_WRAP virtual void setContrastWeight(float contrast_weiht) = 0;
2013-08-01 07:24:47 +08:00
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getSaturationWeight() const = 0;
CV_WRAP virtual void setSaturationWeight(float saturation_weight) = 0;
2013-08-01 07:24:47 +08:00
2013-08-05 23:22:42 +08:00
CV_WRAP virtual float getExposureWeight() const = 0;
CV_WRAP virtual void setExposureWeight(float exposure_weight) = 0;
2013-08-01 07:24:47 +08:00
};
CV_EXPORTS_W Ptr<MergeMertens>
2013-08-01 07:24:47 +08:00
createMergeMertens(float contrast_weight = 1.0f, float saturation_weight = 1.0f, float exposure_weight = 0.0f);
2013-08-26 19:23:37 +08:00
// "Dynamic range improvement through multiple exposures", Robertson et al., 1999
class CV_EXPORTS_W MergeRobertson : public MergeExposures
2013-08-26 19:23:37 +08:00
{
public:
CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst,
InputArray times, InputArray response) = 0;
CV_WRAP virtual void process(InputArrayOfArrays src, OutputArray dst, InputArray times) = 0;
2013-08-26 19:23:37 +08:00
};
2013-09-02 20:03:10 +08:00
CV_EXPORTS_W Ptr<MergeRobertson> createMergeRobertson();
CV_EXPORTS_W void decolor(InputArray src, OutputArray grayscale);
2013-06-15 18:49:31 +08:00
2013-04-08 03:23:53 +08:00
} // cv
#endif