diff --git a/include/hdrplus/merge.h b/include/hdrplus/merge.h index f980153..68956ea 100644 --- a/include/hdrplus/merge.h +++ b/include/hdrplus/merge.h @@ -10,6 +10,9 @@ namespace hdrplus class merge { public: + float baseline_lambda_shot = 3.24 * pow( 10, -4 ); + float baseline_lambda_read = 4.3 * pow( 10, -6 ); + merge() = default; ~merge() = default; diff --git a/src/merge.cpp b/src/merge.cpp index bb7b30b..81f3942 100644 --- a/src/merge.cpp +++ b/src/merge.cpp @@ -1,5 +1,6 @@ #include // all opencv header #include +#include #include "hdrplus/merge.h" #include "hdrplus/burst.h" @@ -9,7 +10,29 @@ namespace hdrplus void merge::process( const hdrplus::burst& burst_images, \ std::vector>>>& alignments) { + double lambda_shot, lambda_read; + std::tie(lambda_shot, lambda_read) = merge::getNoiseParams(ISO, white_level, black_level); + } +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