![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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/5.jpg)
%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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022051917/6009dc95add4ad351c051580/html5/thumbnails/31.jpg)
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');