当将色度通道的宽度和/或高度减半时,正确的细分方法是什么?当从全分辨率色度源采样时,为每个2x2 luma像素取一个色度像素,我们取哪个色度像素-左上角?所有4个的平均值?没关系吗?在
这是我现在的代码
if field == 'top':
i = 0
elif field == 'bottom':
i = 1
U = fromstring(Udata, dtype='uint8', count=w/2*h).reshape(h,w/2)
# halve chroma height (it's already half-width from UYVY source) by line skipping
U = U[i::2]
# scale chroma by a factor of 0.5 (2x2 pixels in -> 1 pixel out)
U = (U[0::2, 0::2]>>2) + (U[0::2, 1::2]>>2) + (U[1::2, 0::2]>>2) + (U[1::2, 1::2]>>2) + \
(((U[0::2, 0::2]%4) + (U[0::2, 1::2]%4) + (U[1::2, 0::2]%4) + (U[1::2, 1::2]%4)) >> 2)
理想情况下,您可以插值数据以生成尽可能最好的图像,但是我认为您的问题最好通过快速概述luma和chrom样本的位置来回答(想象一个相机,其中一个网格用于亮度,另一个网格用于色度)。对于二次抽样,有多个标准来选择色度相对luma样本的位置。在
大多数情况下,croma要么与“左上角”的luma像素位于同一位置
或者位于广场中心
^{pr2}$或者位于两个左侧luma样本之间的正方形的左侧。在
请注意,在所有情况下,与至少一些luma样本共同定位的色度值将是多个色度值的组合,这通常是用FIR滤波器完成的,这就是为什么建议使用另一个滤波器进行反向操作(但是使用平均值可以获得良好的结果)
从yuv4:2:0转换为yuv4:2:2的正确方法是使用6抽头FIR滤波器。在
src来自mpeg2参考实现,您可以在这里找到http://www.mpeg.org/MPEG/video/mssg-free-mpeg-software.html
去“mpegv12”文件
在C中实现:
在Python中:
^{pr2}$相关问题 更多 >
编程相关推荐