ショット検出に関連するデータは、構造体 (これはショット検出ヘッダー・ファイル dmbshot.h にあります) に保管されます。 多くのショット検出 API では、これらの構造体の 1 つまたはそれ以上をポイントする必要があります。 これらの構造体のいくつかには、ビデオ・エクステンダーが入力として使用するデータを指定します。 たとえば、ショット制御構造体には、ショット検出を制御する情報を指定します。 ほとんどの構造体は、ビデオ・エクステンダーがビデオから取り出したデータを保管するために使用されます。 たとえば、ビデオ・フレーム・データ構造には、フレームのピクセル内容が入ります。
ショットの検出に使用する構造体には、DBvIOType、DBvShotControl、DBvShotType、DBvFrameData、および DBvStoryboardCtrl があります。
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 データ構造には、ショット検出を制御するための情報 (検出方式など) が入ります。 このデータ構造は次のように定義されています。
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 フィールドの設定値はほとんどのアプリケーションで有効ですが、誤った検出をしたり、検出をしないことが少なくなるように、これらの設定値を調整する必要がある場合があります。
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 データ構造には、フレームのピクセル内容が入ります。 このデータ構造は次のように定義されています。
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 データ構造には、ショットのどの代表フレームをいくつビデオ・カタログに保管するかを制御する値が入ります。 これらの値を使用する方法については、ストーリーボードの作成を参照してください。 このデータ構造は次のように定義されています。
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 フィールドの設定値は多くのタイプのビデオで有効ですが、これらの設定値をテスト・サブセットのビデオに使用した方がよいでしょう。
そうすると、必要に応じて設定値を調整してから、より広い範囲の一連のビデオに関するストーリーボードを作成することができます。
フィールド | 意味 |
---|---|
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 */