在matlab中显示带有子图和子图像的多个图像

时间:2014-01-31 12:08:42

标签: image matlab printing

我正在使用双边滤镜来处理图像,我想在一个“框”中打印由于更改参数而产生的滤镜图像。这是我运行的脚本调用过滤器并打印图像,结果很糟糕,它打印完整的图像,然后是一个非常小的图片的子图,你不能告诉任何东西。有人能告诉我在subplot / subimage命令中我做错了什么吗?

I = im2double(imread('cat.jpg'));
sig_d = 1;
sig_r = 10;
for i=1:10
    sig_d = i;
    for j=1:10
      sig_r = 10*j;
      J = bilateral(I,sig_d,sig_r);
      figure,subplot(10,10,j), subimage(J);
    end
end

我的目标是一个10x10的块,其中的每个图像都是独特的,与点不相似。是否有可能完成?

2 个答案:

答案 0 :(得分:2)

1)您正在内循环的每个阶段创建多个数字;你只想要(我想)一个数字,所以你需要把命令figure放在你的嵌套循环之外。

2)您对subplot的来电永远不会填满整个数组

subplot(10,10,j)在图中创建一个10乘10的子图阵列,并将当前轴设置为数字j。因此,如果您想要使用10 x 10图像数组填充图形,则需要按顺序调用subplot(10,10,1)subplot(10,10,100)

另一种可行的方法是,如果输出图像J的大小始终相同,则预先分配正确大小的单个矩阵并使用montage。例如:

在循环之前,预分配:

I2 = zeros(n,m,1,100); % n and m are the size of the output image J

在循环内部,将输出分配给预分配矩阵

I2(:,:,:,z) = J; % z is your counter from 1 to 100

之后,显示蒙太奇

montage(I2,'Size',[10 10]);

这样做的好处是,每次计算时都不会丢弃J - 所以如果你想试验如何显示输出,你可以。

答案 1 :(得分:1)

首先,删除对figure的调用。每次都会打开一个新窗口 您的图像也会相互覆盖,因为subplot计算子图(在本例中为100)并使用第3个参数来确定要绘制的子图。您的代码将仅绘制到最顶行 要解决此问题,请使用subplot(10,10,(i-1)*10+j),这会考虑您的i(在这种情况下为行)。如果您想以columwise的方式显示图像,请使用subplot(10,10,(j-1)*10+i)

至于图像的大小,你真的没什么可做的。如果要以10x10网格显示它们,一个屏幕上将有100个图像,因此每个图像都必须相当小。