删除matlab子图中的间距

时间:2015-02-08 18:50:19

标签: image matlab image-processing

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


bot=imread('bot.jpeg');

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

enter image description here

3 个答案:

答案 0 :(得分:9)

你需要指定轴'使用'Position'创建subplot属性时。{/ 1}

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

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

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

enter image description here

答案 1 :(得分:4)

最规范的方法是通过bla here来看一下这个答案。这个答案使用MATLAB文件交换中的函数来实现答案。但是,这需要学习新功能并使用参数。

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

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

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

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

bot = imread('onion.png');

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

enter image description here

答案 2 :(得分:1)

我从mathworks复制答案:

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

 h = subplot(2,3,1);

然后设置'位置' h的属性是你想要的任何东西。

 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