swh:1:snp:9dcf3ab72851691ef27e40da9b2a50243c1bdd22
Tip revision: 5f23fb0b6e1d50d996ac54daaa7e637e5d8decaf authored by Software Heritage on 05 May 2020, 00:00:00 UTC
ipol: Deposit 1363 in collection ipol
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;
}
/*============================================================================*/