在Matlab中通过块重塑RGB图像

时间:2019-03-10 01:01:44

标签: matlab image-processing matrix

我一直在尝试for循环,置换等,但是我无法解决此问题,将不胜感激。

我有一个已经处理过的RGB图像,其格式如下:

import scala.collection.immutable.Queue
val q0 = Queue(0)
val q1 = Queue(1)
q0 ++ q1 // yields Queue(0,1) as I expected
q0 ++: q1 // yields Queue(0,1) as well;  I expected Queue(1,0)

我想将上述图像的上述矩阵转换为实际图像。 最终图像如下所示:

image = [ 1 1
          1 1
          2 2
          2 2
          3 3
          3 3
          4 4
          4 4 ];

很明显,我正在处理的图像比4x4x3大得多。我该如何解决这个问题?

编辑:

基本的我正在寻找一种优化的方式来对“块”执行reshape命令。我正在定义一个像这样的块:

new_image=[ 1 1 2 2
            1 1 2 2
            3 3 4 4
            3 3 4 4 ];

我有一个像这样的块向量:

block1 = [ 1 1
           1 1];

我想以与重塑命令类似的方式重塑此“块矢量”。

blockvector = [ block1
                block2
                block3
                block4 ];

1 个答案:

答案 0 :(得分:1)

喜欢吗?

% Input block size.
ibs = 3;

% Input.
input = [ 1 * ones(ibs); 2 * ones(ibs); 3 * ones(ibs); 4 * ones(ibs) ]

% Determine block size. 
bs = size(input, 2);

% Check format.
if (size(input, 1) != 4 * bs)
  disp('Wrong format.');
end

% Transpose input.
input = input.';

% Generate output.
output = [input(1:bs, 1:2*bs); input(1:bs, 2*bs+1:4*bs)]

输出:

input =
   1   1   1
   1   1   1
   1   1   1
   2   2   2
   2   2   2
   2   2   2
   3   3   3
   3   3   3
   3   3   3
   4   4   4
   4   4   4
   4   4   4

output =
   1   1   1   2   2   2
   1   1   1   2   2   2
   1   1   1   2   2   2
   3   3   3   4   4   4
   3   3   3   4   4   4
   3   3   3   4   4   4

我现在不满意。我的脚本的最后一行必须有一个更好的解决方案。任何改进都非常欢迎!