4

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

我想在一个图中显示填充了图像的单元格数组的内容,这样您就可以看到高斯金字塔效应。这意味着原始图像是全尺寸的,其余的每个都被下采样 2。所有这一切都在一个数字中。

当谈到 Matlab 时,我非常业余,所以我真的不知道该怎么做。我已经用子图进行了一些尝试,但失败了。

提前致谢。

4

2 回答 2

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)

在此处输入图像描述

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

在此处输入图像描述

于 2014-11-18T19:47:49.693 回答
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

结果(带有虚拟数据):

级联

编辑:

您可以通过计算下一张牌的位置来调整牌组的排列方式。这是一个快速而肮脏的示例,您肯定可以做得更好:

并排:

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

级联2

或者更紧密的安排:

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

级联3

于 2014-11-18T19:51:48.857 回答