Render MATLAB Figur im Speicher
Gibt es alternativen zur Verwendung von getframe
und saveas
für das speichern der Inhalt einer Abbildung auf ein raster-Bild für die weitere Verarbeitung?
Ansatz 1: getframe
h = figure('visible', 'off');
a = axes('parent', h);
% render using `scatter3()` or other plot function.
content = frame2im(getframe(h));
Dies hat den gravierenden Nachteil zeigen, die Abbildung durchzuführen, eine screen-capture-Aufruf getframe()
und es ist problematisch, wenn eine solche render-in einer Schleife (d.h. speichern content
bei jeder iteration als video-frame).
Ansatz 2: saveas
h = figure('visible', 'off');
a = axes('parent', h);
% render using `scatter3()` or other plot function.
saveas(h, '/path/to/file.png');
content = imread(/path/to/file.png');
Dieser Ansatz hat den gravierenden Nachteil, dass das schreiben auf die Festplatte, was problematisch ist in Multithread-Anwendungen, als auch als langsamer als das Rendern direkt in den Speicher. Da saveas()
wird offensichtlich machen, um den Speicher vor dem Aufruf der PNG-encoder, was ich will, ist möglich, aber ich finde keine Funktion, die es in der MATLAB-Dokumentation, führt nur die rendering-Teil.
Frage:
Nicht, kennt Ihr eine Alternative Möglichkeit der Erbringung eines beliebigen axes
Inhalt eines raster-Bild?
InformationsquelleAutor der Frage André Caron | 2010-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine avi-Datei mit
avifile
und dann Bilder hinzufügen, um es mitaddframe
MATLAB nicht öffnen, extra sichtbaren zahlen, wie es mitgetframe
.InformationsquelleAutor der Antwort rescdsk
Ich weiß, dies ist ein Alter thread, aber ich lief in dieses problem wieder in letzter Zeit, also wollte ich fasse meine Erkenntnisse. Meine wichtigste Quelle ist auf dieser Seite (zwischengespeichert). Gemäß ihm, gibt es drei alternativen:
mit ADDFRAME direkt mit der Figur Griff (ohne GETFRAME). Das ist genau das, was @rescdsk gezeigt hat in seiner Antwort.
mit DRUCKEN/SAVEAS/HGEXPORT exportieren Sie das Bild in eine image-Datei, dann Lesen das Bild wieder von der Festplatte. Dieser Ansatz#2, dass man sich aufgelistet in der Frage oben.
Verwendung der undokumentierten HARDCOPY-Funktion zur Erfassung der Figur im Speicher.
In der Tat, dies ist die zugrunde liegende Funktion, die anderen Funktionen verwenden, die entweder direkt oder indirekt. Durch überprüfung des source-codes, die, wo möglich, ist hier eine Abbildung der Abhängigkeiten der damit verbundenen Funktionen, bei denen
A --> B
bezeichnetA calls B
:Auf der anderen Seite, GETFRAME nicht nennen, HARDCOPY, aber eine undokumentierte built-in-Funktion namens "CAPTURESCREEN" (obwohl es scheint, dass es mit DRUCK für die kommenden HG2-systemwo es eine neue
-RGBImage
drucken-flag):Hinweis: Da AVIFILE ist jetzt veraltet, können Sie ersetzen Sie es mit dem neueren VIDEOWRITER in (2) und (3), aber nicht in (1), da es unterstützt keine übergabe Abbildung Griff direkt.
InformationsquelleAutor der Antwort Amro
Start von MATLAB im headless-Modus:
matlab -noFigureWindows
dann einfach Handlung, und speichern Sie die zahlen wie gewohnt (Sie werden nicht sehen, keine grafische Ausgabe, natürlich). Beispiel:
Getestet habe ich die oben auf einem Windows-Rechner laufen R2010a. Ich habe keine Zugang zu einem Unix-Rechner jetzt, aber ich antwortete ähnliche Frage in der Vergangenheit, und es funktioniert nur an der Zeit (Sie wird unset die
$DISPLAY
variable vor dem Start von MATLAB)BEARBEITEN
Weitere option, falls Sie wollen, dass Ihre normalen Arbeitsbereich, um eine neue MATLAB-Instanz im hintergrund, die generieren und speichern Sie die Grundstücke (Quelle).
Führen Sie diese über die Eingabeaufforderung von Ihrem aktuellen MATLAB-Sitzung (alle auf der gleichen Linie):
Damit starten Sie eine neue MATLAB-Sitzung in den hintergrund (mittels COM-Automatisierung), und führen Sie ein Skript namens
myscript
(eine einfache M-Datei) enthält alle Ihre Plotten code:c:\yourpath\myscript.m
InformationsquelleAutor der Antwort Amro
Mit
avifile
veraltet, das ist, wie man es mit VideoWriter:InformationsquelleAutor der Antwort Uri Cohen