イメージ、オーディオ、およびビデオ・エクステンダー 管理およびプログラミングの手引き

ショット検出のデータ構造

ショット検出に関連するデータは、構造体 (これはショット検出ヘッダー・ファイル dmbshot.h にあります) に保管されます。 多くのショット検出 API では、これらの構造体の 1 つまたはそれ以上をポイントする必要があります。 これらの構造体のいくつかには、ビデオ・エクステンダーが入力として使用するデータを指定します。 たとえば、ショット制御構造体には、ショット検出を制御する情報を指定します。 ほとんどの構造体は、ビデオ・エクステンダーがビデオから取り出したデータを保管するために使用されます。 たとえば、ビデオ・フレーム・データ構造には、フレームのピクセル内容が入ります。

ショットの検出に使用する構造体には、DBvIOType、DBvShotControl、DBvShotType、DBvFrameData、および DBvStoryboardCtrl があります。

DBvIOType

DBvIOType データ構造には、ビデオに関する情報 (その形式、寸法、フレーム数など) が入ります。 このデータ構造は次のように定義されています。

typedef struct {
 
   FILE *hFile;                    /* file handle for the video */
   char vhandle[255];              /* video handle (if from database)
   char vtable[255];               /* video table name (if from database) */
   char vcolumn[255];              /* video column name (if from database) */
   char vFile[255];                /* name of video file */
   char idxFile[255];              /* name of index file */
   char isIdx;                     /* 1 if the index exists, 0 otherwise */
   char isInDb;                    /* 1 if from DB, 0 if from file */
   int format;                     /* Format of the video */
   unsigned long dx, dy;           /* Dimensions of the video */
   unsigned long totalFrames;      /* TotalFrames in the video */
   unsigned long markFrame;        /* used by shot detection */
   unsigned long currentFrame;     /* The current video frame */
   DBvFrameData fd;                /* Frame data for current frame */
   DBvDCFrameData fdDc;            /* Frame data for DC images */
   unsigned char BGRValid;         /* reserved */
   unsigned short usDeviceID;      /* reserved */
   unsigned long hwnd;             /* reserved */
   int videoReset;                 /* Flag if video is opened or seeked */
   int firstshot;                  /* Used internally to indicate the first call */
   void *reserved                  /* reserved */ 
 
} DBvIOType;

DBvShotControl

DBvShotControl データ構造には、ショット検出を制御するための情報 (検出方式など) が入ります。 このデータ構造は次のように定義されています。

typedef struct {
 
  unsigned long reserved;
  unsigned long method;           /* detection method */
 
    #define DETECT_CORRELATION  0x00000001
    #define DETECT_HISTOGRAM    0x00000002
    #define DETECT_CORRHIST     0x00000003
    #define DETECT_CORRHISTDISS 0x00000004
 
 
  int normalCorrValue;            /* Correlation threshold */
  int sceneCutSkipXY;             /* reserved */
  int CorrHistThresh;             /* Histogram threshold */
  int DissThresh;                 /* Dissolve threshold */
  int DissCacheSize;              /* Dissolve cache size */
  int DissNumCaches;              /* Dissolve cache number */
  int minShotSize;                /* Minimum frames in a shot */
 
} DBvShotControl;

下記の表 は、DBvShotControl の各フィールドとその指定できる設定値と省略時の設定値を示しています。 これらのフィールドを省略時値に初期設定するには、ショット検出データ構造内の値の初期設定に説明してある DBvInitShotControl API を使用してください。

DBvShotControl の設定値はビデオのタイプによって異なります: ディジタル化ビデオにおけるシーン変化は、ビデオの内容と形式に大きく依存します。 さらに、シーン変化アルゴリズムの正確性もビデオによって異なります。 シーン変化が明確に定義され、全体的なフレーム表示において明らかな違いがあれば、それより変化が微妙なものや、全体的な色内容が変わらないものよりも正確に検出されます。 省略時の DBvShotControl フィールドの設定値はほとんどのアプリケーションで有効ですが、誤った検出をしたり、検出をしないことが少なくなるように、これらの設定値を調整する必要がある場合があります。

表 10. DBvShotControl フィールド
フィールド 意味
method シーン変化を検出するためにビデオ・エクステンダーが使用する方式を指定します。 次の方式から 1 つを選択することができます。

DETECT_CORRELATION。 連続する 2 つのフレームのピクセルを比較します。 この相違が相関しきい値を超えると、シーン変化が検出されます。

DETECT_HISTOGRAM。 連続する 2 つのフレームのそれぞれのヒストグラム値を比較します。 このヒストグラム値は、そのフレームにおける色の分散を示します。 この相違がヒストグラムしきい値を超えると、シーン変化が検出されます。

DETECT_CORRHIST。 まず、相関方式を使ってシーン変化の可能性があるフレームを識別し、次に、ヒストグラム相関を使ってそれらのフレームを検査します。 その値がヒストグラムしきい値よりも大きいと、シーン変化が検出されます。

DETECT_CORRHISTDISS。 DETECT_CORRHIST と同じですが、さらにディゾルブ (ある場面から次の場面へダブりながら映像が転換すること) を探すために、他のフレームを調べます。

省略時のメソッドは DETECT_CORRHIST です。

normalCorrValue 相関しきい値を指定する 0 から 100 の整数値です。 これは、2 つのフレームのピクセル間の相関係数の最小値を与えます。 値に 0 を指定すると、次のフレームに対し常にシーン変化が検出されます。

値に 100 を指定すると、あるフレームと次のフレームですべてのピクセルが変化した場合にのみ、シーン変化が検出されます。 省略時値は 60 です。

sceneCutSkipXY 予備。
CorrHistThresh ヒストグラムしきい値を指定する 0 から 100 の整数値です。 この値は、連続するフレーム間のヒストグラム値の相違を示します。 値に 0 を指定すると、あるフレームと次のフレームでヒストグラム値が全く異なるときだけ、シーン変化が検出されます。 値に 100 を指定すると、次のフレームに対し常にシーン変化が検出されます。 省略時値は 10 です。
DissThresh テストしきい値を指定する 0 から 100 の整数値です。 あるフレームでディゾルブ・テストに合格するピクセルの割合がこの値以上だと、ディゾルブが検出されます。

値に 0 を指定すると、そのフレームに対しディゾルブが常に検出されます。 値に 100 を指定すると、そのフレームのすべてのピクセルがディゾルブ・テストに合格する場合だけ、ディゾルブが検出されます。 省略時値は 15 です。

DissCacheSize ディゾルブ・テストのスロープ部分で使用されるフレーム数を指定する整数値です。

省略時値は 4 です。

DissNumCaches ディゾルブ・テストの一定部分で使用されるフレーム数を指定する整数値です。 省略時値は 7 です。
minShotSize ショットの最少フレーム数を指定する整数値です。 ショットが検出されるためには、そのショットのフレーム数が少なくとも最少数と同じでなければなりません。 省略時値は 5 です。

DBvShotType

DBvShotType データ構造には、ショットに関する情報が入ります。 たとえば、その開始フレーム番号、終了フレーム番号、代表的なフレームの番号、それに、その代表的なフレームのピクセル内容を指すポインターなどです。 このデータ構造は次のように定義されています。

typedef struct {
 
  unsigned long startFrame;       /* starting frame number */
  unsigned long endFrame;         /* ending frame number */
  unsigned long repFrame;         /* representative frame number */
  DBvFrameData fd;                /* data for representative shot */
  unsigned long dx;               /* frame data width in pixels */
  unsigned long dy;               /* frame data height in pixels */
  char *comment;                  /* shot remark */
 
} DBvShotType;

DBvFrameData

DBvFrameData データ構造には、フレームのピクセル内容が入ります。 このデータ構造は次のように定義されています。

typedef struct                     /* video frame data */
{
  /* MPEG 1 pixels */
  unsigned char *luminance;        /* Luminance pixel plane (black and white) */
  unsigned char *Cr;               /* Cr pixel plane */
  unsigned char *Cb;               /* Cb pixel plane */
  unsigned char *reserved;
 
  } DBvFrameData;

DBvStoryboardCtrl

DBvStoryboardCtrl データ構造には、ショットのどの代表フレームをいくつビデオ・カタログに保管するかを制御する値が入ります。 これらの値を使用する方法については、ストーリーボードの作成を参照してください。 このデータ構造は次のように定義されています。

typedef struct {
 
  int thresh1;                    /* threshold for small to medium scenes */
  int thresh2;                    /* threshold for medium to large scenes */
  int delta;                      /* offset used for representative frames */
 
} DBvStoryboardCtrl;

下記の表 は、DBvStoryboardCtrl の各フィールドとその省略時の設定値を示しています。 これらのフィールドを省略時値に初期設定するには、ショット検出データ構造内の値の初期設定に説明してある DBvInitStoryboardCtrl API を使用してください。

DBvStoryboardCtrl の設定値は、ビデオのタイプによって異なります: ストーリーボードに最適な代表フレームとその数は、ビデオのタイプによって異なります。 省略時値の DBvStoryboardCtrl フィールドの設定値は多くのタイプのビデオで有効ですが、これらの設定値をテスト・サブセットのビデオに使用した方がよいでしょう。 そうすると、必要に応じて設定値を調整してから、より広い範囲の一連のビデオに関するストーリーボードを作成することができます。

表 11. DBvStoryboardCtrl フィールド
フィールド 意味
thresh1 ショート・ショットのしきい値を指定します。 thresh1 の値より少ないフレームを持つショットは、ショート・ショットです。 ショート・ショットに関する情報をカタログする場合には、1 つの代表フレーム (中間フレーム) をその情報に含めます。

省略時値は 90 です。 thresh1 の値を -1 に設定すると、そのショットはショート・ショットとみなされます (実際の長さに関係なく)。

thresh2 ミディアムからロング・ショットのしきい値を指定します。 thresh2 の値以下で、thresh1 の値以上の値を持つショットは、ミディアム・ショットとみなされます。 ミディアム・ショットの情報をカタログする場合には、その情報には 2 つの代表フレームが含まれます。 代表フレームの位置は、delta フィールドの値によって制御されます。 thresh2 の値より多いフレームを持つショットは、ロング・ショットです。 ロング・ショットの情報をカタログする場合には、その情報には 3 つの代表フレームが含まれます。 最初と最後の代表フレームの位置は、delta フィールドの値によって制御されます。 2 番目のフレームは中間フレームです。

省略時値は 150 です。 thresh2 の値が -1 にセットされている場合、そのショットはショート・ショットとみなされます (実際の長さに関係なく)。

delta 代表フレームに使用するオフセットを指定します。 ミディアムおよびロング・ショットの場合、最初の代表フレームは、ショットの先頭から delta に指定したフレーム数だけオフセットされます。 最後の代表フレームは、ショットの最後から delta に指定したフレーム数だけオフセットされます。

省略時値は 5 です。

ショット検出データ構造内の値の初期設定

DBvShotControl データ構造内の値はショット検出を制御します。 DBvStoryboardCtrl データ構造内の値は、ストーリーボードの作成を制御します。 これらのデータ構造内のフィールドの値を明示的に指定することができます。 さらに、これらの構造内の値を省略時値に初期設定することができます。 DBvShotControl データ構造内の省略時値については、表 10 を参照してください。 DBvStoryboardCtrl データ構造内の省略時値については、表 11 を参照してください。

DBvInitShotControl API を使用すれば、DBvShotControl データ構造内の値を初期設定することができます。 この API を使用するときは、ショット制御構造を指定する必要があります。 たとえば、次のステートメントでは、DBvShotControl 構造内の各フィールドを省略時値に初期設定します。

DBvShotControl    shotCtrl;
 
rc=DBvInitShotControl(
              shotCtrl);          /* pointer to shot control structure */
              

DBvInitStoryboardCtrl API を使用すれば、DBvStoryboardCtrl データ構造内の値を初期設定することができます。 この API を使用するときは、ストーリーボード制御構造を指定する必要があります。 たとえば、次のステートメントでは、DBvStoryboardCtrl 構造の各フィールドを省略時値に初期設定します。

DBvStoryboardCtrl    sbCtrl;
 
rc=DBvInitStoryboardCtrl(
              sbCtrl);          /* pointer to storyboard control structure */
              


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]