我有以下代码将多个图像从一个目录导入到Matlab中的结构中,这是一个图像示例。
myPath= 'E:\conduit_stl(smooth contour)\Collagen Contour Slices\'; %'
fileNames = dir(fullfile(myPath, '*.tif'));
C = cell(length(fileNames), 1);
for k = 1:length(fileNames)
filename = fileNames(k).name;
C{k} = imread(filename);
se = strel('disk', 2, 0);
C = imclose(C, se);
filled = imfill(C,'holes');
end
虽然现在我想对所有图像进行填充,然后找到质心。但是,在尝试此操作时,会出现错误,指出:“预期的输入数字1,I1或BW1,是这些类型之一:double,... etc”我尝试将图像转换为双精度,但这只会导致:无法从单元转换为双倍。“
这很可能是由于结构类型,图像被“收纳”,但我不知道。
非常感谢您的帮助。
答案 0 :(得分:0)
所以要详细说明我以前的评论,这里有一些要改变的代码:
C
不是结构,而是单元格数组。使用{花括号}访问单元格数组的内容。如果所有图像的大小相同,则将它们存储到数字数组而不是单元格数组中会更有效。由于它们似乎是逻辑图像,因此您的数组将具有3个维度:
[height, width, numberofimages]
因此,您可以使用以下命令启动代码:
myPath= 'E:\conduit_stl(smooth contour)\Collagen Contour Slices\'; %'
fileNames = dir(fullfile(myPath, '*.tif'));
%// if your images are of type uint8
C(height,width,length(fileNames)) = uint8(0);
C_filled = C; %// initialize new array to stored filled images
此外,由于您在所有图像上使用相同的结构元素进行形态学操作,因此您可以在循环外定义它。
所以你的代码看起来像这样:
se = strel('disk', 2, 0);
for k = 1:length(fileNames)
C(:,:,k) = imread(fileNames(k).name);
C_filled(:,:,k) = imfill(imclose(C(:,:,k), se),'holes');
end