Size: 4555
Comment:
|
← Revision 29 as of 2008-07-11 11:19:34 ⇥
Size: 6770
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 7: | Line 7: |
Der Gruppe stand ein ASAR-Satellitenbild zur Verfügung, das ein Auschnitt des Weddellmeeres zeigt und ein ICESat-Datensatz, der die geographischen Positionen (lon, lat) und die an diesen Punkten gemessene Freibordhoehe (cm) für einen Ueberflug quer durch den ASAR-Ausschnitt beinhaltet. | Der Gruppe stand ein ASAR-Satellitenbild zur Verfügung, das einen Auschnitt des Weddellmeeres zeigt und ein ICESat-Datensatz, der die geographischen Positionen (lon, lat) und die an diesen Punkten gemessenen Freibordhöhen (cm) für einen Überflug quer durch den ASAR-Ausschnitt beinhaltet. |
Line 9: | Line 9: |
{{attachment:}} | {{attachment:schema1.jpg}} |
Line 17: | Line 17: |
{{{#!latex \[\left(\begin{array}{c} x' \\ y' \end{array}\right) = \left(\begin{array}[c]{ccc} a_{\rm{11}} & a_{\rm{12}}\\a_{\rm{21}} & a_{\rm{22}}\end{array}\right) \left(\begin{array}{c} x \\ y \end{array}\right) + \left(\begin{array}{c} t_x \\ t_y \end{array}\right)\] }}} |
|
Line 18: | Line 25: |
Bestimmung der Transformationskoeffizienten für drei nichtkollineare Punkte: Bestimmung der Transformationskoeffizienten für mehr als drei nichtkollineare Punkte (Methode der kleinsten Quadrate): |
{{{#!latex \[\left(\begin{array}{c} x' \\ y' \\ 1 \end{array}\right) = \left(\begin{array}[c]{ccc} a_{\rm{11}} & a_{\rm{12}} & t_x \\ a_{\rm{21}} & a_{\rm{22}} & t_y \\ 0 & 0 & 1 \end{array}\right) \left(\begin{array}{c} x \\ y \\ 1 \end{array}\right)\] }}} Für drei nichtkollineare Punkte ergibt sich damit folgendes Gleichungssystem: {{{#!latex \[\left(\begin{array}[c]{ccc} x_1' & x_2' & x_3' \\ y_1' & y_2' & y_3' \\ 1 & 1 & 1 \end{array}\right)= \left(\begin{array}[c]{ccc} a_{\rm{11}} & a_{\rm{12}} & t_x \\ a_{\rm{21}} & a_{\rm{22}} & t_y \\ 0 & 0 & 1 \end{array}\right) \left(\begin{array}[c]{ccc} x_1 & x_2 & x_3 \\ y_1 & y_2 & y_3 \\ 1 & 1 & 1 \end{array}\right)\] }}} oder {{{#!latex \[P'=AP\] }}} Die Transformationsmatrix A für drei nichtkollineare Punkte lässt sich dann einfach aus {{{#!latex \[A=P'P^{-1}\] }}} bestimmen. |
Line 21: | Line 46: |
Transformationskoeffizienten für mehr als drei nichtkollineare Punkte erhält man mit der Methode der kleinsten Quadrate aus: {{{#!latex \[A=P'P^T(PP^T)^{-1}\] }}} |
|
Line 26: | Line 56: |
Die Gruppe hat drei Programme bzw. Funktionen erarbeitet: * -read_icesat.py: * -coord_trans.py: * -fbh_bildkoordinaten.py: |
Die Gruppe hat Programme bzw. Funktionen erarbeitet, die folgendes tun: * Einlesen der ICESat-Datei und umrechnen der geographischen Koordinaten des Ueberfluges in polarstereographische Koordinaten. * Die Eckpunkte des ASAR-Bildes, die von der Arbeitsgruppe 0 in geographischen Koordinaten übergeben wurden, werden ebenfalls in polarstereographische Koordinaten umgerechnet * Die Koordinatentransformation wird so durchgeführt, dass man als Ergebnis den ICESat-Datensatz als normierte Bildkoordinaten erhält. Dazu werden zunächst die vier ASAR-Eckpunkte in normierte Bildkoordinaten gebracht und anschließend die ICESat-Daten auf dasselbe Koordiantensystem transformiert. {{attachment:schema.jpg}} * Als Endergebnis wird eine Matrix erzeugt, die die Messpositionen des ICESat-Ueberfluges im ASAR-Auschnitt in Bildkoordinaten und die zugeoerigen Freibordoehen enthält. |
Line 33: | Line 66: |
Der Output besteht dann wie oben gesagt aus einer Matrix mit den Messpositionen des ICESat-Ueberfluges und der zugehoerigen Freibordhoehen. |
|
Line 37: | Line 72: |
=== Programme === |
|
Line 59: | Line 96: |
A=coord_transformation(ASAR_p) |
A=coord_transformation(ASAR_p) #computing transformation matrix A for coordinate #transformation into image coordinates |
Line 70: | Line 108: |
# cutting off non-corresponding data values m=-1 index_vec=[] for xn,yn in zip(x_neu,y_neu): m=m+1 if xn<=1. and xn >=0. and yn<=1. and yn >=0.: index_vec.append(m) |
x_n=array(x_neu) y_n=array(y_neu) fbh_n=array(fbh) |
Line 79: | Line 112: |
x_bild=[] y_bild=[] fbh_bild=[] for i in index_vec: x_bild.append(x_neu[i]) y_bild.append(y_neu[i]) fbh_bild.append(fbh[i]) |
x_n_limited=clip(x_n,0.,1.) x_indices=nonzero(x_n==x_n_limited) x_xind=x_n[x_indices] y_xind=y_n[x_indices] fbh_xind=fbh_n[x_indices] y_n_limited=clip(y_xind,0.,1.) y_indices=nonzero(y_xind==y_n_limited) x_bild=x_xind[y_indices] y_bild=y_xind[y_indices] fbh_bild=fbh_xind[y_indices] |
Line 126: | Line 163: |
}}} |
Arbeitsgruppe 1: Freibord
Die Aufgabe der Arbeitsgruppe bestand darin, die I
Daten
Der Gruppe stand ein ASAR-Satellitenbild zur Verfügung, das einen Auschnitt des Weddellmeeres zeigt und ein ICESat-Datensatz, der die geographischen Positionen (lon, lat) und die an diesen Punkten gemessenen Freibordhöhen (cm) für einen Überflug quer durch den ASAR-Ausschnitt beinhaltet.
Methodik
Theorie zur Koordinatentransformation:
Eine affine Abbildung ist eine lineare Koordinatentransformation, die die elementaren Transformationen Translation, Rotation, Dilatation, Stauchung und Scherung umfasst. Sie kann durch Vektoraddition und Matrixmultiplikation ausgedrueckt werden:
latex error! exitcode was 2 (signal 0), transscript follows:
Homogene Koordinaten:
latex error! exitcode was 2 (signal 0), transscript follows:
Für drei nichtkollineare Punkte ergibt sich damit folgendes Gleichungssystem:
latex error! exitcode was 2 (signal 0), transscript follows:
oder
latex error! exitcode was 2 (signal 0), transscript follows:
Die Transformationsmatrix A für drei nichtkollineare Punkte lässt sich dann einfach aus
latex error! exitcode was 2 (signal 0), transscript follows:
bestimmen.
Transformationskoeffizienten für mehr als drei nichtkollineare Punkte erhält man mit der Methode der kleinsten Quadrate aus:
latex error! exitcode was 2 (signal 0), transscript follows:
(für mehr Informationen siehe B. Jähne, Digitale Bildverarbeitung, Kapitel 10.4)
Arbeitsschritte:
Die Gruppe hat Programme bzw. Funktionen erarbeitet, die folgendes tun:
- Einlesen der ICESat-Datei und umrechnen der geographischen Koordinaten des Ueberfluges in polarstereographische Koordinaten.
- Die Eckpunkte des ASAR-Bildes, die von der Arbeitsgruppe 0 in geographischen Koordinaten übergeben wurden, werden ebenfalls in polarstereographische Koordinaten umgerechnet
- Die Koordinatentransformation wird so durchgeführt, dass man als Ergebnis den ICESat-Datensatz als normierte Bildkoordinaten erhält. Dazu werden zunächst die vier ASAR-Eckpunkte in normierte Bildkoordinaten gebracht und anschließend die ICESat-Daten auf dasselbe Koordiantensystem transformiert.
- Als Endergebnis wird eine Matrix erzeugt, die die Messpositionen des ICESat-Ueberfluges im ASAR-Auschnitt in Bildkoordinaten und die zugeoerigen Freibordoehen enthält.
Ergebnisse
Der Output besteht dann wie oben gesagt aus einer Matrix mit den Messpositionen des ICESat-Ueberfluges und der zugehoerigen Freibordhoehen.
(Output, Statistik)
Diskussion
Programme
fbh_bildkoordinaten.py
1 from polar_projection import *
2 from read_asar import *
3 from read_icesat import *
4 from coord_transform import *
5 from scipy import *
6
7 def fit_freeboard_ASAR(filename1,filename2):
8 """filename1: ASAR data file, filename2: freeboard data file
9 creates new coordinate system defined by corners of ASAR image and selects freeboard values within ASAR image box
10 returns an array containing normalized image coordinates and corresponding freeboard values:
11 [x_coordinate, y_coordinate, freeboardheight(cm)]"""
12
13 sgn=-1 #Antarctica
14 ASAR=array(read_asar_corners(filename1))
15 ASAR_p=zeros(8)
16 for k in arange(0,7,2): #computing polarstereographic coordinates
17 ASAR_p[k:k+2]=mapll(ASAR[k],ASAR[k+1],sgn)
18
19 A=coord_transformation(ASAR_p) #computing transformation matrix A for coordinate
20 #transformation into image coordinates
21
22 # reading freeboard data and computing geographic into polarstereographic coordinates
23 ICESAT_p,fbh=read_icesat(filename2,sgn) #fbh are measured freeboard heights in cm
24
25 # calculating new coordinates for freeboard data
26 x_neu=[]
27 y_neu=[]
28 for x,y in zip(ICESAT_p[0],ICESAT_p[1]):
29 x_neu.append(dot(array([A[0,0],A[0,1]]),array([x,y]))+A[0,2])
30 y_neu.append(dot(array([A[1,0],A[1,1]]),array([x,y]))+A[1,2])
31 x_n=array(x_neu)
32 y_n=array(y_neu)
33 fbh_n=array(fbh)
34
35 x_n_limited=clip(x_n,0.,1.)
36 x_indices=nonzero(x_n==x_n_limited)
37 x_xind=x_n[x_indices]
38 y_xind=y_n[x_indices]
39 fbh_xind=fbh_n[x_indices]
40
41 y_n_limited=clip(y_xind,0.,1.)
42 y_indices=nonzero(y_xind==y_n_limited)
43 x_bild=x_xind[y_indices]
44 y_bild=y_xind[y_indices]
45 fbh_bild=fbh_xind[y_indices]
46
47 x_y_fbh=array([x_bild,y_bild,fbh_bild])
48
49 return x_y_fbh
coord_transform.py
1 from scipy import linalg as la
2
3 def coord_transformation(ASAR_p):
4 # polarstereographic coordinate system
5 y00,x00,y01,x01,y02,x02,y03,x03=int(ASAR_p[1]),int(ASAR_p[0]),int(ASAR_p[7]),int(ASAR_p[6]),int(ASAR_p[5]),int(ASAR_p[4]),int(ASAR_p[3]),int(ASAR_p[2])
6 # new coordinate system with normalized coordinates
7 y10,x10,y11,x11,y12,x12,y13,x13=0,0,1,0,1,1,0,1
8
9 # calculating transformation matrix:
10 P0=array([[x00, x01, x02, x03],[y00,y01,y02,y03],[1.0,1.0,1.0,1.0]])
11 P1=array([[x10, x11, x12, x13],[y10,y11,y12,y13],[1.0,1.0,1.0,1.0]])
12
13 Faktor1=dot(P1,la.transpose(P0))
14 Faktor2=la.inverse(dot(P0,la.transpose(P0)))
15 A=dot(Faktor1,Faktor2) # Transformation matrix
16 return A
read_icesat.py
Die benötigten Module polar_projection.py und read_asar.py sind auf der Seite der Arbeitsgruppe 0 AG0_ASAR_Einlesen zu finden.
fbh_bildkoordinaten_test.py
Zum Testen hängt man an das obige Programm folgende Zeilen an: