ich hab schon hier im Forum gesucht aber keine passende Lösung gefunden.
Ich hab Bilder von 001.tif bis 399.tif und will die alle einlesen, so dass ich sie bearbeiten kann.
Das folgende Programm ist meine Bildbearbeitung. Ich will dann alle 399 Bilder mit dem ersten sozusagen vergleichen und bräuchte dafür einen Befehl der alle Bilder als einzelne Matrizen in den Workspace lädt und dann einen Befehl der eine Art Laufvariable für die Benennung des zu bearbeitenden Bildes (hier B2) erstellt, so dass das Programm 398 bearbeitete Bilder (natürlich in Form von Matrizen) ausgespuckt. Wenn mir jemand helfen könnte, wäre das super.
%% Mittelwertberechnung for i = 1:544 for j = 1:1024 if B2(i,j) <= 7500
HB2(i,j) = -65537; % 16-Bit + 1 else
HB2(i,j) = B2(i,j);
end if B2(i,j)>7500
Zaehler = Zaehler+1;
Summe = Summe+B2(i,j);
end end end
Mittelwert = Summe/Zaehler;
%% Bildberechnung
B3 = HB2 - B1 + Mittelwert;
for i=1:544 for j=1:1024 if B3(i,j) < 0
B3(i,j) = 0;
else
B3(i,j) = B3(i,j);
end end end
B4 = uint16(B3);
B5 = mat2gray(B4);
figure;imshow(B5);
ich habe noch ein paar Beobachtungen und Anmerkungen:
400 Bilder 1024x544, 16 Bit dürfte in den Speciher passen - 425 MB. Aber wenn die Bilder in Double umgewanelt werden ist das kaum möglich (mit 32 Bit Systemen). Von der Aufagbe scheint aber nichts dagegen zu sprechen Bild 2 zu löschen wenn Bild 3 eingelsen wird usw.
Ich verstehe nicht warum überhaupt DOUBLE Konversion nötig ist. Und warum die (langsamen) Schleifen für die Bildung eines Mittelwertes?
mache, liest er zwar alle ein aber überschreibt dann ja alle und es bleibt nur 399.tif. Ich bräuchte also einen aufsteigenden Namen für die linke Seite des Gleichheitszeichen. Und das weiß ich leider nicht wie es geht.
Jetzt lädt das Programm ja alle Bilder und benennt sie sinnvoll. Wie kann ich jetzt die Mittelwertberechnung so abändern dass das Programm diese für alle Bilder durchführt. Da müsste ich ja dann B2 (oben im Quellcode ersichtlich) so ändern, dass er auch hochzählt. Müsste das auch über eine Schleife erfolgen? Wenn ja wie müsste dann B2 aussehen.
Auch danke an die anderen die zwischendurch geschrieben haben, aber so schnell kann ich nciht alles ausprobieren
zum speichern weil ich nix anderes gefunden habe was meinen Anforderungen entspricht. Wenn da jemand einen weniger speicherintensiven Weg weiß würd ich mich über Tipss freuen.
Und wenn euch noch weiteres zum Optimieren auffällt würd ich mich auch freuen, weil ich nun nciht wirklich Ahnung habe
for i = 1:544 for j = 1:1024 if Laufbild(i,j) <= 7500
Hilfsbild(i,j) = -65537; % 16-Bit + 1 else
Hilfsbild(i,j) = Laufbild(i,j);
end if Laufbild(i,j) > 7500
Zaehler = Zaehler + 1;
Summe = Summe + Laufbild(i,j);
end end end
danke für die Antwort. Funktioniert genauso gut nur natürlich schneller und weniger Speicherintensiv. Danke für die Hilfe. Wirklich ein gutes Forum hier.
Grüße
norm
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.