Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6...

31
Informatica per Scienze Geologiche LT a.a.2019-2020 Rappresentazione grafica modello DTM del Friuli Venezia Giulia Analisi numerica del DTM Docente: Prof. Carla Braitenberg, Ricerca dei minimi in collaborazione con Dott. Alberto Pastorutti Dipartimento Matematica e Geoscienze, Via Weiss 1, Università di Trieste E-mail: [email protected] Tel. 040 5582258

Transcript of Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6...

Page 1: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Informatica per Scienze Geologiche LTa.a.2019-2020

Rappresentazione grafica modelloDTM del Friuli Venezia Giulia

Analisi numerica del DTM

Docente: Prof. Carla Braitenberg, Ricerca dei minimi in collaborazione con Dott. Alberto Pastorutti

Dipartimento Matematica e Geoscienze, Via Weiss 1, Università di TriesteE-mail: [email protected] Tel. 040 5582258

Page 2: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Modello digitale del terreno FVG

Page 4: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

%Plot_Topografia3D%caricamento dati digitali del terrenoload DTM_ortom_reg_regrid10m_WGS84_HD.mat;figure%surface plotsurf(X1,Y1,Z1)shading interp;

% visualizzazione 3D (azimuth -78°, elevation 62°)view([-78,62]);

% etichette sugli assixlabel('asse orizzantale X'); ylabel('asse verticale Y');zlabel('asse Z quota');

Grafico della topografia in 3D

Page 6: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Grafico creato con lo script Plot_Topografia3D.m

Page 8: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Grafico prodotto con script Plot_DTM_isolinea

Page 10: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Profilo topografico /3

function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo)% input dei punticontourf(X,Y,Z,25);hold on[xclick,yclick] = ginput(2);plot(xclick,yclick,'r','LineWidth',4)% costruzione del segmento del profilodeltax = 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 profiloprofZ = interp2(X,Y,Z,profX,profY);end

123456789

101112131415161718

• 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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Profilo topografico /4

function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo)% input dei punticontourf(X,Y,Z,25);hold on[xclick,yclick] = ginput(2);plot(xclick,yclick,'r','LineWidth',4)% costruzione del segmento del profilodeltax = 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 profiloprofZ = interp2(X,Y,Z,profX,profY);end

123456789

101112131415161718

• 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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Profilo topografico /5

function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo)% input dei punticontourf(X,Y,Z,25);hold on[xclick,yclick] = ginput(2);plot(xclick,yclick,'r','LineWidth',4)% costruzione del segmento del profilodeltax = 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 profiloprofZ = interp2(X,Y,Z,profX,profY);end

123456789

101112131415161718

• 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

= y

2-y 1

lunghezza

Δ𝑥 + Δ𝑦 

azimuth (rispetto all’asse x)

𝑡𝑎𝑛Δ𝑦

Δ𝑥

Page 19: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Profilo topografico /6

function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo)% input dei punticontourf(X,Y,Z,25);hold on[xclick,yclick] = ginput(2);plot(xclick,yclick,'r','LineWidth',4)% costruzione del segmento del profilodeltax = 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 profiloprofZ = interp2(X,Y,Z,profX,profY);end

123456789

101112131415161718

x1,y1

x2,y2

Δx = x2-x1

Δy

= y

2-y 1

lunghezza

Δ𝑥 + Δ𝑦 

azimuth (rispetto all’asse x)

𝑡𝑎𝑛Δ𝑦

Δ𝑥

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)

pro

fY(i)

Page 20: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Profilo topografico /7

function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo)% input dei punticontourf(X,Y,Z,25);hold on[xclick,yclick] = ginput(2);plot(xclick,yclick,'r','LineWidth',4)% costruzione del segmento del profilodeltax = 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 profiloprofZ = interp2(X,Y,Z,profX,profY);end

123456789

101112131415161718

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Profilo topografico /8

function [profX,profY,profL,profZ] = ... TracciaProfilo(X,Y,Z,passo)% input dei punticontourf(X,Y,Z,25);hold on[xclick,yclick] = ginput(2);plot(xclick,yclick,'r','LineWidth',4)% costruzione del segmento del profilodeltax = 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 profiloprofZ = interp2(X,Y,Z,profX,profY);end

123456789

101112131415161718

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

meshgridcoordinate

(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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Profilo topografico /9

% chiudi finestre aperte da vecchie figure% ed elimina eventuali variabili già esistenticlose allclear variables

% carica la topografia (X,Y,Z)load('DTM_esercizio3');

% chiamata alla funzione TracciaProfilo[profiloX,profiloY,profiloDist,profiloQuota] = ...

TracciaProfilo(X,Y,Z,5);

% figura: mappaAssiMappa = subplot(3,1,[1 2]);contourf(AssiMappa,X,Y,Z,25);hold on;plot(AssiMappa,profiloX,profiloY,'r','LineWidth',4);

% figura: profiloAssiProfilo = 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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Profilo topografico /10

% chiudi finestre aperte da vecchie figure% ed elimina eventuali variabili già esistenticlose allclear variables

% carica la topografia (X,Y,Z)load('DTM_esercizio3');

% chiamata alla funzione TracciaProfilo[profiloX,profiloY,profiloDist,profiloQuota] = ...

TracciaProfilo(X,Y,Z,5);

% figura: mappaAssiMappa = subplot(3,1,[1 2]);contourf(AssiMappa,X,Y,Z,25);hold on;plot(AssiMappa,profiloX,profiloY,'r','LineWidth',4);

% figura: profiloAssiProfilo = subplot(3,1,3);plot(AssiProfilo,profiloDist,profiloQuota,'r');

Page 24: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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;minimi=find(and(detHess>0,gxx>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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Ricerca dei minimi locali /4

contourf(X,Y,Z,50);hold on;scatter(minimiX,minimiY,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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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)-finestrafmin = 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

endend[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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

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: Laboratorio Informatica LT 2019 2020 D - units.it€¦ · vy vl]h y ordg '70bruwrpbuhjbuhjulg pb:*6 b+' pdw qxp vwu frqyhuwh l qxphul lq vwulqjkh dowulphqwl od frqfdwhqd]lrqh gl vwulqjkh

Curva ipsometricae istogramma quota doline

for i=1:length(U)dolineZ(i)=Z(U(i),V(i));

endnb = 50; % numero intervalliintervalli = linspace(min(Z(:)),max(Z(:)),nb);subplot(2,1,1);histogram(Z,intervalli,'Normalization','probability');subplot(2,1,2);histogram(dolineZ,intervalli,'Normalization','probability');