diff --git a/src/merge.cpp b/src/merge.cpp index 21b8204..5fd40c0 100644 --- a/src/merge.cpp +++ b/src/merge.cpp @@ -11,6 +11,7 @@ void merge::process( const hdrplus::burst& burst_images, \ std::vector>>>& alignments) { double lambda_shot, lambda_read; +<<<<<<< HEAD std::tie(lambda_shot, lambda_read) = burst_images.bayer_images[burst_images.reference_image_idx].get_noise_params(); // Obtain tiles @@ -23,6 +24,9 @@ void merge::process( const hdrplus::burst& burst_images, \ reference_tiles.push_back(tile); } } +======= + std::tie(lambda_shot, lambda_read) = merge::getNoiseParams(ISO, white_level, black_level); +>>>>>>> Compute lambda_shot and lambda_read @@ -34,4 +38,23 @@ void merge::process( const hdrplus::burst& burst_images, \ // cv::imwrite("tile0.jpg", outputImg1); } +std::pair merge::getNoiseParams( int ISO, \ + int white_level, \ + double black_level ) +{ + // Set ISO to 100 if not positive + ISO = ISO <= 0 ? 100 : ISO; + + // Calculate shot noise and read noise parameters w.r.t ISO 100 + double lambda_shot_p = ISO / 100.0f * baseline_lambda_shot; + double lambda_read_p = (ISO / 100.0f) * (ISO / 100.0f) * baseline_lambda_read; + + // Rescale shot and read noise to normal range + double lambda_shot = lambda_shot_p * (white_level - black_level); + double lambda_read = lambda_read_p * (white_level - black_level) * (white_level - black_level); + + // return pair + return std::make_pair(lambda_shot, lambda_read); +} + } // namespace hdrplus