informatica per scienze geologiche lt a.a.2017-2018...load('dtm_esercizio3');...

31
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: [email protected] Tel. 040 5582258

Upload: others

Post on 24-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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: [email protected] Tel. 040 5582258

Page 2: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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

Page 3: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Modello digitale del terreno FVG

Page 4: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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

Page 5: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

%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');

Grafico della topografia in 3D

Page 6: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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.

Page 7: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Grafico creato con lo script Plot_Topografia3D.m

Page 8: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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

Page 9: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Grafico prodotto con script

Plot_DTM_isolinea

Page 10: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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

Page 11: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

13.74 13.742 13.744 13.746 13.748 13.75 13.752 13.754 13.756 13.758 13.7645.715

45.716

45.717

45.718

45.719

45.72

45.721

45.722

45.723

45.724

45.725

Page 12: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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

Page 13: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Analisi di una superficie:

profilo e minimi locali nella topografia

Possiamo trovare

automaticamente tutte

le doline in un modello

del terreno?

A A′

Page 14: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Profilo topografico /1

load('DTM_esercizio3');

contourf(X,Y,Z,25);

• 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

• 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

Page 15: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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

Page 16: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Profilo topografico /3

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

• 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

Page 17: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Profilo topografico /4

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

• 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

Page 18: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Profilo topografico /5

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

• 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

x1,y1 = xclick(1),yclick(1)

x2,y2 = xclick(2),yclick(2)

Δx = x2-x1

Δy =

y2-y

1

lunghezza

Δ𝑥2 + Δ𝑦2

azimuth (rispetto all’asse x)

𝑡𝑎𝑛−1Δ𝑦

Δ𝑥

Page 19: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Profilo topografico /6

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

x1,y1

x2,y2

Δx = x2-x1

Δy =

y2-y

1

lunghezza

Δ𝑥2 + Δ𝑦2

azimuth (rispetto all’asse x)

𝑡𝑎𝑛−1Δ𝑦

Δ𝑥

profL(1) = 0

profL(end) = lunghezza

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)profX(i)p

rofY

(i)

Page 20: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Profilo topografico /7

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

profL(1) = 0

profL(end) = lunghezza

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.

profX(i)

pro

fY(i

)

Page 21: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Profilo topografico /8

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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

coordinate X

dei punti su cui

interpolare

coordinate Y

dei punti su cui

interpolare

matrice F(x,y)

(m x n)

nel nostro caso

la quota

Page 22: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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:

1. Carichiamo il modello del terreno

2. Chiamiamo la funzione TracciaProfilo

3. La funzione ci restituisce:

– il tracciato del profilo in coordinate

– i punti lungo il profilo

– la quota in ciascuno dei punti lungo il

profilo

4. 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)

Page 23: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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');

Page 24: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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:

1. La superficie è molto estesa e i minimi sono numerosi

2. La superficie è campionata regolarmente, in punti discreti

(non è una funzione analitica)

3. È presente del rumore, ovvero dei minimi locali che non

sono il nostro obiettivo. Esempio: piccole asperità nel

terreno.

Page 25: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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:

1. La superficie è molto estesa e i minimi sono numerosi

2. La superficie è campionata regolarmente, in punti discreti

(non è una funzione analitica)

3. È 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.

Page 26: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Ricerca dei minimi locali /3Vediamo 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)

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>0 : molto rumore

con detHess>2 : meno rumore

𝐻𝑓 𝑥, 𝑦 =𝑓𝑥𝑥 𝑓𝑥𝑦𝑓𝑥𝑦 𝑓𝑦𝑦

Per la dimostrazione, vedere:

http://calvino.polito.it/~taise/Esercizi

%202006/2006-05-25%20-

%20Appunti%20-%20Hessiana.pdf

matrice Hessiana

Page 27: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Ricerca dei minimi locali /4

contourf(X,Y,Z,50);

hold on;

scatter(minimiTEST_X,minimiTEST_Y,6,'r');

% «6» indica la dimensione dei punti, ‘r’ il colore rosso

Disegniamo i punti trovati su una mappa contourf:

Problemi:

• Non sempre i punti trovati

corrispondono al nostro obiettivo

(doline)

• Spesso sono presenti più punti per

ciascuna dolina (fondo piatto)

Page 28: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

P non è una dolina:

entro la finestra c’è un valore

inferiore alla quota di P

Ricerca dei minimi locali /5Pensiamo a una strategia differente!

Un punto è una dolina se si verificano entrambe queste condizioni:

1. è il più basso tra tutti i punti entro una finestra rettangolare attorno a sé

2. 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

P

Q

Q è una dolina:

la quota di Q coincide col

minimo entro la finestra

topografia

R

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»

topografia

Page 29: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Ricerca dei minimi locali /6

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

end

end

[U,V] = find(D==1);

end

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)

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.

Page 30: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

Ricerca dei minimi locali /7

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');

Chiamiamo «CercaDoline» in uno script e disegniamo i risultati su una mappa.

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?

Page 31: Informatica per Scienze Geologiche LT a.a.2017-2018...load('DTM_esercizio3'); contourf(X,Y,Z,25); • Vogliamo estrarre il profilo lungo un segmento qualsiasi • Il segmento è definito

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');