我正在为matlab编写高斯金字塔代码。基本上它加载一个图像,创建一个单元格数组并用不同级别的高斯金字塔填充它。
我想在单个图中显示填充图像的单元格数组的内容, 所以你可以看到高斯金字塔的效果。意味着原始图像处于完整大小,其余图像每个都被下采样2。所有这一切都在一个图中。
对于Matlab来说,我是非常业余的,所以我真的不知道该怎么做。 我已经尝试了一些子图,但失败了。
提前致谢。
答案 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)
对于2D图像,请使用:I{i} = cat(1,repmat(zeros(1 , p),[m - q , 1]),I{i});
答案 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
结果(带有虚拟数据):
修改强>
您可以通过计算下一个瓷砖的位置来玩瓷砖的排列。这是一个快速而肮脏的例子,你肯定可以做得更好:
并排:
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);