HDR imaging#

Detailed Description#

This section describes high dynamic range imaging algorithms namely tonemapping, exposure alignment, camera calibration with multiple exposures and exposure fusion.

Classes#

Name

Description

class cv::AlignExposures

The base class for algorithms that align images of the same scene with different exposures. View details

class cv::AlignMTB

This algorithm converts images to median threshold bitmaps (1 for pixels brighter than median luminance and 0 otherwise) and than aligns the resulting bitmaps using bit operations. View details

class cv::CalibrateCRF

The base class for camera response calibration algorithms. View details

class cv::CalibrateDebevec

Inverse camera response function is extracted for each brightness value by minimizing an objective function as linear system. Objective function is constructed using pixel values on the same position in all images, extra term is added to make the result smoother. View details

class cv::CalibrateRobertson

Inverse camera response function is extracted for each brightness value by minimizing an objective function as linear system. This algorithm uses all image pixels. View details

class cv::MergeDebevec

The resulting HDR image is calculated as weighted average of the exposures considering exposure values and camera response. View details

class cv::MergeExposures

The base class algorithms that can merge exposure sequence to a single image. View details

class cv::MergeMertens

Pixels are weighted using contrast, saturation and well-exposedness measures, than images are combined using laplacian pyramids. View details

class cv::MergeRobertson

The resulting HDR image is calculated as weighted average of the exposures considering exposure values and camera response. View details

class cv::Tonemap

Base class for tonemapping algorithms - tools that are used to map HDR image to 8-bit range. View details

class cv::TonemapDrago

Adaptive logarithmic mapping is a fast global tonemapping algorithm that scales the image in logarithmic domain. View details

class cv::TonemapMantiuk

This algorithm transforms image to contrast using gradients on all levels of gaussian pyramid, transforms contrast values to HVS response and scales the response. After this the image is reconstructed from new contrast values. View details

class cv::TonemapReinhard

This is a global tonemapping operator that models human visual system. View details

Enumerations#

enum cv {
    LDR_SIZE = 256
}

View details

Enumeration Type Documentation#

enum#

#include <opencv2/photo.hpp>

Enumerator:

LDR_SIZE

Function Documentation#

createAlignMTB()#

Ptr< AlignMTB > cv::createAlignMTB(
int max_bits = 6,
int exclude_range = 4,
bool cut = true )

#include <opencv2/photo.hpp>

Python:

cv.createAlignMTB([, max_bits[, exclude_range[, cut]]]) -> retval

Creates AlignMTB object.

Parameters

  • max_bits — logarithm to the base 2 of maximal shift in each dimension. Values of 5 and 6 are usually good enough (31 and 63 pixels shift respectively).

  • exclude_range — range for exclusion bitmap that is constructed to suppress noise around the median value.

  • cut — if true cuts images, otherwise fills the new regions with zeros.

createCalibrateDebevec()#

Ptr< CalibrateDebevec > cv::createCalibrateDebevec(
int samples = 70,
float lambda = 10.0f,
bool random = false )

#include <opencv2/photo.hpp>

Python:

cv.createCalibrateDebevec([, samples[, lambda_[, random]]]) -> retval

Creates CalibrateDebevec object.

Parameters

  • samples — number of pixel locations to use

  • lambda — smoothness term weight. Greater values produce smoother results, but can alter the response.

  • random — if true sample pixel locations are chosen at random, otherwise they form a rectangular grid.

createCalibrateRobertson()#

Ptr< CalibrateRobertson > cv::createCalibrateRobertson(
int max_iter = 30,
float threshold = 0.01f )

#include <opencv2/photo.hpp>

Python:

cv.createCalibrateRobertson([, max_iter[, threshold]]) -> retval

Creates CalibrateRobertson object.

Parameters

  • max_iter — maximal number of Gauss-Seidel solver iterations.

  • threshold — target difference between results of two successive steps of the minimization.

createMergeDebevec()#

Ptr< MergeDebevec > cv::createMergeDebevec()

#include <opencv2/photo.hpp>

Python:

cv.createMergeDebevec() -> retval

Creates MergeDebevec object.

createMergeMertens()#

Ptr< MergeMertens > cv::createMergeMertens(
float contrast_weight = 1.0f,
float saturation_weight = 1.0f,
float exposure_weight = 0.0f )

#include <opencv2/photo.hpp>

Python:

cv.createMergeMertens([, contrast_weight[, saturation_weight[, exposure_weight]]]) -> retval

Creates MergeMertens object.

Parameters

  • contrast_weight — contrast measure weight. See MergeMertens.

  • saturation_weight — saturation measure weight

  • exposure_weight — well-exposedness measure weight

createMergeRobertson()#

Ptr< MergeRobertson > cv::createMergeRobertson()

#include <opencv2/photo.hpp>

Python:

cv.createMergeRobertson() -> retval

Creates MergeRobertson object.

createTonemap()#

Ptr< Tonemap > cv::createTonemap(float gamma = 1.0f)

#include <opencv2/photo.hpp>

Python:

cv.createTonemap([, gamma]) -> retval

Creates simple linear mapper with gamma correction.

Parameters

  • gamma — positive value for gamma correction. Gamma value of 1.0 implies no correction, gamma equal to 2.2f is suitable for most displays. Generally gamma > 1 brightens the image and gamma < 1 darkens it.

createTonemapDrago()#

Ptr< TonemapDrago > cv::createTonemapDrago(
float gamma = 1.0f,
float saturation = 1.0f,
float bias = 0.85f )

#include <opencv2/photo.hpp>

Python:

cv.createTonemapDrago([, gamma[, saturation[, bias]]]) -> retval

Creates TonemapDrago object.

Parameters

  • gamma — gamma value for gamma correction. See createTonemap

  • saturation — positive saturation enhancement value. 1.0 preserves saturation, values greater than 1 increase saturation and values less than 1 decrease it.

  • bias — value for bias function in [0, 1] range. Values from 0.7 to 0.9 usually give best results, default value is 0.85.

createTonemapMantiuk()#

Ptr< TonemapMantiuk > cv::createTonemapMantiuk(
float gamma = 1.0f,
float scale = 0.7f,
float saturation = 1.0f )

#include <opencv2/photo.hpp>

Python:

cv.createTonemapMantiuk([, gamma[, scale[, saturation]]]) -> retval

Creates TonemapMantiuk object.

Parameters

  • gamma — gamma value for gamma correction. See createTonemap

  • scale — contrast scale factor. HVS response is multiplied by this parameter, thus compressing dynamic range. Values from 0.6 to 0.9 produce best results.

  • saturation — saturation enhancement value. See createTonemapDrago

createTonemapReinhard()#

Ptr< TonemapReinhard > cv::createTonemapReinhard(
float gamma = 1.0f,
float intensity = 0.0f,
float light_adapt = 1.0f,
float color_adapt = 0.0f )

#include <opencv2/photo.hpp>

Python:

cv.createTonemapReinhard([, gamma[, intensity[, light_adapt[, color_adapt]]]]) -> retval

Creates TonemapReinhard object.

Parameters

  • gamma — gamma value for gamma correction. See createTonemap

  • intensity — result intensity in [-8, 8] range. Greater intensity produces brighter results.

  • light_adapt — light adaptation in [0, 1] range. If 1 adaptation is based only on pixel value, if 0 it’s global, otherwise it’s a weighted mean of this two cases.

  • color_adapt — chromatic adaptation in [0, 1] range. If 1 channels are treated independently, if 0 adaptation level is the same for each channel.