Gradienten aus xyz-Feld darstellen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
G-Rizzle
User
Beiträge: 83
Registriert: Donnerstag 18. Februar 2021, 12:26

Hallo,

ich habe ein Feld von xyz-Koordinaten. Insbesondere interessieren mich nun neben den absoluten Z-Werten die Gradienten.
Gibt es eine elegante Lösung, um diese in Python zu berechnen / darzustellen?
Sirius3
User
Beiträge: 15993
Registriert: Sonntag 21. Oktober 2012, 17:20

Was hast Du genau? Ein Feld, oder xyz-Koordinaten, oder auf einem Feld jeweils x,y und z Koordinaten?
Und wie soll der Gradient gebildet werden?
G-Rizzle
User
Beiträge: 83
Registriert: Donnerstag 18. Februar 2021, 12:26

ich habe 20 mio xyz-Koordinaten auf 1x1 mm^2 messfläche.
wie der Gradient gebildet werden soll ---> ???
Sirius3
User
Beiträge: 15993
Registriert: Sonntag 21. Oktober 2012, 17:20

Hilft jetzt nicht wirklich, wie die Daten aussehen.
Da kann ich auch nur ??? schreiben.
G-Rizzle
User
Beiträge: 83
Registriert: Donnerstag 18. Februar 2021, 12:26

Mir liegt eine .txt Datei nach folgendem Beispiel vor:

--------/------0,001 - 0,002 - 0,003 - 0,004
0,001---------1-------3--------5---------3
0,002---------2-------2--------2---------1
0,003---------7------8--------6---------2
0,004---------2-------1--------9---------7


die erste Spalte sind y-Werte, die erste Zeile x-Werte einer 1mm^2 großen Fläche.
Die Matrix sind gemessene Höhenwerte in z-Richtung. Die Werte im Bsp oben sind alle fiktiv. Wie gesagt liegen mir 20 mio Punkte auf der genannten Fläche vor.

Alle Werte schreibe ich in eine Liste von Listen um mit jeweils 3 Einträgen [[x1,y1,z1], [x2,y2,z2], .....].

Damit habe ich mithilfe von matplotlib eine Heatmap erstellt, also jedem z-Wert einen "Intensitätsfaktor" als Farbe (bzw Schwarzton) zugewiesen. Je tiefer der z-Wert, desto dunkler der zugewiesene Grau- bzw. Schwarzton. Damit erzeuge ich folgendes Bild:

Bild

Kontext: Das ist eine Mikroskopaufnahme einer 3d-gedruckten Metalloberfläche.


Dementsprechend sehe ich hier nur Absolutwerte des Höhenprofils. Wichtig wäre es mir aber auch Gradienten zu sehen, und genau das ist meine Frage:

1. Gibt es eine elegante, bereits implementierte Methode für sowas?
2. Wenn nicht --> Wie berechne ich sowas? Natürlich habe ich bereits gegoogelt, da finde ich allerdings nur Infos zum Gradientenberechnen von Funktionen
__deets__
User
Beiträge: 11933
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Gradient in einer Matrix um einen Punkt herum wird ueblicherweise mit einem horizontalen und einem vertikalen Sobel-Operator berechnet. Die beiden Werte sind dann der Gradient an der Stelle in x/y Richtung.

https://en.wikipedia.org/wiki/Sobel_operator
Sirius3
User
Beiträge: 15993
Registriert: Sonntag 21. Oktober 2012, 17:20

Du machst Dir also das Leben unnötig schwer, indem Du behauptest, Du hast x,y,z-Koordinaten.
In Wirklichkeit hast Du z-Werte auf einem regulären Rastern, bei dem es simpel ist, den Differenzenquotienten zu bilden.
Auch Dein Scatterplot aus dem anderen Thread ist viel zu kompliziert, weil Du eigentlich nur ein imshow benötigst, bzw. eigentlich die Matrix eins zu eins per PIL als Bild speichern könntest.
G-Rizzle
User
Beiträge: 83
Registriert: Donnerstag 18. Februar 2021, 12:26

Sirius3 hat geschrieben: Mittwoch 19. Januar 2022, 09:22 In Wirklichkeit hast Du z-Werte auf einem regulären Rastern, bei dem es simpel ist, den Differenzenquotienten zu bilden.


Genau das ist meine Hoffnung / Vermutung; Sobel sieht super aus, finde ich auf den ersten Blick allerdings etwas kompliziert. Habe mal für die erste Spalte und die erste Zeile der Bsp-Matrix oben die Gradienten über die Differenzenquotienten gebildet, soweit ich ihn so verstanden habe. Stimmt das so?


Bild
G-Rizzle
User
Beiträge: 83
Registriert: Donnerstag 18. Februar 2021, 12:26

Push
Sirius3
User
Beiträge: 15993
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn es die richtige Lösung liefert, wird es wohl richtig sein, sonst nicht. Differenzenquotienten sind eine Art Gradienten anzunähern, ob das das gewünschte Ergebnis liefert, kommt auf Deine Bedürfnisse an.
Antworten