Chapter 1 Introduction
B. Hiding Images Using Modified Search-Order Coding and Modulus
coding (MSOC) and a variance-based modulus function is proposed. The MSOC scheme utilizes the feature of high correlation among adjacency pixels (i.e. many neighboring pixels are with similar gray-values) to encode the important image. An adjustable threshold T is used in the MSOC; and this T directly controls the quality of the extracted image. Finally, to embed the MSOC output code in a cover image, at each pixel of the cover image, its {Northwest, North, West} three-neighbor variance is evaluated to estimate the hiding capacity of the pixel, and the MSOC output code is embedded in the cover image using two sets of modulus function. Notably, in order to have the ability of extracting the important image in the future, the evaluation of the aforementioned variance uses the stego-pixel-values (rather than the original cover-pixel-values) of the three neighbors. This is because the {Northwest, North, West} three-neighboring-pixels are already modified to hide data in them, and we do not keep the cover image after embedding; therefore, in the future decoding-phase, the evaluation of the variance can only use stego-image neighbors, not the original cover-image neighbors.
C. An Sharing-Based Authentication and Self-Recovery Method against Image Tampering
In Chapter 4, we propose a competitive image authentication and tampered-area recovery method. The authentication data for each block are calculated using a cryptographic hash function, in which the input includes the MSBs information within the block, the user’s secret key, the block address information, and some private
which can be generated by any vector quantization (VQ) technique (e.g. Ref. [15]). To increase the recovery ability, the VQ-index value is shared by Thien and Lin’s secret image sharing method [90], which is reviewed briefly in the next section. Finally, the recovery information is combined with the authentication data to form the watermark.
To improve security, when a part of the watermark is embedded into a block’s LSBs, the embedding locations of the bits are arranged according to a pseudo-random permutation, based on the Mersenne Twister (MT) pseudo-random number generator [9]. Experimental results show that the quality of the watermarked image is acceptable, and that the positions of the tampered parts are located accurately. The recovery of large-area corruption is also good.
D. Authentication and Cross-Recovery for Multiple Images
In Chapter 5, we design an image authentication scheme that deals with a group of images simultaneously instead of a single image, and the recovery of any member images in this group can be done through the mutual support of r of the n-1 remaining member images, as long as these r images pass the authentication tests.
More specifically, give a group of images, which the number of images is n, and r is a pre-specified threshold value not less than n/2. In the first place, the recovery data for each image of the group is obtained by the compression techniques. Then, to achieve the cross-recovery purpose, the recovery data are shared by the proposed two-layer sharing method, which is derived from secret image sharing method [90], to generate the final (embedding) shadows. Next, these shadows are embedded into the n member images of the group using the simple LSB substitution scheme and obtain n stego-images, which still look like their original versions. For each stego-image, we utilize some private information about it to generate the authentication data (watermark) for verification purpose by using a cryptographic hash function. Finally,
the watermark is embedded into the stego-image to form the watermarked image. The experimental results show that the quality of each watermarked image is acceptable, and even if (n-r) of the watermarked images get lost or damaged, we could still recover the corrupt watermarked images using r of the authentic watermarked images.
Moreover, the visual quality of the recovery images is good to maintain their usage.
1.4 Dissertation Organization
In the remainder of this dissertation, the two hiding methods to conceal secret data or a confidential image in a cover image are proposed in Chapter 2 and 3, respectively. The proposed image authentication methods with self-recovery and cross-recovery ability are described in Chapter 4 and 5, respectively. Finally, the conclusions and future works are in Chapter 6.
Chapter 2
Hiding Data Using VQ Index File
In this chapter, we propose a method for hiding secret data in the vector quantization (VQ) index file of a cover image. In the embedding procedure, a search-order coding (SOC) technique is employed to hide the secret data and compress the index file simultaneously. The recovered cover image is identical to the one recovered by traditional VQ; and the compression rate is competitive to traditional VQ’s (often better than traditional VQ’s if we use e = 1 mode); while the hidden binary data is revealed in the decompression procedure as a bonus. The compression rate and hiding capacity are also better than those in Chang et al.’s method [17].
The rest of this chapter is organized as follows. Section 2.1 takes a brief review of the SOC algorithm. The details of the proposed method are described in Section 2.2.
Experimental results are shown in Section 2.3, and a brief summary is made finally in Section 2.4.
2.1 Review of the Search-Ordering Coding (SOC) Tool
Vector quantization (VQ) [15] is a simple technique to compress images.
According to a given codebook, an index file is generated as the compression result for each given image. To reduce the size of the index file further, Hsieh and Tsai [13]
proposed the use of the search-order coding (SOC). The SOC algorithm in Ref. [13]
encodes traditional VQ indices with fewer bits by utilizing the fact that there exists high correlation among adjacent indices, i.e. there exist many blocks whose VQ
indices also appear in their neighborhood blocks. Recall that in traditional VQ, each block of the given image is represented by an index. So, the whole image is represented by an index file in which the number of indices (counting repetition) equals the number of blocks. The SOC algorithm encodes the index file of an image in an index by index manner (or equivalently, block by block). All of the indices that appear in a predefined search path, which just cover a small area of the neighborhood blocks, are called search points (SP), and the non-search points are just those indices whose block location are beyond the range covered by the predefined search path. To encode the current not-yet-processed index, people begin a search along a predefined path. The search is in order to find whether a nearby block also has the same VQ index used by the current block. If a match is found in nearby area, then the original index value (OIV) of the current block is replaced by a search-order code (SOC) that indicates the position of the matched block in the search path; the SOC uses fewer bits than the OIV. On the other hand, if no match can be found in nearby area, then Ref.
[13] still uses the OIV of the current block. In general, a SOC is defined as an order in which the indices of the already-processed neighborhood blocks are compared with the index of the current block. Of course, to let the decoder distinguish between the SOC and OIV, an extra indicator bit (the flag) is added in front of the resulting compression code for each index.
An example of the SOC is shown in Fig. 2.1. The current block is at location (3, 3), and the index value for the current block is 76. A predefined search path is shown with arrows. In this example, assume the starting search point is the neighboring block (3, 2), and a search-order code of N=2 bits is used, where N is the number of bits used to record the order of the matched position in the SOC searching. Since 2N=22=4, there are at most four SPs are used for comparison excluding the repetition
matches 76, we begin the level 2 search 75-76-… in the outer loop; and stop at the first matched value 76 located at (2, 1). Since the position of block (2, 1) is “10” (the 3rd kind of value) in the search code, the block (3, 3) is encoded as the search-order code “10”. Of course, a flag bit is also needed. Therefore, block (3, 3) is coded using 1+N=1+2=3 bits, which is more economic than, for example, the 8-bits index needed in traditional VQ if there are 256=28 distinct code-blocks in the codebook. (In traditional VQ, each block of the given image is represented by a code-block found in this VQ codebook, and only the code-block’s index [rather than the code-block itself]
is transmitted. So, 8-bits for an index if there are 256=28 distinct code-blocks.)
Fig. 2.1. An example of the SOC algorithm.
2.2 The Proposed Method
In this section, we introduce our image hiding method. Each index in the index file is encoded either by search-order codes (SOC) or original index values (OIV).
The experiment results of Ref. [13] suggested that N = 2, so we also use N = 2 bits to record the match position in the search area. From Table 2.1, we can see that the
selection of the SSP is not critical. Therefore, we utilize SSP to hide the secret data without significantly increasing the total size of index file. Each VQ index value can hide e bits of the secret data; and e is set to 1 (or 2). Without the loss of generality, assume e = 1. Then each time, for the current index, we take e = 1 bit of the secret data, then use Fig. 2.2(a) to determine the SSP of the search. For example, use SSP = West when the secret data bit is 0; and use SSP = North when the secret data bit is 1.
After that, we begin the search starting from that SSP. If we can find a match in a nearly area of blocks that has at most 2N = 22 = 4 distinct index values, then we record the matched position using N = 2 more bits. If no such match can be found in nearly area, then we record the OIV of the current index.
Notably, to enhance the scheme’s security, the secret data are encrypted first by some traditional cryptography methods such as DES [1] before the embedding process, and then treated as a binary string. Only the people who own the encryption key can decrypt the secret data correctly. The details of our hiding algorithm are as follows:
Input: (1) The VQ index file of a cover image;
(2) A secret data set which is encrypted by DES [1] and then transformed into a binary string.
Parameter settings: Let N = 2 be the number of bits needed to record the matched position in the SOC searching. Also set e = 1 (or e = 2) where e is the number of bits to be embedded in each index.
Output: The cover image’s compression code, which also contains the secret data.
Step 1: Take the next not-yet-processed index value I from the index file.
Step 2: Take next e bits from the secret binary string, and use these e bits as the SSP value. In the predefined search path starting from SSP, try to find a block
Either a matched one is found; or, no match in the searching area covered by the search codes {00, 01, 10, 11}, i.e. in the area in which at most four distinct index values appear.
Step 3: If a match is found, the current block’s index will be encoded with a 1-bit indicator, followed by an e-bits SSP record (which equals to the e bits of secret data); then followed by the corresponding code indicating the matched position. If no match is found, then encode the current block with a 1-bit indicator, followed by the e bits of secret data; then followed by the block’s original index value. In a word, the SOC-case is coded using (1+e +N) bits, and the OIV-case is coded using (1+e +8) bits (if the codebook size is 256).
Step 4: Go to step 1.
In Step 3 above, for example, as shown in Fig. 2.2, the block (3, 3) is encoded with the compression code “(0010)2”. The bold-faced bit 0 is the indicator to indicate SOC-case, and the underlined bit 0 is the secret data bit (assume e = 1). The index value can be found using a previous block at position 10. On the other hand, if no match of the block (3, 3) is found, then it is encoded with the OIV compression code
“(1001001100)2” where (01001100)2 = (76)10 is the OIV. The decoder will see the bold-faced 1 and underlined 0 as the secret and 01001100 as the index value.
(a) (b)
Fig. 2.2. Starting Search Points (SSP). (a) The case of using e = 1 bit to record SSP (West vs. North); (b) the case of using e = 2 bits.
2.3 Experimental Results
In the first experiment, each of the five gray-value cover images {Jet, Lena, Peppers, Boat, Toys} has 256×256 pixels before VQ compression. The block size is 4×4, and the codebook size is 256. So, for each image, each block of 4×4 = 16 gray-value pixels are replaced by an index value in the range 0-255. Each image is thus replaced by an index file consisting of (256×256)/(4×4) = 64×64 index values.
Therefore, the bit rate of the traditional VQ is 8/16 = 0.5 bit per pixel (bpp). Notably, the bit rate is 8 bpp before VQ compression.
After VQ compression, for each of the five images, we try to use SOC technique to re-code each index value, and also hide a binary secret data in the image’s index file. The bpp value 0.5 is thus changed. In Chang et al.’s scheme [17], each index value hid only one bit of the secret data. Since there are only 64×64 index values, the hidden secret data using Ref. [17] has 64×64 bits. However, with our method, each index value can hide either e = 1 or e = 2 bits of the secret data. Therefore, in Table 2.2, the 64×64 secret binary image Lena shown in Fig. 2.3(a) is used as the secret data for Chang et al.’s scheme, and also for the 1-bit mode of our approach (only e = 1 bit of the secret data is hidden in each index). On the other hand, the 64×128 binary secret image “Lena and Mark” shown in Fig. 2.3(b) is used as the secret data for the 2-bit mode of our approach. In the second experiment (Table 2.3), both the binary secret image and the cover images are 2×2 = 4 times larger.
Tables 2.2 and 2.3 indicate that the bpp compression rate of our 1-bit mode is better than Chang et al.’s. Also, although the bpp compression rate of our 2-bit mode is similar to Chang et al.’s, our hiding capacity is twice as big as theirs. Notably, no matter in Ref. [17] or in the proposed method, when there are more cover image blocks encoded by the SOC format rather than OIV format, then the bpp compression
rate is better. Smooth images, for instance, the images “Toys” and “House”, seem to have this tendency.
Figure 2.4 shows the compression rate of some published methods and our scheme. It indicates that the compression rate of our 1-bit mode is better than that of all other listed methods, and the compression rate of our 2-bit mode is competitive to theirs. Figure 2.5 shows the PSNR value of the reconstructed images of the published methods and our scheme. From Fig. 2.5, we can see that Chang et al.’s methods [17, 104] and our scheme are reversible information hiding methods for VQ compressed images (i.e. the reconstructed image is identical to the one decompressed by traditional VQ). Figure 2.6 shows the embedding rate of the published methods and our scheme. The embedding rate (bit per index) indicates how many secret bits can be embedded into a cover image. The embedding rate is defined by
), bpi ( ER
NIDX
= S (2.1)
where S represents the total number of secret bits embedded into the cover image and NIDX represents the total number of indices in the index file of the VQ-compressed image. From Fig. 2.6, we can see that the embedding rate of our 2-bit mode is double that of all other listed methods.
As for the processing time, the average encoding and decoding time of our method are shown in Tables 2.4. Note that, all programs in the current dissertation were implemented by using the Borland C++ Builder 6.0, and ran on a notebook with Intel Pentium Processor M-740 (1.73 GHz) and 512MB RAM under the operation system of Microsoft Windows XP Professional.
2.4 Summary
In this chapter, a modified data hiding scheme is proposed to embed the secret
data into VQ index file of an image. Both ours and Chang et al.’s [17] use search-order to reduce code length. But our approach has better bpp compression rate than [17] if hiding capacity is the same. Also, ours has better hiding capacity when the bpp compression rates are similar. Although some secret data are hidden in indices, the decompressed cover image is identical to the one decompressed by traditional VQ;
moreover, the compression rate is often better than VQ’s if we use e = 1 mode (see Tables 2.2-2.3 and Figs. 2.4-2.6).
(a) (b)
Fig. 2.3. Secret “binary” images: (a) “Lena” of 64×64 bits, (b) “Lena and Mark” of 64×128 bits.
Table 2.1. The b.p.p. compression rate of selecting different SSP’s for 256×256 images in the search-order coding.
SSP Jet Lena Peppers Boat House
West 0.335 0.379 0.386 0.390 0.281 NW 0.337 0.380 0.389 0.393 0.282 North 0.336 0.378 0.388 0.391 0.280 NE 0.337 0.379 0.387 0.390 0.282
Table 2.2. The b.p.p. compression rate (i.e. how many bits to represent a gray-value pixel of the compressed images). Fig. 2.3(a) is not only hidden by Chang et al.’s (“*”
means “quoted from [17]”), but also hidden by ours1 (using e = 1 mode). Fig. 2.3(b) is only hidden by ours2 (using e = 2 mode). Notably, traditional VQ would be of 0.5 bpp and with no hiding feature.
Cover images (256×256) quantized by VQ Methods
Jet Lena Peppers Boat Toys
Chang et al.’s [17] 0.4962* 0.5418* 0.5196* 0.5025* 0.4789*
Ours1. (Hide 1 bit per VQ index) 0.4312 0.4617 0.4700 0.4886 0.3370 Ours2. (Hide 2 bit per VQ index) 0.4937 0.5242 0.5325 0.5455 0.3995
Table 2.3. Analogous to Table 2.2, but with larger hidden secret images (a 128×128 binary image “Lena” for [17] and for ours1; while a 128×256 binary image “Lena and Mark” for ours2). The cover images are also larger now (512×512).
Cover images (512×512) quantized by VQ Methods
Jet Lena Peppers Boat House Chang et al.’s [17] 0.4797 0.4900 0.4824 0.5166 0.4526 Ours1. (Hide 1 bit per VQ index) 0.4016 0.4199 0.4108 0.4608 0.3626 Ours2. (Hide 2 bit per VQ index) 0.4641 0.4824 0.4733 0.5233 0.4251
Experiment II
0 0.1 0.2 0.3 0.4 0.5 0.6
Jet Lena Peppers Boat
Host images (512×512)
Bit rate (bpp)
VQ Chang[17]
Lin[103]
Chang[104]
Ours1 Ours2
Fig. 2.4. The compression rate results of some published methods and our scheme.
Experiment II
30 30.5 31 31.5 32 32.5
Jet Lena Peppers Boat
Host images (512×512)
PSNR (dB)
VQ Chang[17]
Lin[103]
Chang[104]
Ours1 Ours2
Fig. 2.5. The visual quality of the reconstructed images of some published methods and our scheme.
Experiment II
0 0.5 1 1.5 2 2.5
Jet Lena Peppers Boat
Host images (512×512)
Embedding rate (bpi)
VQ Chang[17]
Lin[103]
Chang[104]
Ours1 Ours2
Fig. 2.6. The embedding rate results of some published methods and our scheme.
Table 2.4. The processing time of our method. (unit: second) Size of cover image Encoding Decoding
256×256 0.643 0.216
512×512 1.311 0.412
Chapter 3
Hiding Images Using Modified Search-Order Coding and Modulus Function
In this chapter, we propose a method to hide an important image in a cover image whose size is economic. In the method, in order to save space, a modified search-order coding (MSOC) technique first transforms the important image. Then, a randomization procedure permutes the transformed image to increase further the security. Finally, a modulus function embeds the permuted code in a cover image;
notably, in the modules function, the modulus base used for a pixel is determined according to the variance of its neighboring pixels.
The rest of this chapter is organized as follows. Section 3.1 takes a brief review of the modulus embedding function. The details of the proposed method are described in Section 3.2. Experimental results are shown in Section 3.3. The discussions are in Section 3.4, and the summary is in Section 3.5.
3.1 Review of the Modulus Embedding Function
In this section, the embedding methods using modulus function [31-32] are briefly reviewed to provide some necessary background knowledge.
In 2003, Thien and Lin [31] applied a modulus function to embed data in still images. Their scheme can hide data efficiently and the base value is not necessarily in {2, 4, 8, 16, …}. Their scheme is simple and fast, and their experimental results show
In 2003, Thien and Lin [31] applied a modulus function to embed data in still images. Their scheme can hide data efficiently and the base value is not necessarily in {2, 4, 8, 16, …}. Their scheme is simple and fast, and their experimental results show