【问题标题】:Converting an image (3D array) into a 2D matrix in a specific order以特定顺序将图像(3D 数组)转换为 2D 矩阵
【发布时间】:2019-09-11 00:03:52
【问题描述】:

假设您有一个 200 像素的图像。它将是一个 10 x 20 x 3 的阵列,其中页面是颜色层(红色、绿色和蓝色)。如何将其转换为 3(行)x N(列,例如 2000),以便每一行代表颜色(第 1 行是红色,第 2 行是绿色等),列代表像素

我尝试过整形,但我得到了一个 3 x N 矩阵,它向下填充行而不是水平填充(所以每一行都是颜色的混合,而不是特定的颜色)。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您使用reshape 的想法是正确的,但正如您自己发现的那样,数组维度的顺序很重要。幸运的是,您可以使用permute 进行操作。因此,在您的情况下,应将“颜色信息”(即第三维)设置为第一维,以便 reshape 按预期工作。

    让我们看看这段代码sn-p:

    % Set up dimensions
    rows = 10;
    cols = 20;
    
    % Generate artificial image
    img = uint8(255 * rand(rows, cols, 3));
    
    % Get color independently for each channel
    r = reshape(img(:, :, 1), 1, rows * cols);
    g = reshape(img(:, :, 2), 1, rows * cols);
    b = reshape(img(:, :, 3), 1, rows * cols);
    
    % Reshape image with previous dimension permuting
    img2 = reshape(permute(img, [3 1 2]), 3, rows * cols);
    
    % Compare results
    rOK = (sum(r == img2(1, :)) == rows * cols)
    gOK = (sum(g == img2(2, :)) == rows * cols)
    bOK = (sum(b == img2(3, :)) == rows * cols)
    

    为了进行简单的比较,我单独获取了“颜色信息”,参见。向量rgb。然后我按照上面的描述对原始的img 进行置换,根据需要将其重新整形为3 x N 矩阵,并将每一行与rgb 进行比较。

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 2016-08-25
      • 2012-05-24
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多