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

Matrix N x M x P umwandeln in Matrix N*M x P

 

JJ72
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 22.06.09
Wohnort: Karlsruhe
Version: R2009b
     Beitrag Verfasst am: 27.10.2010, 16:59     Titel: Matrix N x M x P umwandeln in Matrix N*M x P
  Antworten mit Zitat      
Hallo,

ich bearbeite Bilddaten. Dabei stellt sich regelmäßig das "Problem", eine Bildmatrix N x M x P (z.B. 100 x 100 x 3 für ein quadratisches RGB Bild) in eine Matrix N*M x P umzuwandeln. Also in eine Matrix, in dem die Farbwerte in den Spalten, die Pixel in den Zeilen stehen. Ich löse das bislang so:

Code:

% inmatrix ist die N x M x P Matrix
% outmatrix ist die N*M x P Matrix

outmatrix=zeros(N*M,P);

for x=1 : P
    layer=inmatrix(:,:,x);
    outmatrix(:,x)=layer(:);
    clear layer
end
 


Hat da jemand eine elegantere Lösung?

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


HilfeSuchender
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 18:13     Titel:
  Antworten mit Zitat      
Hallo!

Wenn ich dich richtig verstehe, dann suchst du das hier:
reshape(matrix, N*M, 3)
bzw
reshape(matrix, size(matrix,1)*size(matrix,2), size(matrix,3))
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.10.2010, 18:14     Titel:
  Antworten mit Zitat      
Hallo

RESHAPE ist das Stichwort, was du suchst

Code:

outmatrix= reshape(inmatrix,N*M,P)
 


Zuletzt bearbeitet von denny am 28.10.2010, 09:42, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
JJ72
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 22.06.09
Wohnort: Karlsruhe
Version: R2009b
     Beitrag Verfasst am: 27.10.2010, 21:15     Titel:
  Antworten mit Zitat      
Jungs, Spitze!! Funktioniert!

Ich hab das aus Routine immer so gemacht, weil es sich von der Rechenzeit net viel nimmt. Aber so ist die Sache auf jeden Fall viel schöner und eleganter! Dass der Befehl "reshape" heißen könnte, da hätte ich allerdings mal selbst drauf kommen können Wink

Danke
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.10.2010, 15:43     Titel: Re: Matrix N x M x P umwandeln in Matrix N*M x P
  Antworten mit Zitat      
Hallo JJ72,

die Rechenzeit zwischen Deinem Programm und RESHAPE sollte sich dramatisch unterscheiden!
Die temporäre Variable "layer" in jeder Iteration per CLEAR zu löschen, ist [b]sehr[b] ineffizient.

Code:

outmatrix = zeros(N*M,P);
for x=1 : P
    layer = inmatrix(:,:,x);
    outmatrix(:,x) = layer(:);
    clear layer      % Unnötig!!!
end
 


Natürlich ist RESHAPE am elegantesten, es ginge aber auch so:
Code:

outmatrix = zeros(N*M,P);
outmatrix(:) = inmatrix(:);
 

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 22.06.09
Wohnort: Karlsruhe
Version: R2009b
     Beitrag Verfasst am: 28.10.2010, 15:52     Titel:
  Antworten mit Zitat      
Ich gebe dir im Prinzip recht. Durch die Iteration ist das Ganze natürlich viel langsamer. Ich hab mich unvollständig ausgedrückt. Was ich meine ist: NACH der Transformation folgen Berechnungen, die z.T. eine Woche dauern. Da machen sozusagen die paar Minuten unterschied in der Transformation das Kraut nicht fett.
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.