Verfasst am: 23.07.2010, 13:17
Titel: Zu viele Dimensionen bremsen Schleife aus
Ich glaub ich hab das etwas ungeschickt gelöst.
Ich speichere jeden Schleifendurchlauf in einer anderen Dimension und summiere die erst nach dem Schleifendurchlauf. Ich komm gerade mit der Logik nicht klar, wie ich richtig in der Schleife aufsummiere
Code:
ind=1;
for w=min(Theta):thetastep:max(Theta)-thetastep
[Koor0]=startpunkte(Traceval(:,:,1),n(1),w,strahlabstand,strahlen); % Generierung Startwerte für Strahlen auf Kreisbahn um Probe
strahl=1;
for Koor=Koor0(:,1:strahlen)% Koor0(:,1:strahlen): nimm erste bis letzte Spalte (Anzahl Spalten=Anzahl Strahlen)
RuecktrDim3=sum(Ruecktrace,3); % Werte für den jeweiligen Winkel und Strahl wurden in verschiedene Matrizen geschrieben, diese werden hier aufsummiert
FiltDim3=sum(Filter,3); % sum(*,*) zweites Argument gibt Dimension an die summiert werden soll
Ruecktr=sum(RuecktrDim3,4)/strahlen;
Filt=sum( FiltDim3,4)/strahlen;
laufen lasen kann ich Dein Programm nicht, da die Unterfunktionen fehlen. Du beschreibst auch nicht, welcher Fehler auftritt oder ob die Ergebnisse von Deinen Ertwartungen abweichen.
Was genau möchtest Du also fragen?
Wie man sehen kann, speichere ich ja nach jedem Schleifendurchlauf mein Ergenisse unter einem anderen Index und nehm die dann durch sum nach der Schleife zusammen. Das Problem ist, sobald meien Schleifen durch sind hab ich dann bei einem kleinen Bild (10x10) bei 10 Strahlen Theta=0:359 (10x10x360x10) große Räume, was dann auch recht längsam läuft. Wie kann ich jetzt die Schleifenergebnisse schon in der Schleife aufsummieren, ohne was zu verlieren???
Der SUM Befehl ist sicherlich schneller als die Vektoren manuell in einer Schleife zu addieren. Ein [10 x 360 x 10 x 10] DOUBLE Array braucht 2.88 MB, dass sollte eigentlich zügig laufen.
Frage doch mal den PROFILEr, welche Programmteile die meiste ZEit benötigen.
Dann hab ich jetzt ein wirkliches Problem. Die meiste Zeit braucht der Aufruf rueckprojektion. Ich dachte wenn ich so viel Arrays aufmache bremst mich das aus. An der Funktion rueckprojektion kann ich nichts ändern...
Desweiteren hab ich ja auch Bilder, die nicht wie das Testbild(10x10) sondern 512x512 360 Winkel und dann noch 50 Strahlen hat. Das macht dann 512x515x360x50x8 was dann ja schon fast 40.000 MB sind...
Das macht dann 512x515x360x50x8 was dann ja schon fast 40.000 MB sind...
40.000 MB sind kein Problem für ein 64-Bit-Matlab, wenn Du über etwa 120 GB Ram einbaust. Wenn nicht, musst Du ja nicht alle 360-Grad Schritte gleichzeitig berechnen, oder?
Vielleicht läßt sich die Funktion rueckprojektion vektorisieren oder anderweitig beschleunigen??
Raum=zeros(hoehe);
x0mat=coor2mat(Koor0(1,:)); % x0mat=coor2mat(x0): Startwerte werden auf Bildmatrix umgerechnet
y0mat=coor2mat(Koor0(2,:));
%--------------------------------------------------------------------------
%Winkelumrechnung
Theta=mod(Theta,360); % modulo-Operation(360)Winkel werden umgerechnet zu Winkel zw 0:360
%--------------------------------------------------------------------------
n=0:(hoehe-1); % n:Vektor von 0 bis Breite Bildmatrix
unRx=(x0mat+n*-cosd(Theta)); % Positionsberechnung über trigonometrische Funktionen
x=round(unRx); % round: Rundung|Position muss gerundet werden um von Bildmatrix ausgelesen werden zu können
unRy=(y0mat+n*sind(Theta));
y=round(unRy);
indx=round(Theta/thetastep);
% Traceval: auslesen der Bildmatrix an den Positionen x,y
Raum(sub2ind(size(Raum),y,x))=Trace(:,(indx+1));
... da brauch ich wohl "etwas" mehr Arbeitsspeicher...
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.