【问题标题】:Remove spacing in matlab subplot删除matlab子图中的间距
【发布时间】:2015-04-08 11:53:03
【问题描述】:

我应该如何删除这些图像之间的空白?我需要将所有这些图像组合在一起,没有任何空间。


bot=imread('bot.jpeg');

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

【问题讨论】:

标签: image matlab image-processing


【解决方案1】:

最规范的方法是查看bla here 的答案。此答案使用 MATLAB File Exchange 中的函数来实现答案。但是,这需要学习一个新功能并使用参数。

如果您想要立即工作,而不是在绘图上的单独网格中显示每个子图像,我会简单地创建一个将所有这些图像堆叠在一起的新图像:

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

repmat 采用矩阵并将自身复制/堆叠/平铺在一起,以获得所需的行数和列数(或任何维度)。在这种情况下,我选择堆叠图像,使其有 5 行和 5 列。接下来我们将堆叠的图像与imshow一起展示。

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

bot = imread('onion.png');

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

【讨论】:

  • 感谢您的帮助,但我想要不同的图像用于不同的瓷砖
  • 请详细说明。那没有意义。你想要每个图块的单独变量吗?恕我直言,这不是最好的方法。而且你问的和你刚才告诉我的完全不同。
  • @shivamsharma 您的样本显示了相同的图像
【解决方案2】:

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

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

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

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

【讨论】:

  • 谢谢你解决了我的问题。现在我通过创建不同的子图来了解我做错了什么。
  • 实际上我的代码确实创建了不同的子图。不同之处在于为每个子图指定了'Position'
【解决方案3】:

我从 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

【讨论】:

  • 这需要反复调整参数,直到正确为止。我会争辩说我的回答可以立即发挥作用。
  • 我也反对。请不要冒犯。您从该链接直接复制和粘贴,没有表现出任何努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多