= Chroma upsampling
\b[Chroma upsampling] increases the spatial sample count of the colour-difference components after <chroma subsampling>. For example, converting <4:2:0 chroma subsampling> to <4:2:2 chroma subsampling> doubles the vertical colour sample count, while conversion to <4:4:4 chroma sampling> also doubles it horizontally.<Recommended 8-Bit YUV Formats for Video Rendering by Gary Sullivan and Stephen Estrop>[Converting4:2:0 YUV to4:2:2 YUV and Converting4:2:2 YUV to4:4:4 YUV]{ref} The added values are estimates, not newly measured image detail.
An original one-dimensional derivation separates increasing the grid density from interpolation. Start with samples $c_k$ and insert zero-valued placeholders:
$$
u_{2k}=c_k,\qquad u_{2k+1}=0.
$$
Apply the <chroma interpolation filter>
$$
y_n=\tfrac12u_{n-1}+u_n+\tfrac12u_{n+1}.
$$
It follows that $y_{2k}=c_k$ and $y_{2k+1}=(c_k+c_{k+1})/2$. Thus this stipulated filter preserves the original positions and fills the intervening positions by <linear interpolation>.
The scaling is essential. For a constant input $c_k=128$, the correctly scaled result is128 at every output position. Using the ordinary three-tap averaging coefficients $(1/4,1/2,1/4)$ on the zero-inserted sequence would instead give64 everywhere. Those coefficients are suitable for a different operation; their unit sum alone does not preserve a constant after zero insertion.
The derivation assumes the retained samples occupy the even positions of the output grid and ignores image boundaries. <Centered chroma> can require a different alignment, and finite images require an edge rule. The Microsoft example specifies progressive scanning, interpolation and edge handling explicitly.<Recommended 8-Bit YUV Formats for Video Rendering by Gary Sullivan and Stephen Estrop>[4:2:0-to4:2:2 method and edge equations]{ref} Upsampling quality therefore depends on <chroma sample location>, filter choice and boundary treatment, rather than only on output dimensions.
Back to article page