Differences between revisions 5 and 18 (spanning 13 versions)
Revision 5 as of 2008-07-09 11:14:47
Size: 6549
Editor: NinaMaass
Comment:
Revision 18 as of 2008-07-11 09:40:45
Size: 4287
Editor: BenteTiedje
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
def fit_freeboard_ASAR(filename1,filename2):
    """filename1: ASAR data file, filename2: freeboard data file
Line 23: 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 30: 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 35: 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)
    # reading freeboard data and computing geographic into polarstereographic coordinates
    ICESAT_p,fbh=read_icesat(filename2,sgn) #fbh are measured freeboard heights in cm
Line 38: Line 64:
    # calculating new coordinates for freeboard data
    x_neu=[]
    y_neu=[]
    for x,y in zip(ICESAT_p[0],ICESAT_p[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])
   
    for i in index_vec:
        x_bild.append(x_neu[i])
        y_bild.append(y_neu[i])
        fbh_bild.append(fbh[i])

    x_y_fbh=array([x_bild,y_bild,fbh_bild])

    return x_y_fbh
}}}

'''coord_transform.py'''
{{{#!python
from scipy import linalg as la

def coord_transformation(ASAR_p):
Line 39: Line 87:
    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 47: Line 95:
    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 51: Line 101:
    # 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 66: Line 103:
    polar=mapll(array(lat),array(lon),sgn) {{{#!python
# reading freeboard data
Line 68: Line 106:
    # 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 75: Line 110:
    # 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 83: Line 116:
    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_y_fbh=array([x_bild,y_bild,fbh_bild])

    return x_y_fbh

}}}
Line 101: Line 121:
Zum Testen hängt man an das obige Programm folgende Zeilen an:
Line 102: Line 123:
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)

    # 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)

    # 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])

    # 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_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_y_fbh=array([x_bild,y_bild,fbh_bild])

    return x_y_fbh
Line 187: Line 125:
resolution=0.025
ergebnis=fit_freeboard_ASAR(filename1,filename2,resolution)
ergebnis=fit_freeboard_ASAR(filename1,filename2)
Line 190: Line 127:



{{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     for i in index_vec:
  32         x_bild.append(x_neu[i])
  33         y_bild.append(y_neu[i])
  34         fbh_bild.append(fbh[i])
  35 
  36     x_y_fbh=array([x_bild,y_bild,fbh_bild])
  37 
  38     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)

attachment.schemabild2.jpg

LehreWiki: \AG1_Freibord (last edited 2008-07-11 11:19:34 by NinaMaass)