Docente Studente
Prof. Alberto Beinat Fulvio Milocco 115290
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
3
4 CAPITOLO 1. LABORATORIO MATLAB
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.5: DTM della zona del Vajont stampato su file “.asc”
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
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”.
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.
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 ;
Figura 1.6: Carta delle pendenze realizzata con il metodo dell’intorno su DTM.
Figura 1.7: Carta delle pendenze realizzata con il metodo di Zevenbergen e Thorne su
DTM.
Figura 1.8: Carta delle pendenze realizzata con il metodo della massima pendenza su
DTM.
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.
Figura 1.10: Carta delle pendenze realizzata con il metodo della superficie quadratica
su DTM.
1.1. MODELLI DIGITALI DEL TERRENO 19
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
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
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
Aspect
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
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 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
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
(c) Sobel.
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.
(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.
(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.
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.2: Possibilità di utilizzare in Qgis dati direttamente da server, senza doverli
scaricare offline.
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.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
Figura 2.13: Percorso tra Aviano e San Giorgio di Nogaro, senza passare dai comuni di
Pordenone e Codroipo.
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