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

Gestion du noyau d'interpolation. Plus de détails...

#include <Kernel.h>

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

Fonctions membres publiques

double size (double ratio=1.) const
 Calcule la taille effective du noyau en nombre de pixels sources.
virtual int weight (float *W, int &length, double x, int max) const
 Calcule les poids pour chaque pixel source.

Fonctions membres publiques statiques

static const KernelgetInstance (Interpolation::KernelType T=Interpolation::LANCZOS_3)
 Usine d'instanciation d'un type de noyau.

Fonctions membres protégées

void init ()
 Initialise le tableau des poids.
 Kernel (double kernel_size, bool const_ratio=false)
 Crée un Kernel à partir de tous ses éléments constitutifs.

Fonctions membres privées

virtual double kernel_function (double d)=0
 Fonction caractéristique du noyau d'interpolation.

Attributs privés

const double kernel_size
 Rayon de base du noyau d'interpolation.
float coeff [1025]
 Tableau des poids.
const bool const_ratio
 Influence du rapport des résolutions sur la taille du noyau.

Description détaillée

Gestion du noyau d'interpolation.

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

Afin de réechantillonner une images qui n'a pas les bonnes résolutions, ou les bonnes phases, on est amené à utiliser un mode d'interpolation, c'est-à-dire une façon de calculer la valeur d'un pixel à partir d'un ou plusieurs pixels sources.

Le calcul de réechantillonnage s'appuie sur un noyau d'interpolation, définissant les pixels sources à considérer dans le calcul et le poids qui leur est affecté (en fonction de la distance en pixel). En effet, une interpolation n'est rien d'autre qu'une moyenne pondérée. Ce sont ces deux caractéristiques qui vont varier d'un noyau à l'autre.

Les noyaux sont gérés en 1 dimension. On y fera appel dans le sens des X puis dans le sens des Y pour obtenir une interpolation en deux dimensions.

Les distances sont toujours exprimée en pixel source, et on considérera les centres des pixels.

Documentation des constructeurs et destructeur

Kernel::Kernel ( double  kernel_size,
bool  const_ratio = false 
)
inlineprotected

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

Ne peux être appelé que par les constructeurs des classes filles.

Paramètres
[in]kernel_sizerayon de base du noyau d'interpolation
[in]const_ratioinfluence du rapport des résolutions sur le rayon du noyau

Documentation des fonctions membres

const Kernel & Kernel::getInstance ( Interpolation::KernelType  T = Interpolation::LANCZOS_3)
static

Usine d'instanciation d'un type de noyau.

Paramètres
[in]Ttype de noyau d'interpolation
Renvoie
noyau d'interpolation
void Kernel::init ( )
inlineprotected

Initialise le tableau des poids.

On divise kernel_size en 1024 section et on calcule le poids pour chacun de ces points équitablement répartis.

Cette fonction doit typiquement être apellée à la fin du constructeur des classes filles (pour des raisons d'ordre d'initialisation des instances mère/fille).

Voici le graphe d'appel pour cette fonction :

virtual double Kernel::kernel_function ( double  d)
privatepure virtual

Fonction caractéristique du noyau d'interpolation.

C'est une fonction qui détermine le poids d'un pixel source en fonction de sa distance au pixel à calculer.

Paramètres
[in]ddistance entre le pixel source et le pixel à calculer
Renvoie
poids affecté au pixel source

Voici le graphe des appelants de cette fonction :

double Kernel::size ( double  ratio = 1.) const
inline

Calcule la taille effective du noyau en nombre de pixels sources.

On tient compte du ratio et de const_ratio

Paramètres
[in]ratiorapport resolution destination / resolution source.
  • si supérieur à 1 : sous-échantillonnage
  • si inférieur à 1 : sur échantillonage
Renvoie
rayon effectif du noyau d'interpolation

Voici le graphe des appelants de cette fonction :

int Kernel::weight ( float *  W,
int &  length,
double  x,
int  max 
) const
virtual

Calcule les poids pour chaque pixel source.

On tient compte du ratio et de const_ratio

Paramètres
[out]Wtableau des poids à affecter aux pixels sources
[in,out]lengthnombre de poids à calculer a priori, mais peut être réduit sur les bords
[in]xcoordonnée en pixel source du pixel à calculer (distance entre le centre du pixel source origine et le centre du pixel à calculer)
[in]maxcoordonnée maximale à ne pas dépasser (largeur ou hauteur de l'image source)
Renvoie
indice du premier pixel source comptant dans le calcul (poids non nul)

Voici le graphe des appelants de cette fonction :

Documentation des données membres

float Kernel::coeff[1025]
private

Tableau des poids.

On ne veut pas calculer à la volée chaque poids à chaque utilisation du noyau (cela serait trop gourmand en calcul pour les noyaux dont la fonction de définition est trop complexe : sinus...). On va donc calculer 1025 poids, équitablement répartis pour des distances de 0 à kernel_size.

const bool Kernel::const_ratio
private

Influence du rapport des résolutions sur la taille du noyau.

  • Si const_ratio est vrai, la taille du noyau kernel_size reste constante
  • Si const_ratio est false la taille du noyeau est dépendante du ratio est vaut
    • kernel_size pour un ratio inférieur 1
    • kernel_size * ratio pour un ratio supérieur à 1
const double Kernel::kernel_size
private

Rayon de base du noyau d'interpolation.

Chaque noyau a un rayon de base, qui va définir les pixels source de part et d'autre du pixel de destination qui vont compter dans le calcul (avoir un poids non nul). On peut imaginer un cercle autour du pixel final et considérer les pixels sources dans ce cercle.

Le rayon est donc une distance exprimée en pixel source

Ce rayon de base peut être modulé par le rapport des résolutions, c'est-à-dire le ratio :

resolution destination / resolution source

Et cela pour rendre possible les sur et sous échantillonnage.

rayon_interpolation.png

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