From 83250c3b707c039f9fdfb06e4ef47d5f9f4bcd73 Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Mon, 18 Apr 2022 01:04:18 -0700 Subject: [PATCH 1/3] Create merge branch --- src/merge.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/merge.cpp b/src/merge.cpp index aaa46db..b8d220c 100644 --- a/src/merge.cpp +++ b/src/merge.cpp @@ -7,7 +7,7 @@ namespace hdrplus { void merge::process( const hdrplus::burst& burst_images, \ - std::vector>>>& aligements ) + std::vector>>>& alignments ) { } From 5421402c689ce2932c536a7400e566daa909ed0b Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Wed, 20 Apr 2022 01:36:33 -0700 Subject: [PATCH 2/3] Compute lambda_shot and lambda_read --- include/hdrplus/merge.h | 8 ++++++++ src/merge.cpp | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/include/hdrplus/merge.h b/include/hdrplus/merge.h index d782cf6..95062ba 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; @@ -26,6 +29,11 @@ class merge int ISO, \ int white_level, \ double black_level ); + + private: + std::pair getNoiseParams( int ISO, \ + int white_level, \ + double black_level ); }; } // namespace hdrplus diff --git a/src/merge.cpp b/src/merge.cpp index 7df0a5d..28d67e3 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" @@ -12,7 +13,29 @@ void merge::process( const hdrplus::burst& burst_images, \ int white_level, \ double black_level ) { + 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 From 9c937dad93cf26fafdc2f46b0ccadeef9222439d Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Wed, 20 Apr 2022 01:36:33 -0700 Subject: [PATCH 3/3] Compute lambda_shot and lambda_read --- include/hdrplus/merge.h | 8 ++++++++ src/merge.cpp | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/include/hdrplus/merge.h b/include/hdrplus/merge.h index d782cf6..95062ba 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; @@ -26,6 +29,11 @@ class merge int ISO, \ int white_level, \ double black_level ); + + private: + std::pair getNoiseParams( int ISO, \ + int white_level, \ + double black_level ); }; } // namespace hdrplus diff --git a/src/merge.cpp b/src/merge.cpp index 7df0a5d..28d67e3 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" @@ -12,7 +13,29 @@ void merge::process( const hdrplus::burst& burst_images, \ int white_level, \ double black_level ) { + 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