Référence du fichier decimateNtiff.cpp

Fichier d'implémentation de la commande decimateNtiff. Plus de détails...

#include <proj.h>
#include <pthread.h>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#include <string>
#include <fstream>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/utility/setup/console.hpp>
#include <rok4/image/file/FileImage.h>
#include <rok4/image/DecimatedImage.h>
#include <rok4/image/ExtendedCompoundImage.h>
#include <rok4/utils/ProjPool.h>
#include <rok4/enums/Format.h>
#include <math.h>
#include "config.h"

Fonctions

void usage ()
 Affiche l'utilisation et les différentes options de la commande decimateNtiff help. Plus de détails...
 
void error (std::string message, int error_code)
 Affiche un message d'erreur, l'utilisation de la commande et sort en erreur. Plus de détails...
 
int parse_command_line (int argc, char **argv)
 Récupère les valeurs passées en paramètres de la commande, et les stocke dans les variables globales. Plus de détails...
 
bool load_configuration (std::vector< bool > *masks, std::vector< char * > *paths, std::vector< BoundingBox< double > > *bboxes, std::vector< double > *resxs, std::vector< double > *resys)
 Lit l'ensemble de la configuration. Plus de détails...
 
int load_images (FileImage **output_image, FileImage **output_mask, std::vector< FileImage * > *input_images)
 Charge les images en entrée et en sortie depuis le fichier de configuration. Plus de détails...
 
int add_converters (std::vector< FileImage * > input_images)
 Ajoute les éventuel convertisseurs aux images en entrée. Plus de détails...
 
int sort_images (std::vector< FileImage * > input_images, std::vector< std::vector< Image * > > *sorted_input_images)
 Trie les images sources. Plus de détails...
 
int merge_images (FileImage *output_image, std::vector< std::vector< Image * > > &sorted_input_images, ExtendedCompoundImage **merged_image, int *nodata)
 Traite chaque paquet d'images en entrée. Plus de détails...
 
int main (int argc, char **argv)
 Fonction principale de l'outil mergeNtiff. Plus de détails...
 

Variables

char configuration_path [256]
 
char strnodata [256]
 
bool output_format_provided = false
 
uint16_t samplesperpixel = 0
 
SampleFormat::eSampleFormat sample_format = SampleFormat::UNKNOWN
 
Photometric::ePhotometric photometric
 
Compression::eCompression compression
 
bool debug_logger =false
 
std::string help
 

Description détaillée

Fichier d'implémentation de la commande decimateNtiff.

Le fonctionnement général est décrit dans la page Commande decimateNtiff .

Documentation des fonctions

◆ add_converters()

int add_converters ( std::vector< FileImage * >  input_images)

Ajoute les éventuel convertisseurs aux images en entrée.

Si un format de sortie a été spécifié et qu'il n'est pas identique à celui des images en entrée, on ajoute un convertisseur

Paramètres
[in]input_imagesimages en entrée
Renvoie
code de retour, 0 si réussi, -1 sinon

◆ error()

void error ( std::string  message,
int  error_code 
)

Affiche un message d'erreur, l'utilisation de la commande et sort en erreur.

Paramètres
[in]messagemessage d'erreur
[in]error_codecode de retour

◆ load_configuration()

bool load_configuration ( std::vector< bool > *  masks,
std::vector< char * > *  paths,
std::vector< BoundingBox< double > > *  bboxes,
std::vector< double > *  resxs,
std::vector< double > *  resys 
)

Lit l'ensemble de la configuration.

Paramètres
[in,out]masksIndicateurs de présence d'un masque
[in,out]pathsChemins des images
[in,out]bboxesRectangles englobant des images
[in,out]resxsRésolution en x des images
[in,out]resysRésolution en y des images
Renvoie
true en cas de succès, false si échec

◆ load_images()

int load_images ( FileImage **  output_image,
FileImage **  output_mask,
std::vector< FileImage * > *  input_images 
)

Charge les images en entrée et en sortie depuis le fichier de configuration.

On va récupérer toutes les informations de toutes les images et masques présents dans le fichier de configuration et créer les objets FileImage correspondant. Toutes les images ici manipulées sont de vraies images (physiques) dans ce sens où elles sont des fichiers soit lus, soit qui seront écrits.

Le chemin vers le fichier de configuration est stocké dans la variables globale configuration_path et images_root va être concaténer au chemin vers les fichiers de sortie.

Paramètres
[out]output_imageimage résultante de l'outil
[out]output_maskmasque résultat de l'outil, si demandé
[out]input_imagesensemble des images en entrée
Renvoie
code de retour, 0 si réussi, -1 sinon

◆ main()

int main ( int  argc,
char **  argv 
)

Fonction principale de l'outil mergeNtiff.

Paramètres
[in]argcnombre de paramètres
[in]argvtableau des paramètres
Renvoie
code de retour, 0 si réussi, -1 sinon

◆ merge_images()

int merge_images ( FileImage *  output_image,
std::vector< std::vector< Image * > > &  sorted_input_images,
ExtendedCompoundImage **  merged_image,
int *  nodata 
)

Traite chaque paquet d'images en entrée.

Paramètres
[in]output_imageimage de sortie
[in]sorted_input_imagespaquets d'images en entrée
[out]merged_imagepaquet d'images superposable avec l'image de sortie
[in]nodatavaleur de non-donnée
Renvoie
0 en cas de succès, -1 en cas d'erreur

◆ parse_command_line()

int parse_command_line ( int  argc,
char **  argv 
)

Récupère les valeurs passées en paramètres de la commande, et les stocke dans les variables globales.

Paramètres
[in]argcnombre de paramètres
[in]argvtableau des paramètres
Renvoie
code de retour, 0 si réussi, -1 sinon

◆ sort_images()

int sort_images ( std::vector< FileImage * >  input_images,
std::vector< std::vector< Image * > > *  sorted_input_images 
)

Trie les images sources.

La première image en entrée peut être une image de fond : elle est alors compatible avec l'image en sortie Les images suivantes sont les images à "décimer", dont on ne veut garder qu'un pixel sur N. Elles sont compatibles entre elles mais pas avec l'image en sortie (et donc pas avec l'image de fond).

On doit donc avoir à la fin soit un paquet, soit deux avec une seule image dans le premier (le fond)

Paramètres
[in]input_imagesimages en entrée
[out]sorted_input_imagesimages en entrée, triées en paquets compatibles
Renvoie
code de retour, 0 si réussi, -1 sinon

◆ usage()

void usage ( )

Affiche l'utilisation et les différentes options de la commande decimateNtiff help.

L'affichage se fait dans le niveau de logger INFO

Documentation des variables

◆ compression

Compression::eCompression compression

Compression de l'image de sortie

◆ configuration_path

char configuration_path[256]

Chemin du fichier de configuration des images

◆ debug_logger

bool debug_logger =false

Activation du niveau de log debug. Faux par défaut

◆ help

std::string help
Valeur initiale :
= std::string("\ndecimateNtiff version ") + std::string(VERSION) + "\n\n"
"Create one georeferenced TIFF image from several georeferenced TIFF images.\n\n"
"Usage: decimateNtiff -f <FILE> -c <VAL> -n <VAL> [-d] [-h]\n"
"Parameters:\n"
" -f configuration file : list of output and source images and masks\n"
" -c output compression :\n"
" raw no compression\n"
" none no compression\n"
" jpg Jpeg encoding (quality 75)\n"
" jpg90 Jpeg encoding (quality 90)\n"
" lzw Lempel-Ziv & Welch encoding\n"
" pkb PackBits encoding\n"
" zip Deflate encoding\n"
" -n nodata value, one integer per sample, seperated with comma. Examples\n"
" -99999 for DTM\n"
" 255,255,255 for orthophotography\n"
" -a sample format : (float32 or uint8)\n"
" -s samples per pixel : (1, 2, 3 or 4)\n"
" -d debug logger activation\n\n"
"If sample_format or samplesperpixel are not provided, those informations are read from the image sources (all have to own the same). If all are provided, conversion may be done.\n\n"

Message d'usage de la commande decimateNtiff

◆ output_format_provided

bool output_format_provided = false

A-t-on précisé le format en sortie, c'est à dire les 3 informations samplesperpixel et sample_format

◆ photometric

Photometric::ePhotometric photometric

Photométrie (rgb, gray), déduit du nombre de canaux

◆ sample_format

SampleFormat::eSampleFormat sample_format = SampleFormat::UNKNOWN

Format du canal (entier, flottant, signé ou non...), pour l'image en sortie

◆ samplesperpixel

uint16_t samplesperpixel = 0

Nombre de canaux par pixel, pour l'image en sortie

◆ strnodata

char strnodata[256]

Valeur de nodata sour forme de chaîne de caractère (passée en paramètre de la commande)