diff --git a/src/merge.cpp b/src/merge.cpp index 7642977..f723393 100644 --- a/src/merge.cpp +++ b/src/merge.cpp @@ -377,18 +377,7 @@ std::pair merge::getNoiseParams( int ISO, \ double black_level ) { double lambda_shot, lambda_read; - std::tie(lambda_shot, lambda_read) = burst_images.bayer_images[burst_images.reference_image_idx].get_noise_params(); - - // Obtain tiles - std::vector reference_tiles; - cv::Mat reference_image = burst_images.grayscale_images_pad[0]; - std::cout << reference_image.rows << " " << reference_image.cols << std::endl; - for (int y = 0; y < reference_image.rows - 8; y += 8) { - for (int x = 0; x < reference_image.cols - 8; x += 8) { - cv::Mat tile = reference_image(cv::Rect(x, y, 16, 16)); - reference_tiles.push_back(tile); - } - } + std::tie(lambda_shot, lambda_read) = merge::getNoiseParams(ISO, white_level, black_level); @@ -400,4 +389,23 @@ std::pair merge::getNoiseParams( int ISO, \ // 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