删除matlab子图中的间距

问题描述 投票:9回答:3

我应该如何删除这些图像之间的空白区域?我需要在没有任何空间的情况下组合所有这些图像。


bot=imread('bot.jpeg');

for i= 1:25
subplot(5,5,i),imshow(bot);
end

image matlab image-processing
3个回答
9
投票

使用'Position'创建轴时,需要指定轴的subplot属性。

此外,您必须调整图形纵横比以匹配图像的纵横比,以便所有图形都适合没有垂直或水平空间。

如果在每个子图中显示不同的图像,则所有图像应具有相同的宽高比,否则它们不可能在没有空格的情况下适合图形。

bot = imread('peppers.png');
for i= 1:25
    subplot('Position',[(mod(i-1,5))/5 1-(ceil(i/5))/5 1/5 1/5])
    imshow(bot); %// or show a different image on each subplot
end
p = get(gcf,'Position');
k = [size(bot,2) size(bot,1)]/(size(bot,2)+size(bot,1));
set(gcf,'Position',[p(1) p(2) (p(3)+p(4)).*k]) %// adjust figure x and y size


4
投票

最典型的方式是看看bla here的这个答案。这个答案使用MATLAB文件交换中的函数来实现答案。但是,这需要学习新功能并使用参数。

如果你想立即工作,而不是在一个单独的网格中显示每个子图像,我只需创建一个新图像,将所有这些图像堆叠在一起:

bot_new = repmat(bot, [5 5]);
imshow(bot_new);

repmat获取一个矩阵,并将所需的复制/堆栈/切片复制到一起,以及任意数量的列(或任何维度)。在这种情况下,我选择堆叠图像,使其有5行5列。接下来我们将与imshow一起展示堆叠图像。

如果我们使用MATLAB中的示例图像:

bot = imread('onion.png');

如果我们运行上面的代码将图像拼接在一起并显示图像,这就是我们得到的:


1
投票

我从mathworks复制答案:

对于每个子图,存储其句柄。

 h = subplot(2,3,1);

然后将h的'position'属性设置为您想要的任何内容。

 p = get(h, 'pos');

这是一个4元素矢量[left,bottom,width,height],默认情况下是标准化坐标(图窗口的百分比)。例如,要在宽度上添加0.05个单位(图形窗口的5%),请执行以下操作:

 p(3) = p(3) + 0.05;
 set(h, 'pos', p);

SUBPLOT命令为这些参数选择标准值,但它们可以是您想要的任何值。您可以将轴放在您想要的图形上的任何位置,任何您想要的尺寸。

你可以检查一下:http://www.mathworks.com/matlabcentral/newsreader/view_thread/144116

© www.soinside.com 2019 - 2024. All rights reserved.