Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: RZ_A2M_Mbed_samples
exposure_compensate.hpp
00001 /*M/////////////////////////////////////////////////////////////////////////////////////// 00002 // 00003 // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 00004 // 00005 // By downloading, copying, installing or using the software you agree to this license. 00006 // If you do not agree to this license, do not download, install, 00007 // copy or use the software. 00008 // 00009 // 00010 // License Agreement 00011 // For Open Source Computer Vision Library 00012 // 00013 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved. 00014 // Copyright (C) 2009, Willow Garage Inc., all rights reserved. 00015 // Third party copyrights are property of their respective owners. 00016 // 00017 // Redistribution and use in source and binary forms, with or without modification, 00018 // are permitted provided that the following conditions are met: 00019 // 00020 // * Redistribution's of source code must retain the above copyright notice, 00021 // this list of conditions and the following disclaimer. 00022 // 00023 // * Redistribution's in binary form must reproduce the above copyright notice, 00024 // this list of conditions and the following disclaimer in the documentation 00025 // and/or other materials provided with the distribution. 00026 // 00027 // * The name of the copyright holders may not be used to endorse or promote products 00028 // derived from this software without specific prior written permission. 00029 // 00030 // This software is provided by the copyright holders and contributors "as is" and 00031 // any express or implied warranties, including, but not limited to, the implied 00032 // warranties of merchantability and fitness for a particular purpose are disclaimed. 00033 // In no event shall the Intel Corporation or contributors be liable for any direct, 00034 // indirect, incidental, special, exemplary, or consequential damages 00035 // (including, but not limited to, procurement of substitute goods or services; 00036 // loss of use, data, or profits; or business interruption) however caused 00037 // and on any theory of liability, whether in contract, strict liability, 00038 // or tort (including negligence or otherwise) arising in any way out of 00039 // the use of this software, even if advised of the possibility of such damage. 00040 // 00041 //M*/ 00042 00043 #ifndef OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP 00044 #define OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP 00045 00046 #if defined(NO) 00047 # warning Detected Apple 'NO' macro definition, it can cause build conflicts. Please, include this header before any Apple headers. 00048 #endif 00049 00050 #include "opencv2/core.hpp" 00051 00052 namespace cv { 00053 namespace detail { 00054 00055 //! @addtogroup stitching_exposure 00056 //! @{ 00057 00058 /** @brief Base class for all exposure compensators. 00059 */ 00060 class CV_EXPORTS ExposureCompensator 00061 { 00062 public: 00063 virtual ~ExposureCompensator() {} 00064 00065 enum { NO, GAIN, GAIN_BLOCKS }; 00066 static Ptr<ExposureCompensator> createDefault(int type); 00067 00068 /** 00069 @param corners Source image top-left corners 00070 @param images Source images 00071 @param masks Image masks to update (second value in pair specifies the value which should be used 00072 to detect where image is) 00073 */ 00074 void feed(const std::vector<Point> &corners, const std::vector<UMat> &images, 00075 const std::vector<UMat> &masks); 00076 /** @overload */ 00077 virtual void feed(const std::vector<Point> &corners, const std::vector<UMat> &images, 00078 const std::vector<std::pair<UMat,uchar> > &masks) = 0; 00079 /** @brief Compensate exposure in the specified image. 00080 00081 @param index Image index 00082 @param corner Image top-left corner 00083 @param image Image to process 00084 @param mask Image mask 00085 */ 00086 virtual void apply(int index, Point corner, InputOutputArray image, InputArray mask) = 0; 00087 }; 00088 00089 /** @brief Stub exposure compensator which does nothing. 00090 */ 00091 class CV_EXPORTS NoExposureCompensator : public ExposureCompensator 00092 { 00093 public: 00094 void feed(const std::vector<Point> &/*corners*/, const std::vector<UMat> &/*images*/, 00095 const std::vector<std::pair<UMat,uchar> > &/*masks*/) { } 00096 void apply(int /*index*/, Point /*corner*/, InputOutputArray /*image*/, InputArray /*mask*/) { } 00097 }; 00098 00099 /** @brief Exposure compensator which tries to remove exposure related artifacts by adjusting image 00100 intensities, see @cite BL07 and @cite WJ10 for details. 00101 */ 00102 class CV_EXPORTS GainCompensator : public ExposureCompensator 00103 { 00104 public: 00105 void feed(const std::vector<Point> &corners, const std::vector<UMat> &images, 00106 const std::vector<std::pair<UMat,uchar> > &masks); 00107 void apply(int index, Point corner, InputOutputArray image, InputArray mask); 00108 std::vector<double> gains() const; 00109 00110 private: 00111 Mat_<double> gains_; 00112 }; 00113 00114 /** @brief Exposure compensator which tries to remove exposure related artifacts by adjusting image block 00115 intensities, see @cite UES01 for details. 00116 */ 00117 class CV_EXPORTS BlocksGainCompensator : public ExposureCompensator 00118 { 00119 public: 00120 BlocksGainCompensator(int bl_width = 32, int bl_height = 32) 00121 : bl_width_(bl_width), bl_height_(bl_height) {} 00122 void feed(const std::vector<Point> &corners, const std::vector<UMat> &images, 00123 const std::vector<std::pair<UMat,uchar> > &masks); 00124 void apply(int index, Point corner, InputOutputArray image, InputArray mask); 00125 00126 private: 00127 int bl_width_, bl_height_; 00128 std::vector<UMat> gain_maps_; 00129 }; 00130 00131 //! @} 00132 00133 } // namespace detail 00134 } // namespace cv 00135 00136 #endif // OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP
Generated on Tue Jul 12 2022 18:20:17 by
