exposure_compensate.hpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*M///////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
  4. //
  5. // By downloading, copying, installing or using the software you agree to this license.
  6. // If you do not agree to this license, do not download, install,
  7. // copy or use the software.
  8. //
  9. //
  10. // License Agreement
  11. // For Open Source Computer Vision Library
  12. //
  13. // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
  14. // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
  15. // Third party copyrights are property of their respective owners.
  16. //
  17. // Redistribution and use in source and binary forms, with or without modification,
  18. // are permitted provided that the following conditions are met:
  19. //
  20. // * Redistribution's of source code must retain the above copyright notice,
  21. // this list of conditions and the following disclaimer.
  22. //
  23. // * Redistribution's in binary form must reproduce the above copyright notice,
  24. // this list of conditions and the following disclaimer in the documentation
  25. // and/or other materials provided with the distribution.
  26. //
  27. // * The name of the copyright holders may not be used to endorse or promote products
  28. // derived from this software without specific prior written permission.
  29. //
  30. // This software is provided by the copyright holders and contributors "as is" and
  31. // any express or implied warranties, including, but not limited to, the implied
  32. // warranties of merchantability and fitness for a particular purpose are disclaimed.
  33. // In no event shall the Intel Corporation or contributors be liable for any direct,
  34. // indirect, incidental, special, exemplary, or consequential damages
  35. // (including, but not limited to, procurement of substitute goods or services;
  36. // loss of use, data, or profits; or business interruption) however caused
  37. // and on any theory of liability, whether in contract, strict liability,
  38. // or tort (including negligence or otherwise) arising in any way out of
  39. // the use of this software, even if advised of the possibility of such damage.
  40. //
  41. //M*/
  42. #ifndef OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP
  43. #define OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP
  44. #if defined(NO)
  45. # warning Detected Apple 'NO' macro definition, it can cause build conflicts. Please, include this header before any Apple headers.
  46. #endif
  47. #include "opencv2/core.hpp"
  48. namespace cv {
  49. namespace detail {
  50. //! @addtogroup stitching_exposure
  51. //! @{
  52. /** @brief Base class for all exposure compensators.
  53. */
  54. class CV_EXPORTS ExposureCompensator
  55. {
  56. public:
  57. virtual ~ExposureCompensator() {}
  58. enum { /*NO,*/ GAIN, GAIN_BLOCKS };
  59. static Ptr<ExposureCompensator> createDefault(int type);
  60. /**
  61. @param corners Source image top-left corners
  62. @param images Source images
  63. @param masks Image masks to update (second value in pair specifies the value which should be used
  64. to detect where image is)
  65. */
  66. void feed(const std::vector<Point> &corners, const std::vector<UMat> &images,
  67. const std::vector<UMat> &masks);
  68. /** @overload */
  69. virtual void feed(const std::vector<Point> &corners, const std::vector<UMat> &images,
  70. const std::vector<std::pair<UMat,uchar> > &masks) = 0;
  71. /** @brief Compensate exposure in the specified image.
  72. @param index Image index
  73. @param corner Image top-left corner
  74. @param image Image to process
  75. @param mask Image mask
  76. */
  77. virtual void apply(int index, Point corner, InputOutputArray image, InputArray mask) = 0;
  78. };
  79. /** @brief Stub exposure compensator which does nothing.
  80. */
  81. class CV_EXPORTS NoExposureCompensator : public ExposureCompensator
  82. {
  83. public:
  84. void feed(const std::vector<Point> &/*corners*/, const std::vector<UMat> &/*images*/,
  85. const std::vector<std::pair<UMat,uchar> > &/*masks*/) CV_OVERRIDE { }
  86. void apply(int /*index*/, Point /*corner*/, InputOutputArray /*image*/, InputArray /*mask*/) CV_OVERRIDE { }
  87. };
  88. /** @brief Exposure compensator which tries to remove exposure related artifacts by adjusting image
  89. intensities, see @cite BL07 and @cite WJ10 for details.
  90. */
  91. class CV_EXPORTS GainCompensator : public ExposureCompensator
  92. {
  93. public:
  94. void feed(const std::vector<Point> &corners, const std::vector<UMat> &images,
  95. const std::vector<std::pair<UMat,uchar> > &masks) CV_OVERRIDE;
  96. void apply(int index, Point corner, InputOutputArray image, InputArray mask) CV_OVERRIDE;
  97. std::vector<double> gains() const;
  98. private:
  99. Mat_<double> gains_;
  100. };
  101. /** @brief Exposure compensator which tries to remove exposure related artifacts by adjusting image block
  102. intensities, see @cite UES01 for details.
  103. */
  104. class CV_EXPORTS BlocksGainCompensator : public ExposureCompensator
  105. {
  106. public:
  107. BlocksGainCompensator(int bl_width = 32, int bl_height = 32)
  108. : bl_width_(bl_width), bl_height_(bl_height) {}
  109. void feed(const std::vector<Point> &corners, const std::vector<UMat> &images,
  110. const std::vector<std::pair<UMat,uchar> > &masks) CV_OVERRIDE;
  111. void apply(int index, Point corner, InputOutputArray image, InputArray mask) CV_OVERRIDE;
  112. private:
  113. int bl_width_, bl_height_;
  114. std::vector<UMat> gain_maps_;
  115. };
  116. //! @}
  117. } // namespace detail
  118. } // namespace cv
  119. #endif // OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP