WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

riesige Bilddatei erzeugen

 

Thomas_74
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2013, 13:49     Titel: riesige Bilddatei erzeugen
  Antworten mit Zitat      
Hi,

ich möchte eine größer Anzahl an kleinen Bildern zu einem großen Bild zusammenfügen und speichern.
Das einlesen mit
Code:
for i=1:length(filename);
x=imread(filename((i),:))
funktioniert.

Was ich nicht hinbekommen habe ist sie dann nach und nach zu Speichern/komprimieren.
Googel hat erbracht, dass MATLAB Bilder Blockweise bearbeiten kann
Code:
aber kann es die Dateien auch Schrittweise speichern?

P.S.: Die Dateien sollen in X und Y (ca. 100 x 100 Bilder) aneinander gehangen werden.

Hat da jemand vielleicht schon erfahrungen gemacht?

MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.03.2013, 15:23     Titel: Re: riesige Bilddatei erzeugen
  Antworten mit Zitat      
Hallo Thomas,

Du musst das Bild zunächst in Matlab als Array erstellen. Haben alle Bilder die selbe Größe? Wie wird entschieden, an welche Position ein eingelesenes Bild kommt?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.03.2013, 15:25     Titel:
  Antworten mit Zitat      
Hallo

vielleicht ist für dich auch die Funktion MONTAGE hilfreich?
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2013, 09:38     Titel:
  Antworten mit Zitat      
Hi,

die Bilddateien sind alle 256 x 256 x 3 gross.

Bis jetzt hab ich sie mit
Code:
...BildA=[BildA BildB]...
in einer schleife aneinander gehangen, aber bei ca. 100 x 100 hat das über nacht abgebrochen.


MONTAGE muss ich noch ausprobieren.


Vielen Dank Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.03.2013, 11:32     Titel:
  Antworten mit Zitat      
Hallo Thomas,

Das iterative Vergößern von Arrays ist eine sichere Methode einen Rechner lahmzulegen. Details dazu findest Du unter dem Stichwort "pre-allocation" und "Shlemiel the painter" im Netz oder hier im Forum.
Lösung: Das gesammte Array muss auf einmal alloziert werden, und danach werden die neuen Werte eingefügt, nicht angehängt.

Du hast bisher erklärt, wie Du jeweils zwei Bilder horizontal aneinanderhängst. Dann schreibst Du "100 x 100", was danach klingt, als ob Du auch vertikal Bilder anhängst. Bitte beantworte meine Frage, wie Du die horizontale und vertikale Position eines Bildes bestimmst. Dieses wichtige Detail würde nämlich eine einfache Antwort erlauben, ohne dass man viel erraten muss.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2013, 12:23     Titel:
  Antworten mit Zitat      
Hi,

ich habe als Amateur meine Bilder in der "schlechtest möglichen" Weise aneinandergehängt.

1. eine for Schleife, die eine Reihe Bilder aneinander gehangen hat
2. eine weitere for Schleife die die nächste Zeile angehangen hatt

das hat den Vorteil ich brauche mir über die Bilder grösse und die Positionierung im Array keine Gedanken machen musste und bei kleineren Dateimengen ging das auch.

Kann ich denn ein grösseres Array direkt auf die Platte schreiben und es dann Bildweise "füllen" (ansonsten wird es wahrscheinlich mit meinem Arbeitsspeicher eng)?

Vielen Dank Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.03.2013, 22:21     Titel:
  Antworten mit Zitat      
Hallo Thomas,

Ich würde Dir so gerne helfen. Es fehlt aber immer ein kleines Detail, so dass ich die benötigten 4 bis 5 Zeilen Code nicht einfach hinschreiben kann.

Wie wird definiert, in welcher Reihenfolge die Bilder eingelesen werden und wie werden die Längen der Schleifen bestimmt? Wenn Du 1000 Files in einem Ordner findest, möchtest Du dann ein 20*50, or 50*20 Mosaik? Werden die Bilder ersten zeilenweise oder erst spaltenweise eingelesen?

Wenn die Bilder die Auflösung 256 x 256 haben, und Du die Daten als UINT8 Werte speicherst mit 3 Bytes pro Pixel, kannst Du 10'000 davon in 1.97 GB speichern. Ein 64-Bit Rechner und Matlab mit mindestens 4 GB ist dazu notwendig, besser 8 GB.
Die Daten iterative auf die Platte zu schreiben wäre eine schlechte Idee. Dann hast Du zwar mehr Raum, es benötigt aber auch 1000 mal länger.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2013, 10:38     Titel:
  Antworten mit Zitat      
Hi,

hab mich durch das platzieren im Array gewühlt und die Bilder auf uint8 umgestellt (war aus irgendwelchen gründen vorher double) und tatsächlich jetzt reicht mein ram und er speichert.

Vielen Dank für eure Hilfe Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.03.2013, 20:05     Titel:
  Antworten mit Zitat      
Hallo Thomas,

Schön, dass es jetzt funktioniert. Ich hääte Dir wirklich gerne geholfen, aber wenn es ohne geht, ist das auch wertvoll.
Meinst Du, ich soll in Zukunft weniger Rückfragen stellen, wenn die Beantwortung offenbar zu zeitraubend ist?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2013, 10:16     Titel:
  Antworten mit Zitat      
Hi Jan,

hab natürlich nix gegen Rückfragen Wink .
Zumal sie ja weiterhelfen sollen.
Aber offensichtlich war mein 1. vorgehen so doo**** Embarassed Embarassed .
Das es mit dem 2. Ansatz problemlos lief (und ich den 1. einfach gelöscht hab).

MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.