2016-06-09 15 views
0

Ich habe den folgenden Code, um mehrere Bilder aus einem Verzeichnis in eine Struktur in Matlab zu importieren, hier ist ein Beispiel für die Bilder.Füllen mehrerer Bilder in 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 

Obwohl jetzt später Ich mag eine Füllung auf alle Bilder durchführen würde, die Schwer zu finden. Wenn jedoch dies versucht wird, ein Fehler, der besagt: "Erwartete Eingangsnummer 1, I1 oder BW1, um einer dieser Typen zu sein: doppelt, ... usw." Ich habe versucht, die Bilder in doppelte Genauigkeit zu konvertieren, obwohl das gerade dazu führte: Konvertierung in Double von Zelle ist nicht möglich. "

Das liegt wahrscheinlich an dem Strukturtyp, in dem die Bilder "untergebracht" sind, aber ich habe keine Ahnung davon.

Hilfe zu diesem würde sehr geschätzt werden.

+0

'C' keine Struktur, sondern ein Zellenfeld (wie Sie es initialisiert). Das wäre effizienter, um Ihre Bilder in einem "normalen" Array zu speichern. Da Sie für alle Bilder das gleiche strukturierende Element verwenden, können Sie es auch aus der Schleife herausnehmen und nur einmal definieren. –

+0

Wollen Sie auch die geschweiften Klammern in reguläre Klammern ändern? Wenn ich das tue, erhalte ich diesen Fehler: "Umwandlung zu Zelle von uint8 ist nicht möglich." – Idrawthings

Antwort

0

Also auf meinem vorherigen Kommentar zu erarbeiten, sind hier ein paar Dinge mit Ihrem Code zu ändern:

C keine Struktur, sondern ein Zellenfeld. Der Inhalt eines Zellenarrays ist Zugriff mit {geschweiften Klammern}. Wenn alle Ihre Bilder dieselbe Größe haben, ist es effizienter, sie in einem numerischen Array anstelle eines Zellenarrays zu speichern. Da sie logische Bilder zu sein scheinen, würde Ihr Array 3 Dimensionen haben:

[height, width, numberofimages] 

Sie daher Ihren Code mit anfangen konnte:

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 

Auch da Sie die gleichen Strukturelemente für Ihre morphologischen verwenden Operation auf allen Bildern, können Sie es einmal außerhalb der Schleife definieren.

So könnte Ihr Code wie folgt aussehen:

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

Wenn ich meine Array-Dimensionen festlegen, erhalte ich diesen Fehler: Fehler: Unsymmetrische oder unerwartete Klammer oder Klammer. für "C (256,256,3270 (fileNames)) = uint8 (0);" – Idrawthings

+0

warum die 3270? Sie können 'length (fileNames)' verlassen. Auch nur um sicherzustellen, dass Ihre Bilder Graustufen Uint8 richtig sind? –

+0

Ah, das könnte das Problem sein. Sie sind binär, ich stelle mir vor, deshalb bekomme ich "Umwandlung in Zelle von uint8 ist nicht möglich." – Idrawthings

Verwandte Themen