From 1eb503fe1e754b130c567f525e004bc4672e3832 Mon Sep 17 00:00:00 2001 From: Hiroyuki Hori <43978282+hi-hori@users.noreply.github.com> Date: Thu, 15 May 2025 22:26:55 +0900 Subject: [PATCH] Added offset to gain computation Added an offset kComputeGainOffset to the computeGain function to prevent excessive gain in low-luminance regions for both SDR and HDR calculations. This adjustment helps stabilize gain computation. --- lib/src/jpegr.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/src/jpegr.cpp b/lib/src/jpegr.cpp index 8ce700fb..4595e126 100644 --- a/lib/src/jpegr.cpp +++ b/lib/src/jpegr.cpp @@ -896,14 +896,16 @@ uhdr_error_info_t JpegR::generateGainMap(uhdr_raw_image_t* sdr_intent, uhdr_raw_ hdr_rgb = hdrGamutConversionFn(hdr_rgb); hdr_rgb = clipNegatives(hdr_rgb); + constexpr float kComputeGainOffset = 1.0f; // Offset to prevent excessive gain in low luminance areas. + if (mUseMultiChannelGainMap) { Color sdr_rgb_nits = sdr_rgb * kSdrWhiteNits; Color hdr_rgb_nits = hdr_rgb * hdrSampleToNitsFactor; size_t pixel_idx = (x + y * map_width) * 3; - gainmap_data[pixel_idx] = computeGain(sdr_rgb_nits.r, hdr_rgb_nits.r); - gainmap_data[pixel_idx + 1] = computeGain(sdr_rgb_nits.g, hdr_rgb_nits.g); - gainmap_data[pixel_idx + 2] = computeGain(sdr_rgb_nits.b, hdr_rgb_nits.b); + gainmap_data[pixel_idx] = computeGain(sdr_rgb_nits.r + kComputeGainOffset, hdr_rgb_nits.r + kComputeGainOffset); + gainmap_data[pixel_idx + 1] = computeGain(sdr_rgb_nits.g + kComputeGainOffset, hdr_rgb_nits.g + kComputeGainOffset); + gainmap_data[pixel_idx + 2] = computeGain(sdr_rgb_nits.b + kComputeGainOffset, hdr_rgb_nits.b + kComputeGainOffset); for (int i = 0; i < 3; i++) { gainmap_min_th[i] = (std::min)(gainmap_data[pixel_idx + i], gainmap_min_th[i]); gainmap_max_th[i] = (std::max)(gainmap_data[pixel_idx + i], gainmap_max_th[i]); @@ -921,7 +923,7 @@ uhdr_error_info_t JpegR::generateGainMap(uhdr_raw_image_t* sdr_intent, uhdr_raw_ } size_t pixel_idx = x + y * map_width; - gainmap_data[pixel_idx] = computeGain(sdr_y_nits, hdr_y_nits); + gainmap_data[pixel_idx] = computeGain(sdr_y_nits + kComputeGainOffset, hdr_y_nits + kComputeGainOffset); gainmap_min_th[0] = (std::min)(gainmap_data[pixel_idx], gainmap_min_th[0]); gainmap_max_th[0] = (std::max)(gainmap_data[pixel_idx], gainmap_max_th[0]); }