我需要将几个(不同纹理)的图像组合在一起。我尝试了以下代码:
% 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');
拜托,接下来该怎么办?
其次,激光打印需要合成图像。因此,图像不具有完全相同的像素尺寸;我被告知将它们组合起来是没有意义的,因为这可能会略微降低准确性。
尽管如此,我仍然觉得,考虑到它们都具有相同的分辨率,组合图像不会出错。
我需要建议是否应该继续进行组合。非常感谢提前。
答案 0 :(得分:1)
您从两张图片中提取了两个相等大小的区域。如果您想将这些并排放在同一张图片中,请使用cat
,或等效地使用方括号[]
:
next_to_each_other = [P1,P2];
on_top_of_each_other = [P1;P2];
但请注意,即使它们的尺寸不同,也可以将这些东西放在一起。例如,如果I1
为N
x M
像素,则I2
为N
x K
(N
为垂直按照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)]
之类的内容将其添加到图像中来复制其功能。