One bit watermarking for HSP Progamming contest 2004 ・概要 一ビットだけ保存することが出来る電子透かしです。 電子透かしの基礎の基礎だけ出来るソフトです。 画素変化に対しての耐性を持っていますが、幾何学変形に対する耐性は持っていません。 Jpeg程度の画素変化に対しては非常に強い耐性を持ちます。 ・使い方 Load 画像を読み込みます。 Save 画像を保存します。 Implant 画像に透かしを埋め込みます。 Output 透かしの入った画像から、透かし相関値を得ます。 ・パラメータ Key 透かしを埋め込むためのカギです。 BlockSize 透かしの大きさです。大きいほど耐性が高くなりますが、目につくようになります。 Strength  埋め込む透かしの強度です。大きいほど耐性が高くなりますが、目につくようになります。 Imokabnt bit is 0  このチェックボックスがONだと0のビットを埋め込みます。 ・相関値 Outputを実行するときはKeyとBlockSizeを透かし画像を作ったときと同じ値にしてください。 相関値が正ならば1が、負ならば0のビットが画像に埋め込まれていることを示します。 相関値が0付近ならば、画像に透かしが入っていないことになります。 相関値は入れた (透かし強度 *1024/10) を中心とした正規分布で出力されます。 ・原理 ある画像の輝度平面をPとし、その画素の輝度値をP(i,j)とします。 +1と-1の値を1:1の割合で持つ二次元の乱数表をR、そのある点をR(i,j)とします。 また透かし強度をSとします。 透かしを埋め込んだ後の画像をP'とすると、P'=P±R*Sとなります(埋め込むビットが1の場合+、0の場合-をとります)。 透かしを抽出する場合、まずP'の画像を二次元的に微分します。 二次元的に微分された画像をΔP'とすると、 ΔP'(i,j) = P'(i,j) - (P'(i+1,j)+P'(i-1,j)+P'(i,j+1)+P'(i,j-1))/4 = P(i,j) - (P(i+1,j)+P(i-1,j)+P(i,j+1)+P(i,j-1))/4 ± {R(i,j) - (R(i+1,j)+R(i-1,j)+R(i,j+1)+R(i,j-1))/4}*S となります。 静止画において、画像の隣の点は十分に近い値をとるのでP(i,j) - (P(i+1,j)+P(i-1,j)+P(i,j+1)+P(i,j-1))/4≒0とし、Rは+1と-1が均等になっている乱数なので確率的に(R(i+1,j)+R(i-1,j)+R(i,j+1)+R(i,j-1))≒0 となります。したがってΔP'(i,j)≒±R*Sと近似することが出来ます。 R(i,j)は+1と-1しか取らないので、R(i,j)^2=1であるから、ΔP'(i,j)*R=±Sとなります。 相関値をVとしたとき、V=ΣΔP'(i,j)*R /画素数 = ±Sとなります。 したがってV>0のとき埋め込まれたビットは1、V<0のとき埋め込まれたビットは0となります。