User Tools

YUV 4:4:4 UVC Contrast

At this stage of the imaging pipeline the pixel data is represented in full-range YCbCr 4:4:4 color space with 12-bit precision per component.

The purpose of this block is to apply UVC Contrast adjustment by modifying the luma component relative to a neutral midpoint, while preserving chroma.

Conceptual model

The UVC Contrast control is defined in terms of an HSL-based model in UVC Contrast

Conceptually, UVC Contrast scales the distance of a pixel’s lightness from a neutral midpoint.

In a YCbCr pipeline using full-range coding, this behavior maps directly to a linear scaling of the luma component around the mid-level, while chroma components remain unchanged.

This document specifies that mapping explicitly for FPGA implementation.

Input format

The input consists of YCbCr pixels with the following properties:

\[ Y12 \in [0..4095]\\ C_b12 \in [0..4095]\text{, neutral at }2048\\ C_r12 \in [0..4095]\text{, neutral at }2048 \]

All values are unsigned 12-bit integers using full-range (computer-range) coding.

Output format

The output format is identical to the input format:

\[ Y12^{\text{contrast}} \in [0..4095]\\ C_b12^{\text{contrast}} = C_b12\\ C_r12^{\text{contrast}} = C_r12 \]

Only the luma component is modified by the contrast stage.

Contrast factor definition

The UVC Contrast control provides a contrast factor \(C\), defined and scaled as specified in UVC Contrast

That document defines: * the control range, * the neutral (unity) position, * and the mapping from control value to contrast factor.

UVC Contrast implementation

Contrast is applied by scaling the luma value relative to the neutral midpoint of the full-range Y domain.

For 12-bit full-range luma, the neutral midpoint is:

\[ Y_{\text{mid}} = 2048 \]

The contrast-adjusted luma is computed as:

\[ Y12^{\text{contrast}} = \mathrm{clamp12}\left( (Y12 - Y_{\text{mid}}) \times C + Y_{\text{mid}} \right) \]

Where: * \(Y12\) is the input luma value, * \(C\) is the contrast factor, * and `clamp12(x)` clamps the result to the range \([0..4095]\).

The chroma components are passed through unchanged:

\[ C_b12^{\text{contrast}} = C_b12\\ C_r12^{\text{contrast}} = C_r12 \]

FPGA implementation considerations

* Contrast adjustment shall be implemented using signed arithmetic. * The subtraction from and addition to the midpoint must be performed at

sufficient bit width to avoid overflow before clamping.

* The contrast factor \(C\) is expected to be implemented as a fixed-point

value derived from the UVC control.

* Clamping is applied after scaling and offsetting. * Implementations may use a multiplier or a small LUT-based approximation,

depending on resource and performance constraints.

Notes

* This block operates entirely in YCbCr space. * Contrast adjustment affects only luma, preserving chroma relationships. * A contrast factor of unity leaves the image unchanged. * Contrast values greater than unity increase dynamic range around mid-level;

values less than unity reduce contrast.

* Extreme contrast values may cause luma clipping, which is expected behavior. * This stage assumes full-range (computer-range) YCbCr coding.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information