2進数表現のための2種の符号系
(KIT ステガノグラフィ研究グループ)
PBC と CGC は以下のような排他的論理和演算(EOR)で相互変換ができます。
以下の2つのBMP画像は、同じ画像データを PBC と CGC で表現した場合の違いを示しています(CGC の場合は PBCと見做しての表示です)。
![]() |
![]() |
PBC |
CGC |
BPCS 方式では、Vessel Image をPBCコードからCGCコードに変換した後で、実際の埋込み処理をします。これはCGCの方がより良質の("ブロック状の形"が現れない) Stego Image が得られるからです。その理由は以下の通りです。
なお、以下の説明では各ビットプレーンを "下から n 番目 (n=1,2,3,...) のビットプレーン" で表わすことにします。これは "重要度が n 番目に低い" ビットプレーンという意味です。例えば、上に示している PBC の b2 は、下から 3番目 のビットプレーンとなります。
ファイル中の或るブロック部分(即ち、或る引続く8バイト)を "PBCの 下から n 番目のプレーンの或る場所に埋め込む" と言うことは、その場所の元の画像データを、そっくり ファイルブロックと置き換える ことであり、その部分の幾つかの画素の或る色の値を "常に 2n-1 だけ変化させる" ことになります。この場合、変化したブロック部分の色が "まとまって" 変化してしまい、そこが不自然なブロック (8x8画素) として目立つことになります。
(例) 上に例示している4ビットのPBCで、下から 3番目のプレーンでの埋込みで "0" --> "1" と置換えられると、0 (=0000)-->4 (=0100), 1 (=0001)-->5 (=0101), 2(=0010) -->6 (=0110), 3 (=0011)-->7 (0111), 8 (=1000)-->12 (=1100) ... のように変化します。変化の大きさは一定で、 4 です。このような変化はブロック状となって現れます。 また、"1" --> "0" の場合は -4 となり、やはり変化が目立ちます。
一方、CGC では、一定ではなく、多様に変化します(但し、平均的な色の変化は 2n-1 )。
(例) 0 (=0000)-->7 (=0100), 1 (=0001)-->6 (=0101), 2 (=0011)-->5 (=0111), 3 (=0010)-->4 (=0110), 12 (=1010)-->11 (=1110) ... などのようになります。従って、色の変化はあまりブロック状にはなりません。
(最終更新日: 2017,04,05 河口英二)