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

2D aufintegrieren

 

divB
Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 23.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2009, 10:48     Titel: 2D aufintegrieren
  Antworten mit Zitat      
Hi,

Ich moechte Differenzen eines 2D Arrays aufintegrieren. Die Differenzen liegen als x- UND y- Gradient vor und wurden mittels diff erstellt.

Wie gehe ich das am besten an? Hab gerade ein Brett vorm Hirn.

Die langsame Version habe ich schom implemetiert: Zuerst zur ersten Zeile versetzt die x-Gradienten addieren und kumulativ summieren.

Dann Zeile fuer Zeile nach unten gehen, y-Gradienten addieren und kumulativ aufsummieren. Das ergibt die "horizontale" Loesung, die vertikale findet man ebenso und zum Schluss addiere ich beide. Ergebnis richtig, nur insgesamt 6 (!) for-Schleifen.

Falls jemand von "Phase Unwrapping" eine Ahnung hat: der Hintergrund ist dass ich eine 2D Phase (Landschaft) unwrappen will - es sind keine Singularitaeten mehr vorhanden! Also kann sie mit der 2D Version von Itohs Methode (Summe aus den Differenzen der gewrappten Phase) wieder aufintegriert werden.

LG,
divB
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.10.2009, 11:04     Titel:
  Antworten mit Zitat      
Hallo,

so?
Code:
X=membrane;
[fx, fy] = gradient(X);
Y = cumsum(fx, 2)+cumsum(fy);
surf(Y)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
divB
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 23.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2009, 11:32     Titel:
  Antworten mit Zitat      
Vielen Dank mal fuer deine Antwort!Hilft mir zwar schon etwas weiter, allerdings hab ichs noch immer nicht ganz. Bei dem Ansatz fehlt mir der "Anfangs"wert der Phase noch.

Das ist der jetzige Spagehtticode:

Code:

% Integrieren

% Startwerte
unwrapped_phase_1(1,1) = phase1(1,1);
unwrapped_phase_2(1,1) = phase1(1,1);

% Integral vertikal
% Erste Zeile kumulativ summieren
for i = 1:xwl-1
    unwrapped_phase_1(1,i+1) = unwrapped_phase_1(1,i) + dx(1,i);
end

% vertikal nach unten kumulativ summieren
for j = 1:yhl-1
    for i = 1:xwl
        unwrapped_phase_1(j+1,i) = unwrapped_phase_1(j,i) + dy(j,i);
    end
end

% Integral horizontal
% erste spalte kumulativ summieren
for j = 1:yhl-1
    unwrapped_phase_2(j+1,1)=unwrapped_phase_2(j,1) + dy(j,1);
end

% horizontal nach rechts
for i = 1:xwl-1
    for j = 1:yhl
        unwrapped_phase_2(j,i+1) = unwrapped_phase_2(j,i) + dx(j,i);
    end
end

% Beide Teile kombinieren
unwrapped_phase = round((unwrapped_phase_1 + unwrapped_phase_2)/2);
 


Bis jetzt hab ichs noch nicht geschafft bin aber gerade dabei zu schauen wie ich aus den beiden Teilen die Abhaenigkeit von beiden Gradieten raus krieg.

LG,
divB
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.10.2009, 11:50     Titel:
  Antworten mit Zitat      
Hallo,

Versuch 2:

Code:
X=membrane;
fy = diff(X);
fx = diff(X,1,2);
Y0 = repmat(X(1,1),1,31);
Y = cumsum([Y0; fy]);
Y = cumsum([Y(:,1), fx], 2);
max(max(abs(X-Y)))


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
divB
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 23.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2009, 12:05     Titel:
  Antworten mit Zitat      
Juhuu, danke, das war es! Vielen Dank!

Hab es nun so gemacht:

Code:

dy = circshift(dy, [1 0]);
dy(1,1:end) = phase1(1, 1);

unwrapped_phase = cumsum(dy);

unwrapped_phase = cumsum([unwrapped_phase(:,1), dx(:,1:end-1)], 2);
 


Hoff das ist einigermassen performant das wird naemlich auf riesige Bilder angewandt. Aber einfach mal probieren.

Danke nochmals!

LG
divB
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.