Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 MPEG-1压缩-产生宏块

我在MPEG-1压缩中遇到一个基本问题。我必须在图像中产生宏块。宏块由16 x 16像素组成-其中4 x 8x8是亮度,1 x 8x8是Cb,1 x 8x8 Cr。在MATLAB中,我想产生一个包含此的单元矩阵。有什么建议么?


回答:
听起来您正在尝试找出将各种8×8矩阵收集到一个变量中的最佳方法。有几种方法可以执行此操作(第一个选项是我为您的案例选择的选项):
  • 将数据连接成3-D矩阵:

    您可以使用CAT函数沿给定维度堆叠相同大小的矩阵。例如,如果变量L1 , L2 , L3和L4有4个8×8亮度矩阵,则以下内容会将它们连接成8×8×4矩阵:

    luminance = cat(3,L1,L2,L3,L4); 您还可以添加其他Cb和Cr矩阵以创建8×8×6矩阵:

    macroBlock = cat(3,L1,L2,L3,L4,Cb,Cr); %# OR... macroBlock = cat(3,luminance,Cb,Cr); %# Using luminance variable from above 然后,您可以通过以下方式索引macroBlock来访问所需的任何8×8矩阵:

    L2 = macroBlock(:,:,2); %# Get the second luminance matrix Cb = macroBlock(:,:,5); %# Get the Cb matrix
  • 在单元阵列中存储数据:

    由于所有矩阵的大小都相同,因此上述串联选项可能是最好的。但是,另一种选择(如果要存储大小,类型或维度不同的数据,则特别有用)是使用单元数组 。下面将创建一个包含上述矩阵的1×6单元格数组:

    macroBlock = {L1 L2 L3 L4 Cb Cr}; 然后,您可以通过以下方式索引macroBlock来访问所需的任何8×8矩阵:

    L2 = macroBlock{2}; %# Get the second luminance matrix Cb = macroBlock{5}; %# Get the Cb matrix
  • 在结构中存储数据:

    另一种选择是使用一种结构来存储8×8矩阵。结构的好处是您可以按字段名称访问数据而不必记住索引值。这是初始化结构的方法:

    macroBlock = struct('L1',L1,'L2',L2,'L3',L3,'L4',L4,'Cb',Cb,'Cr',Cr); %# OR... macroBlock = struct(); macroBlock.L1 = L1; macroBlock.L2 = L2; macroBlock.L3 = L3; macroBlock.L4 = L4; macroBlock.Cb = Cb; macroBlock.Cr = Cr; 上面的两种语法创建了一个字段名为'L1' , 'L2' , 'L3' , 'L4' , 'Cb'和'Cr' 。然后,您可以通过以下方式索引macroBlock来访问所需的任何8×8矩阵:

    L2 = macroBlock.L2; %# Get the second luminance matrix Cb = macroBlock.Cb; %# Get the Cb matrix

更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 01:13


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.