Отображение гауссовой пирамиды, хранящейся в массиве ячеек, на одной фигуре

Я работаю над кодом гауссовой пирамиды для 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);

cascade2

Или более жесткое соглашение:

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);

cascade3

Другие вопросы по тегам