|
|
|
@ -58,13 +58,13 @@ static void triangleWeights(float weights[]) |
|
|
|
|
|
|
|
|
|
static void generateResponce(float responce[]) |
|
|
|
|
{ |
|
|
|
|
for(int i = 0; i < 256; i++) { |
|
|
|
|
responce[i] = log((float)i); |
|
|
|
|
for(int i = 1; i < 256; i++) { |
|
|
|
|
responce[i] = logf((float)i); |
|
|
|
|
} |
|
|
|
|
responce[0] = responce[1]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void checkImages(std::vector<Mat>& images, bool hdr, const std::vector<float>& _exp_times = std::vector<float>()) |
|
|
|
|
static void checkImages(const std::vector<Mat>& images, bool hdr, const std::vector<float>& _exp_times = std::vector<float>()) |
|
|
|
|
{ |
|
|
|
|
if(images.empty()) { |
|
|
|
|
CV_Error(Error::StsBadArg, "Need at least one image"); |
|
|
|
@ -85,7 +85,7 @@ static void checkImages(std::vector<Mat>& images, bool hdr, const std::vector<fl |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void alignImages(std::vector<Mat>& src, std::vector<Mat>& dst) |
|
|
|
|
static void alignImages(const std::vector<Mat>& src, std::vector<Mat>& dst) |
|
|
|
|
{ |
|
|
|
|
dst.resize(src.size()); |
|
|
|
|
|
|
|
|
@ -120,7 +120,7 @@ void makeHDR(InputArrayOfArrays _images, const std::vector<float>& _exp_times, O |
|
|
|
|
} |
|
|
|
|
std::vector<float> exp_times(_exp_times.size()); |
|
|
|
|
for(size_t i = 0; i < exp_times.size(); i++) { |
|
|
|
|
exp_times[i] = log(_exp_times[i]); |
|
|
|
|
exp_times[i] = logf(_exp_times[i]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
float weights[256], responce[256]; |
|
|
|
@ -144,7 +144,7 @@ void makeHDR(InputArrayOfArrays _images, const std::vector<float>& _exp_times, O |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for(int channel = 0; channel < 3; channel++) { |
|
|
|
|
res_ptr[channel] = exp(sum[channel] / weight_sum); |
|
|
|
|
res_ptr[channel] = expf(sum[channel] / weight_sum); |
|
|
|
|
if(res_ptr[channel] > max) { |
|
|
|
|
max = res_ptr[channel]; |
|
|
|
|
} |
|
|
|
@ -184,7 +184,7 @@ void exposureFusion(InputArrayOfArrays _images, OutputArray _dst, bool align, fl |
|
|
|
|
pow(deviation, 2.0, deviation); |
|
|
|
|
saturation += deviation; |
|
|
|
|
} |
|
|
|
|
sqrt(saturation, saturation); |
|
|
|
|
sqrt(saturation, saturation); |
|
|
|
|
|
|
|
|
|
wellexp = Mat::ones(gray.size(), CV_32FC1); |
|
|
|
|
for(int i = 0; i < 3; i++) { |
|
|
|
@ -203,7 +203,7 @@ void exposureFusion(InputArrayOfArrays _images, OutputArray _dst, bool align, fl |
|
|
|
|
weights[im] = weights[im].mul(wellexp); |
|
|
|
|
weight_sum += weights[im]; |
|
|
|
|
} |
|
|
|
|
int maxlevel = (int)(log((double)max(images[0].rows, images[0].cols)) / log(2.0)) - 1; |
|
|
|
|
int maxlevel = static_cast<int>(logf(static_cast<float>(max(images[0].rows, images[0].cols))) / logf(2.0)) - 1; |
|
|
|
|
std::vector<Mat> res_pyr(maxlevel + 1); |
|
|
|
|
|
|
|
|
|
for(size_t im = 0; im < images.size(); im++) { |
|
|
|
@ -242,4 +242,4 @@ void exposureFusion(InputArrayOfArrays _images, OutputArray _dst, bool align, fl |
|
|
|
|
res_pyr[0].copyTo(result); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|