0

我正在尝试对大 tif 图像的图块进行一些图像分析。我已经完成了每个瓷砖所需的处理,在这一步中,我必须从这些 tif 中创建一个马赛克。由于这个原因,我在某处读到我可以使用“猫”功能。由于我不是真正的编程专家,我发现它很容易并尝试应用它。我拥有的瓷砖大约有 154 个 tif,我尝试了其中 4 个以上的 cat,它可以工作,现在我应该将它扩展到所有文件。我现在的问题是将它应用于所有 tif。其中 4 个的代码是:

img1 = imread ('E:...\'a1.tif','tif');
img2 = imread ('E:...\'a2.tif','tif');
img3 = imread ('E:...\'a3.tif','tif');
img4 = imread ('E:...\'a4.tif','tif');

image1 = cat(2,img1,img3);

image2 = cat(2,img2,img4);

image3 = cat(1,image2,image1);
imshow(image3)

正如您在代码中看到的那样,两两应该水平缝合,结果将是垂直缝合以获得最终图像。M 的问题是如何通过这些数量的图像定义哪些应该首先水平缝合,然后生成的图像垂直缝合。如果你们能帮助我,我将非常感激。欢迎任何其他方法。

4

1 回答 1

0

如果图块的大小相同,您可以通过对它们进行操作来连接它们,就好像它们是普通矩阵一样:

% dots-and-linebreak used for prettier formatting
concatenated_image = [ img1, img3; ...
                       img2, img4 ];

所有瓦片直到;水平连接成一行,行垂直连接形成最终图像。

应用此原则,您可以通过执行以下操作加入任意数量的预加载图像:

NUMBER_OF_IMAGES = 152;   % divisible by 4
IMAGES_PER_LINE = 4;

concatenated_image = [];
for ii = 0 : (NUMBER_OF_IMAGES/IMAGES_PER_LINE)-1
    one_row = [];
    for jj = 1 : IMAGES_PER_LINE
        % concatenate next image in this line
        one_row = [ one_row eval(['img' num2str(4*ii+jj)]) ];
    end

    % add constructed row to the existing image
    concatenated_image = [ concatenated_image; one_row ];
end

而不是使用命名的变量,imgN你应该更喜欢使用Matlab的单元格数组。然后,您可以使用以下命令加载所有图像:

imgs = {};
for ii = 1:154
    imgs{ii} = imread (['E:...\a' num2str(ii) '.tif'],'tif');
end

然后,您必须将上述连接代码更改为:

...
one_row = [ one_row imgs{4*ii+jj} ];
...
于 2013-06-03T11:14:46.427 回答