在单个图中显示存储在单元阵列中的高斯金字塔

时间:2014-11-18 19:37:03

标签: arrays image matlab subplot image-effects

我正在为matlab编写高斯金字塔代码。基本上它加载一个图像,创建一个单元格数组并用不同级别的高斯金字塔填充它。

我想在单个图中显示填充图像的单元格数组的内容, 所以你可以看到高斯金字塔的效果。意味着原始图像处于完整大小,其余图像每个都被下采样2。所有这一切都在一个图中。

对于Matlab来说,我是非常业余的,所以我真的不知道该怎么做。 我已经尝试了一些子图,但失败了。

提前致谢。

2 个答案:

答案 0 :(得分:3)

我使用循环在所有图像的顶部添加零,然后合并它们

示例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)

enter image description here

对于2D图像,请使用:I{i} = cat(1,repmat(zeros(1 , p),[m - q , 1]),I{i});

enter image description here

答案 1 :(得分:1)

怎么样:

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

结果(带有虚拟数据):

cascade

修改

您可以通过计算下一个瓷砖的位置来玩瓷砖的排列。这是一个快速而肮脏的例子,你肯定可以做得更好:

并排:

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