octave und Bildauswertung selbstgemacht

Status
Es sind keine weiteren Antworten möglich.

fuetti

Aktives Mitglied
Hallo Astrofreunde,

MOTIVATION:
Wir kennen alle die tollen Auswerteprogramme wie siril, etc.
Der eine oder andere will vielleicht verstehen, was diese Programme machen oder selbst numerische
Experimente mit seinen Daten durchführen.

OCTAVE:
Bildverarbeitung kann man bequem zu Fuss mit Octave nachvollziehen.
Octave ist ein Opensource-Matheprogramm und kann mit Matrizen umgehen.
Anders als in C oder anderen Programmiersprachen schreibt man eine Matrixmultiplikation bequem so: P=A*A'
Es gibt Alternativen zu Octave, jedoch ist Octave Opensource, sehr ausgereift, schnell und erweiterbar.
Python ist universeller (eine ausgewachsene Programmiersprache), dennoch finde ich es weniger bequem,
da es nicht versucht der mathematischen Schreibweise treu zu bleiben.
Ich finde, dass man dann leicht den Überblick verlieren kann. Daher ist Octave meine erste Wahl.

Hier ein Beispiel: Das Einlesen, Skalieren und Darstellen eines fits Bildes:

pkg load fits # Laden des fits Pakets
[image,header] = read_fits_image("r_m51_stacked.fit"); # Einlesen eines fits Bildes, hier 3040 x 2048
columns(image) # Zeigt Amzahl der Spalten des Bildes
-> ans = 2048
rows(image) # Zeigt Anzahl der Reihen des Bildes
-> ans = 3040
offset=-2.1*ones(3040,2048); # Eine Matrix gleicher Dimension gefüllt mit dem Wert 1.0 skaliert mit -2.1
imshow(offset'+160*image'); # Darstellung des um den Faktor 10 skalierten Bildes mit Offset 0.1,
# der Apostroph transponiert die Matrix, bzw. das Bild



Viel Spass beim Experimentieren!

Claus
 
Hallo Claus,

Sehr schön! Habe Octave lange nicht mehr in der Hand gehabt, aber das ist mal ein interessanter Anwendungsfall.
Was das nicht kennt: Octave ist so etwas wie ein OpenSource Mathlab. Ist zwar nicht 100% kompatibel, aber wenn
man irgendwo einen Mathlab-Beispielcode findet, ist die Chance nicht so schlecht der der ohne (oder mit kleinen)
Anpassungen auch in Octave läuft.

Viele Grüsse,
Daniel
 
Ja richtig. Es gibt sehr viel Dokumentation.
Was ich aber super finde ist die Matrixschreibweise:
Ein Eigenwertproblem kann man unabhängig von der Dimension so schreiben:
D = Q*M*Q'
schreiben, fast wie in der Mathematik.
Diesen Ausdruck zu schreiben kostet mich 10 Sekunden.
So bleibt außerdem die Übersicht erhalten.
Wie lange ich bräuchte um das mit verschachtelten Schleifen oder mit Operatoren
zuschreiben weiß ich nicht, jedenfalls viel länger.
Bildverarbeitung ist ja Matrixkalkül rauf und runter.
Die diskrete Fouriertrafo ist eine Matrixoperation. Wavelet-Trafo auch.
Beste Grüße, Claus
 
Hallo Claus,

Das ist ein interessantes Thema. Hast Du eine Quelle, die die mathematischen Operationen bei der Bildbearbeitung beschreibt?

Vielen Dank und viele Grüße,

Günther
 
Was ich aber super finde ist die Matrixschreibweise
Für mich als Informatiker ist das eher mühsam ;-)

Wie lange ich bräuchte um das mit verschachtelten Schleifen oder mit Operatoren
zuschreiben weiß ich nicht, jedenfalls viel länger.
Naja, das muss man ja auch nicht per Hand machen. Dafür gibt es z.B. in Python numpy

Aber interessant finde ich den Ansatz mit Octave dennoch!
 
Für mich als Informatiker ist das eher mühsam ;-)
Auch Informatiker sollten Mathe auf Abiturniveau können ;-)
Naja, das muss man ja auch nicht per Hand machen. Dafür gibt es z.B. in Python numpy

Aber interessant finde ich den Ansatz mit Octave dennoch!

Der Vergleich von Programmiersprachen ist zwar nicht das Thema aber
da es doch interessant ist, vergleichen wir doch einfach eine einfache Matrizenmultiplikation:

Python numpy geht so:
import numpy
A=numpy.matrix([[5,2,3],[8,1,4]])
B=numpy.matrix([[7,1],[3,6],[4,5]])
C=numpy.dot(A,B)
print(C)


Ausgabe:
[[53 32]
[75 34]]


Und nun die gleiche Rechnung in octave:
A = [5,2,3;8,1,4]
B = [7,1;3,6;4,5]
A * B


Ausgabe:
53 32
75 34


Ergebnis:
- Octave ist der mathematische Schreibweise näher, z.B. A*B anstatt von np.dot(A, B),
- Octave benötigt 3 Zeilen und 33 Tastenanschläge bis zum Ergebnis,
python 5 Zeilen und 87 Tastenanschläge,
- Python braucht 18 Klammern, Octave nur 4
Daher sind die Octaveausdrücke übersichtlicher

Python ist zu einem anderen Zweck designed worden, Octave ist eine speziell auf
numerische Mathematik getrimmte Programmiersprache. Das erklärt den Unterschied.


Fazit:
Octave ist die richtige Programmiersprache für mathematisch beschlagene Nichtprogrammierer
oder generell für diejenigen, die schnell das Wesentliche sehen möchten und sich nicht mit dem Overhead
der Programmierung aufhalten möchten, oder die einfach schreibfaul sind...


Claus
 
Hallo Claus,

Das ist ein interessantes Thema. Hast Du eine Quelle, die die mathematischen Operationen bei der Bildbearbeitung beschreibt?

Vielen Dank und viele Grüße,

Günther

Hier ein Kurs:
Aber es gibt noch sehr viel mehr Webseiten und Videos,
einfach mal googlen ;-)
 
Hallo Claus,

Vielen Dank für Deine Antwort.

Mir ging es bei meiner Frage in erster Linie darum, ob es eine gute Quelle für die mathematischen Grundlagen der Bildverarbeitung gibt.

Viele Grüße,

Günther
 
Es gibt zum Thema Grundlagen der Bildverarbeitung viele Bücher und Webseiten. Es ist schwer, da etwas zu empfehlen, da es auch von Deinen Vorkenntnissen abhängt. Oft sind es mathematische Verfahren, die auch Anwendungen in anderen Bereichen finden.
Matrizenrechnung ist eine Grundlage und diese kann man z.B. in Büchern über lineare Algebra lernen oder nachlesen.
Es ist auch Teil des Abiturstoffes. Schulbücher sollten daher einen didaktisch gut ausgearbeiteten Weg zu diesem Wissen bieten.

Nur nebenbei: Matrizenrechnung ist auch die Grundlage für quantenmechanische Berechnungen (Heisenberg-Bild).

Viele Grüße, Claus
 
Hallo Claus,

Ich bin von Beruf Physiker mit Schwerpunkt Quantenoptik und Laserspektroskopie. Ich bin also mathematisch vorbelastet...

Viele Grüße,

Günther
 
Status
Es sind keine weiteren Antworten möglich.
Zurück
Oben