Informatica per Scienze Geologiche LT a.a

Slides:



Advertisements
Presentazioni simili
MATLAB.
Advertisements

MATLAB. Outline Grafica 2D Esercizi Grafica 3D Esercizi.
MATLAB.
MATLAB.
Metodi FEM per problemi ellittici lineari a tratti Gabriella Puppo.
Trimr Gauss, tra le altre, fornisce una preziosissima funzione che risulta di estrema utilità nell’ambito matriciale. Questa funzione, chiamata trimr(x,t,b),
INTRODUZIONE A MATLAB LEZIONE 4 Sara Poltronieri slide3.4 matlabintro
Riduzione in scala e classificazione delle carte geografiche
VETTORI: DEFINIZIONI Se ad una grandezza fisica G si associa una direzione ed un verso si parla di vettori: ✔ Le grandezze fisiche possono essere di due.
Formulario di geometria Analitica Argomento: Punti e Rette Di Chan Yi 3°O a.s. 2009/2010.
Disequazioni in una variabile. LaRegola dei segni La disequazione A(x) · B(x) > 0 è soddisfatta dai valori di per i quali i due fattori A(x) e B(x) hanno.
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Il metodo STATIS (L’Hermier des Plantes, 1976; Escoufier, 1983; Lavit et al., 1994) STATIS = Structuration des Tableaux A Trois IndiceS Tecnica esplorativa.
Il Piano Cartesiano prima parte.
Endogenous restricted participation
Le funzioni matematiche e il piano cartesiano
Informatica per Scienze Geologiche LT a.a
Informatica per Scienze Geologiche LT a.a
Scale di riduzione, tipi di carte
La parabola e la sua equazione
Esportare le proprie mappe da QGis
PICCOLA GUIDA PER FUNZIONI REALI A DUE VARIABILI
Composizione di forze Gianni Bianciardi (2009/2010)
Studio di funzione.
Le disequazioni in due variabili
Modellazione delle mappe di residuo
La circonferenza nel piano cartesiano
Le equazioni di II°Grado
Terza Lezione → Navigare nel file System → parte 2
Funzioni di due variabili
DISTRIBUZIONI TEORICHE DI PROBABILITA’
Script Marco D. Santambrogio –
La circonferenza nel piano cartesiano
Sistema di riferimento su una retta
DEM da laser-scan: rappresentazione contour in qGis
Array n-dimensionali e tipi di dati strutturati
MATRICI (ARRAY) IN MATLAB/OCTAVE
Prof.ssa Carolina Sementa
Le trasformazioni nel piano cartesiano
FUNZIONI MATEMATICHE DANIELA MAIOLINO.
Riduzione in scala e classificazione delle carte geografiche
FORZE E VETTORI di Federico Barbarossa
Informatica per Scienze Geologiche LT a.a
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Informatica per l’Ingegneria
Operatori differenziali
ELEMENTI DI GRAFICA IN MATLAB/OCTAVE
Scale di riduzione, tipi di carte
Fisica: lezioni e problemi
Esercitazione di Statistica Economica
Process synchronization
Esercitazione di Statistica Economica
Informatica per Scienze Geologiche LT a.a
Analisi di Immagini e Dati Biologici
Parabola a cura Prof sa A. SIA.
Statistica descrittiva
Informatica per Scienze Geologiche LT a.a
Scrivere programmi corretti
Informatica per Scienze Geologiche LT a.a
LA RETTA.
Strapazziamo le immagini…
PICCOLA GUIDA PER FUNZIONI REALI A DUE VARIABILI
Array n-dimensionali e tipi di dati strutturati
monodimensionali: Vettori bidimensionali: Matrici
FUNZIONI DI DUE VARIABILI
COME E’ FATTA UN’IMMAGINE: TRA MATRICI E MATEMATICA
Corso di Fondamenti di Informatica
Corso di Fondamenti di Informatica
La circonferenza Esercitazioni Dott.ssa Badiglio S.
Corso di Fondamenti di Informatica
Transcript della presentazione:

Informatica per Scienze Geologiche LT a.a.2017-2018 Rappresentazione grafica modello DTM del Friuli venezia Giulia Analisi numerica del DTM Docente: Prof. Carla Braitenberg, Tutor: Dott. Alberto Pastorutti Dipartimento Matematica e Geoscienze, Via Weiss 1, Università di Trieste E-mail: berg@units.it Tel. 040 5582258

Modelli der terreno utilizzati Nella esercitazione utilizzeremo due database: DTM in coordinate geografiche alta risoluzione e bassa risoluzione DTM_ortom_reg_regrid10m_WGS84_HD.mat DTM_ortom_reg_regrid10m_WGS84_LD.mat DTM alta risoluzione in coordinate cartesiane DTM_esercizio3.mat

Modello digitale del terreno FVG

Rappresentazione grafica del modello digitale del terreno Scopo dell’esercizio: Utilizzare il modello digitale del terreno in zona carsica - rappresentare il modello digitale del terreno in 3D - calcolare le isolinee di quota

Grafico della topografia in 3D %Plot_Topografia3D %caricamento dati digitali del terreno load DTM_ortom_reg_regrid10m_WGS84_HD.mat; figure %surface plot surf(X1,Y1,Z1) shading interp; % visualizzazione 3D (azimuth -78°, elevation 62°) view([-78,62]); % etichette sugli assi xlabel('asse orizzantale X'); ylabel('asse verticale Y'); zlabel('asse Z quota');

Comando View view(az,el) and view([az,el]) set the viewing angle for a three-dimensional plot. The azimuth, az, is the horizontal rotation about the z-axis as measured in degrees from the negative y-axis. Positive values indicate counterclockwise rotation of the viewpoint. el is the vertical elevation of the viewpoint in degrees. Positive values of elevation correspond to moving above the object; negative values correspond to moving below the object.

Grafico creato con lo script Plot_Topografia3D.m

Grafico delle isolinee della topografia %Plot_DTM_isolinea Zmin=200; Zmax=500; step=2; v=Zmin:step:Zmax; sv=size(v); load DTM_ortom_reg_regrid10m_WGS84_HD.mat; %num2str converte i numeri in stringhe, altrimenti la concatenazione(di stringhe) non e' possibile figure('name',['esempio 2D isolinee Zmin: ' num2str(Zmin) ' Zmax: ' num2str(Zmax)]) %contour rappresenta in grafico le isolinee in 2D [C, h]=contour(X1,Y1,Z1,v);

Grafico prodotto con script Plot_DTM_isolinea

Scegli una zona di particolare interesse: aggiungi comando axis Scegli una zona di particolare interesse: aggiungi comando axis. Qui il grafico e’ ristretto su una dolina. %Plot_DTM_isolinea Zmin=180; Zmax=500; step=2; v=Zmin:step:Zmax; sv=size(v); load DTM_ortom_reg_regrid10m_WGS84_HD.mat; %num2str converte i numeri in stringhe, altrimenti la concatenazione(di %stringhe) non e' possibile figure('name',['esempio 2D isolinee Zmin: ' num2str(Zmin) ' Zmax: ' num2str(Zmax)]) %contour rappresenta in grafico le isolinee in 2D [C, h]=contour(X1,Y1,Z1,v); %axis([xmin xmax ymin ymax]) axis([13.74 13.76 45.715 45.725]);

Proiezione utilizzata: RDN2008 fuso 33 Segue l’analisi numerica del DTM. Di seguito utilizziamo il DTM proiettato in coordinate metriche. Proiezione utilizzata: RDN2008 fuso 33 Nome del file: DTM_esercizio3.MAT

Analisi di una superficie: profilo e minimi locali nella topografia Possiamo trovare automaticamente tutte le doline in un modello del terreno?

Profilo topografico /1 Vogliamo estrarre il profilo lungo un segmento qualsiasi Il segmento è definito dalle coordinate di inizio e fine Otteniamo le coordinate cliccando sulla figura della mappa load('DTM_esercizio3'); contourf(X,Y,Z,25); carichiamo il DTM, che contiene Z, X, Y contourf: linee di livello con riempimento, 25 livelli Questo modello del terreno è in coordinate proiettate, le unità sugli assi sono metri È presente un valore di altitudine ogni 10 metri, sia lungo x che lungo y Ovvero: la risoluzione è di 10 metri/pixel

Profilo topografico /2 Vogliamo estrarre il profilo lungo un segmento qualsiasi Il segmento è definito dalle coordinate di inizio e fine Otteniamo le coordinate cliccando sulla figura della mappa Scriviamo una funzione per ottenere questo, utilizzeremo: ginput per leggere le coordinate dei punti cliccati da una figura aperta interp2 per calcolare, interpolando, l’altitudine per ogni punto lungo il profilo i punti del profilo non coincidono con i nodi della griglia del modello del terreno

Profilo topografico /3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo) % input dei punti contourf(X,Y,Z,25); hold on [xclick,yclick] = ginput(2); plot(xclick,yclick,'r','LineWidth',4) % costruzione del segmento del profilo deltax = xclick(2)-xclick(1); deltay = yclick(2)-yclick(1); lunghezza = sqrt((deltax)^2 + (deltay)^2); azi = atan2((deltay),(deltax)); profL = 0:passo:lunghezza; profX = xclick(1) + (profL * cos(azi)); profY = yclick(1) + (profL * sin(azi)); % interpolazione delle quote lungo il profilo profZ = interp2(X,Y,Z,profX,profY); end argomenti input: X,Y,Z del terreno passo con cui campioniamo il profilo ovvero: ogni quanti metri un punto argomenti output: profX, profY coord. dei punti del profilo profL vettore della distanza lungo il profilo è 0 : passo : lunghezza del profilo profZ vettore delle quote del profilo

Profilo topografico /4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo) % input dei punti contourf(X,Y,Z,25); hold on [xclick,yclick] = ginput(2); plot(xclick,yclick,'r','LineWidth',4) % costruzione del segmento del profilo deltax = xclick(2)-xclick(1); deltay = yclick(2)-yclick(1); lunghezza = sqrt((deltax)^2 + (deltay)^2); azi = atan2((deltay),(deltax)); profL = 0:passo:lunghezza; profX = xclick(1) + (profL * cos(azi)); profY = yclick(1) + (profL * sin(azi)); % interpolazione delle quote lungo il profilo profZ = interp2(X,Y,Z,profX,profY); end argomenti input: X,Y,Z del terreno passo con cui campioniamo il profilo ovvero: ogni quanti metri un punto argomenti output: profX, profY coord. dei punti del profilo profL vettore della distanza lungo il profilo è 0 : passo : lunghezza del profilo profZ vettore delle quote del profilo disegna una mappa con curve di livello riempite, 25 livelli, quindi usa ginput per salvare (2) punti in xclick (coordinate x) e yclick (coordinate y) il tracciato del profilo viene poi disegnato sulla mappa, in rosso ‘r’ e con spessore 'LineWidth',4

Profilo topografico /5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo) % input dei punti contourf(X,Y,Z,25); hold on [xclick,yclick] = ginput(2); plot(xclick,yclick,'r','LineWidth',4) % costruzione del segmento del profilo deltax = xclick(2)-xclick(1); deltay = yclick(2)-yclick(1); lunghezza = sqrt((deltax)^2 + (deltay)^2); azi = atan2((deltay),(deltax)); profL = 0:passo:lunghezza; profX = xclick(1) + (profL * cos(azi)); profY = yclick(1) + (profL * sin(azi)); % interpolazione delle quote lungo il profilo profZ = interp2(X,Y,Z,profX,profY); end adesso costruiamo il tracciato del profilo, cioè: il vettore «profL» che descrive la distanza lungo il profilo, da zero alla fine, con un elemento ogni step due vettori «profX» e «profY», che sono le coordinate di ogni punto che compone il profilo x2,y2 = xclick(2),yclick(2) lunghezza Δ𝑥 2 + Δ𝑦 2 azimuth (rispetto all’asse x) 𝑡𝑎𝑛 −1 Δ𝑦 Δ𝑥 lunghezza Δy = y2-y1 azi x1,y1 = xclick(1),yclick(1) Δx = x2-x1

Profilo topografico /6 x2,y2 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo) % input dei punti contourf(X,Y,Z,25); hold on [xclick,yclick] = ginput(2); plot(xclick,yclick,'r','LineWidth',4) % costruzione del segmento del profilo deltax = xclick(2)-xclick(1); deltay = yclick(2)-yclick(1); lunghezza = sqrt((deltax)^2 + (deltay)^2); azi = atan2((deltay),(deltax)); profL = 0:passo:lunghezza; profX = xclick(1) + (profL * cos(azi)); profY = yclick(1) + (profL * sin(azi)); % interpolazione delle quote lungo il profilo profZ = interp2(X,Y,Z,profX,profY); end lunghezza Δ𝑥 2 + Δ𝑦 2 azimuth (rispetto all’asse x) 𝑡𝑎𝑛 −1 Δ𝑦 Δ𝑥 lunghezza Δy = y2-y1 azi x1,y1 Δx = x2-x1 profL(end) = lunghezza profL(i) passo passo quali sono le coordinate di questo i-esimo elemento di profL? 𝑝𝑟𝑜𝑓𝑋 𝑖 = 𝑝𝑟𝑜𝑓𝐿 𝑖 ∙cos⁡(𝑎𝑧𝑖) 𝑝𝑟𝑜𝑓𝑌 𝑖 = 𝑝𝑟𝑜𝑓𝐿 𝑖 ∙sin(𝑎𝑧𝑖) a cui poi sommiamo le coordinate di x1, y1 (l’inizio del profilo) passo profY(i) passo profL(1) = 0 profX(i)

Profilo topografico /7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo) % input dei punti contourf(X,Y,Z,25); hold on [xclick,yclick] = ginput(2); plot(xclick,yclick,'r','LineWidth',4) % costruzione del segmento del profilo deltax = xclick(2)-xclick(1); deltay = yclick(2)-yclick(1); lunghezza = sqrt((deltax)^2 + (deltay)^2); azi = atan2((deltay),(deltax)); profL = 0:passo:lunghezza; profX = xclick(1) + (profL * cos(azi)); profY = yclick(1) + (profL * sin(azi)); % interpolazione delle quote lungo il profilo profZ = interp2(X,Y,Z,profX,profY); end profL(end) = lunghezza profL(i) passo passo passo profY(i) passo profL(1) = 0 profX(i) Osservazione: Il prodotto * tra profL (un vettore) e il coseno/seno dell’angolo azi (uno scalare) ha come risultato un vettore lungo quanto profL. Così facendo, per ogni elemento di profL (lunghezza lungo il profilo) abbiamo la sua coordinata X e la sua coordinata Y.

dei punti su cui interpolare dei punti su cui interpolare Profilo topografico /8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo) % input dei punti contourf(X,Y,Z,25); hold on [xclick,yclick] = ginput(2); plot(xclick,yclick,'r','LineWidth',4) % costruzione del segmento del profilo deltax = xclick(2)-xclick(1); deltay = yclick(2)-yclick(1); lunghezza = sqrt((deltax)^2 + (deltay)^2); azi = atan2((deltay),(deltax)); profL = 0:passo:lunghezza; profX = xclick(1) + (profL * cos(azi)); profY = yclick(1) + (profL * sin(azi)); % interpolazione delle quote lungo il profilo profZ = interp2(X,Y,Z,profX,profY); end Usiamo la funzione interp2, che interpola valori su griglie meshgrid (ad ogni elemento della matrice Z corrisponde un elemento nelle matrici X e Y, con rispettivamente le sue coordinate x ed y) interp2(X,Y,Z,profX,profY) meshgrid coordinate (m x n) matrice F(x,y) (m x n) nel nostro caso la quota coordinate Y dei punti su cui interpolare coordinate X dei punti su cui interpolare

Profilo topografico /9 % chiudi finestre aperte da vecchie figure % ed elimina eventuali variabili già esistenti close all clear variables % carica la topografia (X,Y,Z) load('DTM_esercizio3'); % chiamata alla funzione TracciaProfilo [profiloX,profiloY,profiloDist,profiloQuota] = ... TracciaProfilo(X,Y,Z,5); % figura: mappa AssiMappa = subplot(3,1,[1 2]); contourf(AssiMappa,X,Y,Z,25); hold on; plot(AssiMappa,profiloX,profiloY,'r','LineWidth',4); % figura: profilo AssiProfilo = subplot(3,1,3); plot(AssiProfilo,profiloDist,profiloQuota,'r'); Con uno script, come quello qui lato: Carichiamo il modello del terreno Chiamiamo la funzione TracciaProfilo La funzione ci restituisce: il tracciato del profilo in coordinate i punti lungo il profilo la quota in ciascuno dei punti lungo il profilo Creiamo una figura con due subplot su tre righe: sopra: la mappa con i contour (occupa due caselle subplot) e il tracciato del profilo sotto: il profilo (in x la distanza, in y la quota)

Profilo topografico /10 % chiudi finestre aperte da vecchie figure % ed elimina eventuali variabili già esistenti close all clear variables % carica la topografia (X,Y,Z) load('DTM_esercizio3'); % chiamata alla funzione TracciaProfilo [profiloX,profiloY,profiloDist,profiloQuota] = ... TracciaProfilo(X,Y,Z,5); % figura: mappa AssiMappa = subplot(3,1,[1 2]); contourf(AssiMappa,X,Y,Z,25); hold on; plot(AssiMappa,profiloX,profiloY,'r','LineWidth',4); % figura: profilo AssiProfilo = subplot(3,1,3); plot(AssiProfilo,profiloDist,profiloQuota,'r');

Ricerca dei minimi locali /1 Vogliamo individuare i minimi locali su una superficie. Nello specifico, le doline in un modello digitale del terreno (DTM) in zona carsica. Le condizioni sono le seguenti: La superficie è molto estesa e i minimi sono numerosi La superficie è campionata regolarmente, in punti discreti (non è una funzione analitica) È presente del rumore, ovvero dei minimi locali che non sono il nostro obiettivo. Esempio: piccole asperità nel terreno.

Ricerca dei minimi locali /2 Vogliamo individuare i minimi locali su una superficie. Nello specifico, le doline in un modello digitale del terreno (DTM) in zona carsica. Le condizioni sono le seguenti: La superficie è molto estesa e i minimi sono numerosi La superficie è campionata regolarmente, in punti discreti (non è una funzione analitica) È presente del rumore, ovvero dei minimi locali che non sono il nostro obiettivo. Esempio: piccole asperità nel terreno. Dobbiamo pensare a una strategia adatta: Non è possibile individuarle una ad una, a mano. È necessario scegliere un criterio per discriminare tra doline e rumore.

Ricerca dei minimi locali /3 Vediamo velocemente una prova con la stessa strategia usata per il livello del pozzo Trebiciano, ora però siamo in 2 dimensioni. Quindi le due condizioni per un minimo locale sono le seguenti: Determinante della matrice hessiana > 0 Derivata seconda > 0 (è sufficiente che 𝑓 𝑥𝑥 > 0) con detHess>0 : molto rumore matrice Hessiana 𝐻𝑓 𝑥,𝑦 = 𝑓 𝑥𝑥 𝑓 𝑥𝑦 𝑓 𝑥𝑦 𝑓 𝑦𝑦 Per la dimostrazione, vedere: http://calvino.polito.it/~taise/Esercizi%202006/2006-05-25%20-%20Appunti%20-%20Hessiana.pdf load('DTM_esercizio3.mat') [gx, gy] = gradient(Z); [gxx, ~] = gradient(gx); [gxy, gyy] = gradient(gy); detHess = gxx.*gyy - gxy.^2; find(and(detHess>0,fxx>0)); minimiX = X(minimi); minimiY = Y(minimi); con detHess>2 : meno rumore

Ricerca dei minimi locali /4 Disegniamo i punti trovati su una mappa contourf: contourf(X,Y,Z,50); hold on; scatter(minimiTEST_X,minimiTEST_Y,6,'r'); % «6» indica la dimensione dei punti, ‘r’ il colore rosso Problemi: Non sempre i punti trovati corrispondono al nostro obiettivo (doline) Spesso sono presenti più punti per ciascuna dolina (fondo piatto)

Ricerca dei minimi locali /5 Pensiamo a una strategia differente! Un punto è una dolina se si verificano entrambe queste condizioni: è il più basso tra tutti i punti entro una finestra rettangolare attorno a sé la differenza tra la media della quota di tutti i punti nella finestra e quella del punto è superiore a una soglia (da noi impostata) Abbiamo quindi due parametri, la cui scelta è soggettiva: dimensione della finestra attorno al punto valore della soglia topografia topografia P R P non è una dolina: entro la finestra c’è un valore inferiore alla quota di P R non è una dolina: la quota di R coincide col minimo entro la finestra, ma la differenza rispetto alla quota media entro la finestra è troppo piccola, inferiore a «soglia» Q Q è una dolina: la quota di Q coincide col minimo entro la finestra

Ricerca dei minimi locali /6 Scriviamo quanto appena descritto come una funzione. Argomenti in input: A matrice delle quote, finestra dimensione della finestra, soglia valore della soglia Argomenti in output: U, V indici degli elementi che sono doline (grazie ad X e Y poi li tradurremo in coordinate) function [U,V] = CercaDoline(A,finestra,soglia) D = zeros(size(A)); for u=1+finestra:size(A,1)-finestra for v=1+finestra:size(A,2)-finestra fmin = min(min(A(u-finestra:u+finestra,v-finestra:v+finestra))); fmed = mean(mean(A(u-finestra:u+finestra,v-finestra:v+finestra))); if A(u,v)==fmin && fmed-fmin>=soglia D(u,v) = 1; end [U,V] = find(D==1); finestra = numero di elementi di cui ci allontaniamo dall’elemento (u,v), in ciascuna direzione Osservazione: il ciclo for evita i bordi della nostra matrice, inizia a una finestra di distanza dal bordo. Vedi: le due righe del ciclo for.

Ricerca dei minimi locali /7 Chiamiamo «CercaDoline» in uno script e disegniamo i risultati su una mappa. load('DTM_esercizio3'); [U,V] = CercaDoline(Z,5,0.5); dolineX = X(1,V); dolineY = Y(U,1); contour(X,Y,Z,50); hold on; scatter(dolineX,dolineY,6,'r'); finestra = 5, c’è un elemento ogni 10 metri, quindi 5x10x2 = 100 metri soglia = 0.5 m estraiamo dalla prima riga di X e dalla prima colonna di Y le coordinate che corrispondono a ciascun punto definito da U e V Sembra funzionare meglio. Cosa accade variando i due parametri?

Curva ipsometrica e istogramma quota doline for i=1:length(U) dolineZ(i)=Z(U(i),V(i)); end nb = 50; % numero intervalli intervalli = linspace(min(Z(:)),max(Z(:)),nb); subplot(2,1,1); histogram(Z,intervalli,'Normalization','probability'); subplot(2,1,2); histogram(dolineZ,intervalli,'Normalization','probability');