A module-based LSB substitution method with lossless secret data compression

A module-based LSB substitution method with lossless secret data compression

Computer Standards & Interfaces 33 (2011) 367–371 Contents lists available at ScienceDirect Computer Standards & Interfaces j o u r n a l h o m e p ...

885KB Sizes 1 Downloads 74 Views

Computer Standards & Interfaces 33 (2011) 367–371

Contents lists available at ScienceDirect

Computer Standards & Interfaces j o u r n a l h o m e p a g e : w w w. e l s ev i e r. c o m / l o c a t e / c s i

A module-based LSB substitution method with lossless secret data compression Shang-Kuan Chen ⁎ Department of Computer Science and Information Engineering, Yuanpei University, Hsinchu, Taiwan, ROC

a r t i c l e

i n f o

Article history: Received 26 May 2009 Received in revised form 16 July 2010 Accepted 27 November 2010 Available online 19 January 2011 Keywords: Module-based LSB substitution Data hiding Lossless compression

a b s t r a c t All the various data hiding methods can be simply divided into two types: (1) the extracted important data are lossy, (2) the extracted important data are lossless. The proposed method belongs to the second type. In this paper, a module-based substitution method with lossless secret data compression function is used for concealing smoother area of secret image by modifying fewer pixels in the generated stego-image. Compared with the previous data hiding methods that extract lossless data, the generated stego-image by the proposed method is always with better quality, unless the hidden image is with very strong randomness. © 2011 Elsevier B.V. All rights reserved.

1. Introduction Data hiding [1–10] is a commonly used technique that embeds important data into the host images by modifying the pixels to protect the data from illegal peeking or damaging. In general, a stego-image is generated by hiding the important data into a host image. The data are transmitted much safely by using the stego-image than by transmitting the data themselves directly. We can categorize data hiding schemes into two types. In the first type, the data extracted from the generated stego-image are allowed with some distortions. In the second type, the extracted data cannot be allowed with any distortion. In [1,2], the extracted data were distorted, but these two methods are with extremely-high hiding capacity, for they could conceal data of very large size. For example, Chung et al. [1] hid the important image in a host image of the same size. Wang and Tsai [2] even hid a larger important image in a smaller host image. In both methods, the quality of the extracted image is acceptable, although not lossless. The LSB (Least-Significant Bit) substitution approach is a lossless approach. The simplest one is the so-called simple LSB substitution method which directly replaces the least-significant bit planes of the host image with hidden data. The related works [3–5] of LSB substitution method are stated in the next section. In this paper, the repetition of the secret data is considered for reducing possible replacement of pixels in the stego-image. Hiding the secret data of heavy repetition will replace fewer pixels than that of light repetition by using the proposed method. Therefore, if the secret data is an image, in almost all the cases, the quality of the stegoimages generated by the proposed method will be better than the current LSB-substitution hiding methods [3–5].

⁎ Tel.: +886 939113807. E-mail address: [email protected]. 0920-5489/$ – see front matter © 2011 Elsevier B.V. All rights reserved. doi:10.1016/j.csi.2010.11.002

This paper is organized as follows. The related works are introduced in Section 2. The proposed method is stated in Section 3. Experimental results and analysis are shown in Sections 4 and 5, respectively. Finally, the conclusion is made in Section 6. 2. The related works The related works [3–5] of simple LSB substitution method enable the stego-image to obtain better quality. Wang et al. [3] defined an optimal re-naming problem for the hidden data, and then used a genetic algorithm for searching the problem's nearly optimal solution. Chang et al. [4] gracefully developed a dynamic programming strategy to replace Wang et al.'s [3] genetic algorithm to get a faster algorithm to obtain the aforementioned theoretical solution. Rather than finding the optimal re-naming solution, Thien and Lin [5] proposed a digit-bydigit data hiding method based on modulus function. The quality (PSNR values) of their stego-image outperformed that of Ref. [3,4], without damaging the hiding capacity or lossless recovery of the secret data. The method is also faster than the two methods [3,4]. Thien and Lin's method [5] first partitions the secret data into a sequence of non-overlapping segments, and each segment mi is in the range {0, 1, 2,…, q − 1} where q is a given positive integer called the base for module function. A segment mi can be hidden in the ith pixel (whose original gray value is pi) of the host image. In the simple LSB substitution method, the ith pixel value of the generated stego-image is p′i = pi − (pi mod q) + mi, true for each i. In Thien and Lin's method, p′i is adjusted further to a new number p″i that is closer to pi, and yet still congruent to p′i on the module base q, i.e. mi = p″i mod q = p′i mod q. Therefore, the decoding (to get mi from p″i) is simple and fast, and the impact to the host image is smaller. To improve Thien and Lin's method, the proposed method uses repetition property of secret data for decreasing the number of modified pixels without extra bit for recording the repetition. That is a

368

S.-K. Chen / Computer Standards & Interfaces 33 (2011) 367–371

different way with Ref. [3,4] that finds the optimal renaming for reducing the distortion. In detail, because there may be many repetitions in the secret data, the proposed method adopts an undefined number for flag, and records the repetition length, and repetition datum instead of the whole repetition data. The following experimental results show that the quality of the generated stegoimage is better than that of the above three methods [3–5] unless the hidden image is with very strong randomness. The encoding and decoding algorithms are presented in the next section. 3. The proposed method This section is divided into two subsections including encoding phase and decoding phase. 3.1. Encoding phase The encoding phase is divided into two stages. In Stage 1, each datum is hidden in the pixel of host image to be a stego-pixel, while Stage 2 provides the pixel adjustment for obtaining nearest stegopixel under the same datum extraction. 3.1.1. Stage 1: The hiding process Let si denote the ith secret datum ranging from 0 to m − 1, and each si be hidden in a pixel of the host image. The stego-image is generated in a pixel-by-pixel manner. Each time when hiding a not-yet-hidden datum si, we also take next coming data simultaneously if their values are all identical to si; i.e., if r contiguous data si, si + 1,…, and si + r − 1 are all with the same value z for some positive integer r (Originally, these r data are supposed to be hidden in r pixels pi, pi + 1,… and pi + r − 1 of the host image, respectively, to generate r temporary stego-pixels). In the slightrepetition occurring, if r is 1, 2, or 3, then for each l = i, i + 1,…, i + r − 1, we assign the temporary stego-pixel tl to pl − [pl mod(m + 1)] + sl. In a numerical system with base b = m + 1, the available digits are {0, 1, 2,…, m}. Because each datum ranges from 0 to m − 1, the only unused digit is m. This special digit m (the so-called flag-digit) is especially reserved to indicate the special case when the repetition length is over 3, i.e. r N 3. When a special heavy-repetition case occurs, besides using a flag digit (value m) for identifying the case, the repeated value z and the repetition length r (r N 3) also need to be recorded. A three-digit vector [m, z, r − 4] is adopted for describing easily. The third component is r − 4, rather than r, because r is at least 4 in this heavy-repetition case, and we can record r − 4 rather than r in order to save coding-length. Notably, in the base b = m + 1 system, the available digits are {0, 1, 2,…, m}, so the digit (r − 4) is forced to be in the range 0 ≤ (r − 4) ≤ m. As a result, the actual value of the repetition length r must be in the range 4 ≤ r ≤ m + 4. If there occurs an extremely-heavy-repetition case in which r N m + 4, then the repetition interval should be cut into several intervals of smaller repetition length. Therefore, assume that 4 ≤ r ≤ m + 4, then the temporary stego-pixels ti, ti + 1, and ti + 2 are pi − [pi mod (m + 1)] + m, pi + 1 − [pi + 1 mod (m + 1)] + z, and pi + 2 − [pi + 2 mod (m + 1)] + (r − 4), respectively. (The remaining pixels ti + 3, ti + 4, … , and ti + r − 1 equal to pi + 3, pi + 4,…, and pi + r − 1, respectively.) Notably, in this operation, the maximal ratio of the number of unchanged pixels to total number of pixels is (m + 1) / (m + 4). Of course, with slight modification, these unchanged pixels can also be used to record some other data. This slightly-modified version can either increase PSNR or increase the amount-of-hidden-data (the so-called hiding-capacity). Let the ordered n-tuples bh1, h2,…, hnN be the hidden data, the ordered n-tuples {img1, img2,…, imgn} be the pixels of an n-pixels image, and the ordered n-tuples [d1, d2,…, dn] be the differences between the pixels of the host image and the stego-image. Assume that the data b2, 4, 3, 3, 3, 3, 3, 5, 1, 1N are to be hidden in the ten pixels {70, 67, 66, 61, 68, 64, 63, 60, 61, 58} of the host image. Since the data range from 0 to 5, m is assigned to 6 to reduce the distortion. Thus, the base system is m + 1 = 7. The first two data are with no repetition;

thus, the first two stego pixels are 63 / 7 7 + 2 = 65 and 67 / 7 7 + 4 = 67, where the operator / is integer division. From the third datum to the seventh datum, the values are the same and the number of these data is larger than 3; the lossless compression of these data can be used. First, the number 6 should be hidden in the third pixel of the host image; then the datum 3 should be hidden in the fourth pixel; finally, the repetition length 5 is hidden in the fifth pixel by hiding (5 − 4= 1). Therefore, using the proposed method to encode, the generated temporary stego-pixels will be {65, 67, 69, 59, 64, 64, 63, 61, 57, 57}. The differences between the host image and the temporary stego-image are thus [5, 0, 3, 2, 4, 0, 0, 1, 4, 1]. Notably, both the sixth and the seventh pixels of the host image and the temporary stego-image are the same, because the third, the fourth, and the fifth pixels of the temporary stegoimage have already recorded the information of b3, 3, 3, 3, 3N of the hidden data, by hiding a three-tuple (6, z =3, r− 4= 1) in the third, fourth, and fifth pixels of the host image. Here, 6 is the heavy-repetitionflag, z =3 is the heavy-repeated-value, and r+ 4= 1+ 4 =5 is the repetition length that z is repeated. 3.1.2. Stage 2: The adjusting process After the proposed hiding process, the difference between the pixel value ti of the temporary stego-image and the corresponding pi of the host image ranges from −m to m. To reduce the distortion, this stage adjusts the stego-pixel value if there is another value that has the same extraction datum also closest to the pixel of the host image. The proposed method divides the possible situations into the following five cases: Case 1: (⌊(m + 1)/2⌋ b ti − pi ≤ m and ti ≥ m + 1). gi ←ti –m–1: Case 2: (−m ≤ ti − pi b −⌊(m + 1) /2⌋ and ti ≤ 254 − m). gi ←ti + m + 1 Case 3: (−⌊(m + 1) /2⌋ ≤ ti − pi ≤ ⌊(m + 1) /2⌋). gi ←ti Case 4: (⌊(m + 1)/2⌋ b ti − pi ≤ m and ti ≤ m). (Boundary) gi ←ti Case 5: (−m ≤ ti − pi b −⌊(m + 1) / 2⌋ and ti ≥ 255 − m). (Boundary) gi ←ti In the following, it is shown that the |gi − ti| ≤ ⌊m / 2⌋ in Cases 1 and 2. Proposition 1. In Cases 1 and 2 of the proposed adjusting process, the difference of gi and pi is |gi − pi| ≤ ⌊m / 2⌋. Proof. Recall that in Case 1, gi = ti − m − 1, and in Case 2, gi = ti + m + 1. In Case 1: (1) gi − pi = ti − m − 1 − pi = (ti − pi) − m − 1 ≤ m − m − 1 = −1. (2) gi − pi = ti − m − 1 − pi = (ti − pi) − m − 1 N ⌊(m + 1) / 2⌋ – m − 1. When m is even, gi − pi N ⌊(m + 1) / 2⌋ − m − 1 = m / 2 − m − 1 = −m / 2 − 1. Because gi − pi is integer, gi − pi ≥ −m / 2 = −⌊m / 2⌋. When m is odd, gi − pi N ⌊(m + 1) / 2⌋ − m − 1 = (m + 1) / 2 − m−1 = −(m + 1) / 2. Because gi − pi is integer, gi − pi ≥ − (m − 1) / 2 ≥ −⌊m / 2⌋. Combined (1) and (2), |gi – pi| ≤ ⌊m / 2⌋. In Case 2: (1) gi − pi = ti + m + 1 − pi = (ti − pi) + m + 1 ≥ –m + m + 1 = 1.

S.-K. Chen / Computer Standards & Interfaces 33 (2011) 367–371

(2) g i − p i = t i + m + 1 − p i = (t i − p i ) + m + 1 b −⌊(m + 1) / 2⌋ + m + 1. When m is even, gi − pi b −⌊(m + 1) / 2⌋ + m + 1 = –m / 2 + m + 1 = m / 2 + 1. Because gi − pi is integer, gi − pi ≤ m / 2 = ⌊m / 2⌋. When m is odd, gi − pi b –⌊(m + 1) / 2⌋ + m + 1 = –(m + 1) / 2 + m + 1 = (m + 1) / 2. Because gi − pi is integer, gi − pi ≤ (m − 1) / 2 ≤ ⌊m / 2⌋. Thus, these imply |gi − pi| ≤ ⌊m / 2⌋. □ In Case 3, 4, and 5, no adjustment should be done for reducing the distortion. In Case 3, the value of |ti − pi| does not exceed ⌊(m + 1) / 2⌋. In Case 4 and Case 5, although |ti − pi| exceeds ⌊(m + 1) / 2⌋, to avoid the value of gi underflow or overflow, the value of gi is set to ti rather than ti − m − 1 or ti + m + 1, respectively. For the same aforementioned example, after the adjusting process, the pixels {65, 67, 69, 59, 64, 64, 63, 61, 57, 57} of stego-image will be adjusted to {72, 67, 69, 59, 71, 64, 63, 61, 64, 57}. After the adjustment, the total difference 15 that is the sum of the differences [2, 0, 3, 2, 3, 0, 0, 1, 3, 1] between the host image and the adjusted stego-image is less than the total difference 20 that is the sum of the differences [5, 0, 3, 2, 4, 0, 0, 1, 4, 1] between the host image and the unadjusted stegoimage. 3.2. The decoding phase The following reversal process is to extract the original secret data without any distortion. For each pixel value gi of the stego-image, if gi mod (m + 1) ≠ m, then the extracted data si is gi mod (m + 1). However, if gi mod (m + 1) = m, then the secret data si, si + 1,…, and si + r − 1 will be extracted from gi + 1 and gi + 2 of the stego-image by the following steps: (1). z ← (gi + 1 mod (m + 1)), (2). r ← 4 + ( gi + 2 mod (m + 1)) (3). For all j from i through i + r − 1, let sj ← z.

369

images of size 512 × 512 each. The stego-images generated by hiding Fig. 1(a)–(c) in Fig. 2(a) and by hiding Fig. 1(b)–(d) in Fig. 2(b) are shown in Figs. 3(a)–(c) and 4(a)–(c) respectively, when m = 16. The PSNR values are used for measuring the quality of stegoimages. Notably, PSNR = 10 × log(2552 / MSE) dB when two gray images are compared. Assuming that H is the host image and STG is the stego-image, and both are with size w × h. Hi and STGi denote the ith pixel values of H and STG, respectively. Then the MSE is defined as MSE =

1 w×h ∑ ðSTGi −Hi Þ w × h i=1

The PSNR of the stego-images is listed in Table 1 for comparison. In Table 1, the results of the proposed method are usually the best. It is worth noting that when the secret data are of very slight adjacentrepetition (for example, Fig. 1(a)) or almost no adjacent-repetition (for example, Fig. 1(c)), the quality of the generated stego-image by the proposed method is a little worse than that of Thien and Lin's method [5]. The reason is that the three-digit vector [m, z, r − 4] is seldom applied (see Section 3.1 to understand this three-digit vector) and that the module-base is m + 1 rather than m causing average distortion to increase. In the following experiment, plain text documents (.TXT), binary documents (.DOC), and archive files (.ZIP) are as secret messages for hidden in host images. The sizes of the secret messages are about half the size of the host image. As above, the simple LSB substitution method, Chang et al.'s method [4] and Thien and Lin's method [5] are all implemented to provide a comparison. Table 2 shows the comparisons of the methods in PSNR. Notably, the binary code of the Microsoft word file is of heavy repetition in multiple 0's. Therefore, the proposed method performs better than other LSB substitution methods about 1 dB. 5. Analysis

Following the aforesaid example, when extracting the first datum from the first two pixel values 72 and 67 of the stego-image {72, 67, 69, 59, 71, 64, 63, 61, 64, 57}, because 72 mod (6+ 1) = 2 ≠ m and 67 mod (6+ 1) = 4 ≠ m, the first and second data are 4 and 0, respectively. Then, for the third pixel value 69, because 69 mod (6+ 1)= 6 = m), it is a heavy-repetition-flag. As a result, the next two pixels 59 and 71 together record the repetition of the data. The value z of the repeated data is z = 3 = 59 mod (6+ 1). The fifth pixel is 71; thus, r − 4 is 1 = 71 mod (6 + 1). In other words, z = 3 is repeated r = 4 + 1 = 5 times. In summary, the third, fourth,…, and (3 + r − 1)th = (3 + 5 − 1) th= seventh data are b3, 3, 3, 3, 3N, respectively. Finally, after extracting from the remaining eighth, ninth and tenth pixels, the original data b2, 4, 3, 3, 3, 3, 3, 5, 1, 1N are recovered without any loss. 4. Experimental results In this section, firstly, the simple LSB substitution method, Chang et al.'s method [4] and Thien and Lin's method [5] are all implemented to provide a comparison. Fig. 1(a)–(c) show the secret images of size 256 × 512 each for the secret messages. Fig. 2(a)–(b) show the host

5.1. Overhead analysis In this subsection, the overhead of the proposed method is analyzed. When we hide a not-yet-hidden datum, next coming data are taken simultaneously if their values are all identical to that of the datum. If the repetition is less than 4, the data are hidden in the host image by using larger module (m + 1 instead of m). Using m + 1 for the module, the average difference between the pixel of the host image and that of the stego image will be lightly increased. In detail, when m is even, in Thien and Lin's method, omitting boundary condition, the maximum difference is ⌊m / 2⌋ that is the same as in the proposed method; when m is odd, in Thien and Lin's method, omitting boundary condition, the maximum difference is still ⌊m / 2⌋, but the maximum difference is ⌊(m + 1) / 2⌋ in the proposed method. However, if the repetition length is larger than 3 and no less than m+4 (if the repetition length is larger than m+4, we divide the data into several parts with each size m+4 or less), the number of pixels that should be modified is at most 3. Therefore, using the proposed method, the extra flag for indicating the repetition can reduce the possibility of pixel replacement. Besides the above overhead analysis, extra memory

Fig. 1. The secret images are of size 256 × 512.

370

S.-K. Chen / Computer Standards & Interfaces 33 (2011) 367–371

Fig. 2. The host images are of size 512 × 512.

requirement is free and the whole processing power is still O(size of secret data). 5.2. Improvement analysis In this subsection, the improvement of the proposed method is analyzed. Suppose an image has R repetitions of L average length, each repetition length must be also known as li, i = 1, 2,…, R. We have R

∑ li

R = L. In the proposed method, when the repetition length l is at most 3, there is no improvement; when the repetition length l is between 4 and 19, the improvement from the proposed method is expressed by unchanging l − 3 pixels; when the repetition length l is greater than 19, the repetition will be divided into more than one part and the improvement is counted part by part. Therefore, the expected improvement E(Improv) is i=1

EðImprovÞ =

1 R ∑ R i=1



  li × 16 + maxððli mod19Þ−3; 0Þ ; 19

R

where ∑ li = RL: i=1

6. Conclusion The traditional LSB-substitution methods can be viewed as methods that use the power of 2 as the base for modulus function. Module-base m + 1 (m is not necessarily the power of 2) is adopted in

this paper, in which the m digits {0, 1, 2,…, m − 1} are used as ordinary numbers, and the special digit m is a flag for identifying the heavy repetition case. The quality of the stego-images generated by the proposed method is often better than that generated by Thien and Lin's method [5], which in turn is better than that generated by [3,4]. On the other hand, when the data are with very slight repetition, Thien and Lin's method [5] outperform the proposed method. (In Table 1, Ref. [5] leads in PSNR by a 0.48 dB difference when the data are formed of noise only; and a 0.05 dB difference when the secret data are formed of the image Baboon.) The proposed method can perform well in terms of hiding heavy-repetition data. In decoding, the proposed method has the same very-low computation complexity (O (image size)) as the reported LSB substitution methods [3,4] or module-based method [5]. In encoding, its computation complexity is the same as [5], and hence, much faster than the methods [3,4] which search for best renaming using genetic algorithm or dynamic programming. The limitation of the proposed algorithm is that the proposed method only uses 4 bits to indicate the repetition length, so that, the repetition length can be only ranged from 4 to 19 and if consecutive data are repeated more than 19 times, the data need be recorded in additional three-digit vectors. However, if we use more than 4 bits for indicating the repetition length, then when the repetition length ranges from 4 to 19, more than 4 bits is still necessary for indicating the repetition length. The future research can focus on finding a balance way for indicating the repetition length to reach minimal distortion. Another future study can use dynamic programming to find the optimal bijection mapping and use the proposed method to

Fig. 3. (a): The stego-image of hiding Fig. 1(a) in Fig. 2(a). (b): The stego-image of hiding Fig. 1(b) in Fig. 2(a). (c): The stego-image of hiding Fig. 1(c) in Fig. 2(a).

S.-K. Chen / Computer Standards & Interfaces 33 (2011) 367–371

371

Fig. 4. (a): The stego-image of hiding Fig. 1(b) in Fig. 2(b). (b): The stego-image of hiding Fig. 1(c) in Fig. 2(b). (c): The stego-image of hiding Fig. 1(d) in Fig. 2(b).

decrease the distortion of the generated stego-image. From this research, people can learn how the being hidden data are also possibly rearranged for minimizing the distortion of the stego-pixels. Table 1 The PSNR of stego-images (with m = 16) is generated using the simple LSB substitution, Chang et al.'s method [4], Thien and Lin's method [5], and the proposed method. The proposed method outperform the other three methods, unless the smooth area is too small in the secret image (for example*, Baboon image, or another image formed only of random noise.). Host image = Lena (512 × 512) Secret images (256 × 512)

The simple LSB substitution method

Chang et al.'s method [4]

Thien and Lin's method [5]

The proposed method

House Milk Jet Tiffany Pepper Baboon* Random-noise*

32.69 32.26 31.95 31.32 32.44 32.65 31.82

33.10 32.53 32.89 32.90 32.57 32.71 31.85

34.78 34.86 34.76 34.80 34.79 34.78 34.81

36.37 35.76 35.73 35.49 35.46 34.73 34.33

Host image = Baboon (512 × 512) Secret images (256 × 512)

The simple LSB substitution method

Chang et al.'s method [4]

Thien and Lin's method [5]

The proposed method

House Milk Jet Tiffany Pepper Lena Random-noise*

32.70 32.26 32.04 31.40 32.46 32.58 31.83

33.14 32.56 32.93 32.93 32.58 32.63 31.89

34.79 34.80 34.82 34.82 34.80 34.82 34.80

36.37 35.80 35.72 35.52 35.44 35.36 34.34

Table 2 The comparisons among the simple LSB substitution method, Chang et al.'s method [4], Thien and Lin's method [5], and the proposed method using plain text documents (TXT), binary documents (.DOC), and archive files (.ZIP) as secret messages. (The host image, Lena, is of size 257 K bytes and each secret message is 128 K bytes.). PSNR

.TXT

.DOC

.ZIP

Simple LSB substitution Chang et al.'s method [4] Thien and Lin's method [5] The proposed method

31.96 34.75 34.84 34.34

30.23 34.75 34.88 36.02

31.77 34.75 34.83 34.38

Acknowledgment The author is very grateful to anonymous reviewers for their constructive comments. This work was supported by the National Science Council, Republic of China, under grant NSC96-2218-E-264002.

References [1] K.L. Chung, C.H. Shen, L.C. Chang, A novel SVD- and VQ-based image hiding scheme, Pattern Recognition Letters 22 (2001) 1051–1058. [2] R.Z. Wang, Y.D. Tsai, An image-hiding method with high hiding capacity based on best-block matching and k-means clustering, Pattern Recognition 40 (2007) 398–409. [3] R.Z. Wang, C.F. Lin, J.C. Lin, Image hiding by optimal LSB substitution and genetic algorithm, Pattern Recognition 34 (2001) 671–683. [4] C.C. Chang, J.Y. Hsiao, C.S. Chen, Finding optimal Least-Significant-Bit substitution in image hiding by dynamic programming strategy, Pattern Recognition 36 (2003) 1583–1595. [5] C.C. Thien, J.C. Lin, A simple and high-hiding capacity method for hiding digit-bydigit data in images based on modulus function, Pattern Recognition 36 (2003) 2875–2881. [6] C. Lin, Y.B. Lin, C.M. Wang, Hiding data in spatial domain images with distortion tolerance, Computer Standards & Interfaces 31 (2) (2009) 458–464. [7] C.H. Yang, Inverted pattern approach to improve image quality of information hiding by LSB substitution, Pattern Recognition 41 (8) (2008) 2674–2683. [8] C.K. Chan, L.M. Cheng, Hiding data in images by simple LSB substitution, Pattern Recognition 37 (3) (2004) 469–474. [9] J. Mielikainen, LSB matching revisited, IEEE Signal Processing Letters 13 (5) (2006) 285–287. [10] Y.J. Chang, R.Z. Wang, J.C. Lin, Hiding images using modified search-order coding and modulus function, International Journal of Pattern Recognition and Artificial Intelligence 22 (6) (2008) 1215–1240. Shang-Kuan Chen received his B.S. degree in Applied Mathematics from Fu Jen Catholic University, Taiwan, in 1994, and M.S. degree in Applied Mathematics from NCTU, Taiwan, in 1998. In 2006, he received his Ph.D. degree in Computer Science from NCTU. He joined the Department of Computer Science and Information Engineering at Yuanpei University in 2006 and is currently an assistant professor there. His research interests include data hiding, visual cryptography and image sharing.