【问题标题】:How to stack a series of images in MATLAB [closed]如何在 MATLAB 中堆叠一系列图像 [关闭]
【发布时间】:2020-03-09 11:05:49
【问题描述】:
clc;clear all;


Imatrix = []
for i=1:3

  images{i} = imread(sprintf('frame-1065.png',i));
  Imatrix = cat(3, Imatrix, images{i});
  D = Imatrix;

end;

imshow(D)

这是我要运行的代码,但问题是我有 2000 张图片,我只能显示一张。

【问题讨论】:

  • sprintf('frame-1065.png',i) 总是给出相同的结果,而与i 的值无关。堆叠图像是什么意思?
  • 我有一组从 1 到 2456 的图像,我需要通过堆叠在每个人的顶部来创建 3D 图。因此,我首先创建了那个循环,但它似乎不起作用
  • 您的意思是您正在寻找合成图像?
  • 我试图通过将一组图像堆叠在一起来从一组图像中提取一个卷
  • imshow 不显示体积图像,但 MATLAB 中还有其他工具可供您使用。此外,如果您要处理体积图像,我建议您使用 MATLAB 的 DIPimage 工具箱。使用 DIPimage,您可以:readtimeseries('frame-*.png') 读取所有图像,将它们堆叠成 3D 图像并显示。

标签: matlab matrix 3d imaging


【解决方案1】:

我认为您真正想要的是将图像存储为图像堆栈。 这将允许您查看图像堆栈,例如ImageJ 并滚动浏览它等等。

我会将它们存储为一个单独的 tiff 文件并执行以下操作(请注意,您的所有图像必须具有相同的大小):

numOfImages = 2000;
output_filename = 'imgstack.tif';
for k=1:numOfImages
    loaded_image = imread(sprintf('frame-%d.png',k));
    imwrite(loaded_image, output_filename, 'WriteMode',append','Compression','none');
end

【讨论】:

  • 您的建议很棒!只发出你的代码不允许我循环从 1 到 1256 的图片...我应该怎么做?
  • @VegaOmega 是的,确实如此。它从1 循环到numOfImages。设置变量numOfImages = 1256,你应该就可以了。您可能需要调整文件名,但我从您的问题中得到了它。
  • 亲爱的@kkuilla 我试过那个方法,但是你可以看到我得到了这个错误。
  • @VegaOmega 修复了这个问题.. 抱歉...
  • 太棒了。非常感谢您,您的态度非常好。
【解决方案2】:

问题在于可视化。您可以使用 montage 函数查看 MxNxP 堆栈或单元格数组,其中每个单元格代表一个图像。

https://www.mathworks.com/help/images/ref/montage.html

figure, montage(images)

在您上面的代码中。

如果您想将您的数据可视化为一个卷,正如您在最近的评论中指出的那样,那么 IPT 中的 volshow 或 volumeViewer 可以做到这一点。

volumeViewer(Imatrix)
figure, volshow(Imatrix)

其中 Imatrix 是一个 MxNxP 数组,您要在其上执行体积可视化。

【讨论】:

  • 有一个问题,我想用这些图像创建一个 VOLUME,而不是多帧图像数组。
  • 查看我的更新。将来,我建议在您的 OP 中包含此类信息,以便在 StackOverflow 上获得最佳结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多