From: Billy B. <ve...@du...> - 2001-10-25 12:52:19
|
Andrew Meredith (an...@an...): > > A macroblock is of 16 x 16 pixels, but a macroblock for 4:2:0 has > > four 8x8 Y blocks, one 8x8 Cb block and one 8x8 Cr block. How can > > those 6 blocks to form a 16 x 16? The 6 blocks will be more than 16 > > x 16?? > > I think what is going on is that the Y, Cr and Cb end up, when > rendered, superimposed. Each pixel in the Cr and Cb blocks are > actually intended for 4 pixels of the Y block. It isn't a simple > superimposition I should add though, there is a formula used to get > from here to an RGB image, but thats the basic deal. The human eye is less sensitive to changes in chrominance than luminance, so we can downsample the chrominance planes without much loss of image quality. For 4:2:0, every 4 output pixels have 4 luminance samples, but only 1 blue chrominance and red chrominance sample. MPEG samples as follows: x x x = luma sample o o = chroma sample x x So, the Cb and Cr samples are taken in between the two luminance scanlines. To output an RGB image, you must resample the chrominance planes at each of the luminance points. Your output image should be the size of the luma image. Since image resampling is a big pain, so usually when doing a fast Y'CbCr->R'G'B' conversion you just pretend the Cb/Cr value at each of the 4 luma samples is the value given. Ugh. Eventually for something like the 'snapshot' feature you'd want to make your interpolation more accurate. Note that for JPEG's use of 4:2:0, the spacial position is different. I think a correct JPEG image sampling will take the chroma samples from the top left pixel in the block of 4. -- Billy Biggs ve...@du... |