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

有帮助吗?

解决方案

听起来你正试图找出收集各种物品的最佳方法 8×8 矩阵转化为单个变量。有几种方法可以做到这一点(第一个选项是我为您的情况选择的选项):

  • 将数据连接成 3-D 矩阵:

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

    luminance = cat(3,L1,L2,L3,L4);
    

    您还可以添加额外的 CbCr 矩阵来创建 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
    

其他提示

我没有得到你所需要的。 A码的分区图像划分成那些块?

你应该创建是矩阵I(I,J,M,N),其中m,n代表图像和i的第n个和第m 8×8块,J是指一个特定的像素内的块。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top