Sei sulla pagina 1di 58

UNIVERSITÀ DEGLI STUDI DI UDINE

Dipartimento Politecnico di Ingegneria e Architettura


Corso di Laurea Magistrale in Ingegneria Civile

Relazione Geomatica Ambientale

Esecitazioni sulle procedure Matlab e


GIS

Docente Studente
Prof. Alberto Beinat Fulvio Milocco 115290

ANNO ACCADEMICO 2016-2017


Indice

Introduzione 1

1 Laboratorio MATLAB 3
1.1 Modelli digitali del terreno . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Caricamento di un file DTM . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 Creazione di un file DTM da CTR . . . . . . . . . . . . . . . . . . . 5
1.1.3 Cambio di coordinate . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1.4 Stima di parametri morfologici . . . . . . . . . . . . . . . . . . . . . 13
1.2 Elaborazione immagini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.2.1 Caricare file immagine . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.2.2 Applicazione di filtri digitali . . . . . . . . . . . . . . . . . . . . . . . 24
1.2.3 Algebra delle bande . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.2.4 Classificazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.2.5 Decorrelation Stretch . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.2.6 Cropping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

2 Laboratorio GIS 43
2.1 Georefenziazione di un immagine raster . . . . . . . . . . . . . . . . . . . . 45
2.2 Elaborazione di buffering e map overlay . . . . . . . . . . . . . . . . . . . . 48
2.3 Analisi di rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

iii
Introduzione

A seguito delle esercitazioni eseguite su Matlab e Qgis durante il corso, si procede con la
realizzazione della presente relazione con lo scopo di raccogliere tutte le procedure e le
funzioni elaborate. Per quanto riguarda le esercitazioni su Matlab, si inizia con l’elabo-
razione di modelli digitali del terreno, dal semplice caricamento all’interno del software
alla creazione di un modello partendo dalla cartografia tecnica delle regioni Friuli Venezia
Giulia e Veneto. Si elaborano quindi delle procedure sia per la lettura di file “.fcn” sia di
file “.dxf”. Si risolve poi il problema della trasformazione delle coordinate da fuso ovest
a fuso est di coordinate in Gauss-Boaga, che verrà risolto passando prima in coordinate
geografiche e poi di nuovo in coordinate UTM.
Successivamente vengono elaborati dei listati per ricavare alcuni parametri morfologici sui
modelli digitali del terreno, come la carta delle pendenze, l’ombreggiatura, l’insolazione
etc. La seconda parte delle esercitazioni in Matlab è invece dedicata all’elaborazioni delle
immagini. Dopo il caricamento delle stesse nell’ambiente di calcolo con un’analisi delle
bande RGB, si procede con lo sviluppo del codice di alcuni filtri da applicare alle immagini.
Per quanto riguarda invece le esercitazioni con il software Qgis, si parte dai dati vettoriali
scaricabili gratuitamente dal sito della cartografia regionale del Friuli Venezia Giulia. La
prima esercitazione ha il fine di calcolare il numero di civici interessati in una determinata
area, mentre la seconda ha il fine di calcolare l’ottimizzazione di un percorso di minimo
tra due punti sulla mappa.
Infine nell’appendice si può trovare una lista (non completa) di tutte le funzioni utilizzate
nella relazioni, con una breve descrizione del loro significato e della loro funzionalità.

1
Capitolo 1

Laboratorio MATLAB

1.1 Modelli digitali del terreno


1.1.1 Caricamento di un file DTM
In prima battuta si procede al caricamento di un file DTM di tipo grid in Matlab. I file
forniti dalla regione sono in formato “.asc” e una preliminare analisi del file tramite un
editor di testo permette di ricavare delle preziose informazioni come il numero di righe,
di colonne, la dimensione in metri delle celle e il valore che viene assegnato per l’assenza
di informazione (fig. 1.1). Risultato del caricamento su matlab e visualizzazione nel suo
ambiente grafico, in fig. 1.3.

Figura 1.1: Analisi preliminare di un file “.asc”.

1 % Questo script carica un DTM in formato ASCII GRID


2 % Autore : Fulvio Milocco
3 clc
4 disp ( ’ Questo script carica un DTM in formato ASCII GRID ’) ;
5 % Chiedi il nome del file %

3
4 CAPITOLO 1. LABORATORIO MATLAB

6 [ nomefile , percorso ]= uigetfile ( ’ *. asc ; *. txt ’ , ’ Seleziona il file DTM ’) ;


7 % string concatenate , prima il percorso poi il nome file
8 nomecompleto = strcat ( percorso , nomefile ) ;
9 fid = fopen ( nomecompleto , ’r ’) ; % apre il fil di input
10 ncol = fscanf ( fid , ’ NCOLS % i ’) ; % leggi il numero intero che si trova dopo
NCOL
11 nrig = fscanf ( fid , ’\ nNROWS % i ’) ; % leggi il numero intero a riga nuova dopo
NROWS
12 cellsize = fscanf ( fid , ’\ nCELLSIZE % g ’) ; % a capo leggi dopo CELLSIZE , il
descrittore di campo lo mettiamo generico % g
13 xlowleft = fscanf ( fid , ’\ nXLLCENTER % g ’) ;
14 ylowleft = fscanf ( fid , ’\ nYLLCENTER % g ’) ;
15 nodata = fscanf ( fid , ’\ nNODATA_VALUE % g ’) ;
16 % leggi i dati del DTM , da riga nuova , tutti i numeri e li posizioniamo in
17 % un array di dimensione [ ncol , nrig ]
18 DTM = fscanf ( fid , ’\ n % g ’ , [ ncol , nrig ]) ;
19 DTM ( DTM == nodata ) = NaN ;
20 % i file DTM che stiamo caricando sono ruotati di 90 gradi
21 DTM = rot90 ( DTM ) ;

Figura 1.2: La funzione uigetfile ci permette di selezionare il file da aprire tramite


interfaccia grafica.
1.1. MODELLI DIGITALI DEL TERRENO 5

Figura 1.3: Esempio di DTM di tipo grid caricato su matlab.

1.1.2 Creazione di un file DTM da CTR


Si vuole ora procedere con la realizzazione di un codice per creare il DTM della zona della
diga del Vajont a cavallo tra le regioni Friuli Venezia Giulia e Veneto. In questo caso
ci si avvale della cartografia tecnica delle due regioni e delle informazioni in esse conte-
nute per creare dapprima un DTM a punti sparsi di tipo tin tramite la triangolazione
di delaunay e successivamente trasformarlo in un DTM di tipo grid, andando a definire
la griglia di riferimento. La precisione e la qualità dei dati ci permette di ricavare un
DTM molto dettagliato. Si sfrutta alla fine del listano la funzione dlmwrite per salvare
il DTM grigliato in un file di testo esterno (in formato “.asc” o “.txt”). Risultato in fig. 1.4.

1 A = dxf2dtm ;
2 E = A (: ,1) ;
3 N = A (: ,2) ;
4 [ lat , lon ]= gb2ell (N , E ) ;
5 [ NORD , EST ]= ell2gb ( lat , lon , ’ est ’) ;
6 Veneto1 =[ EST , NORD , A (: ,3) ];
7 A = dxf2dtm ;
8 E = A (: ,1) ;
9 N = A (: ,2) ;
10 [ lat , lon ]= gb2ell (N , E ) ;
11 [ NORD , EST ]= ell2gb ( lat , lon , ’ est ’) ;
12 Veneto2 =[ EST , NORD , A (: ,3) ];
13 A = dxf2dtm ;
14 E = A (: ,1) ;
15 N = A (: ,2) ;
16 [ lat , lon ]= gb2ell (N , E ) ;
17 [ NORD , EST ]= ell2gb ( lat , lon , ’ est ’) ;
18 Veneto3 =[ EST , NORD , A (: ,3) ];
19 FVG1 = fcn2dtm ;
20 FVG2 = fcn2dtm ;
6 CAPITOLO 1. LABORATORIO MATLAB

21
22 COORD =[ Veneto1 ; Veneto2 ; FVG1 ; FVG2 ];
23 COORD = unique ( COORD , ’ rows ’) ;
24 % TRIANGOLAZIONE
25
26 triangoli = delaunay ( COORD (: ,1) , COORD (: ,2) ) ;
27 h = trisurf ( triangoli , COORD (: ,1) , COORD (: ,2) , COORD (: ,3) ) ;
28
29 % DA TIN a GRIGLIA
30 % Interpolazione del TIN
31 % Devo definire la griglia
32 step =10;
33 minE =10*( round ( min ( COORD (: ,1) ) /10) ) - step ;
34 maxE =10*( round ( max ( COORD (: ,1) ) /10) ) + step ;
35 minN =10*( round ( min ( COORD (: ,2) ) /10) ) - step ;
36 maxN =10*( round ( max ( COORD (: ,2) ) /10) ) + step ;
37 txi = minE : step : maxE ; % crea vettore delle coordinate di
griglia est
38 tyi = minN : step : maxN ; % crea vettore delle coordinate di
griglia nord
39
40 [ qx , qy ]= meshgrid ( txi , tyi ) ; % qx e qy devono avere esse stesse delle
coordinate gb
41
42 DTM = griddata ( COORD (: ,1) , COORD (: ,2) , COORD (: ,3) ,qx , qy ) ;
43 figure ;
44 mesh ( DTM ) ;
45
46 % stampo su un file esterno
47 dlmwrite ( ’ Vajont . asc ’ , DTM )

Figura 1.4: DTM del vajont creato da cartografia tecnica regionale


1.1. MODELLI DIGITALI DEL TERRENO 7

Figura 1.5: DTM della zona del Vajont stampato su file “.asc”

Lettura di un file “.fcn” - funzione fcn2dtm

Analizzando un file “.fcn”, questo appare con una struttura di questo tipo:

...
1L000CDV 31473177 12537386 150000 32 IR
1L000CDV 31473220 12536909 150000 32 IR
1L000CDV 31473278 12536117 150000 32 IR
1L000CDV 31473325 12535216 150000 32 IR
1L000CDV 31473484 12534705 150000 32 IR
1L000CDV 31474010 12534401 150000 32 IR
1L000CDV 31474590 12534226 150000 32 IR
1L000CDV 31474969 12534000 150000 32 IR
1L000CDV 31475251 12533711 150000 32 IR
1L000CDV 31475890 12532213 150000 32 IR
1L000CDV 31476204 12531763 150000 32 IR
1L000CIV 31462708 12520907 151000 32 IR
1L000CIV 31462849 12521121 151000 32 IR
1L000CIV 31462970 12521347 151000 32 IR
1L000CIV 31463066 12521590 151000 32 IR
1L000CIV 31463078 12521701 151000 32 IR
1L000CIV 31463057 12521812 151000 32 IR
...
In cui noi siamo interessanti alle stringhe che hanno questa composizione:
Curva di livello intermedia:
1L000CIV 38882166 15768232 180500 22 IR
Curva di livello direttrice:
1L000CDV 38595137 15660144 185000 22 IR
Curva di livello ausiliaria:
1L000CAV 38577355 15673614 182500 21 IR
8 CAPITOLO 1. LABORATORIO MATLAB

Punto quotato di derivazione fotogrammetrica:


1P000PQV 38766830 15786086 156352 11 IR

1 function [ COORD ]= fcn2dtm


2 % Autore : Fulvio Milocco
3 clc
4 % sistema di riferimento ETRS89 / ETRS - TM33 ( EPSG :3045)
5 % Chiedi il nome del file %
6 [ nomefile , percorso ]= uigetfile ( ’ *. dat ’ , ’ Seleziona il file FCN ’) ;
7 % string concatenate , prima il percorso poi il nome file
8 nomecompleto = strcat ( percorso , nomefile ) ;
9 fid = fopen ( nomecompleto , ’r ’) ; % apre il fil di input
10 i =0;
11 while ~( feof ( fid ) )
12 txtl = fgetl ( fid ) ;
13 if ( strcmp ( txtl (1:2) , ’1 L ’) ==1 || strcmp ( txtl (1:2) , ’1 P ’) ==1 && strcmp (
txtl (6:7) , ’ CI ’) ==1 || strcmp ( txtl (6:7) , ’ CD ’) ==1 || strcmp ( txtl (6:7)
, ’ CA ’) ==1 || strcmp ( txtl (6:7) , ’ PQ ’) ==1)
14 i = i +1;
15 est = str2double (( txtl (10:17) ) ) ;
16 EST ( i ) = est /100+2 e6 ;
17 nord = str2double (( txtl (19:26) ) ) ;
18 NORD ( i ) = nord /100+5 e6 ;
19 Q ( i ) = str2double (( txtl (28:33) ) ) /100;
20 end
21 end
22 COORD =[ EST ; NORD ; Q ] ’;
23 COORD = unique ( COORD , ’ rows ’) ;
24 end
1.1. MODELLI DIGITALI DEL TERRENO 9

Lettura di un file “.dxf ” - funzione dxf2dtm

Per quanto riguarda un file “.dxf”, questo, aperto tramite un editor di testo e non su un
software CAD appare strutturato cosı̀:
...
AcDbVertex
100
AcDb3dPolylineVertex
10
1756147.741
20
5131363.453
30
1210.0
70
32
0
VERTEX
5
14D27C
330
14D258
100
AcDbEntity
8
10B2
100
AcDbVertex
100
AcDb3dPolylineVertex
10
1756142.718
20
5131368.182
30
1210.0
70
32
0
...
Noi siamo interessati a trovare i vertici tridimensionali delle polilinee di determinati layer
(10A1, 10B2 e 11B2) che si trovano all’interno della sezione “ENTITIES”.

1 function [ COORD ]= dxf2dtm


2 % Autore : Fulvio Milocco
3 clc
4 % sistema di riferimento ETRS89 / ETRS - TM33 ( EPSG :3045)
5 % Chiedi il nome del file %
6 [ nomefile , percorso ]= uigetfile ( ’ *. dxf ’ , ’ Seleziona il file di cartografia dxf
’) ;
10 CAPITOLO 1. LABORATORIO MATLAB

7 % string concatenate , prima il percorso poi il nome file


8 nomecompleto = strcat ( percorso , nomefile ) ;
9 fid = fopen ( nomecompleto , ’r ’) ; % apre il fil di input
10 dxfdata = textscan ( fid , ’% s ’) ; % leggere il file . dxf come una cella contenente
un array pieno di stringe di dati
11 fclose ( fid ) ; % close file to accelerate further computation
12 dxfdata = dxfdata {1 ,1}; % reshape array
13 % --------- trovo la sezione ENTITIES
14 inizio = strcmp ( ’ ENTITIES ’ , dxfdata ) ;
15 inizio = find ( inizio ==1) ;
16 % --------- trovo la fine della sezione ENTITIES
17 endsec = strcmp ( ’ ENDSEC ’ , dxfdata ) ;
18 endsec = find ( endsec ==1) ;
19 endsec = endsec ( endsec > inizio ) ;
20 endsec = endsec (1) ; % devo scegliere l ’ ENDSECTION successivo ad ENTITIES
21 dxfdata = dxfdata ( inizio : endsec ) ; % seleziono solo i dati contenuti nella
sezione ENTITIES
22 % -- -- --- --- cerco le polilinee
23 polilineetred = strcmp ( ’ AcDb3dPolyline ’ , dxfdata ) ;
24 polilineetred = find ( polilineetred ==1) ;
25 verticitred = strcmp ( ’ AcDb3dPolylineVertex ’ , dxfdata ) ;
26 verticitred = find ( verticitred ==1) ;
27 puntiquotati = strcmp ( ’ AcDbBlockReference ’ , dxfdata ) ;
28 puntiquotati = find ( puntiquotati ==1) ;
29 % ricavo le coordinate dei vertici che compongono le polilinee 3 d
30 for i =1: length ( verticitred )
31 if strcmp ( dxfdata ( verticitred ( i ) -4) , ’ 10 A1 ’) || strcmp ( dxfdata (
verticitred ( i ) -4) , ’ 10 B2 ’)
32 X ( i ) = str2double ( dxfdata ( verticitred ( i ) +2) ) ;
33 Y ( i ) = str2double ( dxfdata ( verticitred ( i ) +4) ) ;
34 Z ( i ) = str2double ( dxfdata ( verticitred ( i ) +6) ) ;
35 end
36 end
37 % ricavlo le coordinate dei punti quotati
38 for i =1: length ( puntiquotati )
39 if strcmp ( dxfdata ( puntiquotati ( i ) -2) , ’ 11 B2 ’)
40 x ( i ) = str2double ( dxfdata ( puntiquotati ( i ) +4) ) ;
41 y ( i ) = str2double ( dxfdata ( puntiquotati ( i ) +6) ) ;
42 z ( i ) = str2double ( dxfdata ( puntiquotati ( i ) +8) ) ;
43 end
44 end
45
46 COORD =[ X , x ;Y , y ;Z , z ] ’;
47 % nella matrice di coordinate metto insieme le coordinate dei punti quotati
a
48 % quelle dei vertici delle polilinee , tanto con la funzione unique vengono
49 % eliminati eventuali doppioni e viene eseguito anche il sorting .
50 COORD = unique ( COORD , ’ rows ’) ;
51 COORD = COORD (2: end ,:) ; % altrimenti viene una riga iniziale di coordinate
zero .
52 end

1.1.3 Cambio di coordinate


Uno dei maggiori problemi della cartografia italiana di Gauss-Boaga consiste nel fatto che
per alcune zone la proiezione faccia riferimento a fusi UTM differenti. Ne sono da esempio
i fogli cartografici delle Regioni Veneto e Friuli-Venezia Giulia. La cartografia del Veneto
fa riferimento al fuso Ovest (nazionale) corrispondente al meridiano 9° della suddivisione
1.1. MODELLI DIGITALI DEL TERRENO 11

UTM. Il Friuli, invece, come cartografia fa riferimento al fuso Est corrispondente al meri-
diano 15° della suddivisione UTM. Risulta quindi necessario fare un cambio di coordinate.
Per fare questa operazione è necessario fare una prima conversione da coordinate UTM
Gauss-Boaga del fuso Ovest a coordinate elissoidiche e successivamente riconvertire le
coordinate elissoidiche in coordinate UTM Gauss-Boaga sul fuso Est.
Per questa operazione ci serviamo di un codice di trasformazione già pronto, modificato
per il caso specificio.

Trasformazione da coordinate Gauss-Boaga a elissoidiche


Con la successiva funzione possiamo traformare delle coordinate di un punto in cartografia
UTM a un punto di coordinate elissoidiche

1 function [ lat , lon ]= gb2ell (N , E )


2 % ----- Elissoide di Heyford ( Internazione 1924)
3 a =6378388.00; % Semiasse maggiore elissoide di Heyford
4 b =6356911.946; % Semiasse inferiore elissoide di Heyford
5 e2 =1 -( b ^2) /( a ^2) ;
6 ko =0.9996; % UTM scale factor
7
8 % ----- Remove false northings and eastings
9 No = zeros ( size ( N ) ) ; % False northing ( north )
10 if E <2 e6 % siamo in fuso 1
11 Eo =1500000; % False easting
12 lcm =9* pi /180; % Meridiano centrale del fuso , convertito in radianti
13 else % siamo in fuso 2
14 Eo =2520000; % False easting
15 lcm =15* pi /180; % Meridiano centrale del fuso , convertito in radianti
16 end
17 N =N - No ;
18 E =E - Eo ;
19
20 % ----- Foot point latitude
21
22 lat1 = N / ko / a ;
23 dlat =1;
24 while max ( abs ( dlat ) ) >1e -12
25 % ----- Krakiwsky (1973) expansion
26 A0 =1 -( e2 /4) -( e2 ^2*3/64) -( e2 ^3*5/256) -( e2 ^4*175/16384) ;
27 A2 =(3/8) *( e2 +( e2 ^2/4) +( e2 ^3*15/128) -( e2 ^4*455/4096) ) ;
28 A4 =(15/256) *( e2 ^2+( e2 ^3*3/4) -( e2 ^4*77/128) ) ;
29 A6 =(35/3072) *( e2 ^3 -( e2 ^4*41/32) ) ;
30 A8 = -(315/131072) * e2 ^4;
31 f1 = a *( A0 * lat1 - A2 * sin (2* lat1 ) + A4 * sin (4* lat1 ) - A6 * sin (6* lat1 ) + A8 * sin (8* lat1
) ) - ...
32 N / ko ;
33 f2 = a *( A0 -2* A2 * cos (2* lat1 ) +4* A4 * cos (4* lat1 ) -6* A6 * cos (6* lat1 ) +8* A8 * cos (8*
lat1 ) ) ;
34
35 dlat = - f1 ./ f2 ;
36 lat1 = lat1 + dlat ;
37 % disp ([ ’ dlat = ’, num2str ( dlat ) ]) ;
38 end
39
40 RN = a ./(1 - e2 * sin ( lat1 ) .^2) .^0.5;
41 RM = a *(1 - e2 ) ./(1 - e2 * sin ( lat1 ) .^2) .^1.5;
42 h2 = e2 * cos ( lat1 ) .^2/(1 - e2 ) ;
12 CAPITOLO 1. LABORATORIO MATLAB

43 t = tan ( lat1 ) ;
44
45 E0 = E / ko ./ RN ;
46 E1 = E0 ;
47 E2 = E0 .^3/6.*(1+2* t .^2+ h2 ) ;
48 E3 = E0 .^5/120.*(5+6* h2 +28* t .^2 -3* h2 .^2+8* t .^2.* h2 +24* t .^4 - ...
49 4* h2 .^3+4* t .^2.* h2 .^2+24* t .^2.* h2 .^3) ;
50 E4 = E0 .^7/5040.*(61 + 662* t .^2 + 1320* t .^4 + 720* t .^6) ;
51 lon = sec ( lat1 ) .*( E1 - E2 + E3 - E4 ) + lcm ;
52
53 E0 = E / ko ;
54 N1 =( t .* E0 .^2) ./(2* RM .* RN ) ;
55 N2 =( t .* E0 .^4) ./(24* RM .* RN .^3) .*(5+3.* t .^2+ h2 -4* h2 .^2 -9* h2 .* t .^2) ;
56 N3 =( t .* E0 .^6) ./(720* RM .* RN .^5) .*(61 -90* t .^2+46* h2 +45* t .^4 -252* t .^2.* h2 - ...
57 5* h2 .^2+100* h2 .^3 -66* t .^2.* h2 .^2 -90* t .^4.* h2 +88* h2 .^4+225* t .^4.* h2 .^2+
...
58 84* t .^2.* h2 .^3 - 192* t .^2.* h2 .^4) ;
59 N4 =( t .* E0 .^8) ./(40320* RM .* RN .^7) .*(1385+3633* t .^2+4095* t .^4+1575* t .^6) ;
60 lat = lat1 - N1 + N2 - N3 + N4 ;

Trasformazione da coordinate elissoidiche a Gauss-Boaga


Con la successiva funzione possiamo traformare delle coordinate di un punto in coordinate
elissoidiche a un punto in un determinato fuso di cartografia UTM (Gauss-Boaga)

1 function [N , E ]= ell2gb ( lat , lon , fuso )


2 a =6378388.00; % Semiasse maggiore elissoide di Heyford
3 b =6356911.946; % Semiasse inferiore elissoide di Heyford
4 e2 =1 -( b ^2) /( a ^2) ;
5 ko =0.9996; % Fattore di scala globale ( o all ’ origine )
6 No = zeros ( size ( lat ) ) ; % False northing ( north )
7 if strcmpi ( fuso , ’ EST ’)
8 Eo =2520000; % Falsa origine est
9 lcm =15* pi /180; % Meridiano centrale del fuso , convertito in radianti
10 elseif strcmpi ( fuso , ’ OVEST ’)
11 Eo =1500000; % Falsa origine ovest
12 lcm =9* pi /180; % Meridiano centrale del fuso , convertito in radianti
13 end
14
15 lam = lon - lcm ;
16 lam = lam -( lam >= pi ) *(2* pi ) ;
17
18 RN = a ./(1 - e2 * sin ( lat ) .^2) .^0.5;
19 RM = a *(1 - e2 ) ./(1 - e2 * sin ( lat ) .^2) .^1.5;
20 h2 = e2 * cos ( lat ) .^2/(1 - e2 ) ;
21 t = tan ( lat ) ;
22 f =1 - sqrt (1 - e2 ) ;
23 n = f /(2 - f ) ;
24
25 % ----- Helmert (1880) expansion & simplification of Bessel series ( faster )
26 A0 =1+ n ^2/4+ n ^4/64;
27 A2 =3/2*( n - n ^3/8) ;
28 A4 =15/16*( n ^2 - n ^4/4) ;
29 A6 =35/48* n ^3;
30 A8 =315/512* n ^4;
31 S = a /(1+ n ) *( A0 * lat - A2 * sin (2* lat ) + A4 * sin (4* lat ) - A6 * sin (6* lat ) + A8 * sin (8* lat ) ) ;
32
33 E1 = lam .* cos ( lat ) ;
1.1. MODELLI DIGITALI DEL TERRENO 13

34 E2 = lam .^3.* cos ( lat ) .^3/6.*(1 - t .^2+ h2 ) ;


35 E3 = lam .^5.* cos ( lat ) .^5/120.*(5 -18* t .^2+ t .^4+14* h2 -58* t .^2.* h2 + ...
36 13* h2 .^2+4* h2 .^3 -64* t .^2.* h2 .^2 -24* t .^2.* h2 .^3) ;
37 E4 = lam .^7.* cos ( lat ) .^7/5040.*(61 -479* t .^2+179* t .^4 - t .^6) ;
38 E = Eo + ko * RN .*( E1 + E2 + E3 + E4 ) ;
39
40 N1 = S ./ RN ;
41 N2 = lam .^2/2.* sin ( lat ) .* cos ( lat ) ;
42 N3 = lam .^4/24.* sin ( lat ) .* cos ( lat ) .^3.*(5 - t .^2+9* h2 +4* h2 .^2) ;
43 N4 = lam .^6/720.* sin ( lat ) .* cos ( lat ) .^5.*(61 -58* t .^2+ t .^4+ ...
44 270* h2 -330* t .^2.* h2 +445* h2 .^2+324* h2 .^3 -680* t .^2.* h2 .^2+ ...
45 88* h2 .^4 -600* t .^2.* h2 .^3 -192* t .^2.* h2 .^4) ;
46 N5 = lam .^8/40320.* sin ( lat ) .* cos ( lat ) .^7.*(1385 -311* t .^2+543* t .^4 - t .^6) ;
47 N = No + ko * RN .*( N1 + N2 + N3 + N4 + N5 ) ;

1.1.4 Stima di parametri morfologici


Sono state create delle apposite funzioni per determinare, partendo da un dtm alcuni
parametri geomorfologici come: la carta delle pendenze, l’insolazione, l’ombreggiatura e
il wetness index. Per quanto riguarda riguarda la carta delle pendenze, questa è stata
calcolata con vari metodi, per brevità si riportano a titolo d’esempio i risultati ottenuti
sul file DTM grid della regione descritto precedentemente.
La carta delle pendenze è stata calcolata con vari metodi tra loro simili, che si basano
sul concetto di finestra mobile di dimensione 3x3, in cui localmente si va a calcolare il
valore delle pendenza per la cella centrale. Questa metodologia di calcolo porta a non
avere dei risultati nei bordi della carta, a cui vengono assegnati dei valori “NaN” ovvero
Not a Number.

Carta delle pendenze - metodo dell’intorno


La seguente procedura permette, dato un DTM di tipo grid di ricavare la carta delle
pendenze con il metodo dell’intorno. Risultato in fig. 1.6.

1 function [ P ]= metodointorno ( DTM , nrig , ncol , cellsize )


2 P = zeros ( size ( DTM ) ) ;
3 for i =2: nrig -1
4 for j =2: ncol -1
5 % calcolo dei gradienti con il metodo dell ’ intorno
6 gradh1 =( DTM (i -1 ,j -1) +2* DTM (i -1 , j ) + DTM (i -1 , j +1) ) ;
7 gradh2 =( DTM ( i +1 ,j -1) +2* DTM ( i +1 , j ) + DTM ( i +1 , j +1) ) ;
8 gradv1 =( DTM (i -1 , j +1) +2* DTM (i , j +1) + DTM ( i +1 , j +1) ) ;
9 gradv2 =( DTM (i -1 ,j -1) +2* DTM (i ,j -1) + DTM ( i +1 ,j -1) ) ;
10 % gradv = gradiente NS ; gradh = gradiente EO
11 gradv =( gradv1 - gradv2 ) /(4*2.* cellsize ) ;
12 gradh =( gradh1 - gradh2 ) /(4*2.* cellsize ) ;
13 P (i , j ) =100*( sqrt (( gradv ) ^2 +( gradh ) ^2) ) ;
14 end
15 end
16 end
14 CAPITOLO 1. LABORATORIO MATLAB

Figura 1.6: Carta delle pendenze realizzata con il metodo dell’intorno su DTM.

Carta delle pendenze - metodo di Zevenbergen e Thorne


La seguente procedura permette, dato un DTM di tipo grid di ricavare la carta delle
pendenze con il metodo di Zevenbergen e Thorne. Risultato in fig. 1.7.

1 function [ P ]= metodoZT ( DTM , nrig , ncol , cellsize )


2 P = zeros ( nrig , ncol ) ;
3 for i =2: nrig -1
4 for j =2: ncol -1
5 g =( DTM (i , j +1) - DTM (i ,j -1) ) ;
6 h =( DTM (i -1 , j ) - DTM ( i +1 , j ) ) ;
7 G = g /(2.* cellsize ) ;
8 H = h /(2.* cellsize ) ;
9 P (i , j ) =100*( sqrt (( G ^2+ H ^2) ) ) ;
10 end
11 end
12 figure (3) ;
13 end
1.1. MODELLI DIGITALI DEL TERRENO 15

Figura 1.7: Carta delle pendenze realizzata con il metodo di Zevenbergen e Thorne su
DTM.

Carta delle pendenze - metodo della massima pendenza


La seguente procedura permette, dato un DTM di tipo grid di ricavare la carta delle
pendenze con il metodo della massima pendenza. Risultato in fig. 1.8.

1 function [ P ]= metodomaxpendenza ( DTM , nrig , ncol , cellsize )


2 P = zeros ( size ( DTM ) ) ;
3 for i =2: nrig -1
4 for j =2: ncol -1
5 z1 = abs ( DTM (i , j ) - DTM (i -1 ,j -1) ) /( sqrt (2) * cellsize ) ;
6 z2 = abs ( DTM (i , j ) - DTM (i -1 , j ) ) /( cellsize ) ;
7 z3 = abs ( DTM (i , j ) - DTM (i -1 , j +1) ) /( sqrt (2) * cellsize ) ;
8 z4 = abs ( DTM (i , j ) - DTM (i , j +1) ) /( cellsize ) ;
9 z5 = abs ( DTM (i , j ) - DTM ( i +1 , j +1) ) /( sqrt (2) * cellsize ) ;
10 z6 = abs ( DTM (i , j ) - DTM ( i +1 , j ) ) /( cellsize ) ;
11 z7 = abs ( DTM (i , j ) - DTM ( i +1 ,j -1) ) /( sqrt (2) * cellsize ) ;
12 z8 = abs ( DTM (i , j ) - DTM (i ,j -1) ) /( cellsize ) ;
13 Z =[ z1 , z2 , z3 , z4 , z5 , z6 , z7 , z8 ];
14 Zmax = max ( Z ) ;
15 P (i , j ) =100* Zmax ;
16 end
17 end
16 CAPITOLO 1. LABORATORIO MATLAB

Figura 1.8: Carta delle pendenze realizzata con il metodo della massima pendenza su
DTM.

Carta delle pendenze - metodo del piano interpolante


La seguente procedura permette, dato un DTM di tipo grid di ricavare la carta delle
pendenze con il metodo della superficie quadratica. Risultato in fig. 1.9.

1 function [ P ]= pianointerpolante ( DTM , nrig , ncol , cellsize )


2 Emax = zeros ( size ( DTM ) ) ;
3 AT = zeros ( size ( DTM ) ) ;
4 Num = zeros ( size ( DTM ) ) ;
5 for i =2: nrig -1
6 for j =2: ncol -1
7 e1 =(3* DTM (i -1 ,j -1) + DTM (i -1 , j +1) - DTM ( i +1 , j +1) + DTM ( i +1 ,j -1) ) /4;
8 e2 =( DTM (i -1 ,j -1) +3* DTM (i -1 , j +1) + DTM ( i +1 , j +1) - DTM ( i +1 ,j -1) ) /4;
9 e3 =( - DTM (i -1 ,j -1) + DTM (i -1 , j +1) +3* DTM ( i +1 , j +1) + DTM ( i +1 ,j -1) ) /4;
10 e4 =( DTM (i -1 ,j -1) - DTM (i -1 , j +1) + DTM ( i +1 , j +1) +3* DTM ( i +1 ,j -1) ) /4;
11 E =[ e1 , e2 , e3 , e4 ];
12 Emax (i , j ) = max ( E ) ;
13
14 if Emax (i , j ) == e1
15 AT (i , j ) =(( e2 - e3 ) /( e1 - e2 ) ) ;
16 elseif Emax (i , j ) == e2
17 AT (i , j ) =(( e3 - e4 ) /( e2 - e3 ) ) ;
18 elseif Emax (i , j ) == e3
19 AT (i , j ) =(( e4 - e1 ) /( e3 - e4 ) ) ;
20 elseif Emax (i , j ) == e4
21 AT (i , j ) =(( e1 - e2 ) /( e4 - e1 ) ) ;
22 end
23 Slen =2* cellsize *( sqrt (1+( AT .* AT ) ) ) ;
24 % ciclo per determinare il numeratore di S9 ( pendenza )
1.1. MODELLI DIGITALI DEL TERRENO 17

25 if Emax (i , j ) == e1
26 Num (i , j ) =( e1 - e3 ) ;
27 elseif Emax (i , j ) == e2
28 Num (i , j ) =( e2 - e4 ) ;
29 elseif Emax (i , j ) == e3
30 Num (i , j ) =( e3 - e1 ) ;
31 elseif Emax (i , j ) == e4
32 Num (i , j ) =( e4 - e2 ) ;
33 end
34 end
35 end
36 % serve una moltiplicazione per 100 ( alla formula sulle slide ) altrimenti i
valori sono scalati .
37 P =100*( Num ./ Slen ) .* AT ;
38 end

Figura 1.9: Carta delle pendenze realizzata con il metodo del piano interpolante su
DTM.
18 CAPITOLO 1. LABORATORIO MATLAB

Carta delle pendenze - metodo della superficie quadratica (esteso), Evens &
Young.
La seguente procedura permette, dato un DTM di tipo grid di ricavare la carta delle
pendenze con il metodo della superficie quadratica. Risultato in fig. 1.10.

1 function [ P ]= metodoEY ( DTM , nrig , ncol , cellsize )


2 P = zeros ( nrig , ncol ) ;
3 for i =2: nrig -1
4 for j =2: ncol -1
5 g_ey =( DTM ( i +1 , j +1) + DTM (i , j +1) + DTM ( i +1 , j +1) - DTM (i -1 ,j -1) - DTM ( i +1 ,j -1) - DTM (i ,
j -1) ) ;
6 h_ey =( DTM (i -1 ,j -1) + DTM (i -1 , j ) + DTM (i -1 , j +1) - DTM ( i +1 , j +1) - DTM ( i +1 , j ) - DTM ( i +1 ,
j -1) ) ;
7 G_ey = g_ey /(6.* cellsize ) ;
8 H_ey = h_ey /(6.* cellsize ) ;
9 P (i , j ) =100*( sqrt (( G_ey ^2+ H_ey ^2) ) ) ;
10 end
11 end
12 end

Figura 1.10: Carta delle pendenze realizzata con il metodo della superficie quadratica
su DTM.
1.1. MODELLI DIGITALI DEL TERRENO 19

Osservazioni sulle carte delle pendenze


Si può osservare come i risultati ottenuti non siano tra loro congruenti, in effetti come si
vede in fig. 1.11 le differenze tra i vari metodi sono abbastanza rilevanti. Il metodo che si
discosta di più dalla normale sembra essere il metodo della massima pendenza.

Figura 1.11: Differenze tra le diverse metolodogie di calcolo della carta delle pendenze.
P1: metodo intorno; P2: metodo di Zevenbergen e Thorne; P3: metodo massima pendenza
P4: metodo piano interpolante; P5: metodo superficie quadratica.

Insolazione - SINS

1 % Questa funzione permette di calcolare il parametro dell ’ insolazione , dato


2 % un DTM
3 function [ S ]= insolazione ( DTM , nrig , ncol , cellsize )
4 FEXP = zeros ( size ( DTM ) ) ;
5 S = zeros ( size ( DTM ) ) ;
6 Densins = zeros ( size ( DTM ) ) ;
7 Numsins = zeros ( size ( DTM ) ) ;
8 beta =[3* pi /4 , 5* pi /6 , pi , 7* pi /6 , 5* pi /4];
9 for i =2: nrig -1
10 for j =2: ncol -1
11 g_ey =( DTM ( i +1 , j +1) + DTM (i , j +1) + DTM ( i +1 , j +1) - DTM (i -1 ,j -1) - DTM ( i +1 ,j -1) - DTM (i ,
j -1) ) ;
12 h_ey =( DTM (i -1 ,j -1) + DTM (i -1 , j ) + DTM (i -1 , j +1) - DTM ( i +1 , j +1) - DTM ( i +1 , j ) - DTM ( i +1 ,
j -1) ) ;
13 G_ey = g_ey /(6.* cellsize ) ;
14 H_ey = h_ey /(6.* cellsize ) ;
15 FEXP (i , j ) = cos ( pi /4) -( sin ( pi /4) * G_ey * sin ( beta (3) ) + H_ey * cos ( beta (3) ) ) ;
16 Densins (i , j ) =1+( G_ey ) ^2+( H_ey ) ^2;
20 CAPITOLO 1. LABORATORIO MATLAB

17 Numsins (i , j ) =1+( sign ( FEXP (i , j ) ) .* FEXP (i , j ) ) ;


18 S =(50* Numsins ) ./( Densins ) ;
19 end
20 end
21 end

Figura 1.12: Parametro dell’insolazione su DTM.

Figura 1.13: Parametro dell’insolazione.

Ombreggiatura

1 % Questa funzione permette di calcolare il parametro dell ’ ombreggiatura ,


dato
2 % un DTM
3 function [ R ]= ombreggiatura ( DTM , nrig , ncol , cellsize )
4 Iv = zeros ( size ( DTM ) ) ;
5 Ih = zeros ( size ( DTM ) ) ;
6 NumR = zeros ( size ( DTM ) ) ;
7 DenR = zeros ( size ( DTM ) ) ;
8 for i =2: nrig -1
1.1. MODELLI DIGITALI DEL TERRENO 21

9 for j =2: ncol -1


10 % calcolo dei gradienti
11 gradv1 =( DTM (i -1 , j +1) +2* DTM (i , j +1) + DTM ( i +1 , j +1) ) ;
12 gradv2 =( DTM (i -1 ,j -1) +2* DTM (i ,j -1) + DTM ( i +1 ,j -1) ) ;
13 gradv =( gradv1 - gradv2 ) /(4*2* cellsize ) ;
14 gradh1 =( DTM (i -1 ,j -1) +2* DTM (i -1 , j ) + DTM (i -1 , j +1) ) ;
15 gradh2 =( DTM ( i +1 ,j -1) +2* DTM ( i +1 , j ) + DTM ( i +1 , j +1) ) ;
16 gradh =( gradh1 - gradh2 ) /(4*2* cellsize ) ;
17 % si scelgono angoli casuali ma significativi
18 Ih = - cos ( pi /4) * tan ( pi /3) ;
19 Iv = - sin ( pi /4) * tan ( pi /3) ;
20 NumR (i , j ) =1+ gradh .* Ih + gradv .* Iv ;
21 DenR (i , j ) = sqrt (1+ Ih .* Ih + Iv .* Iv ) + sqrt (1+ gradh .* gradh + gradv .* gradv ) ;
22 R =256*( NumR ./ DenR ) ;
23 end
24 end
25 end

Figura 1.14: Parametro dell’ombreggiatura.

Wetness index
Il wetness index è comunemente usato per quantificare il controllo topografico sui processi
idrologici, basandosi sul concetto di “run off area” si può dire che simula il deflusso dell’ac-
qua dal punto più alto a valle. Il modello presenta alcune limitazioni, come ad esempio
i punti di accumulo che vengono a formarsi e in cui si ha una convergenza numerica che
però non ha un vero e proprio riscontro fisico (fig. 1.15).

1 % Wetness index
2 function [ WI ]= W ( DTM )
3 Af = runoffarea ( DTM ) ;
4 W = log (( Af ./ P1 ) ) ;
5 W ( W == inf ) =0;
6 end

in cui la funzione runoffarea è definita come:

1 function [ ROA ]= runoffarea ( DTM )


2 [ nr , nc ]= size ( DTM ) ;
22 CAPITOLO 1. LABORATORIO MATLAB

3 ROA = ones ( nr , nc ) ;
4 DTMROA = DTM ;
5 DTMROA (1 ,:) = NaN ; DTMROA ( nr ,:) = NaN ; DTMROA (: ,1) = NaN ; DTMROA (: , nc ) = NaN ;
6 for k =1: nr * nc
7 [ massimo , ind ]= max ( DTMROA (:) ) ;
8 [ rmax , cmax ]= ind2sub ( size ( DTMROA ) , ind ) ;
9 sogliaROA = max ( max ( DTM ) ) ;
10 % ora faccio questo ciclo if altrimenti errore *
11 % * Attempted to access DTMROA (0 ,0) ; index must be a positive integer or
logical .
12 if rmax ==1|| cmax ==1|| rmax == nr || cmax == nc
13 break
14 end
15 for p =( rmax -1) :( rmax +1)
16 for q =( cmax -1) :( cmax +1)
17 if DTMROA (p , q ) < sogliaROA
18 sogliaROA = DTMROA (p , q ) ;
19 a=p;
20 b=q;
21 end
22 end
23 end
24 ROA (a , b ) = ROA (a , b ) + ROA ( rmax , cmax ) ;
25 DTMROA ( rmax , cmax ) = NaN ;
26 end
27 end

Figura 1.15: Parametro del wetness index su DTM

Aspect

Risultato in fig. 1.16

1 function [ A ]= aspect ( DTM , nrig , ncol , cellsize )


2 A = zeros ( nrig , ncol ) ;
3 for i =2: nrig -1
4 for j =2: ncol -1
5 g_ey =( DTM ( i +1 , j +1) + DTM (i , j +1) + DTM ( i +1 , j +1) - DTM (i -1 ,j -1) - DTM ( i +1 ,j -1) - DTM (i ,
j -1) ) ;
1.1. MODELLI DIGITALI DEL TERRENO 23

6 h_ey =( DTM (i -1 ,j -1) + DTM (i -1 , j ) + DTM (i -1 , j +1) - DTM ( i +1 , j +1) - DTM ( i +1 , j ) - DTM ( i +1 ,
j -1) ) ;
7 G_ey = g_ey /(6.* cellsize ) ;
8 H_ey = h_ey /(6.* cellsize ) ;
9 A (i , j ) = atan (( H_ey / G_ey ) ) ;
10 end
11 end
12 end

Figura 1.16: Parametro aspect su DTM


24 CAPITOLO 1. LABORATORIO MATLAB

1.2 Elaborazione immagini


1.2.1 Caricare file immagine
Per leggere un immagine raster e caricarla in matlab si usa la funzione imread, si può suc-
cessivamente suddividere in matrici diverse i valori relativi alle tre bande R-G-B. Col se-
guente codice si può caricare un immagine su matlab, e fare alcune operazioni di base come
suddividere un’immagine nelle varie bande cromatiche, oppure ricavare la corrispondente
immagine in bianco e nero con il suo istogramma di frequenze.

1 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ Seleziona il file immagine ’) ;


2 A = imread ( strcat ( percorso , nomefile ) ) ;
3 Ared = A (: ,: ,1) ;
4 Agreen = A (: ,: ,2) ;
5 Ablue = A (: ,: ,3) ;
6 Abn = rgb2gray ( A ) ;
7 Abn2 =0.2989* Ared +0.5870* Agreen +0.1140* Ablue ;
8 AR = A ;
9 AR (: ,: ,2:3) =0; % per visualizzare ad esempio solo la banda rossa , prendo l ’
immagine originale
10 % copiata e gli tolgo le bande blue e verdi
11 imhist ( Abn ) ; % istogramma di frequenza

(a) Immagine in bianco nero. (b) Istogramma di frequenza.

1.2.2 Applicazione di filtri digitali


Di seguito si riportano i codice dei filtri, risultati nelle figure successive.

1 function [ F ]= filtroaltoguadagno ( I )
2 % [ nomefile , percorso ]= uigetfile ( ’*. jpg ; *. TIF ’ , ’ Selezionare il file
immagine ’) ;
3 % I = imread ( strcat ( percorso , nomefile ) ) ;
4 I = double ( I ) ;
5 prompt = ’ specificare un valore di k : ’;
6 k = input ( prompt ) ;
7 P =(1/9) *[ -k , -k , - k ; -k ,8* k +9 , - k ; -k , -k , - k ];
8 [ nr , nc , nb ]= size ( I ) ;
9 F=I;
10 for h =1: nb
11 for i =3: nr -2
1.2. ELABORAZIONE IMMAGINI 25

12 for j =3: nc -2
13 Im = I (i -1: i +1 ,j -1: j +1 , h ) ;
14 F (i ,j , h ) = sum ( sum ( P .* Im ) ) ;
15 end
16 end
17 end
18 F = uint8 ( F ) ;
19 I = uint8 ( I ) ;
20 % figure ;
21 % subplot (1 ,2 ,1) ;
22 % imshow ( I ) ;
23 % title ( ’ Immagine originale ’)
24 % subplot (1 ,2 ,2) ;
25 % imshow ( F ) ;
26 % title ( ’ Immagine modificata ’)
27 end

1 function [ F ] = filtrodilatazione ( I )
2 % [ nomefile , percorso ]= uigetfile ( ’*. jpg ; *. TIF ’ , ’ Selezionare il file
immagine ’) ;
3 % I = imread ( strcat ( percorso , nomefile ) ) ;
4 I = double ( I ) ;
5 [ nr , nc , nb ]= size ( I ) ;
6 F=I;
7 for h =1: nb
8 for i =2: nr -1
9 for j =2: nc -1
10 Im = I (i -1: i +1 ,j -1: j +1 , h ) ;
11 F (i ,j , h ) = max ( Im (:) ) ;
12 end
13 end
14 end
15 F = uint8 ( F ) ;
16 I = uint8 ( I ) ;
17 % figure ;
18 % subplot (1 ,2 ,1) ;
19 % imshow ( I ) ;
20 % title ( ’ Immagine originale ’)
21 % subplot (1 ,2 ,2) ;
22 % imshow ( F ) ;
23 % title ( ’ Immagine modificata ’)
24 end

1 function [ F ] = filtroerosione ( I )
2 % [ nomefile , percorso ]= uigetfile ( ’*. jpg ; *. TIF ’ , ’ Selezionare il file
immagine ’) ;
3 % I = imread ( strcat ( percorso , nomefile ) ) ;
4 I = double ( I ) ;
5 [ nr , nc , nb ]= size ( I ) ;
6 F=I;
7 for h =1: nb
8 for i =2: nr -1
9 for j =2: nc -1
10 Im = I (i -1: i +1 ,j -1: j +1 , h ) ;
11 F (i ,j , h ) = min ( Im (:) ) ;
12 end
13 end
14 end
26 CAPITOLO 1. LABORATORIO MATLAB

15 F = uint8 ( F ) ;
16 I = uint8 ( I ) ;
17 % figure ;
18 % subplot (1 ,2 ,1) ;
19 % imshow ( I ) ;
20 % title ( ’ Immagine originale ’)
21 % subplot (1 ,2 ,2) ;
22 % imshow ( F ) ;
23 % title ( ’ Immagine modificata ’)
24 end

1 function [ F ]= filtrogauss ( I )
2 % [ nomefile , percorso ]= uigetfile ( ’*. jpg ; *. TIF ’ , ’ Selezionare il file
immagine ’) ;
3 % I = imread ( strcat ( percorso , nomefile ) ) ;
4 I = double ( I ) ;
5 P =(1/273) *[1 ,4 ,7 ,4 ,1;4 ,16 ,26 ,16 ,4;7 ,26 ,41 ,26 ,7;4 ,16 ,26 ,16 ,4;1 ,4 ,7 ,4 ,1];
6 [ nr , nc , nb ]= size ( I ) ;
7 F=I;
8 for h =1: nb
9 for i =3: nr -2
10 for j =3: nc -2
11 Im = I (i -2: i +2 ,j -2: j +2 , h ) ;
12 F (i ,j , h ) = sum ( sum ( P .* Im ) ) ;
13 end
14 end
15 end
16 F = uint8 ( F ) ;
17 I = uint8 ( I ) ;
18 % figure ;
19 % subplot (1 ,2 ,1) ;
20 % imshow ( I ) ;
21 % title ( ’ Immagine originale ’)
22 % subplot (1 ,2 ,2) ;
23 % imshow ( F ) ;
24 % title ( ’ Immagine modificata ’)
25 end

1 function [ F ]= filtrolaplaciano1 ( I )
2 % [ nomefile , percorso ]= uigetfile ( ’*. jpg ; *. TIF ’ , ’ Selezionare il file
immagine ’) ;
3 % I = imread ( strcat ( percorso , nomefile ) ) ;
4 I = double ( I ) ;
5 P =[ -1 , -1 , -1; -1 ,8 , -1; -1 , -1 , -1];
6 [ nr , nc , nb ]= size ( I ) ;
7 F=I;
8 for h =1: nb
9 for i =2: nr -1
10 for j =2: nc -1
11 Im =[ I (i -1: i +1 ,j -1: j +1 , h ) ];
12 F (i ,j , h ) = sum ( sum ( P .* Im ) ) ;
13 end
14 end
15 end
16 F = uint8 ( F ) ;
17 I = uint8 ( I ) ;
18 % figure ;
19 % subplot (1 ,2 ,1) ;
1.2. ELABORAZIONE IMMAGINI 27

20 % imshow ( I ) ;
21 % title ( ’ Immagine originale ’)
22 % subplot (1 ,2 ,2) ;
23 % imshow ( F ) ;
24 % title ( ’ Immagine modificata ’)
25 end

1 function [ F ]= filtrolaplaciano2 ( I )
2 % [ nomefile , percorso ]= uigetfile ( ’*. jpg ; *. TIF ’ , ’ Selezionare il file
immagine ’) ;
3 % I = imread ( strcat ( percorso , nomefile ) ) ;
4 I = double ( I ) ;
5 P =[1 , -2 ,1; -2 ,4 , -2;1 , -2 ,1];
6 [ nr , nc , nb ]= size ( I ) ;
7 F=I;
8 for h =1: nb
9 for i =2: nr -1
10 for j =2: nc -1
11 Im =[ I (i -1: i +1 ,j -1: j +1 , h ) ];
12 F (i ,j , h ) = sum ( sum ( P .* Im ) ) ;
13 end
14 end
15 end
16 F = uint8 ( F ) ;
17 I = uint8 ( I ) ;
18 % figure ;
19 % subplot (1 ,2 ,1) ;
20 % imshow ( I ) ;
21 % title ( ’ Immagine originale ’)
22 % subplot (1 ,2 ,2) ;
23 % imshow ( F ) ;
24 % title ( ’ Immagine modificata ’)
25 end

1 function [ F ] = filtromediamobile ( I )
2 % [ nomefile , percorso ]= uigetfile ( ’*. jpg ; *. TIF ’ , ’ Selezionare il file
immagine ’) ;
3 % I = imread ( strcat ( percorso , nomefile ) ) ;
4
5 I = double ( I ) ;
6 P =[1/9 ,1/9 ,1/9;1/9 ,1/9 ,1/9;1/9 ,1/9 ,1/9];
7 [ nr , nc , nb ]= size ( I ) ;
8 F=I;
9 for h =1: nb
10 for i =2: nr -1
11 for j =2: nc -1
12 Im =[ I (i -1: i +1 ,j -1: j +1 , h ) ];
13 F (i ,j , h ) = sum ( sum ( P .* Im ) ) ;
14 end
15 end
16 end
17 F = uint8 ( F ) ;
18 I = uint8 ( I ) ;
19 % figure ;
20 % subplot (1 ,2 ,1) ;
21 % imshow ( I ) ;
22 % title ( ’ Immagine originale ’)
23 % subplot (1 ,2 ,2) ;
28 CAPITOLO 1. LABORATORIO MATLAB

24 % imshow ( F ) ;
25 % title ( ’ Immagine modificata ’)
26 end

1 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ Selezionare il file immagine ’


);
2 I = imread ( strcat ( percorso , nomefile ) ) ;
3 I = double ( I ) ;
4 [ nr , nc , nb ]= size ( I ) ;
5 Px =[ -1 ,0 ,1; -1 ,0 ,1; -1 ,0 ,1];
6 Py =[1 ,1 ,1;0 ,0 ,0; -1 , -1 , -1];
7 F1 = I ;
8 F2 = I ;
9 for h =1: nb
10 for i =3: nr -2
11 for j =3: nc -2
12 Im = I (i -1: i +1 ,j -1: j +1 , h ) ;
13 F1 (i ,j , h ) = sum ( sum ( Px .* Im ) ) ;
14 F2 (i ,j , h ) = sum ( sum ( Py .* Im ) ) ;
15 end
16 end
17 end
18 F = sqrt (( F1 .* F1 ) + ( F2 .* F2 ) ) ;
19 F = uint8 ( F ) ;
20 I = uint8 ( I ) ;
21 figure ;
22 subplot (1 ,2 ,1) ;
23 imshow ( I ) ;
24 title ( ’ Immagine originale ’)
25 subplot (1 ,2 ,2) ;
26 imshow ( F ) ;
27 title ( ’ Immagine modificata ’)

1 function [ F ] = filtroroberts ( I )
2 % [ nomefile , percorso ]= uigetfile ( ’*. jpg ; *. TIF ’ , ’ Selezionare il file
immagine ’) ;
3 % I = imread ( strcat ( percorso , nomefile ) ) ;
4 I = double ( I ) ;
5 [ nr , nc , nb ]= size ( I ) ;
6 Px =[0 ,0 ,0;0 ,1 ,0;0 ,0 , -1];
7 Py =[0 ,0 ,0;0 ,0 ,1;0 , -1 ,0];
8 F1 = I ;
9 F2 = I ;
10 for h =1: nb
11 for i =3: nr -2
12 for j =3: nc -2
13 Im = I (i -1: i +1 ,j -1: j +1 , h ) ;
14 F1 (i ,j , h ) = sum ( sum ( Px .* Im ) ) ;
15 F2 (i ,j , h ) = sum ( sum ( Py .* Im ) ) ;
16 end
17 end
18 end
19 F = sqrt (( F1 .* F1 ) + ( F2 .* F2 ) ) ;
20 F = uint8 ( F ) ;
21 I = uint8 ( I ) ;
22 % figure ;
23 % subplot (1 ,2 ,1) ;
24 % imshow ( I ) ;
1.2. ELABORAZIONE IMMAGINI 29

25 % title ( ’ Immagine originale ’)


26 % subplot (1 ,2 ,2) ;
27 % imshow ( F ) ;
28 % title ( ’ Immagine modificata ’)
29 end

1 function [ F ] = filtrosobel ( I )
2 % [ nomefile , percorso ]= uigetfile ( ’*. jpg ; *. TIF ’ , ’ Selezionare il file
immagine ’) ;
3 % I = imread ( strcat ( percorso , nomefile ) ) ;
4 I = double ( I ) ;
5 [ nr , nc , nb ]= size ( I ) ;
6 Px =[ -1 ,0 ,1; -2 ,0 ,2; -1 ,0 ,1];
7 Py =[1 ,2 ,1;0 ,0 ,0; -1 , -2 , -1];
8 F1 = I ;
9 F2 = I ;
10 for h =1: nb
11 for i =3: nr -2
12 for j =3: nc -2
13 Im = I (i -1: i +1 ,j -1: j +1 , h ) ;
14 F1 (i ,j , h ) = sum ( sum ( Px .* Im ) ) ;
15 F2 (i ,j , h ) = sum ( sum ( Py .* Im ) ) ;
16 end
17 end
18 end
19 F = sqrt (( F1 .* F1 ) + ( F2 .* F2 ) ) ;
20 F = uint8 ( F ) ;
21 I = uint8 ( I ) ;
22 % figure ;
23 % subplot (1 ,2 ,1) ;
24 % imshow ( I ) ;
25 % title ( ’ Immagine originale ’)
26 % subplot (1 ,2 ,2) ;
27 % imshow ( F ) ;
28 % title ( ’ Immagine modificata ’)
29 end
30 CAPITOLO 1. LABORATORIO MATLAB

(a) Originale. (b) Alto guadagno.

(c) Dilatazione. (d) Erosione.

(e) Media mobile. (f ) Gauss.

(g) Laplaciano 1. (h) Laplaciano 2.


1.2. ELABORAZIONE IMMAGINI 31

(a) Prewitt. (b) Roberts.

(c) Sobel.

1.2.3 Algebra delle bande


Grazie alle immagini acquisite dal Landsat, suddivise in sette diverse bande, è possibile
utilizzare sui canali del software di elaborazione d’immagini queste bande di una stessa
immagine multispettrale allo scopo di ottenere un’immagine a colori, veri o falsi. Se nel
canale del blu si mette l’immagine della banda del blu, su quella del rosso l’immagine
acquisita sulla banda del rosso e stessa cosa sulla banda del verde si ottiene una composi-
zione che prende il nome di vero colore. Tutte le altre composizioni eseguite allo scopo di
ricavare delle informazioni aggiuntive dall’immagine prendono il nome di falso colore.
Come si vede nelle figure dalla 1.17 alla 1.26, si possono ottenere alcune particolari im-
magini in cui si mettono in mostra aspetti particolari e non osservabili nel solo campo del
visibile. É importante osservare come il punto di forza di queste immagini multispettrali,
sia non solo la possibilità di compiere operazioni tra le bande, ma essendo prese da sa-
tellite garantiscono una certa periodicità, il che sostanzialmente permette di analizzare le
trasformazioni del territorio.
32 CAPITOLO 1. LABORATORIO MATLAB

Figura 1.17: Questa combinazione è quel-


la con i “colori naturali”, si nota come ci sia
un eccesso di blu, dovuto ai problemi legati
all’atmosfera.

Figura 1.18: Questa combinazione è la


composizione di bande “standard”. La ve-
getazione appare nelle tonalità di rosso, le
aree urbane sono blu azzurro e i terreni va-
riano da buio a marrone chiaro. Ghiaccio,
neve e nuvole sono bianche o ciano chia-
re. Gli alberi coniferi appaiono più scuri
rispetto ai latifogli. Questa è una combi-
nazione di banda molto popolare ed è utile
per studi sulla vegetazione, sul monitorag-
gio del drenaggio, sugli schemi del suolo e
sulle varie fasi di crescita delle colture.

Figura 1.19: Questa combinazione forni-


sce una resa “naturale” e penetra anche le
particelle atmosferiche e il fumo. La vege-
tazione sana apparirà verde brillante e può
saturarsi nelle stagioni di forte crescita, le
pianure appariranno verdi, le aree rosa rap-
presentano un terreno sterile, le arance e i
marroni rappresentano aree poco vegeta-
te. Questa combinazione di bande fornisce
immagini impressionanti per regioni deser-
tiche. È utile per studi geologici, agricoli e
di umidità.
1.2. ELABORAZIONE IMMAGINI 33

Figura 1.20: La vegetazione sana appa-


re nelle tonalità di rosso, marrone, aran-
ce e gialli. I suoli possono essere in ver-
de e marrone, le caratteristiche urbane so-
no bianche. Le aree rossastre mostrano
una nuova crescita vegetale, probabilmen-
te sparsa prateria. Per gli studi sulla vege-
tazione, l’aggiunta della fascia Mid-IR au-
menta la sensibilità del rilevamento di va-
rie fasi di crescita delle piante o di stress;
occorre comunque prestare attenzione nel-
l’interpretazione se l’acquisizione segue una
precipitazione.

Figura 1.21: Questa combinazione di vi-


cino IR, mid-IR e rosso, offre una definizio-
ne aggiunta dei limiti delle acque di terra
ed evidenzia alcuni dettagli non facilmente
apparenti nelle bande visibili. La combina-
zione 4-5-3 mostra le differenze di umidi-
tà ed è utile per l’analisi del suolo e delle
condizioni della vegetazione. Generalmen-
te, più umido è il suolo, più scuro appare,
a causa delle capacità di assorbimento di
infrarosso dell’acqua.
34 CAPITOLO 1. LABORATORIO MATLAB

Figura 1.22: Questa combinazione di ban-


de fornisce un’interpretazione ”naturale” pe-
netrante anche le particelle atmosferiche, di
fumo e di foschia. La vegetazione appare
nelle tonalità di verde scuro e chiaro durante
la stagione crescente, le caratteristiche urba-
ne sono bianche, grigie, cianiche o viola. Per
quanto riguarda le sabbie, suoli e i minerali
appaiono in una varietà di colori. L”assor-
bimento quasi completo delle bande Mid-IR
in acqua, ghiaccio e neve fornisce una linea
di costa ben definita e sono evidenziate le
fonti d’acqua all’interno dell’immagine, ap-
parendo blu scuro o nero. Superfici calde
come incendi boschivi o eruzioni vulcaniche
saturano le bande Mid-IR e di conseguenza
appaiono in tonalità di rosso o giallo. In ef-
fetti questa combinazione si utilizza appunto
per monitorare gli incendi boschivi.

Figura 1.23: Come la combinazione 4 5


1, questa combinazione fornisce all’utente
una grande quantità di informazioni per
contrasto di colore. Questa combinazio-
ne è utile per gli studi di vegetazione ed
è ampiamente usata in aree di gestione del
legname e di infestazione di parassiti.
1.2. ELABORAZIONE IMMAGINI 35

Figura 1.24: Questa combinazione risul-


ta simile alla 7-4-2, per valutare lo stato di
salute della vegetazione, che sarà di verde
brillante, tuttavia la 5-4-1 è più utile per
studi agricoli.

Figura 1.25: Questa combinazione non


prevede bande visibili. Le linee costiere e
le rive sono ben definite, può essere utiliz-
zata per trovare caratteristiche strutturali
e umidità dei suoli. La vegetazione appare
blu.

Figura 1.26: Questa combinazione mo-


stra le texture topografiche mentre con la
7-3-1 si può visualizzare le differenze nei
tipi di roccia.
36 CAPITOLO 1. LABORATORIO MATLAB

Alcuni indici ottenibili dall’operazione tra bande


Tramite l’algebra delle bande si può ottenere delle nuove immagini con il contenuto ra-
diometrico di alcuni parametri sintetici che possono rappresentare ad esempio lo stato di
salute della vegetazione, come nel caso dell’NDVI.
Gli indici riomcavati, sono particolari cbinazioni particolari della bande del rosso e del
vicino infrarosso, catturate dal Landsat.

1 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda rossa ’) ;


2 L3 = imread ( strcat ( percorso , nomefile ) ) ;
3 L3 = L3 (500:5000 ,1000:5000) ;
4 RED = double ( L3 ) ;
5
6 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda L4 ’) ;
7 L4 = imread ( strcat ( percorso , nomefile ) ) ;
8 L4 = L4 (500:5000 ,1000:5000) ;
9 NIR = double ( L4 ) ;
10
11 NDVI =( NIR - RED ) ./( NIR + RED ) ;
12 figure (1) ;
13 imagesc ( NDVI ) ;
14 colormap gray
15
16 SAVI =1.5.*(( NIR - RED ) ./( NIR + RED +0.5) ) ;
17 figure (2) ;
18 imagesc ( SAVI )
19 colormap gray
20
21 A =(0.851* RED -0.645* NIR ) ;
22 B =(0.148* NIR -0.645* RED ) ;
23 PVI =(( A .* A ) -( B .* B ) ) ;
24 PVI = sqrt ( abs ( PVI ) ) ;
25 figure (3) ;
26 imagesc ( PVI ) ;
27 colormap gray
28
29 NDSI =( RED - NIR ) ./( NIR + RED ) ;
30 figure (3) ;
31 imagesc ( NDSI ) ;
32 colormap gray
1.2. ELABORAZIONE IMMAGINI 37

(a) Parametro NDVI. (b) Parametro SAVI.

(c) Parametro PVI. (d) Parametro NDSI.


38 CAPITOLO 1. LABORATORIO MATLAB

1.2.4 Classificazione
Classificare un’immagine significa ripartirla in un numero adeguato di insiemi tra loro
divisi, chiamati classi. Ogni pixel apparterrà ad una sola classe e l’insieme di tutte le
classi restituisce l’intera immagine. Questo processo si basa sul principio che oggetti in
una determinata classe abbiamo un risposta uguale (simile) tra loro.
Una classificazione può essere supervisionata o non supervisionata; la prima richiede l’in-
tervento a priori di un operatore che riconosce zone di radiazione nota sull’immagine,
mentre la seconda viene eseguita mediante l’utilizzo di alcuni algorimi come ad esempio il
k-means. In Matlab la funzione kmeans è già presente, con il seguente codice si procede
quindi alla classificazione di un’area (limitata) in 5 diverse classi.

1 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda blu ’) ;


2 L1 = imread ( strcat ( percorso , nomefile ) ) ;
3 L1 = L1 (2501:4000 ,1001:3000) ;
4 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda verde ’) ;
5 L2 = imread ( strcat ( percorso , nomefile ) ) ;
6 L2 = L2 (2501:4000 ,1001:3000) ;
7 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda rossa ’) ;
8 L3 = imread ( strcat ( percorso , nomefile ) ) ;
9 L3 = L3 (2501:4000 ,1001:3000) ;
10 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda L4 ’) ;
11 L4 = imread ( strcat ( percorso , nomefile ) ) ;
12 L4 = L4 (2501:4000 ,1001:3000) ;
13 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda L5 ’) ;
14 L5 = imread ( strcat ( percorso , nomefile ) ) ;
15 L5 = L5 (2501:4000 ,1001:3000) ;
16 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda L7 ’) ;
17 L7 = imread ( strcat ( percorso , nomefile ) ) ;
18 L7 = L7 (2501:4000 ,1001:3000) ;
19
20 V = zeros ( numel ( L1 ) ,6 , ’ uint8 ’) ;
21 L1 = reshape ( L1 , numel ( L1 ) ,1) ;
22 L2 = reshape ( L2 , numel ( L2 ) ,1) ;
23 L3 = reshape ( L3 , numel ( L3 ) ,1) ;
24 L4 = reshape ( L4 , numel ( L4 ) ,1) ;
25 L5 = reshape ( L5 , numel ( L5 ) ,1) ;
26 L7 = reshape ( L7 , numel ( L7 ) ,1) ;
27 V (: ,1) = L1 ;
28 V (: ,2) = L2 ;
29 V (: ,3) = L3 ;
30 V (: ,4) = L4 ;
31 V (: ,5) = L5 ;
32 V (: ,6) = L7 ;
33 V = double ( V ) ;
34 [ idx , c ]= kmeans (V ,5) ;
35 mappa = reshape ( idx ,1500 ,2000) ;
36 imagesc ( mappa ) ;
1.2. ELABORAZIONE IMMAGINI 39

Figura 1.27: Classificazione in 5 diverse classi mediante l’agoritmo di k-means dell’area


del Cellina-Meduna.

1.2.5 Decorrelation Stretch


Il decorralation stretch è un processo che viene utilizzato per migliorare (aumentare) le
differenze di colore trovate in un’immagine a colori. Il metodo utilizzato per fare questo
processo include la rimozione della correlazione tra bande trovata nei pixel in ingresso, da
cui il termine “decorrelation”.
Per fare questa operazione si sfrutta la funzione in matlab già presente.

1 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda blu ’) ;


2 L1 = imread ( strcat ( percorso , nomefile ) ) ;
3 L1 = L1 (500:5000 ,1000:5000) ;
4 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda verde ’) ;
5 L2 = imread ( strcat ( percorso , nomefile ) ) ;
6 L2 = L2 (500:5000 ,1000:5000) ;
7 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ banda rossa ’) ;
8 L3 = imread ( strcat ( percorso , nomefile ) ) ;
9 L3 = L3 (500:5000 ,1000:5000) ;
10 [ nr , nc ]= size ( L1 ) ;
11 Lrgb = zeros ( nr , nc ,3 , ’ uint8 ’) ;
12 Lrgb (: ,: ,1) = L3 ;
13 Lrgb (: ,: ,2) = L2 ;
14 Lrgb (: ,: ,3) = L1 ;
15 figure (1) ;
16 imagesc ( Lrgb )
17
18 I = decorrstretch ( Lrgb ) ;
19 figure (2) ;
20 imagesc ( I ) ;
40 CAPITOLO 1. LABORATORIO MATLAB

(a) Decorrelation stretch dell’immagine del (b) Immagine originale a colori veri del Landsat
Landsat a colori veri.

Visto che l’immagine del Landsat presenta delle regioni nere o comunque con degli errori
di rilievo, dall’elaborazione su un immagine più nitida, si può osservare meglio la potenza
della funzione.

1 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ Seleziona il file immagine ’) ;


2 A = imread ( strcat ( percorso , nomefile ) ) ;
3 Ar = A (: ,: ,1) ;
4 Ag = A (: ,: ,2) ;
5 Ab = A (: ,: ,3) ;
6 figure (1)
7 imagesc ( A ) ;
8
9 I = decorrstretch ( A ) ;
10 Ir = I (: ,: ,1) ;
11 Ig = I (: ,: ,2) ;
12 Ib = I (: ,: ,3) ;
13 figure (2) ;
14 imagesc ( I ) ;
15
16 figure (3) ;
17 plot3 ( Ar (:) , Ag (:) , Ab (:) , ’. ’)
18 grid on
19 xlabel ( ’ Rosso ’)
20 ylabel ( ’ Verde ’)
21 zlabel ( ’ Blu ’)
22 title ( ’ Immagine originale ’)
23
24 figure (4) ;
25 plot3 ( Ir (:) , Ig (:) , Ib (:) , ’. ’)
26 grid on
27 xlabel ( ’ Rosso ’)
28 ylabel ( ’ Verde ’)
29 zlabel ( ’ Blu ’)
30 title ( ’ Immagine post decorralation strech ’)
1.2. ELABORAZIONE IMMAGINI 41

(a) Immagine originale. (b) Immagine su cui è stato eseguito il


decorrealtion stretch.

(c) Immagine originale sul piano Verde - Rosso. (d) Immagine decorrelata sul piano Verde -
Rosso.

(e) Immagine originale nello spazio 3D. (f ) Immagine decorrelata nello spazio 3D.
42 CAPITOLO 1. LABORATORIO MATLAB

1.2.6 Cropping
Questa operazione è utile se, come nel caso di immagine Landsat ci si trova a che fare
con immagini di dimensioni molto grandi. Conviene quindi ritagliare la stessa per fare le
elabrazioni su una parte ristretta dell’immagine.
Ci viene in aiuto la funzione imcrop di Matlab, che tramite interfaccia grafica ci permette
di scegliere un’area (rettangolare o poligonale) di selezione e ritagliare solo quella porzione
di immagine.

1 [ nomefile , percorso ]= uigetfile ( ’ *. jpg ; *. TIF ’ , ’ Seleziona il file immagine ’) ;


2 A = imread ( strcat ( percorso , nomefile ) ) ;
3 I = imtool ( A )

(a) Cropping immagine. (b) Orginale.


Capitolo 2

Laboratorio GIS

Per l’analisi di sistemi informativi territoriali si utilizza il software freeware Quantum GIS
v.2.18.7. In questa versione del software sono contenuti anche altri applicativi GIS come
Grass e SAGA; questi software sono utili per il calcolo di alcuni parametri geomorfologici
come il wetness index o quelli calcolati nei paragrafi precedenti (fig. 2.1).
Un’altra importante funzione è quella del “Web Mapping Services” o brevemente WMS,
che si tratta di un servizio ospitato su un server remoto. Simile a un sito Web, è possibile
accedervi se si dispone di una connessione al server. Con QGIS, è possibile caricare un
WMS direttamente nella mappa (fig. 2.2).

43
44 CAPITOLO 2. LABORATORIO GIS

Figura 2.1: Strumenti di processing in Qgis, con l’implementazione di Grass e SAGA.


2.1. GEOREFENZIAZIONE DI UN IMMAGINE RASTER 45

Figura 2.2: Possibilità di utilizzare in Qgis dati direttamente da server, senza doverli
scaricare offline.

2.1 Georefenziazione di un immagine raster


Si tratta sicuramente di una delle funzioni più importanti su un software di elaborazione di
GIS, quella che permette di georefernziale nello spazio un’immagine raster priva di infor-
mazioni di localizzazione. Nel caso specifico, si considera una mappa di Udine scansionata,
su cui si vogliono ipoteticamente eseguire successivamente delle operazioni di map overlay.
Utilizzando gli incroci della griglia della cartografia su cui è basato il mappale (punti di
coordinate note) è possibile andare a creare un modello di trasformazione tramite il quale
il software è in grado di realizzare la georefenziazione.
46 CAPITOLO 2. LABORATORIO GIS

Figura 2.3: Pannello degli strumenti su file raster in Qgis.

Figura 2.4: Tavoletta al 25000 di Udine, IGM. In rosso i GCP usati per la trasformazione,
presi il più possibile sul perimetro.
2.1. GEOREFENZIAZIONE DI UN IMMAGINE RASTER 47

Figura 2.5: Tabella dei GCP utilizzati per la trasformazione.

Figura 2.6: Impostazioni di trasformazione utilizzate.


48 CAPITOLO 2. LABORATORIO GIS

Figura 2.7: Sovrapposizione tra la tavoletta trasformata e l’immagine di Google satellite.

2.2 Elaborazione di buffering e map overlay


La prima parte del lavoro su Qgis si pone come obiettivo quello di calcolare le civili abita-
zioni interessata da un possibile allarme zanzare. Si vuole quindi avvisare la cittadinanza
del comune di Udine interessata, ovvero coloro i quali abitano a meno di 100m da un corso
d’acqua.
I dati che ci servono sono reperibili dal sito della regione Friuli Venezia Giulia e vengo-
no utilizzati: grafo stradale, numeri civici, corsi d’acqua e carta tecnica regionale. Tutti
questi dati si possono scaricare in formato shapefile e sono georeferenziati, anche se può
essere necessaria una trasformazione delle coordinate visto che qualche dato può avere un
sistema di riferimento diverso.
La prima operazione è quella di caricare tutti i dati su layer diversi cosı̀ da poter eseguire
alcune delle operazioni fondamentali tra i database e i dati associati ai valori spaziali e di
geoprocessing (fig. 2.8).

Figura 2.8: Pannello di geoprocessing di Qgis.


2.2. ELABORAZIONE DI BUFFERING E MAP OVERLAY 49

Figura 2.9: Prima fase di lavoro: caricati i layer con gli edifici dalla ctr e i corsi d’acqua.
Si carica anche un layer contenente le informazioni raster di Google satellite tramite.

Figura 2.10: Seconda fase di lavoro: operazione di buffer dei corsi d’acqua nel comune
di Udine.
50 CAPITOLO 2. LABORATORIO GIS

Figura 2.11: Terza fase: individuo i numeri civici appartenenti all’area di buffer dei corsi
d’acqua.

Figura 2.12: Esportazione dei dati per possibile post elaborazione con altri software di
data analisi, come excel o access.
2.3. ANALISI DI RETE 51

2.3 Analisi di rete


Nella seconda esercitazione si sfrutta un particolare plugin che permette di calcolare il
percorso più breve da 2 punti utilizzando le strade presenti. Si vuole simulare un trasporto
dal comune di Aviano al porto di San Giorgio di Nogaro senza passare nei territori comunali
di Pordenone e Codroipo.
Si carica i layer dei grafo stradale e dei comuni e si selezionano dal database delle strade
tutte quelle che non appartengono a Pordenone e Codroipo.

Figura 2.13: Percorso tra Aviano e San Giorgio di Nogaro, senza passare dai comuni di
Pordenone e Codroipo.

Figura 2.14: Plugin per il calolo del percorso più breve.


Appendice

Lista di alcune delle principali funzioni utilizzate nella presente relazione.

disp: ci permette di visualizzare il valore della variabile che vogliamo, senza stampare
la variabile. Es. disp(X): stampa il valore di X.
input: Ci permette di prendere ciò che viene inserito dall’operatore. a=input(’testo’,’s’)
in cui ’s’ ci indica che ad esempio stiamo inserendo del testo.
uigetfile: Apre una finestra di dialogo in cui poter selezionare un file da aprire in Matlab.
La sintassi: [FileName,PathName,FilterIndex] = uigetfile(FilterSpec) ci restituisce il nome
delf file, il suo percorso.
fopen: La sintassi fileID = fopen(filename,permission), apre il file con il tipo di accesso
specificato dall’autorizzazione, che può essere ’r’ se si vuole sola lettura o ’w’ se si vuole
anche scrittura.
fclose: Chiude il link con un file aperto. Questo serve sostanzialmente ad incrementare la
velocità di esecuzione dello script di matlab.
fscanf :Questa funzione ci permette di leggere dei dati da un file. La sintassi: A =
fscanf(fileID,formatSpec) legge dati da un file di testo aperto nel vettore di colonna A
e interpreta i valori nel file in base al formato specificato.
rot90 : Ruota un array in senso antiorario di 90 gradi.
fgetl : Legge una riga di testo dal file collegato e restituisce i dati in linea.
textscan: Legge testo formattato da file di testo o stringhe. Questa funzione risulta essere
molto più veloce di fscanf.
flipud : Restituisce A con le sue righe invertite in direzione verso l’alto (cioè su un asse
orizzontale).
find : Restituisce un vettore con gli indici di tutte le posizioni degli zeri (o del valore che
vogliamo cercare) all’interno di quel vettore.
ind2sub: Il comando ind2sub determina i valori dell’indice equivalente corrispondenti a un
singolo indice in un array. [I, J] = ind2sub (siz, IND) restituisce le matrici I e J contenenti
gli indici equivalenti di riga e colonna corrispondenti a ciascun indice lineare della matrice
IND per una matrice di dimensioni siz.
min: Restituisce il minimo di un array
max : Restituisce il massimo di un array
strcmp: Compara 2 stringhe e restituisce 1 se l’uguaglianza è vera, 0 se non è soddisfatta.
Questa funzione se utilizzata per stringhe di testo va spesso abbinata alla funzione upper,
che converte la stringa in lettere maiuscole. Questo permette di evitare l’ambiguità dei
caratteri e quindi del risultato.
strcmpi : Al contrario della funzione precedente risolve il problema di caratteri eventual-
mente maiuscoli o minuscoli.
mesh: Disegna una maglia wireframe con il colore determinato da Z, quindi il colore è
proporzionale all’altezza di superficie. La gamma di colori da utilizzare si può modificare

53
54 CAPITOLO 2. LABORATORIO GIS

a seconda del risultato grafico che si vuole ottenere.


surf : Si tratta di un’evoluzione della funzione mesh, in quanto surf permette di elaborare
un mesh di 2 diverse matrici una sopra l’altra.
unique: unique(A), restituisce gli stessi dati di A, ma senza ripetizioni. Esegue anche un
sorting dell’array.
str2double: Questa funzione viene utilizzata quando si carica da un file ascii dei valori nu-
merici, che però vengono interpretati da matlab semplicemente come simboli. La sintassi
X = str2double(’str’) restitusice un array X contenete dei valori numerici con i quali poter
fare delle operazioni.
delaunay: crea la topologia, cioè assegna ad ogni punto da processare e produce il file delle
topologie in cui i singoli triangoli sono identificati attraverso le etichette da assegnare ai
punti. La funzione costruire i triangoli sul piano prima che in 3D, bisogna quindi specifi-
care su quale piano stiamo lavorando.
meshgrid : Data la dimensione della cella in x e in y (e in z), questa funzione permette di
creare una griglia 2D o 3D. Può essere utile per creare un dominio X-Y grigliato su cui
poi mettere in mostra delle funzioni.
uint8 : Converte un array in una matrice a 8 bit.
imread : A = imread(filename), ci restituisce in A una matrice contenente l’immagine. Può
anche avere tre bande, si ha una matrice 3D in quel caso
imshow : imshow(I), visualizza l’immagine I in una figura, che può essere in scala di grigi,
RGB (truecolor) o un’immagine binaria. Per le immagini binarie, imshow visualizza i pixel
con il valore 0 (zero) come nero e 1 come bianco. Imshow ottimizza le figure, gli assi e le
proprietà dell’oggetto immagine per la visualizzazione delle immagini.
imtool : Questa funzione permette di creare da un’immagine (anche a più bande) una
nuova immagine con un area limitata a quella che viene selezionata tramite interfaccia
grafica. In pratica si definisce una regione di ritaglio (rettangolare o poligonale) e viene
creata un’immagine con solo quella regione.
rgb2gray: Converte un immagine truecolor nelle bande RGB in un’immagine in bianco e
nero, facendo una sorta di media pesata sulle bande.
kmeans: Esegue il clustering k-means. Specificato il numero di classi in cui suddividere i
pixel, l’algoritmo restituisce un immagine in cui vediamo i pixel suddivisi nel dato numero
di classi. Per impostazione predefinita, kmeans utilizza la misura di distanza euclidea
quadrata e l’algoritmo k-means++ per l’inizializzazione del centro cluster.
imhist: imhist(I) restituisce l’istogramma in frequenza dell’immagine caricata nella matri-
ce I.
imagesc: La funzione imagesc scala i dati dell’immagine all’intera gamma della colormap
corrente e visualizza l’immagine.
decorrstretch: S = decorrstretch(A), esegue il decorrelation stretch di un immagine A,
fornendo il risultato in S.
reshape: Questa funzione serve a riformattare una matrice. Ad esempio, la riformattazione
(A, [2,3]) ridisegna A in una matrice 2x3.
fprintf : Questa funzione permette di scrivere una stringa in un file di testo esterno.
dlmwrite: Come la funzione precedente permette di scrivere delle informazioni su un file
ascii di testo. Questa funzione è molto più veloce e comoda per la scrittura di una matrice,
poichè crea già un file con tutte le righe e colonne necessarie.

Potrebbero piacerti anche