Отображение гауссовой пирамиды, хранящейся в массиве ячеек, на одной фигуре
Я работаю над кодом гауссовой пирамиды для Matlab. В основном он загружает изображение, создает массив ячеек и заполняет его различными уровнями гауссовой пирамиды.
Я хочу показать содержимое моего массива ячеек, заполненного изображениями, одним рисунком, чтобы вы могли видеть эффект гауссовой пирамиды. Это означает, что исходное изображение в полном размере, а остальные уменьшены на 2 каждый. И все это в одной фигуре.
Я довольно любитель, когда дело доходит до Matlab, поэтому я не знаю, как это сделать. Я уже пробовал это с подзаговорами, но не получилось.
Заранее спасибо.
2 ответа
Я использовал цикл, чтобы добавить нули в верхней части всех изображений, а затем объединил их
Образец cell
,
im = imread('peppers.png');
for i = 1 : 5
I{i} = im(1 : 2*i : end, 1 : 2*i : end,:);
end
Код, I
быть твоей клеткой,
m = size(I{1}, 1);
newI = I{1};
for i = 2 : numel(I)
[q,p,~] = size(I{i});
I{i} = cat(1,repmat(zeros(1, p, 3),[m - q , 1]),I{i});
newI = cat(2,newI,I{i});
end
imshow(newI)
Для 2D изображений используйте: I{i} = cat(1,repmat(zeros(1 , p),[m - q , 1]),I{i});
Как насчет:
subplot(numel(YourCell), 1, 1), imshow(YourCell{1});
for k=2:5
subplot(1,numel(YourCell),k), imshow(YourCell{k})
xlim([1 size(YourCell{1},1)]);
ylim([1 size(YourCell{1},2)]);
end
Результат (с фиктивными данными):
Редактировать:
Вы можете поиграть с расположением ваших плиток, рассчитав положение следующей. Вот быстрый и грязный пример, вы, безусловно, можете сделать лучше:
Бок о бок:
border=5;
MergedImage=ones(size(YourCell{1},1), 2.5*size(YourCell{1},2));
MergedImage(1:size(YourCell{1},1), 1:size(YourCell{1},2))=YourCell{1};
Pos=[1, size(YourCell{1},1)+border];
for k=1:(numel(YourCell)-1)
MergedImage(Pos(1):Pos(1)+size(YourCell{k+1}, 1)-1, Pos(2):Pos(2)+size(YourCell{k+1}, 2)-1)=YourCell{k+1};
Pos=[Pos(1), Pos(2)+size(YourCell{k+1}, 2)+border];
end
imshow(MergedImage);
Или более жесткое соглашение:
border=5;
MergedImage=ones(size(YourCell{1},1), 2*size(YourCell{1},2));
MergedImage(1:size(YourCell{1},1), 1:size(YourCell{1},2))=YourCell{1};
Pos=[1, size(YourCell{1},1)+border];
for k=1:(numel(YourCell)-1)
MergedImage(Pos(1):Pos(1)+size(YourCell{k+1}, 1)-1, Pos(2):Pos(2)+size(YourCell{k+1}, 2)-1)=YourCell{k+1};
if mod(k,2) == 0
Pos=[Pos(1)+size(YourCell{k+1}, 1)+border, Pos(2)];
else
Pos=[Pos(1), Pos(2)+size(YourCell{k+1}, 2)+border];
end
end
imshow(MergedImage);