Изменение формы изображения RGB с помощью блоков в matlab

#matlab #image-processing #matrix

#matlab #обработка изображений #матрица

Вопрос:

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

У меня есть изображение 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. Как я могу приступить к решению этой проблемы?

Редактировать:

Важно, я ищу оптимизированный способ выполнения команды reshape для «блоков». Я определяю блок как что-то вроде этого:

 block1 = [ 1 1
           1 1];
  

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

 blockvector = [ block1
                block2
                block3
                block4 ];
  

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

 a=[ 1
    2
    3
    4];

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

Комментарии:

1. Я добавил больше деталей к тому, что я имею в виду в блоках и векторах.

Ответ №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
  

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