<div dir="ltr">Thank you Moritz for your support!!<div><br></div><div>Roberta</div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-08-13 12:06 GMT+02:00 Moritz Lennert <span dir="ltr"><<a href="mailto:mlennert@club.worldonline.be" target="_blank">mlennert@club.worldonline.be</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Great work, Roberta !<br>
<br>
Thanks for these two very useful modules !<br>
<br>
<br>
Moritz<span class=""><br>
<br>
On 13/08/18 10:20, Roberta Fagandini wrote:<br>
</span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
Hi all!<br>
I'm Roberta Fagandini and this is the final report of my GSoC project.<br>
<br>
The title of the project is "GRASS GIS module for Sentinel-2 cloud and shadow detection". It adds new tools for the processing of Sentinel 2 images to GRASS GIS software (Organization: OSGeo).<br>
<br></span>
*Abstract:*<span class=""><br>
Optical sensors are unable to penetrate clouds leading to related anomalous reflectance values. Unlike Landsat images, Sentinel 2 datasets do not include thermal and Quality Assessment bands that simplify the detection of clouds avoiding erroneous classification. At the same time, also clouds shadows on the ground lead to anomalous reflectance values which have to be taken into account during the image processing.<br>
The project creates a specific module for GRASS GIS application (i.sentinel.mask) which implements an automatic procedure for clouds and shadows detection for Sentinel 2 images. The procedure is based on an algorithm, developed within my PhD research, which allows to automatically identify clouds and their shadows applying some rules on reflectance values (values thresholds, comparisons between bands, etc.). These have been defined starting from rules found in literature and conveniently refined. In order to increase the accuracy of the final results, a control check is implemented. Clouds and shadows are spatially intersected in order to remove misclassified areas. The final outputs are two different vector maps (OGR standard formats), one for clouds and one for shadows.<br>
To run i.sentinel.mask, the bands of the desired Sentinel 2 images have to be imported and the atmospheric correction has to be applied.<br></span>
In order to make the data preparation easier, another GRASS GISaddonmodule has been developed within the GSoC project.<br>
i.sentinel.preprocis a module for the preprocessing of Sentinel 2 images (Level-1C Single Tile product) which wraps the import and the atmospheric correction using respectively two existing GRASS GIS modules, i.sentinel.import and i.atcorr.<br>
<br>
*The state of the art before the project:*<span class=""><br>
Before this GSoC 2018 project, no modules for the detection of clouds and shadows were available for Sentinel 2 images. Only a specific module for Landsat automatic cloud coverage assessment was available within GRASS GIS (i.landsat.acca) while regarding shadows, no specific module was available.<br></span>
Moreover, performing the atmospheric correction was a bit complicated especially for unexperiencedusers who have to process one band at a time and provide all input parameters manually.<br>
<br>
*The added value that the project brought to GRASS GIS:*<br>
Now a specific module for clouds and shadows detection, i.sentinel.mask,is available in GRASS GIS.<br>
Moreover, i.sentinel.preprocprovides a simplified module which allows importing images and performing the atmospheric correction avoiding users to supply all the required input parameters manually. The module should help users in preparing data to use as input for i.sentinel.mask. In fact, it makes especially the atmospheric correction procedure easier and faster because it allows performing atmospheric correction of all bands of a Sentinel 2 scene with a single process and it retrieves most of the required input parameters from the image itself. Moreover, one of the possible output of i.sentinel.preprocis a text file to be used as input for i.sentinel.mask.<br>
<br>
*Follow up:*<br>
Both i.sentinel.mask and i.sentinel.preprocare complete and working modules which can be easily installed with g.extension from the official GRASS GIS SVN repository.<span class=""><br>
Obviously, they can be improved therefore the next steps could be:<br>
<br></span>
  * Implementation of other existing algorithms of clouds and shadows<br>
    detection (i.sentinel.mask)<br>
  * Implementation of a new download procedure avoiding dependencies<br>
    (i.sentinel.preproc)<br>
  * Integration of the Topographic Correction (i.sentinel.preproc)<span class=""><br>
<br>
NOTE: Implementation of other existing algorithms of clouds and shadows detection was one of the possible goals of the GSoC project but the codingand debuggingof some parts of the twoaddonsrequired more time than expected.<br>
<br></span>
*Permanent links:*<br>
*<br>
*<br>
/Code developed during the GSoC coding period: /<br>
<a href="https://github.com/RobiFag/GRASS_clouds_and_shadows" rel="noreferrer" target="_blank">https://github.com/RobiFag/GRA<wbr>SS_clouds_and_shadows</a> <<a href="https://github.com/RobiFag/GRASS_clouds_and_shadows" rel="noreferrer" target="_blank">https://github.com/RobiFag/GR<wbr>ASS_clouds_and_shadows</a>><br>
<br>
/Codes on the official GRASS GIS SVN repository:/<br>
<a href="https://trac.osgeo.org/grass/browser/grass-addons/grass7/imagery/i.sentinel.mask" rel="noreferrer" target="_blank">https://trac.osgeo.org/grass/b<wbr>rowser/grass-addons/grass7/ima<wbr>gery/i.sentinel.mask</a> <<a href="https://trac.osgeo.org/grass/browser/grass-addons/grass7/imagery/i.sentinel.mask" rel="noreferrer" target="_blank">https://trac.osgeo.org/grass/<wbr>browser/grass-addons/grass7/im<wbr>agery/i.sentinel.mask</a>><br>
<a href="https://trac.osgeo.org/grass/browser/grass-addons/grass7/imagery/i.sentinel.preproc" rel="noreferrer" target="_blank">https://trac.osgeo.org/grass/b<wbr>rowser/grass-addons/grass7/ima<wbr>gery/i.sentinel.preproc</a> <<a href="https://trac.osgeo.org/grass/browser/grass-addons/grass7/imagery/i.sentinel.preproc" rel="noreferrer" target="_blank">https://trac.osgeo.org/grass/<wbr>browser/grass-addons/grass7/im<wbr>agery/i.sentinel.preproc</a>><br>
<br>
/Documentation:/<br>
<a href="https://grass.osgeo.org/grass74/manuals/addons/i.sentinel.mask.html" rel="noreferrer" target="_blank">https://grass.osgeo.org/grass7<wbr>4/manuals/addons/i.sentinel.<wbr>mask.html</a> <<a href="https://grass.osgeo.org/grass74/manuals/addons/i.sentinel.mask.html" rel="noreferrer" target="_blank">https://grass.osgeo.org/grass<wbr>74/manuals/addons/i.sentinel.<wbr>mask.html</a>><br>
<a href="https://grass.osgeo.org/grass74/manuals/addons/i.sentinel.preproc.html" rel="noreferrer" target="_blank">https://grass.osgeo.org/grass7<wbr>4/manuals/addons/i.sentinel.<wbr>preproc.html</a> <<a href="https://grass.osgeo.org/grass74/manuals/addons/i.sentinel.preproc.html" rel="noreferrer" target="_blank">https://grass.osgeo.org/grass<wbr>74/manuals/addons/i.sentinel.<wbr>preproc.html</a>><br>
<br>
/Weekly reports: /<br>
<a href="https://trac.osgeo.org/grass/wiki/GSoC/2018/CloudsAndShadowsDetection" rel="noreferrer" target="_blank">https://trac.osgeo.org/grass/w<wbr>iki/GSoC/2018/CloudsAndShadows<wbr>Detection</a> <<a href="https://trac.osgeo.org/grass/wiki/GSoC/2018/CloudsAndShadowsDetection" rel="noreferrer" target="_blank">https://trac.osgeo.org/grass/<wbr>wiki/GSoC/2018/CloudsAndShadow<wbr>sDetection</a>><br>
<br>
/Images to showcase the project:/<br>
i.sentinel.mask<br>
<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_mask_GWF.png" rel="noreferrer" target="_blank">https://raw.githubusercontent.<wbr>com/RobiFag/GRASS_clouds_and_s<wbr>hadows/master/images/i_sentine<wbr>l_mask_GWF.png</a> <<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_mask_GWF.png" rel="noreferrer" target="_blank">https://raw.githubusercontent<wbr>.com/RobiFag/GRASS_clouds_and_<wbr>shadows/master/images/i_<wbr>sentinel_mask_GWF.png</a>><br>
<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_mask_CD.png" rel="noreferrer" target="_blank">https://raw.githubusercontent.<wbr>com/RobiFag/GRASS_clouds_and_s<wbr>hadows/master/images/i_sentine<wbr>l_mask_CD.png</a> <<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_mask_CD.png" rel="noreferrer" target="_blank">https://raw.githubusercontent<wbr>.com/RobiFag/GRASS_clouds_and_<wbr>shadows/master/images/i_<wbr>sentinel_mask_CD.png</a>><br>
<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_mask_SD.png" rel="noreferrer" target="_blank">https://raw.githubusercontent.<wbr>com/RobiFag/GRASS_clouds_and_s<wbr>hadows/master/images/i_sentine<wbr>l_mask_SD.png</a> <<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_mask_SD.png" rel="noreferrer" target="_blank">https://raw.githubusercontent<wbr>.com/RobiFag/GRASS_clouds_and_<wbr>shadows/master/images/i_<wbr>sentinel_mask_SD.png</a>><br>
<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_mask_CS.png" rel="noreferrer" target="_blank">https://raw.githubusercontent.<wbr>com/RobiFag/GRASS_clouds_and_s<wbr>hadows/master/images/i_sentine<wbr>l_mask_CS.png</a> <<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_mask_CS.png" rel="noreferrer" target="_blank">https://raw.githubusercontent<wbr>.com/RobiFag/GRASS_clouds_and_<wbr>shadows/master/images/i_<wbr>sentinel_mask_CS.png</a>><br>
<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_mask_ES.png" rel="noreferrer" target="_blank">https://raw.githubusercontent.<wbr>com/RobiFag/GRASS_clouds_and_s<wbr>hadows/master/images/i_sentine<wbr>l_mask_ES.png</a> <<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_mask_ES.png" rel="noreferrer" target="_blank">https://raw.githubusercontent<wbr>.com/RobiFag/GRASS_clouds_and_<wbr>shadows/master/images/i_<wbr>sentinel_mask_ES.png</a>><br>
i.sentinel.preproc<br>
<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_preproc_GWF.png" rel="noreferrer" target="_blank">https://raw.githubusercontent.<wbr>com/RobiFag/GRASS_clouds_and_s<wbr>hadows/master/images/i_sentine<wbr>l_preproc_GWF.png</a> <<a href="https://raw.githubusercontent.com/RobiFag/GRASS_clouds_and_shadows/master/images/i_sentinel_preproc_GWF.png" rel="noreferrer" target="_blank">https://raw.githubusercontent<wbr>.com/RobiFag/GRASS_clouds_and_<wbr>shadows/master/images/i_<wbr>sentinel_preproc_GWF.png</a>><br>
<br>
<br>
Kind regards,<br>
Roberta<br>
<br>
</blockquote>
<br>
<br>
</blockquote></div><br></div>