Size: 6574
Comment:
|
Size: 4555
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
Die Besprechung ueber das Vorgehen ihrer Aufgaben ergab: | === Arbeitsgruppe 1: Freibord === Die Aufgabe der Arbeitsgruppe bestand darin, die I |
Line 3: | Line 5: |
die Transformation in polarstereographische Koordinaten und der nachfolgende Uebergang zu den Bildpunkten von ASAR Eckpunkte und Aufloseung des ASAR-Bildes variieren frei -> allgemeingueltiges Programm fuer den Uebergang der Output erfolgt als Vektor in der Form x, y, Freiboardhoehe; eventuell die Floatangabe |
'''Daten''' |
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. {{attachment:}} '''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: Homogene Koordinaten: Bestimmung der Transformationskoeffizienten für drei nichtkollineare Punkte: Bestimmung der Transformationskoeffizienten für mehr als drei nichtkollineare Punkte (Methode der kleinsten Quadrate): (für mehr Informationen siehe B. Jähne, Digitale Bildverarbeitung, Kapitel 10.4) Arbeitsschritte: Die Gruppe hat drei Programme bzw. Funktionen erarbeitet: * -read_icesat.py: * -coord_trans.py: * -fbh_bildkoordinaten.py: '''Ergebnisse''' (Output, Statistik) '''Diskussion''' |
|
Line 14: | Line 43: |
import string | from read_icesat import * from coord_transform import * from scipy import * |
Line 16: | Line 47: |
def fit_freeboard_ASAR(filename1,filename2,resolution): """filename1: ASAR data file, filename2: freeboard data file, resolution: data resolution creates new coordinate system defined by corners of ASAR image and selects freeboard values within ASAR image box and returns an array containing normalized image coordinates and corresponding freeboard values: |
def fit_freeboard_ASAR(filename1,filename2): """filename1: ASAR data file, filename2: freeboard data file creates new coordinate system defined by corners of ASAR image and selects freeboard values within ASAR image box returns an array containing normalized image coordinates and corresponding freeboard values: |
Line 24: | Line 54: |
lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4=read_asar_corners(filename1) ASAR_1=[lat1,lon1] ASAR_2=[lat2,lon2] ASAR_3=[lat3,lon3] ASAR_4=[lat4,lon4] |
ASAR=array(read_asar_corners(filename1)) ASAR_p=zeros(8) for k in arange(0,7,2): #computing polarstereographic coordinates ASAR_p[k:k+2]=mapll(ASAR[k],ASAR[k+1],sgn) |
Line 31: | Line 59: |
ASAR_1p=mapll(ASAR_1[0],ASAR_1[1],sgn) #computing polarstereographic coordinates ASAR_2p=mapll(ASAR_2[0],ASAR_2[1],sgn) ASAR_3p=mapll(ASAR_3[0],ASAR_3[1],sgn) ASAR_4p=mapll(ASAR_4[0],ASAR_4[1],sgn) |
A=coord_transformation(ASAR_p) |
Line 36: | Line 61: |
X=int(abs(ASAR_2p[0]-ASAR_1p[0])/resolution) #image size in pixel Y=int(abs(ASAR_4p[1]-ASAR_1p[1])/resolution) # polarstereographic coordinate system y00,x00,y01,x01,y02,x02,y03,x03=int(ASAR_1p[1]),int(ASAR_1p[0]),int(ASAR_4p[1]),int(ASAR_4p[0]),int(ASAR_3p[1]),int(ASAR_3p[0]),int(ASAR_2p[1]),int(ASAR_2p[0]) # new coordinate system with normalized coordinates y10,x10,y11,x11,y12,x12,y13,x13=0,0,1,0,1,1,0,1 # calculating transformation matrix: P0=array([[x00, x01, x02, x03],[y00,y01,y02,y03],[1.0,1.0,1.0,1.0]]) P1=array([[x10, x11, x12, x13],[y10,y11,y12,y13],[1.0,1.0,1.0,1.0]]) Faktor1=dot(P1,transpose(P0)) Faktor2=inverse(dot(P0,transpose(P0))) A=dot(Faktor1,Faktor2) # Transformation matrix # reading freeboard data lon=[] lat=[] fbh=[] datei = open (filename2, 'r') line=datei.readline() k=-1 while line!="": k=k+1 data=string.split(line) lon.append(float(data[0])) lat.append(abs(float(data[1]))) fbh.append(float(data[2])) line=datei.readline() polar=mapll(array(lat),array(lon),sgn) |
# reading freeboard data and computing geographic into polarstereographic coordinates ICESAT_p,fbh=read_icesat(filename2,sgn) #fbh are measured freeboard heights in cm |
Line 72: | Line 67: |
for x,y in zip(polar[0],polar[1]): | for x,y in zip(ICESAT_p[0],ICESAT_p[1]): |
Line 75: | Line 70: |
# cutting off non-corresponding data values |
# cutting off non-corresponding data values |
Line 94: | Line 89: |
return x_y_fbh | return x_y_fbh |
Line 98: | Line 92: |
Die benötigten Module polar_projection.py und read_asar.py sind auf der Seite der Arbeitsgruppe 0 [[AG0_ASAR_Einlesen]] zu finden. | '''coord_transform.py''' {{{#!python from scipy import linalg as la |
Line 100: | Line 96: |
'''fbh_bildkoordinaten_test.py''' {{{#!python from polar_projection import * from read_asar import * import string def fit_freeboard_ASAR(filename1,filename2,resolution): """filename1: ASAR data file, filename2: freeboard data file, resolution: data resolution creates new coordinate system defined by corners of ASAR image and selects freeboard values within ASAR image box returns an array containing normalized image coordinates and corresponding freeboard values: [x_coordinate, y_coordinate, freeboardheight(cm)]""" sgn=-1 #Antarctica lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4=read_asar_corners(filename1) ASAR_1=[lat1,lon1] ASAR_2=[lat2,lon2] ASAR_3=[lat3,lon3] ASAR_4=[lat4,lon4] ASAR_1p=mapll(ASAR_1[0],ASAR_1[1],sgn) #computing polarstereographic coordinates ASAR_2p=mapll(ASAR_2[0],ASAR_2[1],sgn) ASAR_3p=mapll(ASAR_3[0],ASAR_3[1],sgn) ASAR_4p=mapll(ASAR_4[0],ASAR_4[1],sgn) X=int(abs(ASAR_2p[0]-ASAR_1p[0])/resolution) #image size in pixel Y=int(abs(ASAR_4p[1]-ASAR_1p[1])/resolution) |
def coord_transformation(ASAR_p): |
Line 131: | Line 98: |
y00,x00,y01,x01,y02,x02,y03,x03=int(ASAR_1p[1]),int(ASAR_1p[0]),int(ASAR_4p[1]),int(ASAR_4p[0]),int(ASAR_3p[1]),int(ASAR_3p[0]),int(ASAR_2p[1]),int(ASAR_2p[0]) | 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]) |
Line 139: | Line 106: |
Faktor1=dot(P1,transpose(P0)) Faktor2=inverse(dot(P0,transpose(P0))) A=dot(Faktor1,Faktor2) # Transformation matrix |
Faktor1=dot(P1,la.transpose(P0)) Faktor2=la.inverse(dot(P0,la.transpose(P0))) A=dot(Faktor1,Faktor2) # Transformation matrix return A }}} |
Line 143: | Line 112: |
# reading freeboard data lon=[] lat=[] fbh=[] datei = open (filename2, 'r') line=datei.readline() k=-1 while line!="": k=k+1 data=string.split(line) lon.append(float(data[0])) lat.append(abs(float(data[1]))) fbh.append(float(data[2])) line=datei.readline() |
'''read_icesat.py''' |
Line 158: | Line 114: |
polar=mapll(array(lat),array(lon),sgn) | {{{#!python # reading freeboard data |
Line 160: | Line 117: |
# calculating new coordinates for freeboard data x_neu=[] y_neu=[] for x,y in zip(polar[0],polar[1]): x_neu.append(dot(array([A[0,0],A[0,1]]),array([x,y]))+A[0,2]) y_neu.append(dot(array([A[1,0],A[1,1]]),array([x,y]))+A[1,2]) |
import string from geo_polar import * from scipy import io |
Line 167: | Line 121: |
# 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) |
def read_icesat(filename,sgn): data=io.read_array(filename) polar=mapll(data[:,1],data[:,0],sgn) fbh=data[:,2] return polar,fbh |
Line 175: | Line 127: |
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]) |
|
Line 183: | Line 128: |
x_y_fbh=array([x_bild,y_bild,fbh_bild]) | Die benötigten Module polar_projection.py und read_asar.py sind auf der Seite der Arbeitsgruppe 0 [[AG0_ASAR_Einlesen]] zu finden. |
Line 185: | Line 130: |
return x_y_fbh | '''fbh_bildkoordinaten_test.py''' |
Line 187: | Line 132: |
Zum Testen hängt man an das obige Programm folgende Zeilen an: {{{#!python |
|
Line 189: | Line 136: |
resolution=0.025 ergebnis=fit_freeboard_ASAR(filename1,filename2,resolution) |
ergebnis=fit_freeboard_ASAR(filename1,filename2) |
Line 192: | Line 138: |
{{attachment.schemabild2.jpg}} |
Arbeitsgruppe 1: Freibord
Die Aufgabe der Arbeitsgruppe bestand darin, die I
Daten
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.
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: Homogene Koordinaten: Bestimmung der Transformationskoeffizienten für drei nichtkollineare Punkte: Bestimmung der Transformationskoeffizienten für mehr als drei nichtkollineare Punkte (Methode der kleinsten Quadrate):
(für mehr Informationen siehe B. Jähne, Digitale Bildverarbeitung, Kapitel 10.4)
Arbeitsschritte:
Die Gruppe hat drei Programme bzw. Funktionen erarbeitet:
- -read_icesat.py:
- -coord_trans.py:
- -fbh_bildkoordinaten.py:
Ergebnisse
(Output, Statistik)
Diskussion
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)
20
21 # reading freeboard data and computing geographic into polarstereographic coordinates
22 ICESAT_p,fbh=read_icesat(filename2,sgn) #fbh are measured freeboard heights in cm
23
24 # calculating new coordinates for freeboard data
25 x_neu=[]
26 y_neu=[]
27 for x,y in zip(ICESAT_p[0],ICESAT_p[1]):
28 x_neu.append(dot(array([A[0,0],A[0,1]]),array([x,y]))+A[0,2])
29 y_neu.append(dot(array([A[1,0],A[1,1]]),array([x,y]))+A[1,2])
30
31 # cutting off non-corresponding data values
32 m=-1
33 index_vec=[]
34 for xn,yn in zip(x_neu,y_neu):
35 m=m+1
36 if xn<=1. and xn >=0. and yn<=1. and yn >=0.:
37 index_vec.append(m)
38
39 x_bild=[]
40 y_bild=[]
41 fbh_bild=[]
42 for i in index_vec:
43 x_bild.append(x_neu[i])
44 y_bild.append(y_neu[i])
45 fbh_bild.append(fbh[i])
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
1 # reading freeboard data
2
3 import string
4 from geo_polar import *
5 from scipy import io
6
7 def read_icesat(filename,sgn):
8 data=io.read_array(filename)
9 polar=mapll(data[:,1],data[:,0],sgn)
10 fbh=data[:,2]
11 return polar,fbh
12
13
14 Die benötigten Module polar_projection.py und read_asar.py sind auf der Seite der Arbeitsgruppe 0 [[AG0_ASAR_Einlesen]] zu finden.
15
16 '''fbh_bildkoordinaten_test.py'''
17
18 Zum Testen hängt man an das obige Programm folgende Zeilen an:
19 {{{#!python
20 filename1='ASA_IMP_1PNDPA20060617_043346_000000162048_00362_22460_2136.N1'
21 filename2='LonLatFre_1706_6.xyz'
22 ergebnis=fit_freeboard_ASAR(filename1,filename2)