6

ステガノグラフィでは、最下位ビット (LSB) 置換法により、画像ピクセルなどのカバー メディアからのビットの代わりに秘密ビットが埋め込まれます。一部の方法では、画像の離散ウェーブレット変換(DWT) が行われ、秘密ビットが DWT 係数に埋め込まれます。その後、逆変換を使用してステゴ画像が再構築されます。

ただし、DWT は float 係数を生成し、LSB 置換法には整数値が必要です。私が読んだほとんどの論文は 2D Haar Wavelet を使用していますが、その方法論は明確ではありません。ローパスフィルターとハイパスフィルター(フロート変換)、またはペア値の合計と差、または平均と平均差などの観点から変換が定義されているのを見てきました。

より明示的には、順変換または逆変換のいずれかで (ただし、使用される式によっては必ずしも両方であるとは限りません)、最終的に浮動小数点数が表示されます。置換が機能しないため、係数用にそれらを使用することはできません。また、画像はストレージに整数値を必要とするため、再構成されたピクセル用にそれらを使用することもできません。

たとえば、ピクセルのペアを 1D 配列として考えてみましょAB。低周波係数は和、つまり で定義され、高周波係数はs = A + B差、つまり で定義されd = A - Bます。B = (s - d) / 2次に、とを使用して元のピクセルを再構築できA = s - Bます。ただし、係数を少しいじった後は、s - dもはや偶数ではない可能性があり、再構成されたピクセルに対して float 値が出現します。

2D の場合、1D 変換は行と列に別々に適用されるため、最終的にどこかで 4 による除算が発生します。これにより、浮動小数点の剰余が .00、.25、.50、および .75 の値になる可能性があります。私は、この問題を扱っている論文を 1 つだけ見つけました。残りの方法論は非常に曖昧であり、私はそれらを再現するのに苦労しています. しかし、DWT はイメージ ステガノグラフィのために広く実装されています。

私の質問は、私が読んだ文献のいくつかは啓発的ではなかったので、どうしてこれが可能になるのでしょうか? float 値を導入する変換をどのように使用できますか?

4

1 に答える 1

8

私にとってうまくいった解決策の 1 つは、Integer Wavelet Transform を使用することです。これは、リフティング スキームとも呼ばれます。Haar ウェーブレットについては、次のように定義されています。

s = floor((A + B) / 2)
d = A - B

そして逆の場合:

A = s + floor((d + 1) / 2)
B = s - floor(d / 2)

プロセス全体のすべての値は整数です。これが機能する理由は、数式にピクセル/係数の偶数部分と奇数部分の両方に関する情報が含まれているため、切り捨てによる情報の損失がないためです。係数を変更してから逆変換を行っても、再構成されたピクセルは整数のままです。

Python での実装例:

import numpy as np

def _iwt(array):
    output = np.zeros_like(array)
    nx, ny = array.shape
    x = nx // 2
    for j in xrange(ny):
        output[0:x,j] = (array[0::2,j] + array[1::2,j])//2
        output[x:nx,j] = array[0::2,j] - array[1::2,j]
    return output

def _iiwt(array):
    output = np.zeros_like(array)
    nx, ny = array.shape
    x = nx // 2
    for j in xrange(ny):
        output[0::2,j] = array[0:x,j] + (array[x:nx,j] + 1)//2
        output[1::2,j] = output[0::2,j] - array[x:nx,j]
    return output

def iwt2(array):
    return _iwt(_iwt(array.astype(int)).T).T

def iiwt2(array):
    return _iiwt(_iiwt(array.astype(int).T).T)

一部の言語には、この目的のための組み込み関数が既に用意されています。たとえば、Matlab はlwt2()ilwt2()2D リフティング スキーム ウェーブレット変換に と を使用します。

els = {'p',[-0.125 0.125],0};
lshaarInt = liftwave('haar','int2int');
lsnewInt = addlift(lshaarInt,els);
[cAint,cHint,cVint,cDint] = lwt2(x,lsnewInt)    % x is your image
xRecInt = ilwt2(cAint,cHint,cVint,cDint,lsnewInt);

画像ステガノグラフィーに IWT が使用された記事の例は、Raja, KB et. al (2008) 整数ウェーブレットを使用した堅牢な画像適応ステガノグラフィ。

于 2013-04-07T23:02:02.480 に答える