die Besprechung ergab fuer diese Gruppe: . Trockenprogrammierung: insbesondere die Konsistenz von Bildkoordinaten von ASAR und Freibord-Footprint klären die Klasseneinteilungen von ASAR und Freibordhöhen vergleichen Frage "welche Statistik will man anwenden" beantworten __'''Dienstag'''__ ---------- . '''Am Dienstag / Mittwoch erzeugtes Programm, das mit dem Zufallsgenerator sowohl die ASAR als auch Freibord - Daten erzeugt:''' {{{ #!python #project_plot.py from pylab import * from scipy import * import time,calendar,os,pipes,struct,string import random import scipy.ndimage as ndi from matplotlib.patches import Ellipse nk=5 #number of classes ndim=[1000,1000] #dimension of ASAR image in pixels res=12.5 freeb_asar_pixels=int(60./res)# footprint of freeboard is 60m fx0,fy0,fx2,fy2=[0.2,1.,1.,0.1] fx0,fy0,fx2,fy2=fx0*ndim[0],fy0*ndim[0],fx2*ndim[0],fy2*ndim[0] # freeboard coordinates from input file dist=sqrt((fx2-fx0)**2+(fy2-fy0)**2)*res fdist=172 #distance of two freeboard footprints is 172m nf=int(dist/fdist) fz_h=zeros(nf) #fz_h is the freeboard heights # produce a random array of freeboard heights for i in range(nf): fz_h[i]=random.random()*70 # the x,y positions of the freeboard footprints if fx2==fx0: fx=zeros(nf)+fx0 fy=linspace(0,ndim[1],nf) else: teta=(fy2-fy0)/(fx2-fx0) fx=linspace(fx0,fx2,nf) fy=(fx-fx0)*teta+fy0 #produce a random matrix of ASAR image classes (in 5 classes) a=zeros((ndim[0],ndim[1])) for i in range(ndim[0]): for j in range(ndim[1]): a[i,j]=int(random.random()*(nk)+1) #tranform from float to int B=a.astype(int) #select the class of footprints from ASAR Image fz=zeros(nf) for i in range(nf): fz[i]=B[int(fx[i]-1),int(fy[i]-1)] #calculation of mean and standard deviation of freeboard heights in each class mean=zeros(nk) std_kl=zeros(nk) for kl in range(1,6): s=(fz==kl) fh_kl=fz_h[s] mean[kl-1]=fh_kl.sum()/fh_kl.shape[0] std_kl[kl-1]=std(fh_kl) #plot mean and error bar kl=arange(nk)+1 bar(kl,mean,yerr=std_kl,ecolor='r',align='center') axis('tight') savefig('kl_mean_std', orientation='portrait', format='png') #calculate correlation coefficient #corr=xcorr(fz,fz_h,normed=True)[1][nf] figure() #plot ASAR image class together with freeboard heights x=arange(nf) bar(x,fz,width=0.3,align='center') ylim(0,10) ax=twinx() plot(x,fz_h,'r+-',ms=10,linewidth=1) ylim(0,70) savefig('asar_fb', orientation='portrait', format='png') #axis('tight') #plot ASAR image with freeboard flight figure() ct=zeros((nf,4)) for i in range(nf): ct[i]=cm.gist_rainbow(int(fz_h[i])) ax=axes() ells=[Ellipse(xy=[fx[i],fy[i]],width=freeb_asar_pixels,height=freeb_asar_pixels) for i in xrange(nf)] n=0 for e in ells: ax.add_artist(e) e.set_clip_box(ax.bbox) e.set_alpha(0.5) e.set_facecolor(ct[n]) n+=1 gray() imshow(B,origin='lower',interpolation=None) hold(True) #plot(fx,fy,'r+-',linewidth=2) xlim(400,600) ylim(500,700) #xlim(0,1000) #ylim(0,1000) colorbar() savefig('asar_fb_track', orientation='portrait', format='png') #figure() #imshow(a) show() }}} Figure 1 (class - mean, standard deviation) / '''VIRTUELLE DATEN''' : {{attachment:kl_mean_std.png}} Figure 2 (asar, freboard) / '''VIRTUELLE DATEN''' : {{attachment:asar_fb.png}} '''Ziele für Mittwoch: ''' * Vom gestern erzeugte Graphen verfeinen * Programm für ASAR-Rohdaten & Freiborddaten Vergleich '''__Mittwoch__ ''' ---------- . '''Am Mittwoch erzeugtes Programm, das ASAR-Rohdaten und Freiborddaten (Zufallsgenerator), Faltungmaske 5x5 Pixel wurde benutzt:''' {{{ #!python #ASAR_raw.py from pylab import * from scipy import * import time,calendar,os,pipes,struct,string import random import scipy.ndimage as ndi from read_asar import * filename='/pf/u/u242027/SAR_raw/ASA_IMP_1PNDPA20060617_043346_000000162048_00362_22460_2136.N1' I=read_asar_imp(filename) ndim=[1000,1000] #dimension of ASAR image in pixels fx0,fy0,fx2,fy2=[200.,1000.,1000.,100.] # freeboard coordinates from input file cellsize=12.5 #12.5m pixelsize dist=sqrt((fx2-fx0)**2+(fy2-fy0)**2)*cellsize fdist=172 #distance of two freeboard footprints is 172m nf=dist/fdist fz_h=zeros(nf) #fz_h is the freeboard heights # produce a random array of freeboard heights for i in range(nf): fz_h[i]=random.random()*70 # the x,y positions of the freeboard footprints if fx2==fx0: fx=zeros(nf)+fx0 fy=linspace(0,ndim[1],nf) else: teta=(fy2-fy0)/(fx2-fx0) fx=linspace(fx0,fx2,nf) fy=(fx-fx0)*teta+fy0 B=I[1000:2000,1000:2000] mask=array(([1,1,1,1,1],[1,2,2,2,1],[1,2,3,2,1],[1,2,2,2,1],[1,1,1,1,1]))/35. C=ndimage.convolve(B,mask,mode='reflect') #select the intensity value of footprints from ASAR Image fz=zeros(nf) for i in range(nf): pos=[int(fx[i]-1),int(fy[i]-1)] fz[i]=B[pos[0],pos[1]] #calculate correlation coefficient corr=xcorr(fz,fz_h,normed=True)[1][nf] figure() #plot ASAR image intensity together with freeboard heights x=arange(int(nf)) plot(x,fz,'b+-') ax=twinx() plot(x,fz_h,'r+-') savefig('asar_fb_track_RAW', orientation='portrait', format='png') #plot ASAR image with freeboard flight #figure() #plot(fx,fy,'r+-',linewidth=2) #colorbar() #imshow(B,origin='lower',interpolation=None) #hold(True) show() }}} Figure 1 (raw asar image, freeboard) / '''REELLE ASAR DATEN + VIRTUELLER FREIBORDDATENSATZ''' :: {{attachment:asar_fb_track_RAW.png}} '''''' '''Ziele für Donnerstag:''' * Farbtabelle für Freibordhöhen einbauen * Programpaketen der anderen Gruppe übernehmen und ins Programm einbauen * Testen und erste Ergebnisse liefern * Bericht schreiben '''__Donnerstag__ ''' ---------- . '''Am Donnerstag erzeugte Farbtabelle im 'project_plot.py' Program für Freibordhöhen:''' Figure 3 (asar, freeboard track) / '''VIRTUELLE DATEN''' : {{attachment:asar_fb_track.png}} vergleichen Frage "welche Statistik will man anwenden" beantworten __'''Freitag'''__ ---------- . '''Am Freitag wurden die Teilprogramme zusammengesetzt und das Hauptprogram geschrieben. Die Bericht wurde geschrieben.''' Program "results.py" nimmt als input die Freibordposition (fx,fy), Freibordhöhe (fz_h) und das klassifizierte ASAR Bild an.: {{{ #!python #results.py from pylab import * from scipy import * import time,calendar,os,pipes,struct,string import random import scipy.ndimage as ndi from matplotlib.patches import Ellipse def results(fx,fy,fz_h,B): nk=B.max() #number of classes ndim=B.shape fx=fx*ndim[0] fy=fy*ndim[1] nf=fx.shape[0] res=12.5 freeb_asar_pixels=int(60./res)# footprint of freeboard is 60m #select the class of footprints from ASAR Image fz=zeros(nf) for i in range(nf): fz[i]=B[int(fx[i]-1),int(fy[i]-1)] #calculation of mean and standard deviation of freeboard heights in each class mean=zeros(nk) std_kl=zeros(nk) for kl in range(nk): s=(fz==kl) fh_kl=fz_h[s] mean[kl]=fh_kl.sum()/fh_kl.shape[0] std_kl[kl]=std(fh_kl) #plot mean and error bar kl=arange(nk) bar(kl,mean,yerr=std_kl,ecolor='r',align='center') axis('tight') savefig('kl_mean_std.png', orientation='portrait', format='png') #calculate correlation coefficient #corr=xcorr(fz,fz_h,normed=True)[1][nf] figure() #plot ASAR image class together with freeboard heights x=arange(nf) bar(x,fz,width=0.3,align='center') ax=twinx() plot(x,fz_h,'r+-',ms=10,linewidth=1) savefig('asar_fb.png', orientation='portrait', format='png') #axis('tight') #plot ASAR image with freeboard flight figure() ct=zeros((nf,4)) for i in range(nf): ct[i]=cm.gist_rainbow(int(fz_h[i])) ax=axes() ells=[Ellipse(xy=[fx[i],fy[i]],width=freeb_asar_pixels,height=freeb_asar_pixels) for i in xrange(nf)] n=0 for e in ells: ax.add_artist(e) e.set_clip_box(ax.bbox) e.set_alpha(0.5) e.set_facecolor(ct[n]) n+=1 gray() imshow(B,origin='lower',interpolation=None) hold(True) #plot(fx,fy,'r+-',linewidth=2) colorbar() savefig('asar_fb_track.png', orientation='portrait', format='png') #figure() #imshow(a) show() }}} HAUPTPROGRAM "project_woche.py", das die Module aller Gruppen aufruft und durchführt: {{{ #!python #project_woche.py import read_fh import asar_kl from results import * from pylab import * from scipy import * import time,calendar,os,pipes,struct,string import scipy.ndimage as ndi from matplotlib.patches import Ellipse filename1='/pf/u/u242027/ASA_IMP_1PNDPA20060617_043346_000000162048_00362_22460_2136.N1' filename2='/pf/u/u242027/LonLatFre_1706_6.xyz' filename3='/pf/u/u241110/project/asar_class_filtered_1090x1051.dat' fx,fy,fz_h=read_fh.fit_freeboard_ASAR(filename1,filename2) ndim=[1090,1051] #dimension of ASAR image in pixels B=reshape(fromfile(filename3),(ndim[0],ndim[1])) results(fx,fy,fz_h,B) }}} Figure 1 (class - mean, standard deviation) / '''REELLE DATEN''' : {{attachment:kl_mean_std0.png}} Figure 2 (asar, freboard) / '''REELLE DATEN''' : {{attachment:asar_fb0.png}} Figure 3 (asar, freeboard track) / '''REELE DATEN''' : {{attachment:asar_fb_track0.png}} ------- . Berichtteil (Zusammenbau): __Motivation__ Das Ziel von unserem Projekt ist die Klassifikation der Freibordhöhen im Gebiet des Weddellmeeres (Antarktis). Dazu stehen uns ICESat und ENVISAT Daten zur Verfügung. Unsere Aufgabenstellung besteht darin festzustellen, ob es möglich ist, die ASAR Daten für eine Eisdickenklassifikation benutzen zu können. Die ICESat Überflugsdaten werden bei der Validierung helfen.Des weiteren fragen wir uns, im welchem Fehlerbereich diese Klassifikation möglich ist. __Daten__ In der erste Phase unseres Projektes haben wir mit Daten gearbeitet, die mit dem Zufallsgenerator erzeugt worden sind. Später haben wir die Programme anderer Gruppen eingebaut, dessen Eingabe a) die Freibordhöhen in den Bildkoordinaten und b) das Array der klassifizierten ASAR Datei war. __Methodik __(Arbeitsschritten, Theorie, Input/Output) Als erste Aufgabe haben wir uns damit beschäftigt, wie man den Zufallsgenerator benutzen kann. Mittels der Funktion "random()" haben wir das klassifizierte ASAR-Testbild (1000x1000 Pixels, 12,5 Meter Pixelgröße) mit dem simulierten ICESat-Überflug erzeugt. Das klassifizierte ASAR-Bild enthältet 5 Klassen ('''nk'''), die als dritte Dimension zu der Bildkoordinate zugehört (fx,fy,Klasse). Der ICESat-Überflug bestand aus Punkten mit Abständen von 172 Meter, wobei nur die erste und letzte Koordinate ('''fx0,fy0,fx2,fy2''') normiert (0-1) eingegeben wird. Die normierte Koordinaten haben wir mit der Dimension (1000x1000) multipliziert um die Freibordpunkte in den richtigen Bildkoordinaten zu bekommen. Aus der Distanz zwischen dem ersten und letzten Punk haben wir bei dem bekannten Abstand die Punktenzahl ('''nf''') berechnet. Es wurden nur die unter Freibordpunkten liegenden ASAR-Klassen ('''fz''') in der Korrelationsberechnung berücksichtigt und anschließend der Mittelwert und die Standardabweichung für die Freibordhöhe in jeder Klasse berechnet (siehe unterliegende Bild). {{attachment:kl_mean_std.png}} Danach haben wir die Teilprogramme von den anderen Gruppen erhalten. __Ergebnisse __(Output, Statistik) Figure 1 (class - mean, standard deviation) / '''REELLE DATEN''' : {{attachment:kl_mean_std0.png}} Figure 2 (asar, freboard) / '''REELLE DATEN''' : {{attachment:asar_fb0.png}} Figure 3 (asar, freeboard track) / '''REELE DATEN''' : {{attachment:asar_fb_track0.png}} __Diskussion__ * Hypothese: "Es ist möglich die Eisdicke/Freibordhöhe mittels ASAR Daten zu klassifizieren." * "Die ICESat Daten werden uns dabei helfen, die klassifizierte Bilder zu validieren." * Im welchem Fehlerbereich diese Klassifikation möglich ist?