在Matlab中填充多个图像

时间:2016-06-09 11:11:29

标签: image matlab fill

我有以下代码将多个图像从一个目录导入到Matlab中的结构中,这是一个图像示例。

enter image description here

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”我尝试将图像转换为双精度,但这只会导致:无法从单元转换为双倍。“

这很可能是由于结构类型,图像被“收纳”,但我不知道。

非常感谢您的帮助。

1 个答案:

答案 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