2016-06-09 75 views
0

我有以下代碼將一個目錄下的多個圖像導入Matlab中的一個結構,下面是一個圖像的例子。在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」我嘗試將圖像轉換爲雙精度,但這只是導致:「從細胞轉換爲雙倍是不可能的。「

這很可能是由於結構類型,圖像被「安置」在裏面,但我不知道這一點。

對此的幫助將不勝感激。

+0

'C'不是結構,而是一個單元陣列(如你初始化它)。將圖像存儲在「常規」數組中會更有效。另外,由於您對所有圖像使用相同的結構元素,因此可以將其從循環中取出並僅定義一次。 –

+0

你是否也想把大括號改爲正方括號?如果我這樣做,我得到這個錯誤:「從uint8轉換到單元格是不可能的。」 – Idrawthings

回答

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 
+0

當我設置我的數組維度時,我得到此錯誤:錯誤:不平衡或意外的括號或括號。 for「C(256,256,3270(fileNames))= uint8(0);」 – Idrawthings

+0

爲什麼3270?你可以留下'length(fileNames)'。也只是爲了確保你的圖像是灰度uint8的權利? –

+0

啊,這可能是問題所在。他們是二元的,我想這就是爲什麼我「從uint8轉換到單元格是不可能的。」 – Idrawthings