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) 2013, OpenCV Foundation, all rights reserved. 14 // Third party copyrights are property of their respective owners. 15 // 16 // Redistribution and use in source and binary forms, with or without modification, 17 // are permitted provided that the following conditions are met: 18 // 19 // * Redistribution's of source code must retain the above copyright notice, 20 // this list of conditions and the following disclaimer. 21 // 22 // * Redistribution's in binary form must reproduce the above copyright notice, 23 // this list of conditions and the following disclaimer in the documentation 24 // and/or other materials provided with the distribution. 25 // 26 // * The name of the copyright holders may not be used to endorse or promote products 27 // derived from this software without specific prior written permission. 28 // 29 // This software is provided by the copyright holders and contributors "as is" and 30 // any express or implied warranties, including, but not limited to, the implied 31 // warranties of merchantability and fitness for a particular purpose are disclaimed. 32 // In no event shall the Intel Corporation or contributors be liable for any direct, 33 // indirect, incidental, special, exemplary, or consequential damages 34 // (including, but not limited to, procurement of substitute goods or services; 35 // loss of use, data, or profits; or business interruption) however caused 36 // and on any theory of liability, whether in contract, strict liability, 37 // or tort (including negligence or otherwise) arising in any way out of 38 // the use of this software, even if advised of the possibility of such damage. 39 // 40 //M*/ 41 42 #include "precomp.hpp" 43 #include "opencv2/photo.hpp" 44 #include "hdr_common.hpp" 45 46 namespace cv 47 { 48 49 void checkImageDimensions(const std::vector<Mat>& images) 50 { 51 CV_Assert(!images.empty()); 52 int width = images[0].cols; 53 int height = images[0].rows; 54 int type = images[0].type(); 55 56 for(size_t i = 0; i < images.size(); i++) { 57 CV_Assert(images[i].cols == width && images[i].rows == height); 58 CV_Assert(images[i].type() == type); 59 } 60 } 61 62 Mat tringleWeights() 63 { 64 Mat w(LDR_SIZE, 1, CV_32F); 65 int half = LDR_SIZE / 2; 66 for(int i = 0; i < LDR_SIZE; i++) { 67 w.at<float>(i) = i < half ? i + 1.0f : LDR_SIZE - i; 68 } 69 return w; 70 } 71 72 Mat RobertsonWeights() 73 { 74 Mat weight(LDR_SIZE, 1, CV_32FC3); 75 float q = (LDR_SIZE - 1) / 4.0f; 76 for(int i = 0; i < LDR_SIZE; i++) { 77 float value = i / q - 2.0f; 78 value = exp(-value * value); 79 weight.at<Vec3f>(i) = Vec3f::all(value); 80 } 81 return weight; 82 } 83 84 void mapLuminance(Mat src, Mat dst, Mat lum, Mat new_lum, float saturation) 85 { 86 std::vector<Mat> channels(3); 87 split(src, channels); 88 for(int i = 0; i < 3; i++) { 89 channels[i] = channels[i].mul(1.0f / lum); 90 pow(channels[i], saturation, channels[i]); 91 channels[i] = channels[i].mul(new_lum); 92 } 93 merge(channels, dst); 94 } 95 96 Mat linearResponse(int channels) 97 { 98 Mat response = Mat(LDR_SIZE, 1, CV_MAKETYPE(CV_32F, channels)); 99 for(int i = 0; i < LDR_SIZE; i++) { 100 response.at<Vec3f>(i) = Vec3f::all(static_cast<float>(i)); 101 } 102 return response; 103 } 104 105 } 106