在 Matlab 中,当图像在 YCbCr 中时,如何使用色度二次采样将 4:4:4 图像缩小为 4:1:1?

Posted

技术标签:

【中文标题】在 Matlab 中,当图像在 YCbCr 中时,如何使用色度二次采样将 4:4:4 图像缩小为 4:1:1?【英文标题】:In Matlab, how can I use chroma subsampling to downscale a 4:4:4 image to 4:1:1 when the image is in YCbCr? 【发布时间】:2021-07-18 14:35:42 【问题描述】:

按照这个确切的问题

In Matlab, how can I use chroma subsampling to downscale a 4:4:4 image to 4:2:0 when the image is in YCbCr?

他将色度从 4:4:4 缩小到 4:2:0,我想从 4:4:4 缩小到 4:1:1。我不知道该怎么做?

YUV = rgb2ycbcr(RGB);
Y = YUV(:, :, 1);
U = YUV(:, :, 2);
V = YUV(:, :, 3);

执行缩减

U = double(YUV(:, :, 2))
V = double(YUV(:, :, 3))

newU = ??
newV =??

谁能帮帮我?

提前致谢。

【问题讨论】:

【参考方案1】:

在 YUV 4:1:1 中,色度通道在水平轴上向下采样 1/4 倍。

使用imresize,解决方法很简单:

newU = imresize(U, [size(U, 1), size(U, 2)/4]);
newV = imresize(V, [size(V, 1), size(V, 2)/4]);

注意事项:

上述解决方案有效,仅当输入的水平分辨率为 4 的倍数时。 imresize 的默认参数在启用抗锯齿的情况下应用三次插值。 大多数实际实现使用更简单的插值方法,例如没有抗锯齿的线性插值。 YUV 4:1:1(Y:Cb:Cr 4:1:1 的同义词)指的是色度下采样,但在流式视频或 RAM 或文件中排序组件有多种选择。

色度二次采样插图: [https://robbeekmans.net/euc/vmware-horizo​​n-7-4-blast-gets-necessary-update-support-chroma-subsampling-444-h-264/]

另一幅插图: [https://academicids.com/encyclopedia/index.php/YUV_4:2:0]


不使用imresize实现

如果您想要与imresize 相同的结果(没有抗锯齿的双线性):

refU = imresize(U, [size(U, 1), size(U, 2)/4], 'bilinear', 'Antialiasing', false);
% refV = ...

下面的代码是等价的:

U = double(U);
V = double(U);
newU = uint8(round(U(:, 2:4:end) + U(:, 3:4:end))/2);
newV = uint8(round(V(:, 2:4:end) + V(:, 3:4:end))/2);

您也可以使用每 4 个元素的平均值(如果降噪很重要,则更好):

U = double(U);
V = double(V);
newU = uint8(round((U(:, 1:4:end) + U(:, 2:4:end) + U(:, 3:4:end) + U(:, 4:4:end))/4));
newV = uint8(round((V(:, 1:4:end) + V(:, 2:4:end) + V(:, 3:4:end) + V(:, 4:4:end))/4));

注意: 我更喜欢术语“下采样”而不是“子采样”。 1/4 的子采样意味着跳过 - 每 4 个元素采样一次,而忽略其他 3 个。 从历史上看,在模拟(或混合模拟/数字)视频系统中,最有可能通过模拟子采样执行到 4:1:1 的转换。 在数字系统中,当您已经拥有 4:4:4 信息时,最好平均样本而不是跳过样本。 我认为“下采样”一词更合适(但“下采样”是常用术语)。

【讨论】:

以上是关于在 Matlab 中,当图像在 YCbCr 中时,如何使用色度二次采样将 4:4:4 图像缩小为 4:1:1?的主要内容,如果未能解决你的问题,请参考以下文章

灰度转换:RGB转YCbCr转Gray

口罩识别基于matlab GUI RGB滤波+YCbCr+肤色标定口罩识别含Matlab源码 1895期

RGB通道和YCBCR通道相互转换——MATLAB实现

RGB通道和YCBCR通道相互转换——MATLAB实现

图像压缩基于matlab JEPG图像压缩含Matlab源码 1167期

使用JavaScript从JPEG访问原始YUV值