如何在Matlab中组合两个或多个图像?

时间:2018-04-29 21:08:43

标签: matlab image-processing combinations

我需要将几个(不同纹理)的图像组合在一起。我尝试了以下代码:

% Read 4d data
I1 = importdata('Img1.tif');    
I2 = importdata('Img2.tif');

% Extract a slice of the data
extractImg1 = I1(:,:,1); 
extractImg2 = I2(:,:,1); 

% compute image size
[ny1, nx1] = size(extractA1);
[ny2, nx2] = size(extractA2);

P1 = extractImg1 (round(ny1/2)-120:round(ny1/2)+120, round(nx1/2)-120:round(nx1/2)+120);
figure, imshow(P1); title('Img1');
P2 = extractImg2 (round(ny2/2)-120:round(ny2/2)+120, round(nx2/2)-120:round(nx2/2)+120);
figure, imshow(P2); title('Img2');

拜托,接下来该怎么办?

其次,激光打印需要合成图像。因此,图像不具有完全相同的像素尺寸;我被告知将它们组合起来是没有意义的,因为这可能会略微降低准确性。

尽管如此,我仍然觉得,考虑到它们都具有相同的分辨率,组合图像不会出错。

我需要建议是否应该继续进行组合。非常感谢提前。

1 个答案:

答案 0 :(得分:1)

您从两张图片中提取了两个相等大小的区域。如果您想将这些并排放在同一张图片中,请使用cat,或等效地使用方括号[]

next_to_each_other = [P1,P2];
on_top_of_each_other = [P1;P2];

但请注意,即使它们的尺寸不同,也可以将这些东西放在一起。例如,如果I1N x M像素,则I2N x KN为垂直按照MATLAB中的惯例,然后你仍可以[I1,I2],因为垂直尺寸匹配。

如果垂直尺寸与水平尺寸匹配,则可以在将它们放在一起之前使用padarray用零填充一个(或任何适当的值):

ny1 = size(I1,1);
ny2 = size(I2,1);
if ny1<ny2
   I1 = padarray(I1,[ny2-ny1,0,0],0,'post'); % The 0 is the value to pad
elseif ny2<ny1
   I2 = padarray(I2,[ny1-ny2,0,0],0,'post'); % The 0 is the value to pad
end
out = [I1,I2];

padarray还允许复制矩阵中的数据,而不是用零填充。阅读文档以找到合适的内容。 padarray需要图像处理工具箱。如果您没有,可以使用zeros函数创建一个具有适当大小的零的数组,并使用[I1;zeros(ny2-ny1,size(I1,2),size(I1,3)]之类的内容将其添加到图像中来复制其功能。