Photoshopで最下位ビット置換法

main title

Photoshopを使って、最下位ビット置換法による透かしの埋め込みを行います。 まずは、どんなふうに透かし画像が検出されるのか、サンプルで試してみてください。

サンプルlsb_sample.psd:PSD 713KB)

サンプルをダウンロードして開い(ファイル>開く…)たら、非表示になっているレイヤーを表示し、画像を統合(レイヤー>画像を統合)してください。 それぞれのレイヤーの画像はほとんど同じ画像ですので、差の絶対値をとるとほとんど真っ黒な画像になります。 統合した画像を平均化(イメージ>色調補正>平均化(イコライズ))することで、埋め込まれていた透かし画像が可視化されます。

  1. Photoshopで透かし画像を作る
  2. Photoshopで最下位ビットプレーンを削除する
  3. Photoshopで透かし画像を埋め込む
  4. Photoshopで透かしを検出する

Photoshopで透かし画像を作る

watermark title

最下位ビット置換法では、8色の画像(RGBの各色につき1bit)を透かし画像として埋め込みます。 そのため、まず透かし画像を作ります。

1.

透かし画像の元になるカラー画像(pico.jpg)を開き(ファイル>開く…)ます。

サイズは、幅300ピクセル、高さ300ピクセルです。

2.

カラーモードをインデックスカラーに変更する(イメージ>モード>インデックスカラー…)ことで、8色に減色します。

このときのオプションは、パレットを「RGB カラーを均等に割り付ける」、表示色を8、ディザを「誤差拡散法」としました。

パレット:「RGB カラーを均等に割り付ける」
表示色:8
ディザ:「誤差拡散法」

index color

3.

カラーモードをRGB カラーに戻し(イメージ>モード>RGB カラー)ます。

この処理は暗号化の際に、レイヤー機能を使用するため必要(?)です。

4.

レベル補正(イメージ>色調補正>レベル補正)を行って画素値の最大値を1にして、透かし画像のできあがりです。

イメージ>色調補正>レベル補正…

ほとんど真っ黒な画像になっているでしょうか。

lsb_watermark.psd (PSD 311KB)
watermark

Photoshopで最下位ビットプレーンを削除する

lsb-substitution title

透かしを埋め込む画像(カバー画像)の最下位ビットプレーンを削除します。 つまり、画素値が偶数のみの画像にします。

1.

カバー画像(透かしを埋め込む画像)として用いるカラー画像(bigsight.jpg)を開き(ファイル>開く…)ます。

サイズは、透かし画像と同じサイズで、幅300ピクセル、高さ300ピクセルです。

2.

レベル補正(イメージ>色調補正>レベル補正…)を行って画素値の最大値を127にします。

イメージ>色調補正>レベル補正…

3.

レベル補正を行ったカバー画像を新規レイヤーに複製(レイヤー>レイヤーを複製…)します。

レイヤー>レイヤーを複製…
レイヤー>レイヤーを複製…

4.

複製したレイヤーの描画モードを「覆い焼き (リニア) - 加算」にします。
覆い焼き (リニア) - 加算

5.

画像を統合(レイヤー>画像を統合)すると、最下位ビットブレーンが削除されたカバー画像のできあがりです。

cover image
lsb_cover-image.psd (PSD 471KB)

画像のヒストグラムを見ると、画素値が偶数のみになっていることで確認できます。

ヒストグラム

Photoshopで透かし画像を埋め込む

embedding title

最下位ビットプレーンを削除したカバー画像と透かし画像を合成して、透かしを埋め込みます。

1.

最下位ビットプレーンを削除したカバー画像(lsb_cover-image.psd)と透かし画像(lsb_watermark.psd)を開き(ファイル>開く…)ます。

2.

カバー画像に新しいレイヤーを作成して、カバー画像と透かし画像を重ねます。 コピー&ペーストで良いと思います。
新しいレイヤー

3.

レイヤーの描画モードを「覆い焼 (リニア) - 加算」にします。
覆い焼 (リニア) - 加算

4.

画像を統合(レイヤー>画像を統合)すると、透かし画像の埋め込みは完了です。

透かしを埋め込む前のカバー画像と見分けがつかない画像になっていると思います。

lsb_watermarked-image.psd (PSD 532KB)
cover image

Photoshopで透かし画像を検出する

extraction title

透かし埋め込み画像から最下位ビットプレーンを削除した透かし埋め込み画像を引き算することで、透かし画像を検出します。

1.

透かし埋め込み画像(lsb_watermarked-image.psd)を開き(ファイル>開く…)ます。

2.

最下位ビットプレーンを削除した透かし埋め込み画像を作成するために、透かし埋め込み画像を複製(イメージ>複製…)します。

最下位ビットプレーンの削除は、「Photoshopで最下位ビットプレーンを削除する」と同じ方法で行います。

3.

レベル補正(イメージ>色調補正>レベル補正…)を行って画素値の最大値を127にします。

イメージ>色調補正>レベル補正…

4.

レベル補正を行ったカバー画像を新規レイヤーに複製(レイヤー>レイヤーを複製…)します。

レイヤー>レイヤーを複製…

5.

複製したレイヤーの描画モードを「覆い焼き (リニア) - 加算」にします。
覆い焼き (リニア) - 加算

6.

画像を統合(レイヤー>画像を統合)すると、最下位ビットプレーンを削除した透かし埋め込み画像のできあがりです。

7.

透かし埋め込み画像に新しいレイヤーを作成して、最下位ビットプレーンを削除した透かし埋め込み画像を重ねます。
新しいレイヤー

8.

レイヤーの描画モードを「差の絶対値」にします。
差の絶対値

9.

画像を統合(レイヤー>画像を統合)します。

レイヤー>画像を統合

10.

画像を平均化(イメージ>色調補正>平均化(イコライズ))すると、透かし画像が可視化されます。

埋め込んだ透かし画像が検出されたでしょうか。 平均化することで、画素値が0または1で表現されていた透かし画像が、0または255で表現されるため可視化されます。

lsb_extracted-watermark.psd (PSD 385KB)
イメージ>色調補正>平均化(イコライズ)