Phân chia ba miền tần số của khối ảnh 8x8 theo phép biến đổi DCT

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Kỹ thuật giấu tin trong ảnh và nghiên cứu khả năng có thể để phát hiện ảnh có giấu tin (Trang 38 - 63)

(a)miền tần số thấp (b) miền tần số giữa (c) miền tần số cao

Đặc điểm của phép biến đổi DCT trên ảnh hai chiều

Nếu k=0

Nếu k > 0

– Thể hiện đặc tính nội dung về tần số của thông tin ảnh. Hệ số góc trên là lớn và đặc trưng cho giá trị trung bình thành phần một chiều gọi là hệ số DC, các hệ số khác có giá trị nhỏ hơn biểu diễn cho các thành phần tần số cao theo hướng ngang và dọc gọi là hệ số AC.

– Bản thân biến đổi DCT không nén được dữ liệu vì sinh ra 64 hệ số.

– Theo nguyên lý chung, khi biến đổi chi tiết giữa các điểm ảnh càng lớn theo một hướng nào đó trong khối các điểm ảnh, hướng ngang hoặc dọc hoặc theo đường chéo thì tương ứng theo các hướng đó, các hệ số biến đổi DCT cũng lớn. Tóm lại, DCT làm giảm độ tương quan không gian của thông tin trong khối ảnh. Điều đó cho phép biểu diễn thích hợp ở miền DCT do các hệ số DCT có xu hướng có phần dư thừa ít hơn. Hơn nữa, các hệ số DCT chứa thông tin về nội dung tần số không gian của thông tin trong khối. Nhờ các đặc tính tần số không gian của hệ thống nhìn của mắt người, các hệ số DCT có thể được mã hóa phù hợp, chỉ các hệ số DCT quan trọng nhất mới được mã hóa để chuyển đổi.

Khối hệ số DCT có thể chia làm 3 miền: miền tần số thấp, miền tần số cao và miền tần số giữa. Miền tần số thấp chứa các thông tin quan trọng ảnh hưởng đến tri giác. Miền tần số cao thường không mang tính tri giác cao, khi nén JPEG thường loại bỏ thông tin trong miền này.

Trong các thuật toán thủy vân, miền hệ số DCT tần số cao thường không được sử dụng do nó thường không bền vững với các phép xử lý ảnh, hoặc nền ảnh JPEG. Miền tần số thấp cũng khó được sử dụng do một sự thay đổi dù nhỏ trong miền này cũng dẫn đến chất lượng tri giác của ảnh. Vì vậy, miền tần số ở giữa thường hay được sử dụng nhất và cũng cho kết quả tốt nhất.

2.2.2 Kỹ thuật thủy vân sử dụng phép biến đổi DCT

2.2.2.1 Ý tưởng

Thuật toán dưới đây sử dụng phương pháp nhúng thủy vân trong miền tần số của ảnh, giải tần được sử dụng để chứa tín hiệu thủy vân là miền tần số ở giữa của các khối DCT 8x8. Trong đó, các khối DCT 8x8 là những khối ảnh cùng kích thước đã được chọn ra từ ảnh ban đầu và được áp dụng phép DCT để chuyển sang miền tần số. Mỗi bit tín hiệu thủy vân sẽ được nhúng trong một khối [8].

Trong quá trình trình bày thuật toán có sử dụng một số hàm tính toán sau:

Max(x,y): hàm cho số lớn nhất trong hai số x và y.

Min(x,y): hàm cho số nhỏ nhất trong hai số x và y.

INT(x): là hàm lấy phần nguyên của một số thực x.

| x | : cho giá trị tuyệt đối của x.

2.2.2.2 Quá trình nhúng thủy vân

Input

Thủy vân W: là một chuỗi các bit hoặc một ảnh nhị phân.

Một ảnh F kích thước mxn.

Output

Ảnh đã nhúng thủy vân F’.

Các bước thực hiện:

Bước 1: Ảnh F có kích thước mxn sẽ được chia thành (mxn)/64 khối 8x8, mỗi bit của thủy vân sẽ được giấu trong một khối Bk.

Bước 2: Chọn một khối bất kì Bk và biến đổi DCT khối đó thu được Ck.

Ck = DCT(Bk)

Bước 3: Chọn hai hệ số ở vị trí bất kì trong miền tần số ở giữa của khối Ck, gọi hai hệ số đó là Ck[i,j] và Ck[p,q].

Bước 4: Tính độ lệch d = | | Ck [i,j]| - | Ck[p,q]| | mod a. Trong đó a là một tham số thỏa a = 2(2t+1), với t là một số nguyên dương.

Bước 5: Bit bk sẽ được nhúng vào khối Ck sao cho thỏa mãn bất biến sau:

       1 2 1 2 t d t d (adsbygoogle = window.adsbygoogle || []).push({});

Bước 6: Nếu d<2t+1 và bk = 1 thì trong hai hệ số DCT Ck[i,j] hoặc Ck[p,q] có giá trị tuyệt đối lớn hơn sẽ bị thay đổi để thỏa d≥2t + 1 theo công thức (2.5) hoặc (2.6):

Max(|Ck[i,j]|, | Ck[p,q]|) + (INT(0.75a) - d) (2.5) Hệ số được chọn sẽ được cộng thêm một lượng là (INT(0.75a) - d)

Min(|Ck[i,j]|, | Ck[p,q]|) – (INT(0.25a) + d) (2.6) Hệ số được chọn sẽ bị trừ đi một lượng là (INT(0.25a) + d)

Bước 7: Nếu d≥ 2t + 1 và bk = 0 thì một trong hai hệ số DCT Ck[i,j] hoặc Ck[p,q] có giá trị tuyệt đối lớn hơn sẽ bị thay đổi để thỏa d<2t + 1 theo công thức (2.7) hoặc (2.8) như sau:

Nếu bk=1

Nếu bk= 0

Max(|Ck[i,j]|, |Ck[p,q]|) - (d – INT(0.25a)) (2.7) Hệ số được chọn sẽ bị trừ đi một lượng là (d – INT(0.25a).

Min(|Ck[i,j]|, | Ck[p,q]|) + (INT(0.25a) – d) (2.8) Hệ số được chọn sẽ được cộng thêm một lượng là INT(0.25a) – d.

Bước 8: Thực hiện phép biến đổi ngược IDCT đối với khối Ck. Bk' IDCT(Ck)

Bước 9: Ghép các khối ảnh '

k

B để được ảnh chứa thủy vân F’.

Thí dụ 2.2.2a:

Giả sử ta cần giấu một bit thủy vân b =0 vào khối B 8x8 được cho dưới đây. Ta chọn a = 26 = 2(2x6 + 1), do đó t = 6. 33 84 66 58 15 159 183 146 28 75 15 37 161 157 136 134 29 59 44 65 192 166 144 139 B= 15 15 15 67 113 123 192 170 88 76 15 102 168 104 199 177 19 10 15 218 140 198 164 141 15 15 15 179 241 235 190 107 15 17 89 181 168 234 190 190

Biến đổi DCT(B) ta thu được khối C như sau

869 -438 -102 115 18 7 -62 -41 -110 64 143 -18 -78 -62 -2 38 30 -4 -37 -7 -67 8 55 -42 C = -7 27 22 -10 -3 57 -26 -57 -3 -2 109 -69 -33 41 6 9 -23 -27 -26 9 -29 33 6 -10 12 5 -8 -46 -13 33 38 -42 42 33 5 28 5 -31 -24 40

Trong miền tần số giữa của khối C, ta chọn hai hệ số bất kỳ, giả sử là C[2,3]=143 và C[6,2] = -27.

Tính độ lệch d = | |143| + |-27| | mod 26 = 170 mod 26 = 14.

Với bit thủy vân b = 0 thì ta phải thay đổi một trong hai hệ số C[2,3] =143 hoặc C[6,2] = -27 đã chọn để thu được d <2t+1.

Vì C[2,3]= 143 có giá trị tuyệt đối lớn hơn C[6,2], theo công thức (2.7) ta tính giá trị mới của C[2,3] là:

C[2,3] = C[2,3] – (d - INT(0.25a))

= 143 – (14 – INT(0.25 x 26) = 135.

Chú ý: Hoặc ta cũng có thể thay đổi hệ số theo công thức (2.8).

Khi đã thay đổi hệ số C[2,3] = 135 ta thực hiện phép biến đổi ngược IDCT(C) và thu được khối B’ như sau:

31 83 67 60 17 160 183 143 27 74 16 38 163 158 136 132 28 59 45 66 193 167 144 138 B’= 15 15 15 67 114 123 192 169 88 76 15 102 168 104 200 177 20 10 15 217 139 197 165 141 17 16 15 178 240 235 191 109 17 18 88 178 166 232 191 190

2.2.2.3 Quá trình tách thủy vân Input

– Ảnh đã nhúng thủy vân F’.

– Khóa K (nếu có).

Output

– Thủy vân đã nhúng W biểu diễn qua dãy bit bk. (adsbygoogle = window.adsbygoogle || []).push({});

Các bước thực hiện

Bước 1: Chia ảnh F’ đã nhúng thủy vân thành các khối '

k

B . Bước 2: Biến đổi DCT các khối '

k

B

Bk = DCT( '

k

B )

Bước 3: Lấy ra vị trí hai hệ số đã biến đổi Bk[i,j] và Bk[p,q]

Bước 4: Tính d = | |Bk[i,j]| - |Bk[p,q]| | mod a với a=2(2t+1) đã chọn khi nhúng thủy vân.

Bước 5: Nếu d≥2t+1 thì được bit bk=1 ngược lại bk=0

Bước 6: Ghép các bit bk tách được từ các khối để được thủy vân đầy đủ W.

Thí dụ 2.2.2b:

Với khối B’ có được trong thí dụ 2.2.2a, quá trình tách thủy vân như sau. Ta thực hiện phép biến đổi ngược IDCT của khối B’ để thu được khối B sau

869 -438 -102 115 18 7 -62 -41 -110 64 135 -18 -78 -62 -2 38 30 -4 -37 -7 -67 8 55 -42 B = -7 27 22 -10 -3 57 -26 -57 -3 -2 109 -69 -33 41 6 9 -23 -27 -26 9 -29 33 6 -10 12 5 -8 -46 -13 33 38 -42 42 33 5 28 5 -31 -24 40 Ta lấy ra hai hệ số B[2,3] = 135 và B[6,2] = -27. Tính độ lệch d = | |B[2,3] – |B[6,2]| | mod 26 = 4.

Ta thấy d < 2t +1 = 13, vậy bit b = 0 đã được giấu vào khối.

2.2.2.4 Phân tích thuật toán

Kích thước khối ảnh nêu trong kỹ thuật là 8x8, tuy nhiên có thể chọn kích thước khác nhau tùy theo kích thước từng ảnh gốc và kích thước thực tế của thủy vân.

Việc chọn một cặp hệ số trong miền tần số giữa có thể được chọn cố định cho tất cả các khối trong quá trình nhúng thủy vân. Khi đó, thủy vân có thể rất dễ bị phát hiện thông qua việc thử lần lượt các cặp hệ số trong miền tần số giữa. Có thể làm tăng độ an toàn và khó bị phát hiện thủy vân bằng cách đưa ra một thuật toán có sử dụng khóa cho sự lựa chọn cặp hệ số trong miền tần số giữa cho từng khối DCT. Khi đó, vị trí của các cặp hệ số được chọn cho quá trình nhúng thủy vân trong từng khối sẽ được sử dụng phụ thuộc vào khóa của quá trình tách thủy vân.

Trong kỹ thuật, quá trình tách thủy vân không cần sử dụng ảnh gốc.

Tham số a trong kỹ thuật đóng vai trò như là hệ số tương quan giữa tính ẩn và tính bền vững của thủy vân. Khi tăng hệ số a lên thì độ sai lệch của thủy vân giảm đi và như vậy nó bền vững hơn. Tuy nhiên, nếu tăng a thì chất lượng ảnh sau khi giấu sẽ giảm. Điều này rất dễ hiểu vì a lớn, nghĩa là phân lớp khoảng cách hai hệ số lớn nên

khoảng cách biến đổi của một hệ số để thỏa mãn điều kiện giấu lớn dẫn đến ảnh hưởng nhiều đến chất lượng ảnh.

2.2.3 Cải tiến kỹ thuật thủy vân sử dụng phép biến đổi DCT

2.2.3.1 Ý tưởng

Kỹ thuật thủy vân ở trên phụ thuộc vào việc chọn cặp hệ số thuộc miền tần số giữa của khối biến đổi DCT để biến đổi sao cho thỏa mãn điều kiện nhúng thủy vân. Các hệ số này được chọn cố định ở tất cả các khối hoặc chọn ngẫu nhiên. Tuy nhiên, các cách chọn đều có những hạn chế của nó.

Thứ nhất, nếu chọn cố định các cặp hệ số thì việc dò tìm và gỡ thủy vân của những người sử dụng ảnh bất hợp pháp là khá dễ dàng và do đó hệ thống không đảm bảo an toàn cho thủy vân.

Thứ hai, trong cả hai cách chọn đều dẫn đến khả năng phải biến đổi cặp hệ số cho phù hợp với điều kiện nhúng bit thủy vân tương ứng. Thao tác này dẫn đến chất lượng ảnh sau khi nhúng thủy vân bị ảnh hưởng đáng kể.

Kỹ thuật sau đưa ra cách khắc phục các hạn chế trên bằng cách xác định các cặp hệ số trong miền tần số giữa thỏa mãn điều kiện nhúng thủy vân, việc biến đổi cặp hệ số chỉ diễn ra khi trong khối không có cặp hệ số nào thỏa mãn, điều này làm giảm đáng kể sự thay đổi giá trị các điểm ảnh. Hơn nữa trong các cặp hệ số đã tìm được thỏa mãn điều kiện nhúng, phương pháp chọn ngẫu nhiên cho từng khối làm tăng tính bí mật của thủy vân trong ảnh, việc phát hiện thủy vân khi không biết thông tin khóa là phức tạp.

2.2.3.2 Quá trình nhúng thủy vân Input (adsbygoogle = window.adsbygoogle || []).push({});

– Thủy vân W: là một chuỗi các bit hoặc một ảnh nhị phân.

– Một ảnh F kích thước mxn.

Output

– Ảnh đã nhúng thủy vân F’.

– Khóa K để tách thủy vân.

Cách thức thực hiện:

Bước 1: Ảnh F có kích thước mxn sẽ được chia thành (mxn)/64 khối 8x8, mỗi bit của thủy vân sẽ được giấu trong một khối Bk.

Bước 2: Chọn một khối bất kì Bk và biến đổi DCT khối đó thu được Ck.

Ck = DCT(Bk)

Bước 3: Trong miền tần số giữa của khối Ck. Xác định Ck[i,j] là phần tử nhỏ nhất

Ck[p,q] là phần tử lớn nhất

Bước 4: Gọi bit thủy vân cần nhúng là bk.

if bk = 0 then

maxk = [p,q]; mink = [i,j]

else

maxk = [i,j]; mink = [p,q];

endif;

Bước 5: Khóa K =K {maxk, mink}

Bước 6: Tính d = Ck[p,q]-Ck[i,j]

Bước 7: Với t nguyên dương chọn trước

If d<t then

Ck[p,q] = Ck[p,q] + (t-d)/2;

Ck[i,j] = Ck[i,j] – (t-d)/2;

Bước 8: Thực hiện phép biến đổi ngược IDCT

'

k

B = IDCT(Ck)

Bước 9: Ghép các khối ảnh '

k

B để được ảnh chứa thủy vân F’. (adsbygoogle = window.adsbygoogle || []).push({});

Thí dụ 2.2.3a

Giả sử ta cần nhúng bit thủy vân b=0 vào khối B như trong thí dụ 2.2.2a. Quá trình nhúng thủy vân như sau:

Biến đổi DCT(B) để thu được khối C như trong thí dụ 2.2.2a. Trong miền tần số giữa của C ta có:

- Phần tử lớn nhất là C[2,3] = 143 - Phần tử nhỏ nhất là C[2,5] = -78

Theo bước 4 của thuật toán, với b = 0 thì max = [2,3] và min =[2,5]. Khóa K = {[2,3]; [2,5]}

Độ lệch d = C[2,3] - C[2,5] = 143 – (-78) = 221. Chọn t = 235, khi đó d < t.

Ta thực hiện phép biến đổi sau:

C[2,3] = C[2,3] + (t-d)/2 = 143 + (235-221)/2 = 150. C[2,5] = C[2,5] - (t-d)/2 = -78 – (235-221)/2 = -85. Khối C mới sẽ là 869 -438 -102 115 18 7 -62 -41 -110 64 150 -18 -85 -62 -2 38 30 -4 -37 -7 -67 8 55 -42 C = -7 27 22 -10 -3 57 -26 -57 -3 -2 109 -69 -33 41 6 9 -23 -27 -26 9 -29 33 6 -10 12 5 -8 -46 -13 33 38 -42 42 33 5 28 5 -31 -24 40

Thực hiện biến đổi ngược IDCT(C) ta thu được khối B’ như sau

33 86 67 55 12 160 186 146 28 77 16 34 159 157 138 134 29 60 44 63 191 166 146 139 B'= 15 15 15 66 113 123 193 169 88 76 15 103 169 104 199 177 19 9 15 219 142 197 163 140 15 13 15 182 244 235 189 107 15 15 88 183 171 232 188 187

2.2.3.3 Quá trình tách thủy vân Input

– Ảnh đã nhúng thủy vân F’.

– Khóa K để tách thủy vân.

Output

– Thủy vân W: là một chuỗi các bit.

Các bước thực hiện:

Bước 1: Chia ảnh F’ đã nhúng thủy vân thành các khối '

k

B . Bước 2: Biến đổi DCT các khối '

k

B

Bk = DCT( '

k

B )

Bước 3: Đọc các hệ số tương ứng với các khối Bk trong các biến maxk và mink

của khóa K. Bước 4:

If Bk(maxk) - Bk(mink) >0 then

bk = 0

else

bk = 1 (adsbygoogle = window.adsbygoogle || []).push({});

Bước 5: Ghép các bit bk để thu được thủy vân W.

Thí dụ 2.2.3b:

Thực hiện phép biến đổi ngược khối B’ đã có trong thí dụ 2.2.3a ta thu được khối B. Khối B này thực chất là khối C đã mô tả trong thí dụ 2.2.3a.

Với Khóa K = {[1, 2]; [1, 4]} ta lấy ra hai hệ số B[1, 2] = 136 và B[1, 4] = -85. B[1,2] – B[1,4] = 136 – (-85) = 221>0 ta tách được bit thủy vân b = 0 đã nhúng.

2.2.3.4 Phân tích thuật toán

Theo bước 3 và bước 4 của quá trình nhúng thủy vân vào từng khối Ck thì việc nhúng thủy vân luôn thỏa tính chất nếu bit cần nhúng là bit 0 thì Ck(max)>Ck(min), ngược lại nếu bit cần nhúng là bit 1 thì Ck(max)<Ck(min).

Theo bước 6 của quá trình nhúng thủy vân, độ lệch giữa hai hệ số được chọn sau khi nhúng được đảm bảo tối thiểu là t, đồng thời công thức biến đổi hệ số trọng bước 5 cũng thể hiện khi độ lệch giữa hai hệ số được chọn còn nhỏ hơn t thì cả hai hệ số sẽ đều được biến đổi tăng và giảm một lượng bằng (t - d)/2. Về khoảng cách thì việc thay đổi này cũng tương đương với việc chỉ tăng (hoặc giảm) Ck[p, q] lên (t - d). Như vậy, hệ số bị thay đổi lớn, gây ảnh hưởng đến thị giác của ảnh chứa thủy vân.

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Kỹ thuật giấu tin trong ảnh và nghiên cứu khả năng có thể để phát hiện ảnh có giấu tin (Trang 38 - 63)