【问题标题】:Showing multiple images with subplot and subimage in matlab在matlab中显示带有子图和子图像的多个图像
【发布时间】:2014-01-31 12:08:41
【问题描述】:

我正在使用双边过滤器来处理图像,并且我想在一个“框”中打印因更改参数而产生的过滤图像。这是我正在运行的脚本来调用过滤器并打印图像,结果很糟糕,它打印完整的图像,然后打印一个带有非常小的图片的子图,你无法分辨任何东西。有人可以告诉我在 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 的块,其中的每个图像都与众不同,而不是类似于一个点。有可能实现吗?

【问题讨论】:

    标签: image matlab printing


    【解决方案1】:

    1) 您在内循环的每个阶段都创建了多个图形;您只想要(我想)一个数字,因此您需要将命令 figure 放在嵌套循环之外。

    2) 你对subplot 的调用永远不会填满整个数组

    subplot(10,10,j) 在图中创建一个 10 x 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 - 因此,如果您想尝试如何显示输出,您可以。

    【讨论】:

      【解决方案2】:

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

      至于图片的大小,你真的无能为力。如果要将它们显示在 10x10 的网格中,那么一个屏幕上将有 100 个图像,因此每个图像都必须相当小。

      【讨论】:

        猜你喜欢
        • 2016-10-25
        • 1970-01-01
        • 2019-12-15
        • 1970-01-01
        • 2012-06-01
        • 2015-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多