Преобразование изображения RGB блоками в matlab - PullRequest
0 голосов
/ 10 марта 2019

Я пытался поиграться с циклами, перестановками и т. Д., И я не могу решить эту проблему, помощь будет очень признательна.

У меня есть RGB-изображение, которое я обработал, и оно имеет вид:

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

Я хочу преобразовать вышеуказанную матрицу этого изображения в реальное изображение. Окончательное изображение будет выглядеть так:

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

Очевидно, что изображение, с которым я работаю, намного больше, чем 4x4x3. Как я могу решить эту проблему?

EDIT:

Essential Я ищу оптимизированный способ выполнения команды изменения формы для «блоков». Я определяю блок примерно так:

block1 = [ 1 1
           1 1];

и у меня есть блочный вектор, например:

blockvector = [ block1
                block2
                block3
                block4 ];

Я хочу изменить этот «блочный вектор» аналогично команде изменения формы.

a=[ 1
    2
    3
    4];

 newa = reshape(a,[2,2])';
 % newa = [1 2
 %         3 4];

1 Ответ

1 голос
/ 11 марта 2019

Как это?

% 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

Я не удовлетворен сейчас.Должно быть лучшее решение для последней строки моего сценария.Любые улучшения приветствуются!

...