#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
На данный момент я не удовлетворен. Должно быть более приятное решение для последней строки моего скрипта. Любые улучшения приветствуются!