Extensions Image, Audio et Vidéo Administration et programmation

Structure des données de détection de prises de vue

Les données associées à la détection d'une prise de vue sont stockées dans des structures figurant dans le fichier d'en-tête de détection de prises de vue, dmbshot.h. Pour la plupart des API associées, vous devez pointer sur une ou plusieurs de ces structures, dont certaines servent à stocker des données d'entrée pour l'extension Vidéo. Par exemple, la structure de contrôle de prise de vue contient des informations intervenant dans la détection de prises de vue. La plupart des structures sont utilisées par l'extension Vidéo pour stocker des données qu'elle a récupérées à partir d'un objet vidéo. Par exemple, la structure de données d'image vidéo contient le contenu en pixels d'une image.

Les structures utilisées pour la détection de prise de vue sont DBvIOType, DBvShotControl, DBvShotType, DBvFrameData et DBvStoryboardCtrl.

DBvIOType

La structure de données DBvIOType contient les données relatives à un objet vidéo (format, dimensions et nombre d'images). La structure de données est définie comme suit :

typedef struct {
 
   FILE *hFile;                    /* descripteur de fichier pour l'objet vidéo */
   char vhandle[255];              /* descripteur vidéo (à partir bd) */
   char vtable[255];               /* nom table vidéo (à partir bd) */
   char vcolumn[255];              /* nom colonne vidéo (à partir bd) */
   char vFile[255];                /* nom fichier vidéo */
   char idxFile[255];              /* nom fichier index */
   char isIdx;                     /* 1 si l'index existe, sinon 0 */
   char isInDb;                    /* 1 à partir bd, 0 à partir fichier */
   int format;                     /* Format de l'objet vidéo */
   unsigned long dx, dy;           /* Dimensions de l'objet vidéo */
   unsigned long totalFrames;      /* Nb total images dans l'objet vidéo */
   unsigned long markFrame;        /* Utilisé par la détection de prises de vue */
   unsigned long currentFrame;     /* Image vidéo en cours */
   DBvFrameData fd;                /* Données de l'image en cours */
   DBvDCFrameData fdDc;            /* Données des images DC */
   unsigned char BGRValid;         /* réservé */
   unsigned short usDeviceID;      /* réservé */
   unsigned long hwnd;             /* réservé */
   int videoReset;                 /* Signaler si vidéo ouverte ou analysée */
   int firstshot;                  /* Utilisé en interne pour indiquer le premier appel */
   void *reserved                  /* réservé */
 
} DBvIOType;

DBvShotControl

La structure de données DBvShotControl contient des informations utilisées pour le contrôle de la détection de prises de vue (par exemple, la méthode de détection). La structure de données est définie comme suit :

typedef struct {
 
  unsigned long reserved;
  unsigned long method;           /* méthode de détection */
 
    #define DETECT_CORRELATION  0x00000001
    #define DETECT_HISTOGRAM    0x00000002
    #define DETECT_CORRHIST     0x00000003
    #define DETECT_CORRHISTDISS 0x00000004
 
 
  int normalCorrValue;            /* Seuil de correspondance */
  int sceneCutSkipXY;             /* Réservé */
  int CorrHistThresh;             /* Seuil histogramme */
  int DissThresh;                 /* Seuil de fondu */
  int DissCacheSize;              /* Nbre images dans courbe de référence */
  int DissNumCaches;              /* Nbre images dans vérification de cohérence */
  int minShotSize;                /* Nombre minimal images dans prise */
 
} DBvShotControl;

Le Le tableau ci-après décrit les zones de DBvShotControl et indique les paramètres correspondants admis et par défaut. Pour initialiser ces zones à leur valeur par défaut, utilisez l'API DBvInitShotControl selon la procédure décrite à la section Initialisation des valeurs dans les structures de données de détection de prises de vue.

Les paramètres DBvShotControl dépendent du type de séquence vidéo : Les changements de plan d'une séquence vidéo numérisée varient fortement en fonction du contenu et du format de la séquence. En outre, la précision des algorithmes de changement de plan varie d'une séquence vidéo à une autre. Les changements de plan clairement définis avec des différences évidentes dans l'apparence globale de l'image sont détectés plus facilement que les modifications plus subtiles ou les modifications pour lesquelles les couleurs restent globalement les mêmes. Bien que les paramètres par défaut pour la zone DBvShotControl soient adaptés à la plupart des applications, vous devrez peut-être les adapter pour réduire les risques de détection erronée ou impossible.

Tableau 10. Zones de DBvShotControl
Zone Signification
method Identifie la méthode utilisée par l'extension Vidéo pour détecter un changement de plan. Vous avez le choix entre les méthodes suivantes :

DETECT_CORRELATION. Compare les pixels dans deux images successives. Si la différence dépasse le seuil de correspondance, il y a détection d'un changement de plan.

DETECT_HISTOGRAM. Compare les valeurs d'histogramme de deux images successives. Ces valeurs mesurent la répartition des couleurs dans l'image. Si la différence dépasse le seuil d'histogramme, il y a détection d'un changement de plan.

DETECT_CORRHIST. Utilisez la méthode de correspondance pour identifier d'éventuels changements de plan, puis utilisez la méthode d'histogramme pour les images repérées comme éventuels changements de plan. Si le seuil d'histogramme est dépassé, il y a détection d'un changement de plan.

DETECT_CORRHISTDISS. Même chose que pour DETECT_CORRHIST, mais avec examen d'images supplémentaires pour les enchaînements.

La méthode par défaut est DETECT_CORRHIST.

normalCorrValue Nombre entier compris entre 0 et 100 qui indique le seuil de correspondance. Ce nombre correspond à la valeur minimale du coefficient de correspondance entre pixels dans deux images successives. La valeur 0 signifie qu'il y a toujours détection d'un changement de plan à l'image suivante. La valeur 100 signifie qu'il n'y a détection d'un changement de plan que si tous les pixels changent entre une image et la suivante. La valeur par défaut est 60.
sceneCutSkipXY Réservé.
CorrHistThresh Entier compris entre 0 et 100 qui indique le seuil d'histogramme. Cette valeur mesure la différence entre les valeurs d'histogramme d'images successives. La valeur 0 signifie qu'un changement de plan n'est détecté que si toutes les valeurs d'histogramme changent d'une image à la suivante. La valeur 100 signifie qu'il y a toujours détection d'un changement de plan par rapport à l'image suivante. La valeur par défaut est 10.
DissThresh Entier compris entre 0 et 100 qui indique le seuil de test de fondu. Cette valeur mesure le pourcentage de pixels dans une image devant satisfaire à un test approprié pour qu'un fondu enchaîné soit détecté. La valeur 0 signifie qu'il y a toujours détection d'un fondu par rapport à l'image suivante. La valeur 100 signifie qu'il n'y a détection d'un fondu enchaîné que si tous les pixels de l'image réussissent le test de fondu. La valeur par défaut est 15.
DissCacheSize Entier qui indique le nombre d'images utilisées dans la partie courbe de référence du test d'enchaînement. La valeur par défaut est 4.
DissNumCaches Entier qui indique le nombre d'images utilisées dans la partie vérification de cohérence du test d'enchaînement. La valeur par défaut est 7.
minShotSize Entier qui indique le nombre minimum d'images par prise de vue. Pour qu'une prise de vue soit détectée, le nombre d'images qu'elle contient doit être au moins égal au minimum indiqué. La valeur par défaut est 5.

DBvShotType

La structure de données DBvShotType contient des informations relatives à une prise de vue (par exemple, le numéro de la première image, le numéro de la dernière image et le numéro d'image représentative) et un pointeur sur le contenu en pixels de l'image représentative. La structure de données est définie comme suit :

typedef struct {
 
 
unsigned long startFrame;         /* Numéro de la première image */
  unsigned long endFrame;         /* Numéro de la dernière image */
  unsigned long repFrame;         /* Numéro d'image représentative */
  DBvFrameData fd;                /* Données de la prise de vue représentative */ 
 
  unsigned long dx;               /* Largeur image en pixels */
  unsigned long dy;               /* Hauteur image en pixels */
  char *comment;                  /* Remarques sur la prise de vue */
 
} DBvShotType;

DBvFrameData

La structure de données DBvFrameData précise le contenu en pixels d'une image. La structure de données est définie comme suit :

typedef struct                /* Données image vidéo */
{
  /* MPEG 1 pixels */
  unsigned char *luminance;   /* Plan des pixels de luminance (noir et blanc) */
  unsigned char *Cr;          /* Plan des pixels Cr */
  unsigned char *Cb;          /* Plan des pixels Cb */
  unsigned char *reserved;
 
  } DBvFrameData;

DBvStoryboardCtrl

La structure de données DBvStoryboardCtrl contient des valeurs qui contrôlent les images représentatives d'une prise de vue stockées dans un catalogue vidéo, ainsi que leur nombre. Pour connaître l'utilisation de ces valeurs, reportez-vous à la section Création d'un storyboard. La structure de données est définie comme suit :

typedef struct {
 
  int thresh1;             /* seuil pour plans petits à moyens */
  int thresh2;             /* seuils pour plans moyens à gros */
  int delta;               /* décalage utilisé pour les images représentatives */
 
} DBvStoryboardCtrl;

Le Le tableau ci-après décrit les zones de DBvStoryboardCtrl et indique les paramètres correspondants admis et par défaut. Pour initialiser ces zones à leur valeur par défaut, utilisez l'API DBvInitStoryboardCtrl selon la procédure décrite à la section Initialisation des valeurs dans les structures de données de détection de prises de vue.

Les paramètres DBvStoryboardCtrl dépendent du type de séquence vidéo :  Le choix et le nombre des images représentatives les plus adaptés à un storyboard peuvent être différents d'un type de séquence vidéo à l'autre. Bien que les paramètres par défaut pour la zone DBvStoryboardCtrl conviennent à de nombreux types de séquences, il peut être nécessaire de les utiliser d'abord sur un sous-ensemble de vidéos d'essai. Vous pourrez ensuite affiner les paramètres avant de créer des storyboards pour une série de vidéos plus étendue.

Tableau 11. Zones de DBvStoryboardCtrl
Zone Signification
thresh1 Identifie le seuil des prises de vue courtes. Les prises de vue comportant moins d'images que la valeur de thresh1 sont des prises courtes. Si elles sont cataloguées, les informations d'une prise de vue comprennent une seule image représentative (l'image médiane).

La valeur par défaut est 90. Si la valeur définie pour thresh1 est -1, la prise de vue sera considérée comme courte, quelle que soit sa longueur réelle.

thresh2 Identifie le seuil des prises de vue moyennes ou longues. Les prises de vue comportant un nombre d'images égal ou inférieur à la valeur de thresh2, mais au moins égal à celle de thresh1, sont considérées comme des prises de vue moyennes. Si elles sont cataloguées, les informations d'une prise de vue moyenne comprennent deux images représentatives. La position des images représentatives est contrôlée par la valeur de la zone delta. Les prises de vue comportant un nombre d'images supérieur à la valeur de thresh2 sont considérées comme des prises longues. Si elles sont dans le catalogue, les informations d'une prise de vue longue comprennent trois images représentatives. La position de la première et de la dernière image représentative est contrôlée par la valeur de la zone delta. La deuxième image est l'image médiane.

La valeur par défaut est 150. Si la valeur définie pour thresh1 est -1, la prise de vue sera considérée comme courte, quelle que soit sa longueur réelle.

delta Identifie le décalage utilisé pour les images représentatives. Pour les prises de vue moyennes et longues, la première image représentative est décalée, par rapport au début de la prise, du nombre d'images défini dans delta. La dernière image représentative est décalée, par rapport à la fin de la prise, du nombre d'images défini dans delta.

La valeur par défaut est 5.

Initialisation des valeurs dans les structures de données de détection de prises de vue

Les valeurs contenues dans la structure de données DBvShotControl contrôlent la détection de prises de vue. Celles qui se trouvent dans la structure de données DBvStoryboardCtrl contrôlent la création d'un storyboard. Vous pouvez indiquer explicitement des valeurs pour les zones de ces structures. De plus, vous pouvez initialiser les valeurs contenues dans ces structures à leur valeur par défaut. Pour connaître les valeurs par défaut utilisées dans la structure de données DBvShotControl, reportez-vous au Tableau 10. Pour les valeurs par défaut utilisées dans la structure de données DBvStoryboardCtrl, reportez-vous au Tableau 11.

Utilisez l'API DBvInitShotControl pour initialiser les valeurs de la structure de données DBvShotControl. Vous devez alors préciser la structure de contrôle de prise de vue. Par exemple, les instructions suivantes initialisent les zones de la structure DBvShotControl à leur valeur par défaut :

DBvShotControl    shotCtrl;
 
rc=DBvInitShotControl(
              shotCtrl);  /* pointeur sur la structure de contrôle de prise de vue */
              

Utilisez l'API DBvInitStoryboardCtrl pour initialiser les valeurs de la structure de données DBvStoryboardCtrl. Vous devez alors préciser la structure de contrôle de storyboard. Par exemple, les instructions suivantes initialisent les zones de la structure DBvStoryboardCtrl à leur valeur par défaut :

DBvStoryboardCtrl    sbCtrl;
 
rc=DBvInitStoryboardCtrl(
              sbCtrl);   /* pointeur sur la structure de contrôle de storyboard */
              


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]