Hi @JackH,
well, that’s a lot of modules I’ll try:
-
exposure compensation is just multiplication of each pixel (as a vector [r, g, b]) by 2^{value}, done in linear space, with no clipping
-
tone equaliser is a bit more complicated. At a high level, this is a parametric tone curve that tries to preserve local contrast. The basic algorithm comes from @anon41087856 of darktable, on top of which I’ve added my own tweaks. In summary:
-
build a tonal map by taking log_2(luminance([r, g, b]) for each pixel (where luminance is Y in XYZ)
-
apply some edge-aware smoothing of such map using some guided filters at different scales (this is controlled by the “regularization” slider)
-
each band in the equaliser corresponds to a Gaussian mask in log space, centered around a specific EV value (e.g. EV 0 for whites, EV -2 for highlights, … and so on). Compute the exposure correction factor for each pixel as the weighted sum of the correction of each band, according to the Gaussian masks
I took steps 1. and 3. directly from (the first version of) the tone equaliser of darktable (I don’t know if it evolved in the meantime), whereas 2. is my contribution. No reference that I’m aware of
-
-
log tone mapping applies, well, a tone mapping in log space :-), taken from GitHub - ampas/aces-dev: AMPAS Academy Color Encoding System Developer Resources (ACESutil.Lin_to_Log2 in particular), and then remaps to linear by making sure that toLin(source\_gray) = target\_gray. This is similar to the Filmic module of darktable, here are the main differences (to the best of my knowledge):
-
filmic applies also a “film-like S-curve” and some other look operators (e.g. saturation manipulation), whereas in ART you would do that afterwards with the tone curve
-
remapping from log to linear is done with a “gamma” curve in filmic, i.e. a function y = x^{\gamma}, whereas in ART this is done with an exponential, i.e. y = base^x
-
ART also has a regularization slider which (similarly in concept to tone equaliser, but implemented differently) uses guided filters to preserve local contrast
-
filmic lets you select the pixel norm to use for the tone mapping, in ART this is hardcoded to luminance
-
-
local contrast comes straight from RawTherapee. It applies a wavelet decomposition in Lab space and manipulates the contrast of the different levels by using the curve (leftmost points correspond to finer detail scales). @jdc can give you more details about this
-
texture boost is somewhat similar to doing sharpening or local contrast with unsharp masks, as described e.g. in Local Contrast Enhancement. Main differences:
-
this is done with a guided filter, which is edge-aware, rather than with gaussian blur
-
I apply two levels of details rather than a single one
-
this is applied in linear RGB (and in fact it can sometimes cause artifacts in the deep blacks – I still have to find a proper solution for this)
Conceptually, texture boost is also similar to local contrast, the main differences being the methods for doing the extraction of the different detail levels and their amplification/dampening, the working space, and the position in the pipeline.
-
Hope this helps