I hav a greyscale image. I did 8x8 blocks and computed each of their DCTs. I want to quantize the DCT coefficients and then replace their LSBs with my secret message bits. How exactly do I quantize the coefficients? Should I use the quantization matrix used by JPEG? How to determine the values of such a quantization matrix?
1 に答える
各係数の変更された LSB が画像データを最小限に乱すように、品質レベルを最高 (量子化マトリックスの最小値) に設定することをお勧めします。
エンコーディングの場合:
量子化の後、エントロピー コーディングの前に DCT 値にアクセスする必要があります。ここで LSB を変更できます。おそらく、ゼロ以外の係数値のみを変更する必要があります。そうしないと、圧縮された画像ファイルがさらに大きくなり、さらに歪んでしまいます。この方法で、DCT ブロックごとに 20 ~ 30 ビットをエンコードできる可能性があります。
デコードの場合:
逆を行い、エントロピー デコードの直後、逆量子化ステップの前に DCT 値にアクセスする必要があります。
メッセージに使用できる合計ビット数を計算するには、次の例を使用します。
4:2:0 (両方の次元でサブサンプリングされた色) としてエンコードされた VGA サイズの画像 (640x480) の場合、40 x 30 = 1200 個の MCU があります。各 MCU には 6 つの DCT ブロック (4Y、1Cr、1Cb) があります。これは合計 7200 個の DCT ブロックです。各ブロックが平均 25 個の係数 (妥当な品質レベル) をエンコードする場合、メッセージは合計 7200x25 = 180000 ビットになる可能性があります。