diff --git a/Courses/2016/bordeaux.inra.fr/WorkshopGuide/internals.org b/Courses/2016/bordeaux.inra.fr/WorkshopGuide/internals.org index 7f483738ab9549ada133d0c185712ce22e966f8b..174d310f08dd3d8d56cb394aba8ef6e2a9b470c5 100644 --- a/Courses/2016/bordeaux.inra.fr/WorkshopGuide/internals.org +++ b/Courses/2016/bordeaux.inra.fr/WorkshopGuide/internals.org @@ -1,5 +1,9 @@ ** Les mécanismes internes de l'Orfeo ToolBox :slides: -*** Slide +*** Encodage des images +*** Fichiers geom +*** Noms de fichiers étendus +*** Streaming +*** Multi-threading ** Les mécanismes internes de l'*Orfeo ToolBox* :guide: *** Description :desc: **** Résumé @@ -139,7 +143,7 @@ comportement en utilisant les noms de fichiers étendus à l'écriture. - utilisez l'application *LocalStatistics* pour filtrer la première + utilisez l'application *LocalStatisticsExtraction* pour filtrer la première bande de l'image /image1.tif/ avec un rayon de 9. Exécutez une seconde fois cette opération, cette fois en @@ -164,7 +168,7 @@ =ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=. Reprenez l'exemple de l'exercice précédent utilisant - l'application *LocalStatistics* en désactivant le + l'application *LocalStatisticsExtraction* en désactivant le streaming. Utilisez la variable d'environnement ITK pour diminuer puis augmenter le nombre de threads utilisés. Que constatez vous ? @@ -173,3 +177,205 @@ ** Les mécanismes internes de l'*Orfeo ToolBox* :solutions: +*** Encodage des images + + L'utilisation de *gdalinfo* pour l'image /image1.tif/ nous donne: + + #+BEGIN_EXAMPLE + $ $ gdalinfo image1.tif + Driver: GTiff/GeoTIFF + Files: image1.tif + Size is 2000, 2000 + Coordinate System is `' + Origin = (5400.000000000000000,4300.000000000000000) + Pixel Size = (1.000000000000000,1.000000000000000) + Image Structure Metadata: + INTERLEAVE=PIXEL + Corner Coordinates: + Upper Left ( 5400.000, 4300.000) + Lower Left ( 5400.000, 6300.000) + Upper Right ( 7400.000, 4300.000) + Lower Right ( 7400.000, 6300.000) + Center ( 6400.000, 5300.000) + Band 1 Block=2000x1 Type=Float32, ColorInterp=Gray + Band 2 Block=2000x1 Type=Float32, ColorInterp=Undefined + Band 3 Block=2000x1 Type=Float32, ColorInterp=Undefined + Band 4 Block=2000x1 Type=Float32, ColorInterp=Undefined + #+END_EXAMPLE + + Les pixels sont donc encodés en nombres flottants de 32 bits. En + analysant les valeurs de l'image dans *monteverdi*, on constate + que les valeurs de pixels sont entières et comprise entre 100 et + 1600 environ. L'encodage en flottants de 32 bits est donc + inutilement coûteux. + + L'appel à l'application *Convert* permet de convertir le type de + pixel encodé: + + #+BEGIN_EXAMPLE + $ otbcli_Convert -in image1.tif -out image1_uint16.tif uint16 + #+END_EXAMPLE + + Nous pouvons maintenant comparer la taille des images, et + constater que l'image ainsi générée occupe seulement la moitié de + la place par rapport à l'image d'origine. + + #+BEGIN_EXAMPLE + $ du -h image1.tif + 62M image1.tif + + $ du -h image1_uint16.tif + 31M image1_uint16.tif + #+END_EXAMPLE + + L'utilisation de l'application *CompareImages* nous montre par + ailleurs que le contenu des deux images est identique. + + #+BEGIN_EXAMPLE + $ otbcli_CompareImages -ref.in image1.tif -meas.in image1_uint16.tif + 2016 Mar 08 13:59:24 : Application.logger (INFO) Using whole reference image + since the ROI contains no pixels or is not specified + 2016 Mar 08 13:59:24 : Application.logger (DEBUG) Region of interest used + for comparison : ImageRegion (0x7ffcb6a6d930) + Dimension: 2 + Index: [0, 0] + Size: [2000, 2000] + + 2016 Mar 08 13:59:24 : Application.logger (INFO) reference image channel 1 + is compared with measured image channel 1 + 2016 Mar 08 13:59:24 : Application.logger (INFO) MSE: 0 + 2016 Mar 08 13:59:24 : Application.logger (INFO) MAE: 0 + 2016 Mar 08 13:59:24 : Application.logger (INFO) PSNR: 0 + Output parameters value: + mse: 0 + mae: 0 + psnr: 0 + #+END_EXAMPLE + + Pour calculer le NDVI, on utilise la commande suivantes : + + + #+BEGIN_EXAMPLE + $ otbcli_RadiometricIndices -in image1.tif + -out image1_ndvi.tif uint16 + -channels.red 1 + -channels.green 2 + -channels.blue 3 -channels.nir 4 + -list Vegetation:NDVI + #+END_EXAMPLE + + Si l'on ouvre l'image ainsi générée dans *monteverdi*, on constate + que l'image vaut 0 en tout point: l'encodage de la sortie ne + convient. Il faudrait utiliser un type flottant (comme celui par + défaut par exemple. + +*** Les fichiers .geom + + Le fichier geom contient les informations nécessaires aux + opérations de corrections géométriques et radiométriques de + l'image. + +*** Les noms de fichiers étendus + +**** Les options de lecture + + L'utilisation du paramètre de nom de fichier étendu /skipgeom/ + permet d'ignorer les informations contenue dans le fichier + /geom/. On constate que la taille du pixel au sol est erronée et + que les informations relatives à la date d'acquisition et au + capteur ont notamment disparu. + + Le paramètre de nom de fichier étendu /geom/ permet d'attacher un + fichier /geom/ à une image existante. C'est notamment utile pour + réaliser des traitements géométriques ou radiométriques pour une + image quelconque. Par défaut, l'Orfeo ToolBox (en fait OSSIM) + cherche un fichier /geom/ portant le même nom que l'image. + +**** Les options d'écriture + + La ligne de commande suivante permet de réaliser l'opération + demandée: + + #+BEGIN_EXAMPLE + $ otbcli_Convert -in image1.tif + -out "image1_comp.tif?&gdal:co:NBITS=12&gdal:co:COMPRESS=LZW" uint16 + #+END_EXAMPLE + + La taille de l'image ainsi créée est : + + #+BEGIN_EXAMPLE + $ du -h image1_comp.tif + 23M image1_comp.tif + #+END_EXAMPLE + + On gagne donc 8 Mo par rapport à l'image encodée sur 16 bits non + signés. Par ailleurs l'appel à l'application *CompareImages* + permet de constater que les images sont toujours de contenu + identique. + + Le paramètre /box/ s'utilise de la manière suivante : + + #+BEGIN_EXAMPLE + $ otbcli_Convert -in image1.tif + -out "image1_comp.tif?&box=1000:1000:100:100" uint16 + #+END_EXAMPLE + + Après exécution de cette commande, l'image de sortie correspond + à un extrait de la sortie totale, commençant à l'index + $(1000,1000)$ et de taille 100x100 pixels. Cette option peut être + utile pour prévisualiser le résultat d'un traitement avant de + traiter l'image entière. + +*** La gestion du streaming + + L'appel à l'application *LocalStatiticsExtraction* se fait comme + suit: + + #+BEGIN_EXAMPLE + $ otbcli_LocalStatisticExtraction -in image1.tif -out image1_ls.tif + -radius 9 + #+END_EXAMPLE + + On constate que le calcul s'effectue en plusieurs phases (charge + des processeurs), entrecoupées de phase d'écriture sur le + disque. Par défaut, c'est l'Orfeo ToolBox qui détermine le + découpage optimal. + + Pour désactiver complètement le streaming, il suffit d'utiliser + les options de noms de fichier étendus suivantes: + + #+BEGIN_EXAMPLE + $ otbcli_LocalStatisticExtraction -in image1.tif * + -out "image1_ls.tif?&streaming:type=none" -radius 9 + #+END_EXAMPLE + + On peut constater dans ce cas que le calcul s'effectue en une + seule fois, suivi d'une seule phase d'écriture sur le disque. + + #+BEGIN_EXAMPLE + $ otbcli_LocalStatisticExtraction -in image1.tif + -out "image1_ls.tif?&streaming:type=stripped \ + &streaming:sizemode=nbsplits&streaming:sizevalue=1000" + -radius 9 + #+END_EXAMPLE + + Cette fois-ci, on observe de multiples phases de calcul suivi de + phases d'écriture. Le temps de calcul peut être quasiment deux + fois plus long, car un découpage trop important est sous optimal. + +*** Le multi-threading + + Voici comment fixer le nombre de threads à 1 : + + #+BEGIN_EXAMPLE + $ export ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS=1 + $ otbcli_LocalStatisticExtraction -in image1.tif + -out "image1_ls.tif?&streaming:type=none" + -radius 9 + #+END_EXAMPLE + + Dans ce cas, le temps de calcul est beaucoup plus important. On + peut également constater qu'augmenter le nombre de threads au delà + des capacités de la machine (nombre de coeurs du processeur) ne + permet pas d'améliorer les temps de calcul. + diff --git a/Courses/2016/bordeaux.inra.fr/WorkshopGuide/preprocessing.org b/Courses/2016/bordeaux.inra.fr/WorkshopGuide/preprocessing.org index 383f0c77a9d24db1322e8d89c44f4ad3f536ac47..ce8492bda4dce41efd5b526ee0658703a29c8dab 100644 --- a/Courses/2016/bordeaux.inra.fr/WorkshopGuide/preprocessing.org +++ b/Courses/2016/bordeaux.inra.fr/WorkshopGuide/preprocessing.org @@ -1,27 +1,275 @@ ** Pré-traitements de l'imagerie THR optique :slides: -*** Slide +*** Introduction + - Principe des corrections radiométriques et géométriques des images + - Utilisation des OTB-Applications ** Pré-traitements de l'imagerie THR optique :guide: *** Description :desc: **** Résumé - + Cet exercice présente les corrections radiométriques et géométriques +des images à l'aide d'*OTB applications*. **** Pré-requis - - + - Connaissances de base en traitement des images de télédétection. + - Notions d'utilisation d'applications en ligne de commande. + **** Objectifs *** Étapes :steps: - +Dans cette partie de l'exercice, vous utiliserez les images +~phr_xs_osr_mipy.tif~ et ~phr_pan_osr_mipy.tif~. Ce sont des extraits Pan et XS +d'un produit Bundle Pléiades Primary (Niveau 1) sur le sud-ouest de Toulouse. **** Corrections atmosphériques +Cette opération consiste à transformer les comptes numériques en +réflectances (valeurs physiques). Elle comprend le passage de +réflectance au sommet de l'atmosphère vers la réflectance de surface, +dont l'objectif est de corriger les effets atmosphériques. + #+BEGIN_LaTeX + + + \begin{center} +\begin{tikzpicture}[scale=0.18] + \tiny + + \draw[->,thick] (0,0) -- +(3,0); +% \pause + + \draw[fill=black!30,rounded corners=2pt] (4,-2) rectangle +(6,4); + \node[text width= 0.8cm] (SensorModel) at (7,0) {DN to Lum}; +% \pause + + \draw[->,thick] (11,0) -- +(3,0); +% \pause + + \draw[fill=black!30,rounded corners=2pt] (16,-2) rectangle +(6,4); + \node[text width= 0.85cm] (SensorModel) at (19,0) {Lum to Refl}; +% \pause + + + \draw[->,thick] (23,0) -- +(3,0); +% \pause + + \draw[fill=black!30,rounded corners=2pt] (27,-2) rectangle +(6,4); + \node[text width= 0.85cm] (SensorModel) at (30,0) {TOA to TOC}; +% \pause + + \draw[->,thick] (34,0) -- +(3,0); +% \pause + + \draw[fill=black!30,rounded corners=2pt] (38,-2) rectangle +(6.5,4); + \node[text width= 0.85cm] (SensorModel) at (41,0) {Adjacency}; +% \pause + + \draw[->,thick] (45,0) -- +(3,0); + + \end{tikzpicture} +\end{center} - TOA puis TOC, regarder la différence +#+END_LaTeX + +Avec l'image ~phr_xs_osr_mipy.tif~: + +1. Utilisez l'application *OpticalCalibration* pour calculer la + réflectance au sommet de l'atmosphère (top of atmosphere). +2. Utilisez l'application *OpticalCalibration* pour calculer la + réflectance de surface (top of canopy). +3. Comparez les 2 images en utilisant Monteverdi ou les applications + en ligne de commande (TOA-TOC). Comparez cette différence pour les bandes + rouge, verte et bleu (B0,B1,B2) +4. Appliquez les opérations 1,2 et 3 à l'image panchromatique ~phr_pan_osr_mipy.tif~. + +_Trucs et astuces :_ +- Activez l'option '-milli' afin de générer les images de sortie en + millièmes de réflectance (entier 16 bits). Par défaut, les images de + réflectance sont sauvegardées en flottant (entre 0 et 1). **** Fusion P+XS + L'objectif de cet exercice est de créer une image fusionnée (/Pan-Sharpening/). + En raison des contraintes physiques sur la conception du capteur, il est + difficile d'obtenir la meilleure résolution spatiale et spectrale en même + temps. Pour cette raison la plupart des capteurs spatiaux THR délivrent 2 + types d'images: + - Multi-spectral (XS): composée de plusieurs bandes, chacune sur une plage + de résolution spectrale donnée. Pour Pléiades, 4 bandes (B,V,R,PIR) à une + résolution spatiale de 2,8m (rééchantillonné à 2m) + - Panchromatique (PAN): image en niveau de gris avec un détecteur couvrant + une plus large partie du spectre ce qui permet d'augmenter le flux et + d'améliorer la résolution par rapport à l'image multi-spectrale. 0,7m + dans le cas de Pléiades (rééchantillonné à 0,5m) + - BundleToPerfectSensor puis différents algos de fusion + Nous allons réaliser cette fusion à partir des extraits pan et xs en + réflectance au sommet de l'atmosphère ~phr_xs_osr_mipy_toa.tif~ et ~phr_xs_osr_mipy_toa.tif~: + + Pour cela: + + 1. Utilisez l'application *BundleToPerfectSensor* pour superposer et + fusionner l'image PAN et XS. Notez que l'application possède un mode + /phr/ qui permet d'effectuer la superposition des 2 images sans utiliser + les modèles de capteurs respectifs des images pan et xs (mode par défaut). En effet les + produits bundle Pléiades ont la particularité d'etre sur 2 grilles + colocalisées. + 2. Quel algorithme de fusion est utilisé dans l'application *BundleToPerfectSensor*? + 3. (optionnel) Utilisez les applications *Superimpose* et *Pansharpening* + pour réaliser la meme opération en utilisant d'autres méthodes de fusion. **** Ortho-rectification + Cette opération permet d'associer des coordonnées au sol aux pixels de l'image. + + #+BEGIN_LaTeX + \begin{center} + \begin{tikzpicture}[scale=0.2] + \tiny + \draw[fill=black!10] (-1,-12) rectangle (75,17); + \foreach \x in {5,...,1} + \draw[fill=red] (\x,\x) rectangle +(4,4); + \node[fill=black!10, text width= 1.5cm] (InputSeries) at + (4,-1) {Input series}; + %\pause + \draw[->,thick] (9,5) -- +(3,0); + %%\pause + \draw[fill=black!30,rounded corners=2pt] (12.2,3) rectangle +(6,4); + \node[text width= 0.8cm] (SensorModel) at (15,5) {Sensor Model}; + %\pause + \draw[fill=red!30] (1,-10) rectangle +(4,4); + \node[fill=black!10, text width= 1.2cm] (DEM) at + (5,-11) {DEM}; + %\pause + \draw[->,thick] (3,-5.5) -- ++(0,3) -- ++(12,0) -- ++(0,5); + %\pause + \draw[->,thick] (18.5,5) -- +(3,0); + %\pause + \foreach \x in {5,...,1} + \draw[fill=blue,xshift=600pt] (\x,\x) rectangle +(4,4); + \node[fill=black!10, text width= 2.8cm] (GeoRefSeries) at + (28,-1) {Geo-referenced Series}; +%\pause + + + \draw[->,thick] (25.5,8.5) -- +(0,3); + + \draw[fill=black!30,rounded corners=2pt] (22,12) rectangle +(8.5,4); + \node[text width= 1.5cm] (HomPoExtr) at (27,14) {Homologous Points}; + + \draw[->,thick] (21.5,14) -- +(-2.5,0); + + \draw[fill=black!30,rounded corners=2pt] (11,12) rectangle +(8,4); + \node[text width= 1.3cm] (BBAdj) at (15.5,14) {Bundle-block Adjustement}; + + \draw[->,thick] (15,11.5) -- +(0,-4); + + %\pause + \draw[->,thick] (30,5) -- +(3,0); + %\pause + \draw[fill=black!30,rounded corners=2pt] (33.2,2.5) rectangle +(6,4.5); + \node[text width= 0.7cm] (FineRegistration) at (36,4.9) {Fine Registration}; + %\pause - Sans DEM, avec DEM, régler la projection + + \draw[->,thick] (39.5,5) -- +(3,0); + %\pause + \foreach \x in {5,...,1} + \draw[fill=green,xshift=1200pt] (\x,\x) rectangle +(4,4); + \node[fill=black!10, text width= 1.8cm] (RegistSeries) at + (47,-1) {Registered Series}; + %\pause + \draw[->,thick] (36,2) -- ++(0,-10) -- ++(-30,0); + + %\pause + \draw[->,thick] (52,5) -- +(3,0); + %\pause + \draw[fill=black!30,rounded corners=2pt] (55.2,2.5) rectangle +(6,4.5); + \node[text width= 0.7cm] (CartoProjection) at (57.5,4.9) + {Map Projection}; + %\pause + + + \draw[->,thick] (61.5,5) -- +(3,0); + %\pause + \foreach \x in {5,...,1} + \draw[fill=yellow,xshift=1810pt] (\x,\x) rectangle +(4,4); + \node[fill=black!10, text width= 1.95cm] (CartoSeries) at + (68,-1) {Cartographic Series}; + + + \end{tikzpicture} + \end{center} + #+END_LaTeX + Utilisez l'application *Orthorectification* pour réaliser + l'orthorectification du produit fusionné: + 1. Sans DEM + 2. Avec un DEM et un geoid (utilisé le répertoire /SRTM/) + 3. Comparez les 2 images en sortie dans Monteverdi. Que constatez vous? + 4. Quel est le système de projection par défaut dans l'application *Orthorectification*? + 5. Dans quelle zone UTM se trouve l'extrait PHR Pléiades? + 6. Tester plusieurs types de projection en sortie (wgs84, lambert 93) ** Pré-traitements de l'imagerie THR optique :solutions: +*** Corrections atmosphériques + + Calcul réflectance TOA: + #+BEGIN_EXAMPLE + $ otbcli_OpticalCalibration -in phr_xs_osr_mipy.tif + -out phr_xs_osr_mipy_toa.tif uint16 + -level toa + -milli 1 + #+END_EXAMPLE + + Calcul réflectance TOC: + #+BEGIN_EXAMPLE + $ otbcli_OpticalCalibration -in phr_xs_osr_mipy.tif + -out phr_xs_osr_mipy_toa.tif uint16 + -level toc + -milli 1 + #+END_EXAMPLE + + On peut utiliser le module *BandMathX* pour calculer la différence +entre les 2 images multispectral: + + #+BEGIN_EXAMPLE + $ otbcli_BandMathX -il phr_xs_osr_mipy_toa.tif phr_xs_osr_mipy_toc.tif + -out diff_xs_toa_toc.tif int16 + -exp "im1-im2" + #+END_EXAMPLE + + Pour l'image panchromatique: + #+BEGIN_EXAMPLE + $ otbcli_BandMath -il phr_pan_osr_mipy_toa.tif phr_pan_osr_mipy_toc.tif + -out diff_pan_toa_toc.tif int16 + -exp "im1b1-im2b1" + #+END_EXAMPLE + +*** Fusion P+XS + #+BEGIN_EXAMPLE + $ otbcli_BundleToPerfectSensor -inp phr_pan_osr_mipy_toa.tif + -inxs phr_xs_osr_mipy_toa.tif + -mode phr + -out phr_pxs_osr_mipy.tif uint16 + #+END_EXAMPLE +*** Ortho-rectification + + 1. Orthorectification sans DEM: + #+BEGIN_EXAMPLE + $ otbcli_OrthoRectification -io.in phr_pxs_osr_mipy.tif + -io.out phr_orthopxs_osr_mipy.tif uint16 + #+END_EXAMPLE + 2. Orthorectification avec DEM et geoid: + #+BEGIN_EXAMPLE + $ otbcli_OrthoRectification -io.in phr_pxs_osr_mipy.tif + -io.out phr_orthopxs_osr_mipy.tif uint16 + -elev.dem ../SRTM/ -elev.geoid ../Geoid/egm96.grd + #+END_EXAMPLE + 3. La projection par defaut est UTM. Sur l'extrait Pléiades la zone UTM est + 32 Nord. + 4. Orthorectification en WGS84 et en Lambert 93: + #+BEGIN_EXAMPLE + $ otbcli_OrthoRectification -io.in phr_pxs_osr_mipy.tif + -io.out phr_orthopxs_osr_mipy.tif uint16 + -elev.dem ../SRTM/ -elev.geoid ../Geoid/egm96.grd + -map epsg -map.epsg.code 4326 + #+END_EXAMPLE + #+BEGIN_EXAMPLE + $ otbcli_OrthoRectification -io.in phr_pxs_osr_mipy.tif + -io.out phr_orthopxs_osr_mipy.tif uint16 + -elev.dem ../SRTM/ -elev.geoid ../Geoid/egm96.grd + -map lambert93 + #+END_EXAMPLE diff --git a/Courses/2016/bordeaux.inra.fr/WorkshopGuide/sar.org b/Courses/2016/bordeaux.inra.fr/WorkshopGuide/sar.org index 2005c95343fad0eca6b971e697d6927bc30e6bd8..ea7bed0166867e70e09b32beff9c67d3d0b46e73 100644 --- a/Courses/2016/bordeaux.inra.fr/WorkshopGuide/sar.org +++ b/Courses/2016/bordeaux.inra.fr/WorkshopGuide/sar.org @@ -1,14 +1,128 @@ -** Calibration, débruitage et extraction de primitives :slides: +** Introduction au traitements des images RSO :slides: *** Slide -** Calibration, débruitage et extraction de primitives pour les images SAR :guide: +** Introduction au traitements des images RSO :guide: *** Description :desc: **** Résumé + Cet exercice constitue une introduction au traitement et à l'analyse des + images RSO (radar à synthèse d'ouverture) en utilisant l'Orfeo ToolBox: + + - Manipulation des images + - Filtrage du speckle avec différentes méthodes + - Extraction de primitives + + Il existe par ailleurs d'autres outils et des tutoriaux disponibles + permettant de se familiariser avec les données radar. **** Pré-requis + - Logiciels installés (Monteverdi et Orfeo ToolBox) + - Données téléchargées + - Connaisance du mécanisme des applications de l'Orfeo ToolBox (voir + exercice correspondant) **** Objectifs *** Étapes :steps: +**** Introduction à l'imagerie RSO + +Dans cette exercice nous utiliserons les extraits de l'image Sentinel 1 SLC HH +et HV: ~s1_hh.tif~ et ~s1_hv.tif~. L'image se situe en Allemagne au sud de la +ville d'Ulm près du lac Constance (47.456276, 9.638616). + +1. Ouvrir les images dans Monteverdi. Combien de bandes possède les images? +2. A quoi corresponde ces bandes? +3. Utilisez l'application *BandMath* pour calculer l'image d'intensité à partir + des produits complexes ~s1_hh.tif~ et ~s1_hv.tif~. + +**** Réduction du speckle + Les images SAR sont fortement affectées par le chatoiement (speckle) qui constitue un + type particulier de bruit présent dans tous les systèmes d'acquisition cohérent + (sonar, laser, etc.). Ce bruit est très fort et il a un effet multiplicatif. + + Il existe plusieurs méthodes pour réduire ce bruit. Dans la suite nous + allons utiliser le filtre de /Frost/ qui possède 2 paramètres: rayon: taille de la fenetre + et /deramp/ qui controle la décroissance d'une fonction exponentiel qui est + utilisé pour pondéré la distance entre le pixel central et son voisinage. + + 1. Quelle sont les méthodes de réduction du speckle disponible dans l'OTB? + 2. Utilisez le filtre de Frost avec différents rayons (3,5 et 10) et + commentez l'effet sur l'image de sortie + 3. Commentez la forme de l'histogramme des images filtrées comparé à + l'image d'intensité? + 4. Utilisez le filtre de Frost avec un rayon ed 5 et différentes valeurs + du paramètre /deramp/ (00.5,0.2 et 0.8). Commentez l'effet de ce paramètre. + +**** Polarimétrie + Nous allons comparer de manière qualitative la différence entre les + observations des images en polarimétries HH et HV. + + 1. Calculez la différence entre l'image d'intensité HH et HV. + 2. Effectuez une composition colorée avec les bandes HH, HV et HH-HV. + 3. Affichez le résultat avec Monteverdi et commentez. +**** +** Introduction au traitements des images RSO :solutions: +**** Introduction à l'imagerie RSO +1. deux bandes +2. partie réelle et partie imaginaire? +3. Il faut utiliser la commande suivante: + + Pour HH: + + #+BEGIN_EXAMPLE + $ otbcli_BandMath -il s1_hh.tif + -out intensity_hh.tif int32 + -exp "im1b1*im1b1+im1b2*im1b2" + #+END_EXAMPLE + + Pour HV: + + #+BEGIN_EXAMPLE + $ otbcli_BandMath -il s1_hv.tif + -out intensity_hv.tif int32 + -exp "im1b1*im1b1+im1b2*im1b2" + #+END_EXAMPLE + +**** Réduction du speckle + + 1. Les méthodes disponibles sont: lee, frost, kuan et gamma map. Quelque + soit la méthode utilisée on note une amélioration majeure de la qualité + de l'image filtrée qui permet d'identifier des structures difficilement + visible dans l'image d'intensité originale. + 2. Réduction du speckle avec l'algorithme de Frost: + + #+BEGIN_EXAMPLE + $ otbcli_Despeckle -in intensity_hh.tif + -out intensity_hh_speckle.tif + -filter frost + -filter.frost.rad 3 + #+END_EXAMPLE + + L'augmentation du rayon a pour effet d'augmenter le lissage de l'image + fitlrée. Cela permet d'améliorer la qualité des images dans les zones + homogènes mais entraine également la perte d'information et de détail + sur des petites structures avec beaucoup de contraste. + + 3. L'histogramme des images filtrées tend à devenir gaussien (en cloche) et + va progressivement différer de la distribution Gamma de l'image + originale (la loi Gamma se caractérise par une distribution en cloche + asymétrique avec une longue queue à droite) . + 4. L'augmentation du paramètre /deramp/ diminue la décroissance de + l'atténuation exponentielle et à donc tendance à prendre plus en compte + les pixels éloignés du pixel central ce qui augmente l'effet de lissage + sur l'image filtrée. + +**** Polarimétrie + 1. Calcul de la différence HH-HV: + #+BEGIN_EXAMPLE + $ otbcli_BandMath -il intensity_hh_speckle.tif intensity_hv_speckle.tif + -out hh-hv_speckle.tif -exp "im1b1-im2b1" + #+END_EXAMPLE -** Calibration, débruitage et extraction de primitives pour les images SAR :solutions: + On effectue ensuite la concaténation entre les polarisations croisées et la + différence des 2: + #+BEGIN_EXAMPLE + $ otbcli_ConcatenateImages -il intensity_hh_speckle.tif + intensity_hv_speckle.tif hh-hv_speckle.tif + -out intensity_compo.tif + #+END_EXAMPLE + 2. Commentaire sur composition colorée, zone en violet (valeur HH elevé) diff --git a/Courses/2016/bordeaux.inra.fr/WorkshopGuide/segmentation.org b/Courses/2016/bordeaux.inra.fr/WorkshopGuide/segmentation.org index b4dbac14b7db1c6264e3f6107468c4b69006def3..ea47b8fd38db7d537ba5ff863a87eda1df9aff9f 100644 --- a/Courses/2016/bordeaux.inra.fr/WorkshopGuide/segmentation.org +++ b/Courses/2016/bordeaux.inra.fr/WorkshopGuide/segmentation.org @@ -3,19 +3,100 @@ ** Segmentation et export vers un SIG :guide: *** Description :desc: **** Résumé + + Cet exercice permet de se familariser avec la segmentation large + échelle en utilisant les algorithmes MeanShift et GRM. On y + parcourt les différentes étapes jusqu'à l'export des polygones + segmentés dans un SIG. **** Pré-requis - + + - Logiciels installés (Monteverdi et Orfeo ToolBox) + - Données issues du TP de pré-traitements pour l'imagerie THR optique + - Connaisance du mécanisme des applications de l'Orfeo ToolBox + (voir exercice correspondant) **** Objectifs + - Connaître les étapes pour réaliser une segmentation + - Savoir optimiser les paramètres de la segmentation + - Savoir exporter la segmentation vers un logiciel SIG + *** Étapes :steps: -Dire un mot de GRM. +**** Lissage de l'image par l'algorithme MeanShift + + L'algorithme du MeanShift réalise un lissage de l'image tout en + préservant ses contours. Il rend ainsi l'images plus homogène + tout en conservant des frontière franche entre les zones. Il + facilite ainsi la segmentation de l'image par des méthodes + simples, comme l'extraction des composantes + connexes. L'algorithme moyenne itérativement les pixels dans un + certain voisinnage spatial et spectral. + + Réaliser un lissage de l'image /myimage.tif/ en utilisant + l'application *MeanShiftSmoothing*. + + Notes: + - L'option /modesearch/ permet d'accélérer le calcul au détriment + de la stabilité, et sera donc désactivée, + - Le rayon spatial (/spatialr/) et spectral (/ranger/) sont les + paramètres déterminants pour l'algorithme. Le premier s'exprime + en nombre de pixel, tandis que le second comme une distance + entre signatures spectrales des pixels. + - La sortie /foutpos/ code les position moyenne des pixels après + lissage, et sera utilisée dans la suite du TP. + - Le paramètre de nom de fichier étendu /box/ peut être utilisé + pour trouver la valeur de /ranger/ et /spatialr/ optimale sans + traiter toute l'image. + +**** Segmentation + + Cette étape va produire une segmentation initiale à partir des + images écrites précédement (sorties /fout/ et /foutpos/). Les + pixels adjacents dont les valeurs dans l'image /fout/ sont + distantes de moins de /ranger/ et dont les positions estimées + dans l'image /foutpos/ sont distantes de moins de /spatialr/ + seront groupés au sein de la même composante connexe. + + Le calcul est fait par tuile, dont on peut fixer la taille au + moyen des paramètres /tilesizex/ et /tilesizey/. + + Enfin, le paramètre /minsize/ permet d'éliminer toutes les + régions dont la taille produite est trop petite (seuil exprimé en + nombre de pixels). + + Utilisez l'application *LSMSSegmentation* pour réaliser cette + étape. A noter: + - Utilisez un /minsize/ de 0 dans cette première étape, + - L'image de sortie sera une image étiquettée, dans laquelle + chaque pixel porte un label entier unique correspondant au + segment auquel il appartient. Il est recommandé d'encoder cette + sortie en /uint32/ afin de disposer de suffisament de labels + uniques. + - Les valeurs pour les paramètres /ranger/ et /spatialr/ doivent + être inférieures aux valeurs utilisées pour le lissage (étape + précédente). + + + Utilisez la méthode /optimal/ de l'application *ColorMapping* + afin de créer une carte contrastée des régions segmentées, qui + sera plus facile à analyser. + +**** Traitement des petites région -**** LS segmentation + Une fois la segmentation intiale réalisée, il reste en général + beaucoup de régions de petite taille, qui ne correspondent à + aucun objet d'intérêt. L'application *LSMSSegmentation* permet de + les filtrer (paramètre /minsize/), mais il est également possible + de réaliser un post-traitement pour fusionner itérativement les + régions de taille trop faible avec les régions adjacentes dont la + radiométrie est la plus proche. C'est l'objet de l'application + *LSMSSmallRegionsMerging*. -**** Traitement des petites régions + Utilisez cette application pour retraiter la segmentation + initiale, en fusionnant toutes les régions dont la taille est + inférieure à 10 pixels. **** Vectorization diff --git a/SoftwareGuide/Latex/Installation.tex b/SoftwareGuide/Latex/Installation.tex index 32912851edba64842a71151107a8205ca3f0e399..b4901069474ca1a27e18fab1ae19b8334241d91c 100644 --- a/SoftwareGuide/Latex/Installation.tex +++ b/SoftwareGuide/Latex/Installation.tex @@ -210,12 +210,9 @@ dependencies necessary for OTB. Once all the dependencies are compiled and insta those dependencies. OTB's compilation is customized by specifying configuration variables. -The most important configuration variables are shown in table~\ref{tab:installation-cmake-variables}. -The simplest way to provide configuration variables is via the command line \texttt{-D} option: -\begin{verbatim} -$ cd ~/OTB/build -$ cmake -D CMAKE_INSTALL_LOCATION=~/OTB/install ../otb/SuperBuild -\end{verbatim} +The most important configuration variables are shown in +table~\ref{tab:installation-cmake-variables}. + A pre-load script can also be used with the \texttt{-C} options (see \url{https://cmake.org/cmake/help/v3.4/manual/cmake.1.html#options}). Another option is to set variables manually with \texttt{cmake-gui} or \texttt{ccmake}. @@ -227,12 +224,22 @@ table~\ref{tab:installation-cmake-variables}). SuperBuild downloads dependencies into the \texttt{DOWNLOAD\_LOCATION} directory, which will be \texttt{$\sim$/OTB/build/Downloads} in our example. Dependencies can be downloaded manually into this directory before the compilation step. -This can be usefull if you wish to bypass a proxy, intend to compile OTB without an internet conection, or other network +This can be useful if you wish to bypass a proxy, intend to compile OTB without an internet connection, or other network constraint. You can find a complete bundle with all dependencies sources on the Orfeo ToolBox website (pick the 'SuperBuild-archives' corresponding to the OTB version you want to build) : \begin{center} \url{https://www.orfeo-toolbox.org/packages} \end{center} +The simplest way to provide configuration variables is via the command line \texttt{-D} option: +\begin{verbatim} +$ cd ~/OTB/build +$ cmake -D CMAKE_INSTALL_LOCATION=~/OTB/install -D DOWNLOAD_LOCATION=~/OTB/build/Downloads ../otb/SuperBuild +\end{verbatim} + +DOWNLOAD\_LOCATION cmake option is optional as explained above but allow to +compile OTB superbuild without internet connection. + + You are now ready to compile OTB! Simply use the make command (other targets can be generated with CMake's \texttt{-G} option): \begin{verbatim}