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

Erstellen von Video aus figure

 

Thomas K
Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 15.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2012, 08:18     Titel: Erstellen von Video aus figure
  Antworten mit Zitat      
Hallo,

ich möchte aus einer dreidimensionalen Matrix ein Video erstellen. Diese Matrix enthält aber keine RGB-Farbinformation, weshalb ich das immer über eine figure gemacht habe. Dabei nutze ich den Befehl getframe(), welcher (soviel ich weiß) eine offenen figure im Vordergrund braucht. Meine Frage ist, ob man dieses Video auch ohne figure im Vordergrund erstellen kann. Hier ist der Code mit dem ich bisher gearbeitet habe:

Code:
for h=1:size(Data,3)
    mov = figure;
    imagesc(Data(:,:,h));
    axis image;
    axis off;
    colorbar;                              
    caxis([62 1000]);                  
    M = Daten{1,2}(:,:,h);
    tMax = max(M(:));
    text(5,8,sprintf(['Zeit: ',num2str(h*tSeg),' [s]','\nTmax:',num2str(tMax),'[C]']),'HorizontalAlignment','left','VerticalAlignment','top','BackgroundColor','w');
    MovieMatrix(:,h) = getframe(mov);          
    close(gcf);
end
save([pathResu '/M_' string '.mat'],'Data','-v7.3');

movie2avi(MovieMatrix,string);


Danke und schöne Grüße,
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: 12.09.2012, 12:30     Titel: Re: Erstellen von Video aus figure
  Antworten mit Zitat      
Hallo Thomas,

dann schau Dir doch mal den Output von GETFRAME an. Diesen kannst Du auch sehr leicht direkt aus einem Array erzeugen und als Input für MOVIE verwenden.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 15.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2012, 14:14     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deinen Tip, das wäre super wenn ich diese structure ohne getframe direkt erzeugen könnte, leider funkioniert das bei mir noch nicht. getframe erzeugt ja für jeden frame eine structure wobei das erste Feld cdata eine dreidim. Matrix ist und das zweite Feld die colormap. Ich habe versucht diese Matrix zu erzeugen, dabei wandle ich meinen doubel frame (240x320) in das Format uint8. Jetzt habe ich zwei Probleme: Erstens wie bekomme ich diese drei Dimensionen, und zweitens stimmt das Format nicht überein. Wenn ich mir die structure ansehe die ich mit getframe erzeuge, so hat die Matrix das Format 420x560x3. Wie mache ich aus meiner 240x320 eine passende Matrix? Und wie funktioniert das mit dieser colormap, wenn ich die structure durch getframe erzeuge ist dieses Feld immer leer.

Schöne Grüße,
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: 12.09.2012, 23:54     Titel:
  Antworten mit Zitat      
Hallo Thomas,

GETFRAME gibt entweder ein [X x Y x 3] cdata und ein leeres map zurück, oder ein [X x Y] cdata und ein [M x 3] colormap. In ersterem Fall handelt es sich um ein RGB Bild, in letzterem um ein Bild mit "indizierten Farben", bei dem die Elemente in der [X x Y] Matrix die Zeilen-Indices der entsprechenden Fareb in der Color-Map sind.

Das Hin- und Her-Transformieren zwischen RGB und indizierten Farben erledigt RGB2IND und IND2RGB.
Für MOVIE kann man sich eines der beiden Formate aussuchen, so dass eine Transformation eigentlich nicht benötigt wird.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 15.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2012, 15:26     Titel:
  Antworten mit Zitat      
Hallo Jan,

habe folgendes versucht:
Code:

s = struct('cdata','colormap');
z = 1;
for i=300:305
   
    RGB = ind2rgb(Data(:,:,i),'jet');
    cdata = uint(RGB);
    colormap = [];
   
    s(z).colormap = colormap;
    s(z).cdata = cdata;
    z = z+1;
end

movie2avi(s,'test');
 


Bekomme jetzt aber immer diese Fehlermeldung:
Error using avi
Failed to open file.

Error in avifile (line 173)
aviobj.FileHandle = avi('open',filename);

Error in movie2avi (line 63)
avimov = avifile(filename,varargin{:});

Error in Untitled2 (line 26)
movie2avi(s,'test');
Die Struktur die ich erzeuge ist eigentlich genau dieselbe wie jene die der Befehl getframe() erzeugt, nur das die Matrix cdata bei mir 240x320x3 hat, und bei getframe 504x672x3 hat. Weißt du vielleicht ob das was mit der Fehlermeldung zu tun hat und wenn ja was man da machen kann?

Freundliche Grüße,
Thomas.
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas K
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 15.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2012, 15:46     Titel:
  Antworten mit Zitat      
Hallo,

denke das Format von 504x672 ist das von der figure. Habe aber noch immer nicht herausgefunden wie es wirklich funktioniert.

Grüße, 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: 13.09.2012, 17:00     Titel:
  Antworten mit Zitat      
Hallo Thomas,

der Code enthält einige Fehler:
Code:
s = struct('cdata','colormap');
% Dies erzeugt:
% s.cdata = 'colormap'  !
% Du möchtest wahrscheinlich:
s = struct('cdata', cell(1, 5), 'colormap', cell(1, 5));

    cdata = uint(RGB);
% Was ist "uint"? Meinst Du "uint8"?
% RGB-images haben Werte zwischen 0 und 1. Wenn man dies in ein UINT8 umwandelt, bekommt man die Werte 0 und 1, also nur zwei unterschiedliche Farben. Vielleicht meinst Du:
    cdata = uint8(RGB * 255);
 

Ich kann mir irgendwie nicht vorstellen, dass der Code trotzdem läuft, deshalb verstehe ich nicht, wie Du zu der Fehlermeldung kommst:
"Error using avi. Failed to open file."
Aber sie besagt offensichtlich, dass das File nicht geöffnet werden kann. Ist es bereits offen? Hast Du Schreibrechte im entsprechenden Ordner?

Gruß, Jan
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 - 2025 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.