おすすめ記事

単純で高速なステガノグラフィーを実現する「RGB1-2r」

シェアする

ステンドグラス
この記事の所要時間: 337

概要

現在開発中のLogoSkelterは、ステガノグラフィーを応用した電子透かし技術を研究しています。このステガノグラフィーとは、画像や音声、動画などの各構成信号の一部に、ある法則に従って別のデータを埋め込むものです。

この研究においては、主にフルカラーの画像データの内部に別のデータを埋め込むことが目的です。
その際、以下の要件を満たすよう研究しています。

LogoSkelterが求めるステガノグラフィーの要件

  • 単純で高速動作可能
  • 大容量のデータを低劣化で入れ込める

その目的の一つの成果物である「RGB1-2r」の仕組みを公開します。

フルカラー画像

ルービックキューブ。フルカラー画像なので色々ないろが使える。
ルービックキューブ。フルカラー画像なので色々ないろが使える。

ルービックキューブ。フルカラー画像なので色々な色が使われている。

そもそも、フルカラーの画像データとは何を示すのでしょうか? 今後の理解の助けとするために、簡単に解説します。

そもそも

フルカラー画像とは、「24ビットカラー」以上で表現されたピクセル(1つの小さな点)が集まったものです。場合によっては「32ビットカラー」を指していることもあります。コンピューターは、データをビット(0か1か)の集まりで表します。この時、「24ビットカラー」なら24個のビットの連続で色を表しているという意味があります。

光の三原色

コンピューターでは、光の三原色を使って色を表しています。光の三原色というのですから、「3つの光の状態=それぞれの強さ」を使って色を表しています。光の三原色は、「赤(Red)」、「緑(Green)」、「青(Blue)」です。フルカラーの「24ビットカラー」では「赤を8ビット(1バイト)」、「緑を8ビット(1バイト)」、「青を8ビット(1バイト)」で表します。この時、1色=1ピクセルを「3バイト」で表すため、3バイトカラーと言うこともあります。

スポンサーリンク

画像は小さな色のついた点の集まり

ピクセルは、1つの小さな点のことです。このピクセルを例えば78万6千個超(1024 × 768)を使って、コンピューターは画像を描いています。小さな点でも、沢山集めれば目に見える大きな像を描けるという訳ですね。

画像はピクセル(色のついた小さな点)の集まり。拡大してみるとよく分かる。
画像はピクセル(色のついた小さな点)の集まり。拡大してみるとよく分かる。

画像はピクセル(色のついた小さな点)の集まり。拡大してみるとよく分かる。

RGB1-2rの仕組み

RGB1-2rの「1-2」

これまでの、画像についての簡単な知識があればRGB1-2rの仕組みも簡単に理解できます。

RGB1-2rを、端的に説明すると、「24ビットカラー」の画像を「20ビットカラー」に落とし込んで、その余った「4ビット」分の領域にデータを入れていく仕組みです。

この時、4ビットの領域を、「から2ビット削る」、「から1ビット削る」、「から1ビット削る」といった風に確保します。削るといっても、三色のビットを結合して、空いた領域を使うといったことを意味している訳ではありません。

1ビットないし、2ビットの領域に、データのビットを上書き保存するという意味です。RGB1-2rの「1-2」というのが、1ビットないし2ビットという意味を示しています。

RGB1-2rの「r」

3色から4ビットを削るというと、「各色から3分の4ビットを削ればいいんじゃないか?」と思われる方も居るでしょう。ただし、残念ながらコンピューターでは小数点の付いたビットを削るということは出来ません。必ず整数のビットしか扱えないからです。

しかし、この「各色から3分の4ビットを削ればいいんじゃないか?」という発想は、とても重要です。この少数点のビットを削るという点に着想を得たのが、この「r」の示す意味です。

これは「Rotation」の先頭の「r」から取られています。

例えば、

最初に「赤から2ビット、緑から1ビット、青から1ビットそれぞれ削り、その空いた4ビットにデータを入れる」ことを行います。続けて、「赤から1ビット、緑から2ビット、青から1ビットそれぞれ削り、その空いた4ビットにデータを入れる」ことを行います。同様に、「赤から1ビット、緑から1ビット、青から2ビットそれぞれ削り、その空いた4ビットにデータを入れる」ことを行います。

これを繰り返すことで、全ての赤・緑・青の成分から1~2ビットの値を、じゅんぐり(ローテションしながら)に削っていく訳です。これにより、全体的に見ると「各色から平均3分の4ビットを削った」のと同じ意味合いになるのです。

RGB1-2rの特徴

RGB1-2rは、以下の様な特徴を有しています。

  • 1バイトの情報をたったの2ピクセルに保持することができます
  • RGB1-2rを用いても、画像全体の輝度は変化しません
  • *単純なビット演算の範囲で収まるため高速に復号化・展開処理が行えます

RGB1-2rが一枚の「24ビット」のビットマップ画像に入れ込めるデータ容量

例えば、1024 * 768ピクセルのビットマップ画像には、どのくらいの容量のデータを入れ込むことが出来るのでしょうか?

この答えは簡単です。

1バイトの情報を2ピクセルで保持出来ることがわかっています。

言い換えれば、6バイトで1バイトの情報を保有することができるわけです。実際にWindowsに標準で搭載されている「ペイント」を使って、ファイルを作成してみると、

2,359,350バイトのサイズがあることが分かりました。

24ビットビットマップ画像のファイルサイズ。
24ビットビットマップ画像のファイルサイズ。

24ビットビットマップ画像のファイルサイズ。

実際にピクセル数とバイト数からファイルサイズを計算すると、 1024 * 768 * 3 = 2,359,296となります。凡そ54バイトのファイルヘッダーが含まれることも分かりますね。

そしてこの2,359,296の6分の1のファイルを入れ込むことが出来ますので、計算すると393,216バイトとなりました。

凡そ2.4メガバイトのファイルに、400キロバイトのファイルを入れ込むことが出来るのですね。

RGB1-2rで処理した画像例(PNGファイル)

では、実際にRGB1-2rで処理した画像と、処理前の画像を掲示しますので見比べてみてください。2つを見比べないとその違いは分かりませんね。

RGB1-2rを適用していない画像。
RGB1-2rを適用していない画像。

RGB1-2rを適用していない画像。

RGB1-2rを適用した画像。
RGB1-2rを適用した画像。

RGB1-2rを適用した画像。

拡大して見比べてみると確かに若干ノイズ感が増えている

RGB1-2rを適用していない画像を拡大してみたところ。
RGB1-2rを適用していない画像を拡大してみたところ。

RGB1-2rを適用していない画像を拡大してみたところ。

RGB1-2rを適用した画像を拡大してみたところ。
RGB1-2rを適用した画像を拡大してみたところ。

RGB1-2rを適用した画像を拡大してみたところ。

RGB1-2rBW

RGB1-2rでは、画像に若干ノイズ感が増加して感じることがあります。

そこで、液晶ディスプレイの特性に着目し、入れ込める画像量が減少するかわりにノイズを減らすのがRGB1-2rBWです。このBWはBlack & Whiteの略です。

次の画像をみてください。この画像はRGB1-2rBWの考えを理解するのに役立ちます。

RGB1-2rを適用していない画像。
RGB1-2rを適用していない画像。

この画像の四隅はその中の部分よりも境界が目立たない。この特性を使って、色の暗い所、色の明るい所にだけRGB1-2rを適用することで、よりノイズの目立たない画像を作り出すことが出来る。RGB1-2rBW。

この画像は、液晶ディスプレイの性質に依存しますが、概ね両四隅に近い色の隣り合う色の境界がはっきりしないのに対し、中央付近の色は結構はっきりと境界が分かります。

液晶ディスプレイは特に黒の表現力が乏しいことが多いため暗めの色を変更しても差が分かりにくく、また目の仕組み自体が特に明るい色(白等)の濃淡には疎い性質があるためです。

この特徴を使って、明るい色と暗い色にのみRGB1-2rを適用することで、人間の目が更に判別しづらくすることができます。

※ この仕組みの詳細は別の機会にご紹介いたします。

Copy Protected by Chetan's WP-Copyprotect. >