Results and Examples
Home Introduction Existing Methods SSIS Details Results and Examples Code Bibliography

 

Results and Examples

We have implemented all the steps of the SSIS system as described in the SSIS Details section. Besides the AES encryption/decryption (which was downloaded from a public domain), the code uses standard MATLAB functions from Image Processing, Communication and Statistics toolboxes. The code is compatible with MATLAB version 6.1, but may work on earlier versions as well.

For the examples and figures that follow, we used the script "runtest.m" which runs all steps of the algorithm, displaying intermediate and final results. For more information, please refer to the code section.

Example 1

First we demonstrate the basic use of the system by hiding a 512-bit random message. We strive for error-free recovery, so we sacrifice capacity and use a very low rate ECC (BCH with message_length/encoded_message_length ratio of 512/48081).

After running:

runtest('bch','none','wnr','barbara_small.png',1/40);

Almost no apparent difference is visible.

Results (output of runtest with Adaptive Wiener filter as the restoration filter):

MSG_LENGTH : 512
ENCODED_MSG_LENGTH: 48081
Channel Capacity Utilization: 0.733658
MSG_BER : 0.000000
ENCR_BER : 0.000000
ENCD_BER : 0.217778
RESTOR_MSE : 48.739655
STEG_SNR : -30.177011
bpp : 0.010649

As can be seen, the relatively high embedded signal BER is successfully compensated by the choice of an appropriate ECC.

To demonstrate spreading the signal energy, following is the 2D Fourier Transform image of the embedded signal (already scaled). It can be seen that the signal energy is uniformly distributed in all spatial frequencies, as the term Spread Spectrum suggests.

A very interesting phenomenon is observed by looking at the exact places where the embedded signal estimation after restoration differs from the original embedded signal:

It can be seen that the majority of the errors occurs near the edges of the original cover image. L.Marvel and C.Retter proposed a way to compensate for this deficiency by using a sophisticated error-correction algorithm (convolutional code using hard and soft decision decoding and Viterbi algorithm for parameter estimation), while using the edge information extracted from the received stegoimage as its input. For details, see [7].

Next we show differences between various restoration filters. For the same example:

Alpha-trimmed mean filter:

MSG_BER : 0.000000
ENCD_BER : 0.209355
RESTOR_MSE : 128.153976

Standard mean filter:

MSG_BER : 0.000000
ENCD_BER : 0.215678
RESTOR_MSE : 124.630798

Median filter:

MSG_BER : 0.000000
ENCD_BER : 0.212350
RESTOR_MSE : 94.457428

As noticed in [1], the filter that provides the lowest signal Mean Squared Error is not the same as the one providing the lowest BER (Wiener has the lowest MSE, but the highest BER). Although the MSE is low, the number of errors is higher compared to the case when the MSE is high, but the number of errors is lower (the errors themselves are just larger in magnitude). 

Example 2

Now we investigate the appropriate choice of the scaling factor by which the modulated signal is multiplied before being added to the cover image. By varying this parameter, one can adjust the added noise power (and hence invisibility). The parameters chosen:

MSG_LENGTH : 50000
ENCODED_MSG_LENGTH: 211554
PIXELS AVAILABLE: 262140

ECC: BCH
FILTER: WIENER
IMAGE: 512*512 standard Lena

After running the script with varying value of the scaling factor, the following results were obtained:

Scale factor Restored MSE MSG_BER ENCD_BER
1/10 109.575306 0 0.057555
1/20 34.456551 0 0.078623
1/25 26.132103 0.006120 0.093447
1/30 21.700294 0.043920 0.109324
1/35 19.017006 0.099980 0.125656
1/40 17.278351 0.139540 0.141803
1/50 15.179195 0.174120 0.172008

As the scale factor decreases, the invisibility increases (because the power of the added noise is lower). However, this makes the task of successfully decoding the message more difficult (as indicated by the ENCD_BER values). The Restored MSE indicates the mean square error of the embedded signal estimate. Despite the fact that the values are high for high scaling factors, this doesn't bother the demodulation process too much since the amplitude of the embedded signal is also large, so relative errors are small.

Let's assume that, after examining the results, we decide that scale factor 1/40 provides good invisibility. However, the message BER of nearly 0.14 is unacceptable. Therefore we are forced to agree to hide less data by choosing lower-rate ECC. For the following parameters of the ECC:

MSG_LENGTH : 15000
ENCODED_MSG_LENGTH: 247324

we get the following results:

Channel Capacity Utilization: 0.057220/0.943466
MSG_BER : 0.000000
ENCR_BER : 0.000000
ENCD_BER : 0.145505
RESTOR_MSE : 18.241577

So now we use only 5.7% compared 19.1% available capacity (=50000/262140), but error-free.

Original Image Stegoimage

Example 3

Now we verify the robustness of the scheme to removal. We do this by intentionally introducing distortions to the stegoimage before inserting it into the decoder. Two possible distortions that we tried are JPEG compression and additive white Gaussian noise.

JPEG compression

We tested the Lena image with the following ECC parameters:

ECC TYPE: BCH
MSG_LENGTH : 2500
ENCODED_MSG_LENGTH: 233244
Channel Capacity Utilization: 0.009537/0.889755

Quality Factor Scaling Factor Message BER
85 1/20 0.000000
85 1/30 0.065200
90 1/30 0.000000
90 1/40 0.041600

As can be seen, there is a tradeoff between the allowed levels of compression, scaling factor and the choice of appropriate ECC.

Additive White Gaussian Noise

We found out that adding random Gaussian noise of low power can also be compensated by either decreasing the ECC rate or increasing the scaling factor. 

Example 4

In the previous examples, we hided a randomly generated binary message in the cover image. In fact, everything that is convertible to binary format can be hidden using the technique. As an example, we demonstrate it on data which represents another image, i.e. we hide another image inside the cover image. Note that in this case, perfect reconstruction isn't required, because even though errors are present, image restoration techniques can be applied to the received hidden image.

As an example, we hided the "baboon_eyes.png" image in the "girl.png" cover image. By choosing a relatively high scaling factor (1/15), the image was reconstructed without errors.

 

=======>

The resulting stegoimage:

* * *

Now we tried to hide the image "cat_head.jpg" in the same cover image. Since the size of the data being hidden is relatively large, we were forced to choose a relatively high-rate ECC. As a result, errors were present in the recovered image. However, after applying a median filter the quality of the recovered image improved, as can be seen below.

MSG_LENGTH: 122720
ENCODED_MSG_LENGTH: 350889
Channel Capacity Utilization: 0.312093/0.892357

Embedded signal BER was 0.085392, and after ECC it dropped to almost 0.05.

Original message Restored message After applying median filter