• Aucun résultat trouvé

Quelques calculs de statistique

5.3 Le prototypage des traitements et requêtes

5.3.4 Quelques calculs de statistique

Ce quatrième groupe de traitement vise à extraire quelques statistiques des images. Ces traitements s'eectueront sur la collection landsatcol et seront validés à l'aide du module gdalinfo de GDAL.

5.3.4.1 Les informations de contrôles GDAL fournit les informations suivantes :

Landsat 1 Landsat 2

Minimum 1 1

Maximum 255 255 Moyenne 64.19 64.14 Écart type 19.71 19.71

5.3.4.2 Minimum, maximum et moyenne

Rasdaman fournit des fonctions permettant d'extraire le minimum, le maxi- mum et la moyenne d'un MDD : min_cells(), max−cells()et avg−cells().

Les requêtes sont donc

select min_cells(mdd) from landsatcol as mdd select max_cells(mdd) from landsatcol as mdd select avg_cells(mdd) from landsatcol as mdd La requête, via le module Rasql donne (pour le minimum) :

rasql -q 'select min_cells(mdd) from landsatcol as mdd' --out string

Ces requêtes fournissent les bonnes réponses. Les statistiques suivantes ont été calculées à partir d'un échantillon de 100 requêtes :

Temps [s] min−cells() max−cells() avg−cells()

Minimum 0.13 0.14 0.15

Maximum 0.27 0.17 0.27

Moyenne 0.15 0.15 0.16

Écart type < 0.01 < 0.01 < 0.01

Comme on peut le voir, ces opérations sont très rapides. Exécutées sur un MDD composé, l'opération renvoie un élément de type composé reprenant la valeur minimale de chaque composante. Par exemple, les trois images SPOT qui constituent la collection spot3 admettent pour minimum : 14, 53 et 73. La fonction min−cells()appliquée à la collection spot3 renvoie :

Query result collection has 1 element(s): Result element 1 : {14, 53, 73} 5.3.4.3 L'écart type

Pour l'écart type, la situation se complique car Rasdaman ne fournit pas de fonctions permettant de le calculer.. Il faut dès lors implémenter cette fonction- nalité. Pour se faire, on dispose de deux formules :

s Pn i=1(xi− x) 2 n − 1 = s Pn i=1x 2 i − ( Pn i=1xi) 2 /n n − 1

où x représente la valeur d'une cellule, n correspond au nombre de cellules et x équivaut à la moyenne des valeur des cellules.

La première requiert la connaissance a priori de la moyenne et est moins précise numériquement (l'application de l'exposant avant la sommation). Nous étudierons d'abord le second cas.

Nous allons calculer chaque terme individuellement et puis recréerons la formule complète. Le premier terme du numérateur est P x2

i, la somme des

carrés des valeurs des cellules. Il peut être calculé de la sorte : select

condense +

over x in sdom(mdd)

using (unsigned long) mdd[x] * (unsigned long) mdd[x] from landsatcol as mdd

On demande donc d'eectuer la somme du carré de la valeur de la cellule pour chaque cellule du domaine. Il est important de ne pas oublier de changer le type des cellules. La collection landsatcol est codée sur 8 bits ce qui est totalement insusant pour stocker le résultat. L'évaluation de la requête prend cette fois un certain temps (de l'ordre de 7.5 secondes pour deux MDD) et fournit au nal :

Query result collection has 2 element(s): Result element 1 : 2770121627

Result element 2 : 2766452307 Le second terme : (Pxi)

2

n peut s'obtenir de la sorte :

select ((double) add_cells(mdd) * (double) add_cells(mdd)) /(double)((sdom(mdd)[0].hi-sdom(mdd)[0].lo + 1)

*(sdom(mdd)[1].hi-sdom(mdd)[1].lo) + 1) from landsatcol as mdd

La fonction add−cells()permet de calculer la somme des cellules pour le nu-

mérateur. Le gros de l'instruction consiste à calculer le nombre de cellules. sdom(mdd)permet d'extraire le domaine spatial du MDD. sdom(mdd)[0] et sdom(mdd)[1] permettent d'obtenir l'intervalle monodimensionnel pour la première et deuxième dimension. Enn, sdom(mdd)[0].lo et sdom(mdd)[0].hi permettent d'obtenir les bornes inférieures et supérieures. On calcule donc, pour chaque dimension, le nombre de cellules.

La réponse est plus rapide (de l'ordre 0.2 secondes) : Query result collection has 2 element(s):

Result element 1 : 2.53804e+09 Result element 2 : 2.53448e+09

Si on contrôle ce résultat, on s'aperçoit que de grosses imprécisions se sont pro- pagées. Par exemple, pour le premier MDD : √2770121627−2.53804·109

1024·600−1 = 19.43 6=

19.71. Ces erreurs sont dues au changement de type. En eet, si on extrait seulement la somme des cellules :

select add_cells(mdd) from landsatcol as mdd on obtient 39436667. Donc s Pn i=1x 2 i − ( Pn i=1xi) 2 /n n − 1 = s 2770121627 − (39436667)2/(1024 · 600) 1024 · 600 − 1 = 19.71 ce qui est la bonne valeur. Si on ne change pas le type des cellules en réel codé sur 64 bits, les nombres sont trop grands et conduisent à une réponse fausse. Il parait logique qu'exécuter la requête globale engendrera des erreurs encore plus colossales. Néanmoins, il m'a été impossible de le vérier car la requête consomme trop de ressources. Elle a tourné pendant plus de dix minutes sans venir au bout de ses opérations. La dite requête :

select sqrt( condense +

over x in sdom(mdd)

using (unsigned long)mdd[x] *(unsigned long)mdd[x] -((double) add_cells(mdd) * (double) add_cells(mdd)) /(double)((sdom(mdd)[0].hi-sdom(mdd)[0].lo +1) *(sdom(mdd)[1].hi-sdom(mdd)[1].lo +1))

from landsatcol as mdd

En ce qui concerne la première formule de l'écart type ( r

Pn i=1(xi−x)

2

n−1 ), elle

permet de trouver la bonne valeur d'écart type si la moyenne et le nombre de pixels sont connus :

select sqrt( condense + over x in sdom(mdd) using (((double) mdd[x] - 64.19d) *((double) mdd[x] - 64.19d))) /614399d) from landsatcol as mdd

Cette requête prend environ 10 secondes. Remarquons la lettre suxe aux constantes pour indiquer qu'il s'agit d'un nombre réel codé sur 64 bits. Par contre, le développement du nombre de pixels (count−cells()) amène des er-

reurs (19.74 à la place de 19.71) et le calcul de la moyenne au sein de la requête produit le même souci que dans l'autre formule : trop de ressources consommées. Il semble donc qu'au cours de l'optimisation de la requête, Rasdaman ne calcule pas une seule fois la moyenne mais doive la recalculer pour chacune des 614400 itérations de la boucle.

En ce qui concerne l'écart type, on conclut qu'il y a moyen de le calculer en plusieurs requêtes mais pour un coût en temps important par rapport à ce qui est demandé. Il est aussi possible de le calculer à partir d'une requête paramétrée. 5.3.4.4 Médiane et mode

À ma connaissance, Rasdaman n'ore pas la possibilité de calculer ces sta- tistiques, même par des moyens détournés comme nous avons essayé de mettre en place pour l'écart type. Par conséquent, des opérations telles que les ltres modaux et médians ne sont pas disponibles au sein de Rasdaman.

Documents relatifs