导入图像堆栈

时间:2016-08-29 17:12:59

标签: image matlab image-processing import

所以我有代码来导入一堆图像,但是我收到一个错误:Subscripted assignment dimension mismatch.

myPath = 'E:\folder name\'; %' 
fileNames = dir(fullfile(myPath, '*.tif')); 
width = 1400;
height = 1050;
nbImages = length(fileNames);

C=uint8(zeros(width, height, nbImages)); 

for i=1:length(fileNames)
    C(:,:,i)=imread(cat(2,'E:\folder name\',fileNames(i).name));
    i
end

我理解错误源自for循环,但我不知道用图像填充空矩阵的任何其他方法。

2 个答案:

答案 0 :(得分:0)

您的图片尺寸不能相同。您可以通过对前两个维使用显式赋值来处理此问题。这将零填充任何小于其余图像的图像。

im = imread(...);
C(1:size(im, 1), 1:size(im, 2), i) = im;

此外,您的图片很有可能具有多个颜色通道(第三维),因此您可能希望沿着第四个维度而不是第三个维度进行连接。

C(:,:,:,i) = imread(...)

答案 1 :(得分:0)

显然这一切都取决于你想要对图像做什么,但一般来说,如果你想要一堆图像(或任何东西的“堆叠”),那么听起来你应该收集它们作为cell array代替。 此外,创建安全文件名的正确方法是使用fullfile命令

e.g。

C = cell(1, length(nbImages)); 
for i = 1 : length (fileNames)
  C{i} = imread (fullfile ('E:','folder name', fileNames(i).name));
end

如果确实希望从单元格数组连接到3D矩阵,假设您已经检查过这是可能的,那么您可以使用comma-separated-list generator语法轻松完成此操作:

My3DMatrix = cat(3, C{:});