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

用户1772

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

% 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');

拜托,我下一步该怎么办?

其次,激光打印需要组合图像。因此,图像的像素尺寸不完全相同。有人告诉我,将它们组合起来是没有意义的,因为这可能会稍微降低精度。

尽管如此,考虑到图像的分辨率相同,我仍然觉得合并图像不会错。

我需要有关是否应该继续进行合并的建议。提前谢谢了。

克里斯·伦戈

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

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

但是请注意,即使它们的大小不一样,您也可以将它们放在一起。例如,如果I1NxM像素,并且I2Nx 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)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章