swh:1:snp:9dcf3ab72851691ef27e40da9b2a50243c1bdd22
Raw File
Tip revision: 5f23fb0b6e1d50d996ac54daaa7e637e5d8decaf authored by Software Heritage on 05 May 2020, 00:00:00 UTC
ipol: Deposit 1363 in collection ipol
Tip revision: 5f23fb0
refine.c
/*
* refine.c
*
* Copyright (C) 2019, Tristan Dagobert, CMLA, École Normale Supérieure Paris-Saclay.
*
* This software is a computer program.
* It is a part of a code which estimates, given a satellite time series
* the visibility of each image. Given a gray level time series, it provides a
* Boolean times series indicating the visibility (mainly the opaque clouds,
* haze and shadow).
*
*
* This software is governed by the CeCILL-C license under French law and
* abiding by the rules of distribution of free software.  You can  use,
* modify and/ or redistribute the software under the terms of the CeCILL-C
* license as circulated by CEA, CNRS and INRIA at the following URL
* "http://www.cecill.info".
*
* As a counterpart to the access to the source code and  rights to copy,
* modify and redistribute granted by the license, users are provided only
* with a limited warranty  and the software's author,  the holder of the
* economic rights,  and the successive licensors  have only  limited
* liability.
*
* In this respect, the user's attention is drawn to the risks associated
* with loading,  using,  modifying and/or developing or reproducing the
* software by the user in light of its specific status of free software,
* that may mean  that it is complicated to manipulate,  and  that  also
* therefore means  that it is reserved for developers  and  experienced
* professionals having in-depth computer knowledge. Users are therefore
* encouraged to load and test the software's suitability as regards their
* requirements in conditions enabling the security of their systems and/or
* data to be ensured and,  more generally, to use and operate it in the
* same conditions as regards security.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL-C license and that you accept its terms.
*
*/

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <float.h>
#include <assert.h>

#include "ccproc.h"
#include "stratus.h"
/*============================================================================*/
static void
refine_boolean_map(float * map, int nrow, int ncol, int area, int state_before,
                   int state_after)
{
    int i, p, r;
    int npix;
    int nb_regions;
    int *region_size, *region_bdsize, *region_all, *region_first, *region_idx;

    npix = nrow * ncol;
    region_size   = malloc(npix * sizeof(int));
    region_bdsize = malloc(npix * sizeof(int));
    region_all    = malloc(npix * sizeof(int));
    region_first  = malloc(npix * sizeof(int));
    region_idx    = malloc(npix * sizeof(int));

    nb_regions = ccproc(region_size, region_bdsize, region_all,
                        region_first, region_idx,
                        map, ncol, nrow, floatnan_equality);

    for (r=0; r<nb_regions; r++)
    {
        /* we delete the small regions */
        if (region_size[r] <= area)
        {
            for (i = 0; i < region_size[r]; i++)
            {
                p = region_all[region_first[r] + i];
                if (map[p] == state_before) map[p] = state_after;
            }
        }
    }

    free(region_size);
    free(region_bdsize);
    free(region_all);
    free(region_first);
    free(region_idx);
}
/*============================================================================*/
float **
refine_boolean_series(float ** maps, int nb_ims, int nrow, int ncol, int area)
{
    int n;
    float ** neos;
    neos = malloc(nb_ims * sizeof(float *));
    for (n=0; n<nb_ims; n++)
    {
        neos[n] = malloc(nrow * ncol * sizeof(float));
        memcpy(neos[n], maps[n], nrow * ncol * sizeof(float));
        refine_boolean_map(neos[n], nrow, ncol, area, IS_OCCULTED, IS_CLEAR);
        refine_boolean_map(neos[n], nrow, ncol, area, IS_CLEAR, IS_OCCULTED);
    }
    return neos;
}
/*============================================================================*/
back to top