{"course":{"slug":"image-editing","title":"Editing an Image","url":"https://addaly.com/learn/image-editing","level":"beginner","track":"create"},"lesson":{"slug":"shadows-highlights-and-local-contrast","title":"Why Clarity makes halos, and what Dehaze is estimating","url":"https://addaly.com/learn/image-editing/shadows-highlights-and-local-contrast","position":34,"of":78,"minutes":9,"answer":"Shadows/Highlights, Clarity, Texture and sharpening are one operation at four radii (comparing each pixel to a blurred version of its surroundings) so halos are inherent to the method.","keyIdea":"Shadows/Highlights, Clarity, Texture and sharpening are one operation at four radii (comparing each pixel to a blurred version of its surroundings) so halos are inherent to the method, while Dehaze is a separate estimate of an atmospheric veil that fails wherever the scene genuinely has no dark pixels."},"body":{"format":"markdown","text":"## One mechanism behind four sliders\n\nShadows/Highlights, Clarity, Texture, Structure and Dehaze look like five separate features. Four of them are the same operation at different scales.\n\nThe operation: make a **blurred copy** of the image's luminance. Compare each pixel to its blurred version. That comparison tells you whether the pixel is brighter or darker than its own surroundings: in other words, it separates *local* contrast from *global* brightness. Then adjust based on that difference.\n\n- **Shadows/Highlights** uses a large blur radius and applies a brightening or darkening that depends on the local average, so a dark pixel in a dark region gets lifted while a dark pixel next to a bright one does not.\n- **Clarity** uses a medium radius and increases the difference, adding contrast at the scale of features rather than edges.\n- **Texture** uses a small radius, so it affects fine detail (skin pores, fabric weave) without touching broader tonal shapes.\n- **Unsharp masking** is the same operation at a radius of one pixel or less, which is the sharpening lesson later.\n\nOnce you see it as one mechanism with a radius control, the sliders stop being mysterious and the artefacts become predictable.\n\n## The halo is the mechanism, not a bug\n\nA halo appears wherever there is a strong edge. Consider a dark tree against a bright sky. Near that boundary, the blurred copy is a mixture of tree and sky. So a sky pixel close to the tree is compared against a local average that is darker than the sky, and the tool concludes it is a *bright* pixel and brightens it further. A tree pixel near the sky is compared against an average that is brighter, so it gets darkened.\n\nThe result is a bright band in the sky along the branches and a dark band inside them. That is the halo. It is a direct consequence of using a blurred neighbourhood as the reference, and every implementation has it to some degree.\n\nThe defences, in order of usefulness:\n\n1. **Less.** The single most effective control. Clarity at +15 is invisible; at +60 every edge rings.\n2. **A smaller radius**, where the tool exposes one. The halo shrinks with the blur.\n3. **Masking.** Apply local contrast through a mask that excludes the high-contrast boundaries, or apply it on a duplicate layer with a mask.\n4. **Better algorithms.** Edge-aware filters (bilateral, guided and local Laplacian) weight the blur so pixels across an edge contribute less. This reduces halos substantially. darktable's *local contrast* module offers both a bilateral and a local Laplacian mode; the Laplacian one is noticeably cleaner on architecture.\n\n## Shadows/Highlights: the settings people never open\n\nThe default Shadows/Highlights in Photoshop is aggressive and produces the grey, flat, obviously-processed look that gives the tool its bad reputation. Click **Show More Options** and three controls appear that make it usable:\n\n- **Amount**: how much lifting. Start at half the default.\n- **Tone** (older versions: Tonal Width): how far up the tonal range the effect reaches. Narrow it so only genuine shadows are lifted and the midtones are left alone.\n- **Radius**: the blur size. Too small and you get halos round every small object; too large and the effect becomes a global brightness change. Somewhere around a tenth of the image's short side is a reasonable starting point.\n\nGIMP has *Colours > Shadows-Highlights* with the same three concepts. darktable's *shadows and highlights* module and its newer *tone equaliser* both do this, and the tone equaliser is the better tool: it splits the image into tonal bands by a blurred luminance estimate and lets you lift or drop each band with a mask preview showing exactly which pixels each band contains.\n\n## Dehaze is a different animal\n\nDehaze is not local contrast. It is an estimate of atmospheric scattering.\n\nThe model: haze adds a veil of light proportional to distance, so distant objects are both brighter and less saturated than they should be. The algorithm estimates how much veil is present at each point (usually via the *dark channel prior*, the observation that in a haze-free outdoor photograph almost every small patch contains at least one very dark colour channel) and subtracts it, scaling contrast back up.\n\nThat is why Dehaze does things Clarity cannot: it restores saturation as well as contrast, and it does so more strongly in the distance than the foreground.\n\nAnd why it fails where it does. Pushed hard, it produces dark, oversaturated skies with cyan blotches, because the veil estimate is wrong in regions that contain no dark pixels: a white wall, snow, fog that is the subject rather than an obstruction. Negative Dehaze adds a veil, which is a fast way to make a fake atmospheric distance layer in a composite.\n\nGIMP has no Dehaze; darktable's *haze removal* module implements the dark channel prior and is free.\n\n## Where each one belongs\n\n- **Shadows/Highlights**: early, in the raw developer, as a recovery step. It is fixing a capture problem.\n- **Clarity and Texture**: mid-pipeline, after tone, before colour grading, usually masked.\n- **Texture, negative**, is the gentlest skin smoothing available: it reduces fine detail without touching tonal shape, so it does not produce the plastic look that blur does.\n- **Dehaze**: early, and sparingly, and check the sky.\n\n## The honest limit\n\nAll of these are contrast redistribution. They make existing differences more visible; they do not add information. A hazy photograph dehazed hard shows you the noise and the JPEG blocks in the distance, because those were the only variations present, and you have just amplified them.\n\nThe same is true of shadow lifting: the shadow contains signal plus noise, and lifting multiplies both. If the shadow was three stops under on a high-ISO file, lifting it produces a noisy grey mess, and that is a capture limit rather than an editing one. The fix is a second exposure, a reflector, or a fill light, which is the compositing block's exposure blending, and it is the honest answer far more often than a slider is."},"check":{"question":"An editor raises Clarity on a photograph of bare trees against a bright sky, and a pale band appears in the sky along every branch. What is happening?","options":[{"text":"The sky is clipping locally where the added contrast pushes bright pixels past 255, producing a white outline.","correct":false,"tempting":"Describes a genuine consequence of pushing highlights, which would appear as flat blown areas rather than a band that tracks every branch outline."},{"text":"Near an edge, the blurred reference is a mixture of tree and sky, so sky pixels are judged brighter than their neighbourhood and brightened further.","correct":true},{"text":"Clarity operates on the luminosity channel only, and the mismatch between the adjusted luminance and the unchanged colour shows as a band.","correct":false,"tempting":"Correctly identifies that these tools work on luminance, then attributes the band to a channel mismatch rather than to the neighbourhood comparison that creates it."},{"text":"The image is 8-bit, so the added contrast has exhausted the available levels along the highest-contrast boundary.","correct":false,"tempting":"Diagnoses banding, which appears as stepped terraces across smooth gradients rather than as a single bright band hugging an edge."}]},"prev":{"slug":"dodging-and-burning","title":"Shaping light by hand, on a grey layer","url":"https://addaly.com/learn/image-editing/dodging-and-burning"},"next":{"slug":"hue-saturation-and-vibrance","title":"Saturation is a slider that destroys detail quietly","url":"https://addaly.com/learn/image-editing/hue-saturation-and-vibrance"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Why Clarity makes halos, and what Dehaze is estimating', in Editing an Image. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/image-editing/shadows-highlights-and-local-contrast (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Why Clarity makes halos, and what Dehaze is estimating","courseTitle":"Editing an Image","module":{"index":4,"slug":"tone-and-colour","title":"Tone and colour"},"answer":null,"keyIdea":"Shadows/Highlights, Clarity, Texture and sharpening are one operation at four radii (comparing each pixel to a blurred version of its surroundings) so halos are inherent to the method, while Dehaze is a separate estimate of an atmospheric veil that fails wherever the scene genuinely has no dark pixels.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"one-mechanism-behind-four-sliders","runs":[{"text":"One mechanism behind four sliders"}]},{"t":"p","runs":[{"text":"Shadows/Highlights, Clarity, Texture, Structure and Dehaze look like five separate features. Four of them are the same operation at different scales."}]},{"t":"p","runs":[{"text":"The operation: make a "},{"text":"blurred copy","b":true},{"text":" of the image’s luminance. Compare each pixel to its blurred version. That comparison tells you whether the pixel is brighter or darker than its own surroundings: in other words, it separates "},{"text":"local","i":true},{"text":" contrast from "},{"text":"global","i":true},{"text":" brightness. Then adjust based on that difference."}]},{"t":"ul","items":[[{"text":"Shadows/Highlights","b":true},{"text":" uses a large blur radius and applies a brightening or darkening that depends on the local average, so a dark pixel in a dark region gets lifted while a dark pixel next to a bright one does not."}],[{"text":"Clarity","b":true},{"text":" uses a medium radius and increases the difference, adding contrast at the scale of features rather than edges."}],[{"text":"Texture","b":true},{"text":" uses a small radius, so it affects fine detail (skin pores, fabric weave) without touching broader tonal shapes."}],[{"text":"Unsharp masking","b":true},{"text":" is the same operation at a radius of one pixel or less, which is the sharpening lesson later."}]]},{"t":"p","runs":[{"text":"Once you see it as one mechanism with a radius control, the sliders stop being mysterious and the artefacts become predictable."}]},{"t":"h2","id":"the-halo-is-the-mechanism-not-a-bug","runs":[{"text":"The halo is the mechanism, not a bug"}]},{"t":"p","runs":[{"text":"A halo appears wherever there is a strong edge. Consider a dark tree against a bright sky. Near that boundary, the blurred copy is a mixture of tree and sky. So a sky pixel close to the tree is compared against a local average that is darker than the sky, and the tool concludes it is a "},{"text":"bright","i":true},{"text":" pixel and brightens it further. A tree pixel near the sky is compared against an average that is brighter, so it gets darkened."}]},{"t":"p","runs":[{"text":"The result is a bright band in the sky along the branches and a dark band inside them. That is the halo. It is a direct consequence of using a blurred neighbourhood as the reference, and every implementation has it to some degree."}]},{"t":"p","runs":[{"text":"The defences, in order of usefulness:"}]},{"t":"ol","start":1,"items":[[{"text":"Less.","b":true},{"text":" The single most effective control. Clarity at +15 is invisible; at +60 every edge rings."}],[{"text":"A smaller radius","b":true},{"text":", where the tool exposes one. The halo shrinks with the blur."}],[{"text":"Masking.","b":true},{"text":" Apply local contrast through a mask that excludes the high-contrast boundaries, or apply it on a duplicate layer with a mask."}],[{"text":"Better algorithms.","b":true},{"text":" Edge-aware filters (bilateral, guided and local Laplacian) weight the blur so pixels across an edge contribute less. This reduces halos substantially. darktable’s "},{"text":"local contrast","i":true},{"text":" module offers both a bilateral and a local Laplacian mode; the Laplacian one is noticeably cleaner on architecture."}]]},{"t":"h2","id":"shadows-highlights-the-settings-people-never-open","runs":[{"text":"Shadows/Highlights: the settings people never open"}]},{"t":"p","runs":[{"text":"The default Shadows/Highlights in Photoshop is aggressive and produces the grey, flat, obviously-processed look that gives the tool its bad reputation. Click "},{"text":"Show More Options","b":true},{"text":" and three controls appear that make it usable:"}]},{"t":"ul","items":[[{"text":"Amount","b":true},{"text":": how much lifting. Start at half the default."}],[{"text":"Tone","b":true},{"text":" (older versions: Tonal Width): how far up the tonal range the effect reaches. Narrow it so only genuine shadows are lifted and the midtones are left alone."}],[{"text":"Radius","b":true},{"text":": the blur size. Too small and you get halos round every small object; too large and the effect becomes a global brightness change. Somewhere around a tenth of the image’s short side is a reasonable starting point."}]]},{"t":"p","runs":[{"text":"GIMP has "},{"text":"Colours > Shadows-Highlights","i":true},{"text":" with the same three concepts. darktable’s "},{"text":"shadows and highlights","i":true},{"text":" module and its newer "},{"text":"tone equaliser","i":true},{"text":" both do this, and the tone equaliser is the better tool: it splits the image into tonal bands by a blurred luminance estimate and lets you lift or drop each band with a mask preview showing exactly which pixels each band contains."}]},{"t":"h2","id":"dehaze-is-a-different-animal","runs":[{"text":"Dehaze is a different animal"}]},{"t":"p","runs":[{"text":"Dehaze is not local contrast. It is an estimate of atmospheric scattering."}]},{"t":"p","runs":[{"text":"The model: haze adds a veil of light proportional to distance, so distant objects are both brighter and less saturated than they should be. The algorithm estimates how much veil is present at each point (usually via the "},{"text":"dark channel prior","i":true},{"text":", the observation that in a haze-free outdoor photograph almost every small patch contains at least one very dark colour channel) and subtracts it, scaling contrast back up."}]},{"t":"p","runs":[{"text":"That is why Dehaze does things Clarity cannot: it restores saturation as well as contrast, and it does so more strongly in the distance than the foreground."}]},{"t":"p","runs":[{"text":"And why it fails where it does. Pushed hard, it produces dark, oversaturated skies with cyan blotches, because the veil estimate is wrong in regions that contain no dark pixels: a white wall, snow, fog that is the subject rather than an obstruction. Negative Dehaze adds a veil, which is a fast way to make a fake atmospheric distance layer in a composite."}]},{"t":"p","runs":[{"text":"GIMP has no Dehaze; darktable’s "},{"text":"haze removal","i":true},{"text":" module implements the dark channel prior and is free."}]},{"t":"h2","id":"where-each-one-belongs","runs":[{"text":"Where each one belongs"}]},{"t":"ul","items":[[{"text":"Shadows/Highlights","b":true},{"text":": early, in the raw developer, as a recovery step. It is fixing a capture problem."}],[{"text":"Clarity and Texture","b":true},{"text":": mid-pipeline, after tone, before colour grading, usually masked."}],[{"text":"Texture, negative","b":true},{"text":", is the gentlest skin smoothing available: it reduces fine detail without touching tonal shape, so it does not produce the plastic look that blur does."}],[{"text":"Dehaze","b":true},{"text":": early, and sparingly, and check the sky."}]]},{"t":"h2","id":"the-honest-limit","runs":[{"text":"The honest limit"}],"role":"limit"},{"t":"p","runs":[{"text":"All of these are contrast redistribution. They make existing differences more visible; they do not add information. A hazy photograph dehazed hard shows you the noise and the JPEG blocks in the distance, because those were the only variations present, and you have just amplified them."}]},{"t":"p","runs":[{"text":"The same is true of shadow lifting: the shadow contains signal plus noise, and lifting multiplies both. If the shadow was three stops under on a high-ISO file, lifting it produces a noisy grey mess, and that is a capture limit rather than an editing one. The fix is a second exposure, a reflector, or a fill light, which is the compositing block’s exposure blending, and it is the honest answer far more often than a slider is."}]}],"check":{"question":[{"text":"An editor raises Clarity on a photograph of bare trees against a bright sky, and a pale band appears in the sky along every branch. What is happening?"}],"options":[{"text":[{"text":"The sky is clipping locally where the added contrast pushes bright pixels past 255, producing a white outline."}],"correct":false,"tempting":[{"text":"Describes a genuine consequence of pushing highlights, which would appear as flat blown areas rather than a band that tracks every branch outline."}]},{"text":[{"text":"Near an edge, the blurred reference is a mixture of tree and sky, so sky pixels are judged brighter than their neighbourhood and brightened further."}],"correct":true,"tempting":null},{"text":[{"text":"Clarity operates on the luminosity channel only, and the mismatch between the adjusted luminance and the unchanged colour shows as a band."}],"correct":false,"tempting":[{"text":"Correctly identifies that these tools work on luminance, then attributes the band to a channel mismatch rather than to the neighbourhood comparison that creates it."}]},{"text":[{"text":"The image is 8-bit, so the added contrast has exhausted the available levels along the highest-contrast boundary."}],"correct":false,"tempting":[{"text":"Diagnoses banding, which appears as stepped terraces across smooth gradients rather than as a single bright band hugging an edge."}]}],"order":[3,0,2,1],"why":null},"prev":{"slug":"dodging-and-burning","title":"Shaping light by hand, on a grey layer","minutes":9},"next":{"slug":"hue-saturation-and-vibrance","title":"Saturation is a slider that destroys detail quietly","minutes":8}}}