Matlab中的图像拼接

时间:2013-06-03 10:49:45

标签: image matlab mosaic

我正在尝试对大型Tif图像的图块进行一些图像分析。我已经完成了每个瓷砖所需的处理,在这个步骤中我必须用这些TIF创建一个马赛克。我在某处读到了因为这个原因我可以使用'cat'功能。由于我不是真正的编程专家,我发现它很容易,并尝试应用它。我拥有的瓷砖大约有154个TIF,我尝试了4个以上的猫,它有效,现在我应该将它扩展到所有文件。我现在的问题是将它应用于所有的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)

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

1 个答案:

答案 0 :(得分:0)

如果tile的大小相同,你可以通过对它们进行操作来连接它们,就像它们是纯矩阵一样:

% 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

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

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

然后你必须将上面的连接代码更改为:

...
one_row = [ one_row imgs{4*ii+jj} ];
...