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

Transformation von Punkten in unterschiedlichen Grids

 

eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 04.11.2011, 15:32     Titel: Transformation von Punkten in unterschiedlichen Grids
  Antworten mit Zitat      
Hallo Smile

Ich stehe gerade vor einem geometrischen Problem:
Vorhanden sind zwei 3D Grids, ein irreguläres, ein reguläres, bei denen jeweils die Koordinaten der Knotenpunkte vorhanden sind. Nun sollen Punkte vom irregulären ins reguläre Grid transformiert werden.

Hierzu kann jeder Punkt einem konvexen Polygon (im einfachsten Fall Würfel) zugeordnet werden. Die Frage ist nun, wie man möglichst robust die einzelnen Punkte transformiert.

Einfaches Beispiel:
Sei der Ausgangspunkt der Schwerpunkt eines Wüfels (Grid 1) und sei Grid 2 ein Würfel gleichen Ausmaßes mit einer rein translatorischen Verschiebung, dann ist Punkt x mit eben dieser Verschiebung gesucht.

Für Anregungen und Links bin ich dankbar.

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


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.11.2011, 15:47     Titel:
  Antworten mit Zitat      
Hallo,

wenn es sich um eine reine Translation handelt, würde ich folgendes probieren:
- Subtraktion eines Punktes im 1. Grid vom entsprechenden Punkt im 2. Grid --> Verschiebungsvektor
- Addition des Verschiebungsvektors zum irregulären Grid.

Falls das Problem damit nicht beantwortet ist, wäre insbesondere interessant, ob es sich um Transformationen einer bestimmten Art (wie x2 = A x1 + b) handelt oder ob es generische Transformationen sind.

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

Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 04.11.2011, 19:38     Titel:
  Antworten mit Zitat      
Hallo Harald,

leider sind es keine reinen Translationen, sondern nicht-rigide Deformationen, was jedoch bleibt sind Ausrichtung und Anzahl der Knotenpunkte. Die Knotenpunkte kommen aus einer Bildregistrierung.

Was eine generische Transformation ist, konnte ich bisher nicht in Erfahrung bringen. Vielleicht ein weiteres Beispiel (zum Verständnis in 2D):

Sei x ein Punkt innerhalb eines Rechtecks (alle 4+1 Koordinaten bekannt), wo würde dieser Punkt in einem (verschobenen und rotierten) Trapez (erneut 4 Eckpunkte + Zusammenhang zu den Rechteckspunkten bekannt) liegen.

Viele Grüße,
Daniel
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.11.2011, 19:51     Titel:
  Antworten mit Zitat      
Hallo,

weiterer Vorschlag:
man weiß ja, wie das reguläre Gitter verschoben wird. Nun könnte man mit griddata3 jeweils die X, Y und Z Koordinaten interpolieren und auf die Weise die neuen Punkte für das irreguläre Gitter erhalten, etwa so:
Code:
xneu_irreg = griddata3(x_reg,y_reg,z_reg, xneu_reg,x_irreg,y_irreg,z_irreg)

entsprechend für yneu_reg und yneu_irreg, bzw. zneu_reg und zneu_irreg.

Es kann natürlich auch sein, dass es da in der Bildverarbeitung noch spezielle Funktionen gibt. Das ist aber nicht meine Domäne.

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

Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 04.11.2011, 20:15     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für dein Bemühen. Entweder kann ich deinem Vorschlag nicht ganz folgen oder es ist noch nicht ganz rüber gekommen, was ich erreichen will (siehe auch das Bild im Anhang).

Viele Grüße,
Daniel

P.S.: Garnicht so einfach, mit dem Touchpad zu pinseln Very Happy

Punktetransformation.png
 Beschreibung:

Download
 Dateiname:  Punktetransformation.png
 Dateigröße:  9.44 KB
 Heruntergeladen:  677 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.11.2011, 22:53     Titel:
  Antworten mit Zitat      
Hallo,

ja, und ich denke das ganze nun noch in 3D.

Schau dir mal das Beispiel in der Doku zu griddata3 an.
Bei dir ist es nur noch komplizierter: du hast zu jedem Punkt nämlich nur nur ein w, sondern drei, nämlich die x-, y- und z-Koordinaten des neuen Punktes.

Code:
figure(1)
% Punkte auf regulärem Gitter
x_reg =
y_reg =
z_reg =

% Punkte auf irregulärem Gitter
x_irreg =
y_irreg =
z_irreg =

figure(2)
% Neue Punkte für reguläres Gitter
x_neu_reg =
y_neu_reg =
z_neu_reg =

% Transformation der Punkte des irregulären Gitters
x_neu_irreg = griddata3(x_reg, y_reg, z_reg, x_neu_reg, x_irreg, y_irreg, z_irreg);
y_neu_irreg = griddata3(x_reg, y_reg, z_reg, y_neu_reg, x_irreg, y_irreg, z_irreg);
z_neu_irreg = griddata3(x_reg, y_reg, z_reg, z_neu_reg, x_irreg, y_irreg, z_irreg);


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

Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 05.11.2011, 12:37     Titel:
  Antworten mit Zitat      
Aber griddata() interpoliert doch nur Arrays auf unterschiedlichen Grids.

Dein Vorschlag für ein einfaches Beispiel:

Code:
% Punkte auf regulärem Gitter
x_reg = [20 50 50 20];
y_reg = [10 10 20 20];
z_reg = [1 1 1 1];

% Punkte auf irregulärem Gitter
x_irreg = [15 55 45 25];
y_irreg = [5 15 5 25];
z_irreg = [1 1 1 1];

% Neue Punkte für reguläres Gitter
x_neu_reg = 25;
y_neu_reg = 12;
z_neu_reg = 1;

% Transformation der Punkte des irregulären Gitters
x_neu_irreg = griddata3(x_reg, y_reg, z_reg, x_neu_reg, x_irreg, y_irreg, z_irreg);
y_neu_irreg = griddata3(x_reg, y_reg, z_reg, y_neu_reg, x_irreg, y_irreg, z_irreg);
z_neu_irreg = griddata3(x_reg, y_reg, z_reg, z_neu_reg, x_irreg, y_irreg, z_irreg);


Problem: In V (hier xyz_neu_reg) sollten eigentlich die Werte an den Positionen xyz_reg stehen, entsprechend muss der Vektor gleich lang sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2011, 14:19     Titel:
  Antworten mit Zitat      
Hallo,

du müsstest meiner Ansicht nach *_irreg und *_neu_reg vertauschen.
Allerdings fürchte ich, dass das hier zu wenige Punkte sind.

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

Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 05.11.2011, 15:04     Titel:
  Antworten mit Zitat      
Code:
% Punkte auf regulärem Gitter
x_reg = [20 50 50 20];
y_reg = [10 10 20 20];

% Punkte auf irregulärem Gitter
x_irreg = [65 85 85 70];
y_irreg = [25 30 50 55];

% Neue Punkte für reguläres Gitter
x_neu_reg = [35 20 50];
y_neu_reg = [15 10 15];

% Transformation der Punkte des irregulären Gitters
x_neu_irreg = griddata(x_reg, y_reg, x_irreg, x_neu_reg, y_neu_reg);
y_neu_irreg = griddata(x_reg, y_reg, y_irreg, x_neu_reg, y_neu_reg);

figure
hold all
plot(x_reg, y_reg, 'xb', 'LineWidth', 3)
plot(x_irreg, y_irreg, 'or', 'LineWidth', 3)
plot(x_neu_reg, y_neu_reg, 'xg', 'LineWidth', 3)
plot(x_neu_irreg, y_neu_irreg, 'xk', 'LineWidth', 3, 'MarkerSize', 12)



Funktioniert im Beispiel zumindest für 2D, sollte also 3D auch kein Problem sein. Vielen Dank Harald! Ich habe den Einsatz von griddata komplett fehlinterpretiert.
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 - 2024 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.