From 83250c3b707c039f9fdfb06e4ef47d5f9f4bcd73 Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Mon, 18 Apr 2022 01:04:18 -0700 Subject: [PATCH 01/11] 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 02/11] 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 03/11] 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 6947c94f2770f45da19f5cd263d8f6027777d911 Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Wed, 20 Apr 2022 01:36:33 -0700 Subject: [PATCH 04/11] Compute lambda_shot and lambda_read --- include/hdrplus/merge.h | 3 +++ src/merge.cpp | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+) 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 From 9f3ca4c452abb1ba3b4382e1a31a0177e53fdac5 Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Wed, 27 Apr 2022 04:09:44 -0700 Subject: [PATCH 05/11] Modify get noise param accordingly --- src/merge.cpp | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/src/merge.cpp b/src/merge.cpp index 81f3942..bd2242b 100644 --- a/src/merge.cpp +++ b/src/merge.cpp @@ -11,28 +11,7 @@ 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); + std::tie(lambda_shot, lambda_read) = burst_images.bayer_images[burst_images.reference_image_idx].get_noise_params(); } } // namespace hdrplus From dd0dfbc03932d31e8b8efcdb29b42211ef221f12 Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Wed, 27 Apr 2022 15:45:12 -0700 Subject: [PATCH 06/11] Obtain reference tiles --- src/merge.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/merge.cpp b/src/merge.cpp index bd2242b..21b8204 100644 --- a/src/merge.cpp +++ b/src/merge.cpp @@ -12,6 +12,26 @@ void merge::process( const hdrplus::burst& burst_images, \ { 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); + } + } + + + + // cv::Mat outputImg = reference_image.clone(); + // cv::cvtColor(outputImg, outputImg, cv::COLOR_GRAY2RGB); + // cv::imwrite("ref.jpg", outputImg); + // cv::Mat outputImg1 = reference_tiles[0].clone(); + // cv::cvtColor(outputImg1, outputImg1, cv::COLOR_GRAY2RGB); + // cv::imwrite("tile0.jpg", outputImg1); } } // namespace hdrplus From f9ebe29b3589e1b1090146584536893dde0788d7 Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Wed, 20 Apr 2022 01:36:33 -0700 Subject: [PATCH 07/11] Compute lambda_shot and lambda_read --- include/hdrplus/merge.h | 3 +++ src/merge.cpp | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+) 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 From b1d0832ac527f057bfee80b147493eab42b213ce Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Mon, 18 Apr 2022 01:04:18 -0700 Subject: [PATCH 08/11] Create merge branch --- src/merge.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/merge.cpp b/src/merge.cpp index 81f3942..8cd71c4 100644 --- a/src/merge.cpp +++ b/src/merge.cpp @@ -8,7 +8,11 @@ namespace hdrplus { void merge::process( const hdrplus::burst& burst_images, \ +<<<<<<< HEAD std::vector>>>& alignments) +======= + std::vector>>>& alignments ) +>>>>>>> Create merge branch { double lambda_shot, lambda_read; std::tie(lambda_shot, lambda_read) = merge::getNoiseParams(ISO, white_level, black_level); From 4d6d6824981a44015d97096e992a5be64043a54c Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Wed, 20 Apr 2022 01:36:33 -0700 Subject: [PATCH 09/11] Compute lambda_shot and lambda_read --- src/merge.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/merge.cpp b/src/merge.cpp index 8cd71c4..81f3942 100644 --- a/src/merge.cpp +++ b/src/merge.cpp @@ -8,11 +8,7 @@ namespace hdrplus { void merge::process( const hdrplus::burst& burst_images, \ -<<<<<<< HEAD std::vector>>>& alignments) -======= - std::vector>>>& alignments ) ->>>>>>> Create merge branch { double lambda_shot, lambda_read; std::tie(lambda_shot, lambda_read) = merge::getNoiseParams(ISO, white_level, black_level); From cdce3dc925ec262613cfbb9b5bac3be02509d2dc Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Wed, 27 Apr 2022 04:09:44 -0700 Subject: [PATCH 10/11] Modify get noise param accordingly --- src/merge.cpp | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/src/merge.cpp b/src/merge.cpp index 81f3942..bd2242b 100644 --- a/src/merge.cpp +++ b/src/merge.cpp @@ -11,28 +11,7 @@ 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); + std::tie(lambda_shot, lambda_read) = burst_images.bayer_images[burst_images.reference_image_idx].get_noise_params(); } } // namespace hdrplus From f363db4af9438ea1a757887102d13d7a046cca11 Mon Sep 17 00:00:00 2001 From: Haohua-Lyu Date: Wed, 27 Apr 2022 15:45:12 -0700 Subject: [PATCH 11/11] Obtain reference tiles --- src/merge.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/merge.cpp b/src/merge.cpp index bd2242b..21b8204 100644 --- a/src/merge.cpp +++ b/src/merge.cpp @@ -12,6 +12,26 @@ void merge::process( const hdrplus::burst& burst_images, \ { 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); + } + } + + + + // cv::Mat outputImg = reference_image.clone(); + // cv::cvtColor(outputImg, outputImg, cv::COLOR_GRAY2RGB); + // cv::imwrite("ref.jpg", outputImg); + // cv::Mat outputImg1 = reference_tiles[0].clone(); + // cv::cvtColor(outputImg1, outputImg1, cv::COLOR_GRAY2RGB); + // cv::imwrite("tile0.jpg", outputImg1); } } // namespace hdrplus