我正在为 matlab 编写高斯金字塔代码。基本上它加载图像,创建一个单元阵列并用不同级别的高斯金字塔填充它。
我想在一个图中显示填充了图像的单元格数组的内容,这样您就可以看到高斯金字塔效应。这意味着原始图像是全尺寸的,其余的每个都被下采样 2。所有这一切都在一个数字中。
当谈到 Matlab 时,我非常业余,所以我真的不知道该怎么做。我已经用子图进行了一些尝试,但失败了。
提前致谢。
我正在为 matlab 编写高斯金字塔代码。基本上它加载图像,创建一个单元阵列并用不同级别的高斯金字塔填充它。
我想在一个图中显示填充了图像的单元格数组的内容,这样您就可以看到高斯金字塔效应。这意味着原始图像是全尺寸的,其余的每个都被下采样 2。所有这一切都在一个数字中。
当谈到 Matlab 时,我非常业余,所以我真的不知道该怎么做。我已经用子图进行了一些尝试,但失败了。
提前致谢。
我使用循环在所有图像的顶部添加零,然后将它们合并
样品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);