微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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: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 =??

有人可以帮我吗?

提前致谢。

解决方法

在 YUV 4:1:1 中,色度通道在水平轴上按 1/4 的系数进行下采样。

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

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

注意事项:

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

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

另一个例子:
enter image description here [https://academickids.com/encyclopedia/index.php/YUV_4:2:0]


不使用 imresize 实现:

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

refU = imresize(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(:,3:4:end) + U(:,4:4:end))/4));
newV = uint8(round((V(:,1:4:end) + V(:,3:4:end) + V(:,4:4:end))/4));

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?