Why hair defeats normal selections
A strand of hair is thinner than a pixel, so its edge pixels are a blend of hair and background. No hard selection can separate them β you need a mask with genuine grey values, and you need to deal with the background colour those pixels have absorbed.
The channel method
This still beats the automated tools on difficult images:
- Open the Channels panel and click through red, green and blue. Pick the one with the greatest contrast between hair and background.
- Duplicate that channel. Never work on the original.
- Apply Levels or Curves to the copy, pushing it towards pure black and white. The goal is hair solid black, background solid white β the fine strands will hold their grey.
- Paint the interior of the subject solid black with a hard brush, and the far background solid white.
- Ctrl/Cmd-click the channel thumbnail to load it as a selection, then invert if needed.
Kill the fringe
Cut a brunette out of a bright green background and every edge pixel carries green. Two fixes:
- Decontaminate Colors in Select and Mask, which rewrites those pixels using nearby subject colour.
- Layer β Matting β Defringe at 1β2 px for a quick cleanup on a simpler cutout.
Check against the real background
Always judge a cutout over the background it will actually sit on, not over white or a checkerboard. A fringe invisible on white can be glaring on dark blue. Put the new background in place first, then refine the mask.
Paint hair back in
When a few strands are lost, add them. Use a 1β2 px brush at low flow, sample the hair colour with Alt, and draw short tapered strokes that follow the existing direction. A handful of strands across the silhouette is enough to sell it β see realistic compositing for the rest.