説明

スタートコード割当装置及びスタートコード割当方法

【課題】ビットストリーム中のスタートコードが改竄された動画像をデコードすることを可能とする。
【解決手段】ストリームの先頭から1ビットずつずらしながら、スタートコードのビット列とビット数が同一のビット列を抽出し、抽出されたビット列を基に、ビット列のビットパターン毎の発生頻度を表すヒストグラムを生成し、生成されたヒストグラムに対し、前記ストリームにおいて発生頻度が最も多いビットパターンが検出された位置の前後の範囲であって、前記発生頻度が最も多いビットパターンのうちの少なくとも1つのビットを含む範囲にあるビット列の発生頻度を減算し、発生頻度が最も多いビットパターンから発生頻度が減るビットパターンの順に、最下位層のスタートコードから最上位層のスタートコードに向かって、ビットパターンをスタートコードに割り当てる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、MPEG(Moving Picture Experts Group)規格などにより生成された画像などを表すビットストリームからスタートコードを検出し、それを各階層のスタートコードに割り当てるスタートコード割当装置及びスタートコード割当方法に関する。
【背景技術】
【0002】
MPEG1やMPEG2においては、画像圧縮することにより得られたビットストリームは、階層構造を有する。図1に示すように最上位層はシーケンス層であり、その下の層はGOP(Group Of Pictures)層であり、その下の層はピクチャ層であり、その下の層はスライス層であり、その下の層はマクロブロック層であり、その下の層である最下位層はブロック層である。
【0003】
そして、各層の先頭には、スタートコードが付けられる。スタートコードは各層毎に異なっている。つまり、シーケンス層の先頭には、シーケンス層スタートコードが存在し、GOP層の先頭には、GOPスタートコードが存在し、ピクチャ層の先頭にはピクチャスタートコードが存在し、スライスの先頭にはスライススタートコードが存在する。
【0004】
従って、デコーダは、まず、シーケンス層のスタートコードを検出し、それに続く可変長符号を復号し、シーケンス層においてGOP層のスタートコードを検出したならば、それに続く可変長符号を復号し、GOP層においてピクチャ層のスタートコードを検出したならば、それに続く可変長符号を復号し、ピクチャ層においてスライス層のスタートコードを検出したならば、それに続く可変長符号を復号する。スライス内においては、規格に従って、各マクロブロックと各マクロブロック内のブロックの符号を復号する。このようにして、DCT係数や動きベクトルなどの可変長符号を復号できると共に、それらがどのピクチャのどの位置にあるマクロブロックの符号であるのかを特定できると共に、マクロブロック内においては、DCT係数がどの成分のどのブロックのものであるのかを特定することができる。
【特許文献1】特開2001−054109号公報
【特許文献2】特開2004−242015号公報
【特許文献3】特開2004−326510号公報
【特許文献4】特開平11−212975号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかし、スタートコードの値は、MPEGの規格により定めたものであり、必然的にその値になっているわけではない。従って、スタートコードのみ独自の体系に置き換えても、その体系を知っているデコーダであれば、動画像を復号することができる。他方、スタートコードをそのような体系に置き換えた疑似MPEGデータを通常のMPEGのデコーダはデコードすることができない。
【0006】
この点を悪用し、テロリストや犯罪者は、スタートコードのみを独自の体系に置き換えた疑似MPEGデータをインターネットに公開し、テロリスト組織や犯罪組織のみで動画像をデコードできるようにする。つまり、世界中に広まっているインターネットを利用して、一種の暗号化がなされた動画像をテロリスト組織や犯罪組織のみで送受信できるようにする。
【0007】
各国の治安組織において、そのような動画像をデコードすることができれば、テロリストや犯罪組織の活動の一部を把握することが可能となる。
【0008】
そこで、本発明は、スタートコードが改竄された動画像をデコードすることを可能とするスタートコード割当装置及びスタートコード割当方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明によれば、ストリームの先頭から1ビットずつずらしながら、スタートコードのビット列とビット数が同一のビット列を抽出するビット列抽出手段と、前記ビット列抽出手段により抽出されたビット列を基に、ビット列のビットパターン毎の発生頻度を表すヒストグラムを生成するヒストグラム生成手段と、前記ヒストグラム生成手段により生成されたヒストグラムに対し、前記ストリームにおいて発生頻度が最も多いビットパターンが検出された位置の前後の範囲であって、前記発生頻度が最も多いビットパターンのうちの少なくとも1つのビットを含む範囲にあるビット列の発生頻度を減算する発生頻度補正手段と、発生頻度が最も多いビットパターンから発生頻度が減るビットパターンの順に、最下位層のスタートコードから最上位層のスタートコードに向かって、ビットパターンをスタートコードに割り当てるスタートコード割当手段と、を備えることを特徴とするスタートコード割当装置が提供される。
【0010】
上記のスタートコード割当装置において、前記ヒストグラム生成手段により生成され、前記発生頻度補正手段により補正されたヒストグラムに対し、前記ストリームにおいて発生頻度が2番目に多いビットパターンが検出された位置の前後の範囲であって、前記発生頻度が2番目に多いビットパターンのうちの少なくとも1つのビットを含む範囲にあるビット列の発生頻度を減算する第2の発生頻度補正手段を更に備えるようにしてもよい。
【0011】
上記のスタートコード割当装置において、前記ヒストグラム生成手段により生成され、前記発生頻度補正手段乃至第n(nは、2以上の整数)の発生頻度補正手段により補正されたヒストグラムに対し、前記ストリームにおいて発生頻度が(n+1)2番目に多いビットパターンが検出された位置の前後の範囲であって、前記発生頻度が(n+1)番目に多いビットパターンのうちの少なくとも1つのビットを含む範囲にあるビット列の発生頻度を減算する第(n+1)の発生頻度補正手段を更に備えるようにしてもよい。
【0012】
上記のスタートコード割当装置において、発生頻度補正手段は、ビット列が連続するスタートコードのうちの一部のスタートコードに該当する場合には、該ビット列の発生頻度を減算しないようにしてもよい。
【0013】
上記のスタートコード割当装置において、前記最下位層は、ブロック層であり、その上の層はマクロブロック層であり、その上の層はスライス層であり、その上の層はピクチャ層であり、その上の層はGOP層であり、その上の層はシーケンス層であり、発生頻度が最も多いビットパターンをスライス層のスタートコードとし、次に発生頻度が多いビットパターンをピクチャ層のスタートコードとし、次に発生頻度が多いビットパターンをGOP層のスタートコードとし、次に発生頻度が多いビットパターンをシーケンス層のスタートコードとするようにしてもよい。
【0014】
上記のスタートコード割当装置において、スタートコードに割り当てられたビットパターンを規格に従ったビットパターンに置き換えるビットパターン置換手段を更に備えるようにしてもよい。
【発明の効果】
【0015】
本発明によれば、スタートコードが改竄された場合であっても動画像をデコードすることが可能となる。
【発明を実施するための最良の形態】
【0016】
以下、図面を参照して本発明を実施するための最良の形態について詳細に説明する。
【0017】
ストリームの先頭から、1ビットずつずらしながら一定量のデータ(Nビット)(0ビットの位置からNビットのデータを読んでヒストグラムに積む、1ビットの位置からNビットのデータを読んでヒストグラムに積む・・・をファイルの終端まで繰り返す)を読み込んで、それをファイルの終端まで繰り返し、逐次ヒストグラムとして積んでいく。
【0018】
一般的に動画圧縮規格というのは、図1におけるMPEG−2エレメンタリーストリームのフォーマットに示されるような階層構造となっており、各層の先頭にはスタートコードが存在している。このような階層構造をしているストリームに対してヒストグラムをつむと、スタートコード周辺において頻度が高くなり、それ以外の部分においては圧縮規格の性質上冗長性が低くランダム性が高くなるため、頻度は高くならない。
【0019】
上記のような手段にてヒストグラムを作成すると、スタートコード周辺のデータもヒストグラムの頻度データが高くなってしまうので、再度ストリームの先頭から1ビットずつずらしながら、固定長(Nbit)のデータを読み込んで、1回目に作成したヒストグラムにおいて頻度の高いデータを検出した際に、その前後Nbitの頻度データを削除する。このことによって、スタートコードの頻度データが明確化され、誤検出を抑制できる。
【0020】
この性質を利用して、スタートコードを識別すると、これらスタートコードが規格において示される値から変更されている場合でも、この方法によれば問題なくスタートコードを識別することができる。具体的には、ヒストグラムを作成した場合、階層構造中のスタートコードを有する層のうちの最下階層のスタートコードの頻度が高くなると考えられるから、ストリーム中のいちばん頻度の高いデータを動画圧縮規格のスタートコードを有する層のうちのいちばん下の階層(スライス層)のスタートコードに置き換える。次に2番目に頻度の高いデータを動画圧縮規格のスタートコードを有する層のうちの最下層から2番目のスタートコードに置き換える。これを、いちばん上の階層まで繰り返す。こうしてできた新たなストリームを復号(動画再生)してみて実際に復号可能(動画が再生可能)ならば、ストリームの復号が可能となる。このようにして、スタートコードが変更されている場合でも、ストリームの復号が可能となる。
【0021】
また、上記のようにしてスタートコードを検出することができたならば、それを規格に従ったビットパターンを有するスタートコードに置き換えれば、これにより、通常のMPEGデコーダでデコードすることができるようになる。
【0022】
MPEG−2やH.262などのような規格に基づいた動画圧縮規格というのは、図1におけるMPEG−2エレメンタリーストリームのフォーマット示されるような階層構造となっていて、各層の先頭にはスタートコードが存在している。テロリストや犯罪者が隠蔽目的でこれらスタートコードを変更している場合が存在する。本発明は、動画圧縮規格からスタートコードが変更されたストリームに対しても、スタートコードを識別し、復号をすることができる。
【0023】
図2におけるデータ・パラメータ入力部101より解析対象データである動画ファイルデータ及び、頻度分析をするビット数及び解析データ長などを入力する。入力されたデータ及びパラメータは、頻度解析部103に渡される。
【0024】
頻度解析部103においては、入力データの先頭からデータを解析していき、解析データ長分処理したところで終了する。これまでに積み上げた頻度解析結果を解析結果表示部105に出力する。
【0025】
例として、頻度分析するビット数が32ビットの場合を1例として説明する。
【0026】
図3、図4のフローチャートに従って説明する。まず、データ・パラメータ入力部101において、入力データファイル(例としてMPEG−2エレメンタリーストリームファイル)、頻度解析ビット数(この値に関しては、スタートコード長として最もよく使われているものを入力するとよい。MPEG−2エレメンタリーストリームにおいては、スタートコードはほとんどが32ビットをなっているので、32などを入力する)、解析データ長、類似データ削除回数(スタートコードの近傍においては、スタートコードをシフトしたパターンの頻度も上がってしまうため、それら頻度を削除するためのアルゴリズムで利用するもの。このアルゴリズムにおいては、頻度の高いものから順次検索していき頻度のN番目までのものの近傍の頻度データをヒストグラムから削除する)を入力する。
【0027】
次にファイルポインタをファイルの先頭に設定して(ステップS203)、32ビットデータを読み込む(ステップS205)。図5の頻度解析結果にもあるとおり、横軸には32ビットのデータが0x00000000から0xFFFFFFFFまで2^32並んでおり、読み込んできたデータに対応するヒストグラムの頻度を1プラスする(ステップS207)。次にファイルポインタを1ビットずらして(ステップS209)、再び32ビットデータを読み込んできて(ステップS205)、対応するヒストグラムの頻度を1プラスして(ステップS207)、この動作をファイルポインタがパラメータとして入力された解析データ長もしくは、ファイルの終端にくるまで(ステップS211でYES)繰り返す。
【0028】
ヒストグラムができあがったら、次にスタートコードの周辺においても頻度はあがってしまうため、それら頻度を削除する処理を行う。つまり、スタートコードのビット数が32ビットであるとすると、スタートコードより1ビット前にずれた32ビットのパターンは、最初の1ビット(1又は0の値を有する)にスタートコードの前半の31ビットのパターンを足し合わせたものとなる。同様に、スタートコードより1ビット後ろにずれた32ビットのパターンは、スタートコードの後半の31ビットのパターンに最後の1ビット(1又は0の値を有する)を足し合わせたものとなる。従って、スタートコードより1ビット前にずれた2種類の32ビットのパターンの発生頻度は、それぞれ、スタートコードの発生頻度の1/2となり、スタートコードより1ビット後ろにずれた2種類の32ビットのパターンの発生頻度は、それぞれ、スタートコードの発生頻度の1/2となる。同様に、スタートコードより2ビット前にずれた4種類の32ビットのパターンの発生頻度は、それぞれ、スタートコードの発生頻度の1/4となり、スタートコードより2ビット後ろにずれた4種類の32ビットのパターンの発生頻度は、それぞれ、スタートコードの発生頻度の1/4となる。同様にこれを繰り返し、スタートコードより31ビット前にずれた2^31種類の32ビットのパターンの発生頻度は、それぞれ、スタートコードの発生頻度の1/(2^31)となり、スタートコードより31ビット後ろにずれた2^31種類の32ビットのパターンの発生頻度は、それぞれ、スタートコードの発生頻度の1/(2^31)となる。
【0029】
従って、例えば、スライス層のスタートコードより1ビットずれたビットパターンの発生頻度は、ピクチャ層のスタートコードの発生頻度よりも高くなってしまい、発生頻度の順に、スタートコードを下の層から上の層に向かって割り当てていくと、スタートコードの誤検出が生じてしまう。スライス層のスタートコードより2ビットずれたビットパターンの発生頻度が、ピクチャ層のスタートコードの発生頻度よりも高くなってしまうこともありえる。
【0030】
従って、ステップS213〜S231を行うことにより、このような誤検出を防止する。
【0031】
ファイルポインタを再び0にし(ステップS215)、ヒストグラムの中で、頻度が最も高い32ビットデータを検索対象データ(SEARCH−DATA)としておく(ステップS217)。再び32ビットずつデータを1ビットずつずらしながら読んでいき(ステップS219、S221)、SEARCH−DATAと一致している位置から前後1ビットずれた位置から31ビットずれた位置までの頻度データを1だけ減少させる(SEARCH−DATA自身の頻度は削除しない)(ステップS227)。この際に、隣通しのSEARCH−DATAの位置が32ビット以内にある場合(例えばGOP層のスタートコードとピクチャ層のスタートコードが連続している場合)には、同じ位置の頻度を2度削除しないようにする。これを、ステップS201で設定した類似頻度削除回数Nまで繰り返す(ステップS229、S231)。
【0032】
隣通しのSEARCH−DATAの位置が32ビット以内にある場合には、同じ位置の頻度を2度削除しないようにするためには、ステップS203〜S231と同様なことを64(=2×32)ビットデータについて行っておき、前後1ビットずれた位置から31ビットずれた位置にある32ビットのパターンが頻度の高い64ビットパターンの前半の32ビット又は後半の32ビットと一致する場合には、頻度を減らさないようにする。
【0033】
更に、3つのスタートコードが連続することもあり得るならば、S203〜S231と同様なことを96(=3×32)ビットデータについて行っておき、それに続いて、上記の段落のことを行う。その際、前後1ビットずれた位置から63(=64−1)ビットずれた位置にある64ビットのパターンが頻度の高い96ビットパターンの前半の32ビット、中央の32ビット又は後半の32ビットと一致する場合には、頻度を減らさないようにする。
【0034】
このようにして作成されたヒストグラムに対して、下記の操作をすることによって、スタートコードが変更されたストリームを元の規格に基づいたストリームに戻す。データストリームにおいて、ヒストグラムのいちばん頻度の高いデータをMPEG−2エレメンタリーストリームの規格におけるスタートコードを有する層のうちの最下層のスタートコード(スライス層のスタートコード)と置き換える。ストリームにおいて、ヒストグラムの2番目に頻度の高いデータをMPEG−2エレメンタリーストリームの規格におけるスタートコードを有する層のうちの最下層から2番目のスタートコード(ピクチャ層のスタートコード)と置き換える。この操作を最上層のスタートコードまで繰り返す。
【0035】
上記操作に対して作成された新たなストリームをMPEG−2再生器にかけてみて、動画として再生できれば(復号できれば)正しくデータが規格に基づいたストリームに戻すことができたことを確認できる。
【0036】
なお、図3、図4を参照して説明した方法は、図2に示すようなハードウェアによって実現することもできるが、コンピュータにこのような方法を行わせるためのプログラムをコンピュータが読み込んで実行することによっても実現することができる。
【図面の簡単な説明】
【0037】
【図1】MPEGデータの階層構造を示す図である。
【図2】本発明の実施形態によるスタートコード割当装置の構成を示すブロック図である。
【図3】本発明の実施形態によるスタートコード割当方法を示すフローチャート(1/2)である。
【図4】本発明の実施形態によるスタートコード割当方法を示すフローチャート(2/2)である。
【図5】本発明の実施形態で生成するヒストグラム等を示す図である。
【符号の説明】
【0038】
101 データ・パラメータ入力部
103 頻度解析部
105 解析結果表示部

【特許請求の範囲】
【請求項1】
ストリームの先頭から1ビットずつずらしながら、スタートコードのビット列とビット数が同一のビット列を抽出するビット列抽出手段と、
前記ビット列抽出手段により抽出されたビット列を基に、ビット列のビットパターン毎の発生頻度を表すヒストグラムを生成するヒストグラム生成手段と、
前記ヒストグラム生成手段により生成されたヒストグラムに対し、前記ストリームにおいて発生頻度が最も多いビットパターンが検出された位置の前後の範囲であって、前記発生頻度が最も多いビットパターンのうちの少なくとも1つのビットを含む範囲にあるビット列の発生頻度を減算する発生頻度補正手段と、
発生頻度が最も多いビットパターンから発生頻度が減るビットパターンの順に、最下位層のスタートコードから最上位層のスタートコードに向かって、ビットパターンをスタートコードに割り当てるスタートコード割当手段と、
を備えることを特徴とするスタートコード割当装置。
【請求項2】
請求項1に記載のスタートコード割当装置において、
前記ヒストグラム生成手段により生成され、前記発生頻度補正手段により補正されたヒストグラムに対し、前記ストリームにおいて発生頻度が2番目に多いビットパターンが検出された位置の前後の範囲であって、前記発生頻度が2番目に多いビットパターンのうちの少なくとも1つのビットを含む範囲にあるビット列の発生頻度を減算する第2の発生頻度補正手段を更に備えることを特徴とするスタートコード割当装置。
【請求項3】
請求項2に記載のスタートコード割当装置において、
前記ヒストグラム生成手段により生成され、前記発生頻度補正手段乃至第n(nは、2以上の整数)の発生頻度補正手段により補正されたヒストグラムに対し、前記ストリームにおいて発生頻度が(n+1)2番目に多いビットパターンが検出された位置の前後の範囲であって、前記発生頻度が(n+1)番目に多いビットパターンのうちの少なくとも1つのビットを含む範囲にあるビット列の発生頻度を減算する第(n+1)の発生頻度補正手段を更に備えることを特徴とするスタートコード割当装置。
【請求項4】
請求項1乃至3の何れか1項に記載のスタートコード割当装置において、
発生頻度補正手段は、ビット列が連続するスタートコードのうちの一部のスタートコードに該当する場合には、該ビット列の発生頻度を減算しないことを特徴とするスタートコード割当装置。
【請求項5】
請求項1乃至4のいずれか1項に記載のスタートコード割当装置において、
前記最下位層は、ブロック層であり、その上の層はマクロブロック層であり、その上の層はスライス層であり、その上の層はピクチャ層であり、その上の層はGOP層であり、その上の層はシーケンス層であり、
発生頻度が最も多いビットパターンをスライス層のスタートコードとし、次に発生頻度が多いビットパターンをピクチャ層のスタートコードとし、次に発生頻度が多いビットパターンをGOP層のスタートコードとし、次に発生頻度が多いビットパターンをシーケンス層のスタートコードとすることを特徴とするスタートコード割当装置。
【請求項6】
請求項1乃至5の何れか1項に記載のスタートコード割当装置において、
スタートコードに割り当てられたビットパターンを規格に従ったビットパターンに置き換えるビットパターン置換手段を更に備えることを特徴とするスタートコード割当装置。
【請求項7】
ストリームの先頭から1ビットずつずらしながら、スタートコードのビット列とビット数が同一のビット列を抽出するビット列抽出ステップと、
前記ビット列抽出ステップにより抽出されたビット列を基に、ビット列のビットパターン毎の発生頻度を表すヒストグラムを生成するヒストグラム生成ステップと、
前記ヒストグラム生成ステップにより生成されたヒストグラムに対し、前記ストリームにおいて発生頻度が最も多いビットパターンが検出された位置の前後の範囲であって、前記発生頻度が最も多いビットパターンのうちの少なくとも1つのビットを含む範囲にあるビット列の発生頻度を減算する発生頻度補正ステップと、
発生頻度が最も多いビットパターンから発生頻度が減るビットパターンの順に、最下位層のスタートコードから最上位層のスタートコードに向かって、ビットパターンをスタートコードに割り当てるスタートコード割当ステップと、
を備えることを特徴とするスタートコード割当方法。
【請求項8】
請求項7に記載のスタートコード割当方法において、
前記ヒストグラム生成ステップにより生成され、前記発生頻度補正ステップにより補正されたヒストグラムに対し、前記ストリームにおいて発生頻度が2番目に多いビットパターンが検出された位置の前後の範囲であって、前記発生頻度が2番目に多いビットパターンのうちの少なくとも1つのビットを含む範囲にあるビット列の発生頻度を減算する第2の発生頻度補正ステップを更に備えることを特徴とするスタートコード割当方法。
【請求項9】
請求項8に記載のスタートコード割当方法において、
前記ヒストグラム生成ステップにより生成され、前記発生頻度補正ステップ乃至第n(nは、2以上の整数)の発生頻度補正ステップにより補正されたヒストグラムに対し、前記ストリームにおいて発生頻度が(n+1)2番目に多いビットパターンが検出された位置の前後の範囲であって、前記発生頻度が(n+1)番目に多いビットパターンのうちの少なくとも1つのビットを含む範囲にあるビット列の発生頻度を減算する第(n+1)の発生頻度補正ステップを更に備えることを特徴とするスタートコード割当方法。
【請求項10】
請求項7乃至9の何れか1項に記載のスタートコード割当方法において、
発生頻度補正ステップは、ビット列が連続するスタートコードのうちの一部のスタートコードに該当する場合には、該ビット列の発生頻度を減算しないことを特徴とするスタートコード割当方法。
【請求項11】
請求項7乃至10のいずれか1項に記載のスタートコード割当方法において、
前記最下位層は、ブロック層であり、その上の層はマクロブロック層であり、その上の層はスライス層であり、その上の層はピクチャ層であり、その上の層はGOP層であり、その上の層はシーケンス層であり、
発生頻度が最も多いビットパターンをスライス層のスタートコードとし、次に発生頻度が多いビットパターンをピクチャ層のスタートコードとし、次に発生頻度が多いビットパターンをGOP層のスタートコードとし、次に発生頻度が多いビットパターンをシーケンス層のスタートコードとすることを特徴とするスタートコード割当方法。
【請求項12】
請求項7乃至11の何れか1項に記載のスタートコード割当方法において、
スタートコードに割り当てられたビットパターンを規格に従ったビットパターンに置き換えるビットパターン置換ステップを更に備えることを特徴とするスタートコード割当方法。
【請求項13】
コンピュータに請求項7乃至12の何れか1項に記載の方法を行わせるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2008−16922(P2008−16922A)
【公開日】平成20年1月24日(2008.1.24)
【国際特許分類】
【出願番号】特願2006−183277(P2006−183277)
【出願日】平成18年7月3日(2006.7.3)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】