libimage  0.25.4
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Énumérations Macros Pages
Fonctions membres publiques | Fonctions membres privées | Attributs privés | Liste de tous les membres
Référence de la classe ResampledImage

Manipulation d'image réechantillonnée. Plus de détails...

#include <ResampledImage.h>

Graphe d'héritage de ResampledImage:
Inheritance graph
Graphe de collaboration de ResampledImage:
Collaboration graph

Fonctions membres publiques

int getline (float *buffer, int line)
 Retourne une ligne entièrement réechantillonnée, flottante.
int getline (uint8_t *buffer, int line)
 Retourne une ligne entièrement réechantillonnée, entière sur 8 bits.
int getline (uint16_t *buffer, int line)
 Retourne une ligne entièrement réechantillonnée, entière sur 16 bits.
 ResampledImage (Image *image, int width, int height, double resx, double resy, BoundingBox< double > bbox, Interpolation::KernelType KT=Interpolation::LANCZOS_3, bool bMask=false)
 Crée un objet ResampledImage à partir de tous ses éléments constitutifs.
 ~ResampledImage ()
 Destructeur par défaut.
void print ()
 Sortie des informations sur l'image réechantillonnée.
- Fonctions membres publiques inherited from Image
void makeMask ()
 Définit l'image comme un masque.
int getWidth ()
 Retourne la largeur en pixel de l'image.
int getHeight ()
 Retourne la hauteur en pixel de l'image.
void setBbox (BoundingBox< double > box)
 Définit l'emprise rectangulaire de l'image et calcule les résolutions.
bool setDimensions (int w, int h, BoundingBox< double > box, double rx, double ry)
 Définit les dimensions de l'image, en vérifiant leurs cohérences.
BoundingBox< double > getBbox () const
 Retourne l'emprise rectangulaire de l'image.
void setCRS (CRS srs)
 Définit le SRS de l'emprise rectangulaire.
CRS getCRS () const
 Retourne le SRS de l'emprise rectangulaire de l'image.
double getXmin () const
 Retourne le xmin de l'emprise rectangulaire.
double getYmax () const
 Retourne le ymax de l'emprise rectangulaire.
double getXmax () const
 Retourne le xmax de l'emprise rectangulaire.
double getYmin () const
 Retourne le ymin de l'emprise rectangulaire.
double getResX () const
 Retourne la résolution dans le sens des X.
double getResY () const
 Retourne la résolution dans le sens des Y.
ImagegetMask ()
 Retourne le masque de donnée associé à l'image.
bool setMask (Image *newMask)
 Définit le masque de donnée et contrôle la cohérence avec l'image.
int x2c (double x)
 Conversion de l'abscisse terrain vers l'indice de colonne dans l'image.
int y2l (double y)
 Conversion de l'ordonnée terrain vers l'indice de ligne dans l'image.
double c2x (int c)
 Conversion de l'indice de colonne dans l'image vers l'abscisse terrain du centre du pixel.
double l2y (int l)
 Conversion de l'indice de ligne dans l'image vers l'ordonnée terrain du centre du pixel.
double getPhaseX ()
 Calcul de la phase dans le sens des X.
double getPhaseY ()
 Calcul de la phase dans le sens des Y.
bool isCompatibleWith (Image *pImage)
 Détermine la compatibilité avec une autre image, en comparant phases et résolutions.
 Image (int width, int height, int channels, double resx, double resy, BoundingBox< double > bbox)
 Crée un objet Image à partir de tous ses éléments constitutifs.
 Image (int width, int height, int channels)
 Crée une Image sans préciser de géoréférencement, ni résolutions, ni rectangle englobant.
 Image (int width, int height, int channels, BoundingBox< double > bbox)
 Crée une Image sans préciser les résolutions.
 Image (int width, int height, int channels, double resx, double resy)
 Crée un objet Image sans préciser le rectangle englobant.
virtual ~Image ()
 Destructeur par défaut.
virtual void printTFW ()
 Sortie du tfw de l'image.

Fonctions membres privées

int resampleSourceLine (int line)
 Retourne une ligne source réechantillonnée en X, entière.

Attributs privés

ImagesourceImage
 Image source, à réechantillonner.
bool useMask
 Précise si les masques doivent intervenir dans l'interpolation (lourd)
const KernelK
 Noyau d'interpolation à utiliser.
int Kx
 Nombre de pixels source intervenant dans l'interpolation, dans le sens des X.
int Ky
 Nombre de pixels source intervenant dans l'interpolation, dans le sens des Y.
double ratioX
 Rapport des résolutions source et finale, dans le sens des X.
double ratioY
 Rapport des résolutions source et finale, dans le sens des Y.
double top
 Décalage entre le haut de l'image source et le haut de l'image réechantillonnée.
double left
 Décalage entre la gauche de l'image source et la gauche de l'image réechantillonnée.
float * __buffer
 Buffer général.
float * src_image_buffer [4]
 Buffer de stockage des lignes de l'image source.
float * mux_src_image_buffer
 Buffer de stockage des lignes de l'image source multiplexées.
float * src_mask_buffer [4]
 Buffer de stockage des lignes du masque source.
float * mux_src_mask_buffer
 Buffer de stockage des lignes du masque source multiplexées.
int memorizedLines
 Nombre de lignes réechantillonnées que l'on va mémoriser, pour l'image et le masque.
int * resampled_line_index
 Indexation des lignes mémorisées.
float ** resampled_image
 Buffer de mémorisation des lignes de l'image déjà calculées.
float ** resampled_mask
 Buffer de mémorisation des lignes du masque déjà calculées.
float * mux_resampled_image
 Ligne d'image, réechantillonnée en X, multiplexée.
float * mux_resampled_mask
 Ligne de masque, réechantillonnée en X, multiplexée.
float * dst_image_buffer
 Ligne entièrement réechantillonnée.
float * weight_buffer
 Tableau des poids temporaires.
float * Wx
 Poids de réechantillonnage, pour le sens des X.
int * xMin
 Tableau des coordonnées pixel inférieures.

Additional Inherited Members

- Fonctions membres publiques statiques inherited from Image
static bool dimensionsAreConsistent (double resolution_x, double resolution_y, int w, int h, BoundingBox< double > bounding_box)
 Vérifie la cohérence des dimensions d'image fournies.
- Attributs publics inherited from Image
const int channels
 Nombre de canaux de l'image.
- Fonctions membres protégées inherited from Image
void computeResolutions ()
 Calcul des resolutions en x et en y, calculées à partir des dimensions et de la bouding box.
- Attributs protégés inherited from Image
int width
 Largeur de l'image en pixel.
int height
 Hauteur de l'image en pixel.
bool isMask
 L'image est-ell un masque ?
BoundingBox< double > bbox
 Emprise rectangulaire au sol de l'image.
CRS crs
 CRS du rectangle englobant de l'image.
Imagemask
 Masque de donnée associé à l'image, facultatif.
double resx
 Resolution de l'image, dans le sens des X.
double resy
 Resolution de l'image, dans le sens des Y.

Description détaillée

Manipulation d'image réechantillonnée.

Auteur
Institut national de l'information géographique et forestière

Cette classe permet de réechantillonner une image lorsque celle ci n'a pas la résolution ou la phase voulue. Pour calculer la valeur d'un pixel de l'image réechantillonnée, on peut utiliser plusieurs interpolations, implémentées dans les différentes classes héritant de Kernel. Le réechantillonnage est effectué séparemment dans chaque dimension (X et Y).

ri_2D.png

Les calculs étant lourds, on va optimiser le calcul :

Pour augmenter les performances du réechantillonnage avec les instructions SSE, on est amené :

On peut également tenir compte du masque associé à l'image source, pour limiter l'interpolation aux valeurs réelles. Cela ajoute non seulement de la complexité aux calculs, mais prend également plus de place. On va donc limiter cette utilisation aux cas vraiment nécessaires : si l'image source possède un masque (image pas pleine) et si l'utilisateur spécifie qu'il veut l'utiliser dans le réechantillonnage.

Enfin, lors du réechantillonnage, on ne tient pas compte du propre masque. C'est à dire qu'on remplit un pixel réechantillonné avec de la donnée à partir du moment où un pixel de donnée source appartenait au noyau d'interpolation. Si on veut utiliser cette image sans avoir un "gonflement" artificiel des données, on devra la lire en parallèle de son masque (interpolé en plus proche voisin) pour la restreindre à l'étendue réelle des données (cela peut se faire avec ExtendedCompoundImage).

Documentation des constructeurs et destructeur

ResampledImage::ResampledImage ( Image image,
int  width,
int  height,
double  resx,
double  resy,
BoundingBox< double >  bbox,
Interpolation::KernelType  KT = Interpolation::LANCZOS_3,
bool  bMask = false 
)

Crée un objet ResampledImage à partir de tous ses éléments constitutifs.

Paramètres
[in]imageimage source
[in]widthlargeur de l'image en pixel
[in]heighthauteur de l'image en pixel
[in]resxrésolution dans le sens des X
[in]resyrésolution dans le sens des Y
[in]bboxemprise rectangulaire de l'image
[in]bUseMaskprécise si le réechantillonnage doit tenir compte des masques
[in]KTnoyau d'interpolation à utiliser pour le réechantillonnage

Voici le graphe d'appel pour cette fonction :

ResampledImage::~ResampledImage ( )
inline

Destructeur par défaut.

Désallocation de la mémoire :

Et suppression de sourceImage.

Documentation des fonctions membres

int ResampledImage::getline ( float *  buffer,
int  line 
)
virtual

Retourne une ligne entièrement réechantillonnée, flottante.

Lorsqu'une demande une ligne de l'image réechantillonnée, le calcul va être divisé en deux parties :

  • on réechantillonne les lignes de l'image source dans le sens des X, avec la fonction resampleSourceLine
  • on moyenne (avec pondération) les Ky lignes sources réechantillonnées en X, autrement dit on réechantillonne dans le sens des Y
Paramètres
[in,out]bufferTableau contenant au moins width*channels valeurs
[in]lineIndice de la ligne à retourner (0 <= line < height)
Renvoie
taille utile du buffer, 0 si erreur

Implémente Image.

Voici le graphe d'appel pour cette fonction :

Voici le graphe des appelants de cette fonction :

int ResampledImage::getline ( uint8_t *  buffer,
int  line 
)
virtual

Retourne une ligne entièrement réechantillonnée, entière sur 8 bits.

Elle ne fait que convertir le résultat du getline flottant en entier. On ne travaille en effet que sur des flottants, même si les canaux des images sont des entiers, et cela car les poids de l'interpolation sont toujours flottants.

Paramètres
[in,out]bufferTableau contenant au moins width*channels valeurs
[in]lineIndice de la ligne à retourner (0 <= line < height)
Renvoie
taille utile du buffer, 0 si erreur

Implémente Image.

Voici le graphe d'appel pour cette fonction :

int ResampledImage::getline ( uint16_t *  buffer,
int  line 
)
virtual

Retourne une ligne entièrement réechantillonnée, entière sur 16 bits.

Elle ne fait que convertir le résultat du getline flottant en entier. On ne travaille en effet que sur des flottants, même si les canaux des images sont des entiers, et cela car les poids de l'interpolation sont toujours flottants.

Paramètres
[in,out]bufferTableau contenant au moins width*channels valeurs
[in]lineIndice de la ligne à retourner (0 <= line < height)
Renvoie
taille utile du buffer, 0 si erreur

Implémente Image.

Voici le graphe d'appel pour cette fonction :

int ResampledImage::resampleSourceLine ( int  line)
private

Retourne une ligne source réechantillonnée en X, entière.

Lorsqu'une demande une ligne de l'image réechantillonnée, le calcul va être divisé en deux parties :

  • on réechantillonne les lignes de l'image source dans le sens des X, avec la fonction
  • on moyenne (avec pondération) les Ky lignes sources réechantillonnées en X, autrement dit on réechantillonne dans le sens des Y

Avant de lancer les calculs, on vérifie que la ligne source demandée n'est pas déjà disponible dans le buffer mémoire resampled_image en utilisant l'index resampled_line_index. Si ce n'est pas le cas, on calcule le paquet de 4 lignes contenant celle voulue, on les stocke et on met à jour la table d'index.

Paramètres
[in]lineIndice de la ligne source à réechantillonner (0 <= line < source_image.height)
Renvoie
position dans le buffer de mémorisation resampled_image (et resampled_mask) de la ligne voulue

Voici le graphe d'appel pour cette fonction :

Voici le graphe des appelants de cette fonction :

Documentation des données membres

float* ResampledImage::__buffer
private

Buffer général.

Il regroupe :

  • les buffers de mémorisation des lignes réechantillonnées en X (image et masque)
  • les buffers intermédiaires de calcul (image et masque)
  • les buffers des poids de l'interpolation
  • le buffer d'indexation des données
double ResampledImage::left
private

Décalage entre la gauche de l'image source et la gauche de l'image réechantillonnée.

La distance est exprimée en pixel source, et se mesure entre les centres des pixels.

int ResampledImage::memorizedLines
private

Nombre de lignes réechantillonnées que l'on va mémoriser, pour l'image et le masque.

On veut mémoriser un certain nombre de lignes (réechantillonnées dans le sens des X uniquement) pour ne pas refaire un travail déjà fait. On va travailler les lignes 4 par 4 (pour l'utilisation des instructions SSE). On va donc mémoriser un multiple de 4 lignes. Une ligne va intervenir au maximum dans l'interpolation de Ky lignes (diamètre du noyau d'interpolation) Conclusion : on mémorise "Ky arrondi au multiple de 4 supérieur" lignes

float* ResampledImage::mux_src_image_buffer
private

Buffer de stockage des lignes de l'image source multiplexées.

On stocke les 4 lignes sous forme multiplexée

float* ResampledImage::mux_src_mask_buffer
private

Buffer de stockage des lignes du masque source multiplexées.

On stocke les 4 lignes sous forme multiplexée

double ResampledImage::ratioX
private

Rapport des résolutions source et finale, dans le sens des X.

Ratio de rééchantillonage en X = résolution X cible / résolution X source

double ResampledImage::ratioY
private

Rapport des résolutions source et finale, dans le sens des Y.

Ratio de rééchantillonage en Y = résolution Y cible / résolution Y source

float** ResampledImage::resampled_image
private

Buffer de mémorisation des lignes de l'image déjà calculées.

On mémorise memorize_line lignes de l'image source, réechantillonnées en X.

int* ResampledImage::resampled_line_index
private

Indexation des lignes mémorisées.

Elle permet de convertir un indice de la ligne de l'image source réechantillonnée en X en indice dans le tableau des lignes mémorisées (dans resampled_image et resampled_mask).

float** ResampledImage::resampled_mask
private

Buffer de mémorisation des lignes du masque déjà calculées.

On mémorise memorize_line lignes du masque source, réechantillonnées en X.

float* ResampledImage::src_image_buffer[4]
private

Buffer de stockage des lignes de l'image source.

On stocke 4 lignes

float* ResampledImage::src_mask_buffer[4]
private

Buffer de stockage des lignes du masque source.

On stocke 4 lignes

double ResampledImage::top
private

Décalage entre le haut de l'image source et le haut de l'image réechantillonnée.

La distance est exprimée en pixel source, et se mesure entre les centres des pixels.

float* ResampledImage::weight_buffer
private

Tableau des poids temporaires.

Quand on tient compte des masques dans l'interpolation, on va écarter certains pixels du calcul. La somme des poids des pixels utilisés n'est donc plus normalisée. On doit donc mémoriser la somme des poids au fur et à mesure pour normaliser la moyenne en fin de calcul.

float* ResampledImage::Wx
private

Poids de réechantillonnage, pour le sens des X.

Les poids sont quadruplé pour permettre le calcul sur 4 lignes en même temps.

int* ResampledImage::xMin
private

Tableau des coordonnées pixel inférieures.

Pour chaque pixel de destination, on précise le premier pixel source (numéro de colonne) qui va intervenir dans le calcul d'interpolation (valeur de retour de la fonction Kernel::weight)


La documentation de cette classe a été générée à partir des fichiers suivants :