BIẾN ĐỔI COSINE RỜI RẠC (DCT)
2.1. Phép biến đổi Cosine rời rạc
Biến đổi cosin rời rạc viết tắt là DCT - Discrete Cosine Transform được đưa ra bởi Ahmed và các đồng nghiệp của ông vào năm 1974. Từ đó cho đến nay, nó được sử dụng rất phổ biến trong nhiều các kỹ thuật xử lí ảnh số nói riêng và các kỹ thuật xử lí tín hiệu số nói chung. Trong các kỹ thuật thuỷ vân ảnh dựa trên phép biến đổi dữ liệu ảnh sang miền tần số thì phép biến đổi DCT cũng được sử dụng nhiều nhất. Lí do ở đây là phép biến đổi DCT đã được dùng trong dạng chuẩn ảnh JPEG. Nếu áp dụng DCT thì cũng theo chuẩn của JPEG và do đó sẽ tránh được mất thuỷ vân do phép nén JPEG.
2.1.1.Định nghĩa biến đổi cosine rời rạc hai chiều
Biến đổi DCT hai chiều tổng quát là biến đổi trên khối hai chiều bất kì M*N, trong đó các khối kích thước 8*8, 16*16 được sử dụng nhiều nhất. Tuy nhiên, chúng ta sẽ chỉ tìm hiểu phép biến đổi DCT trên khối 8*8 được sử dụng trong chuẩn nén ảnh JPEG. Vì tiêu chuẩn chọn khối phổ biến nhất vẫn là 8×8, có thể giải thích vấn đề này trên phương diện khả năng xử lý của phần cứng: Bởi vì, khối 8×8 trùng khớp với kích thước dữ liệu cực đại mà công nghệ vi mạch điện tử hiện thời có thể xử lý tại một thời điểm.
Phép biến đổi thuận DCT 8*8 được định nghĩa như sau:
∑ ∑= =
+
= 7 +
0 7
0
16 ) ) 1 2 cos(( 16 )
) 1 2 cos(( ) , 4 (
) ( ) ) (
, (
k l
v l u
l k k v X
v u u
I ζ ζ π π
Còn biến đổi ngược IDCT được định nghĩa như sau:
∑ ∑= =
+
= 7 +
0 7
0
16 ) ) 1 2 cos(( 16 )
) 1 2 cos(( ) , 4 (
) ( ) ) (
, (
k l
v l u
v k u v I l u
k
X ζ ζ π π
Trong đó:
I(u,v) được gọi là hệ số DCT và là số thực X(k,l) là các mẫu gốc trong khối ma trận 8x8 u: Tần số ngang chuẩn hoá 0≤u≤7
v: Tần số đứng (mặt) chuẩn hoá 0≤v≤7
0 ≤ k, l, u, v ≤ 7 và ξ(u) =
1
2 1
ξ(v) =
1
2 1
2.1.2. Đặc điểm của phép biến đổi DCT trên ảnh hai chiều:
Thể hiện đặc tính nội dung về tần số của thông tin ảnh. Hệ số bên góc trái (0,0) lớn đặc trưng cho giá trị trung bình thành phần một chiều gọi là hệ số DC, còn 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à theo hướng thẳng đứng gọi là các hệ số AC.
u=0 u>0
v>0 v=0
Hình 2.1: Ảnh Lena.bmp Ảnh 2.2: Năng lượng phân bố của ảnh qua phép biến đổi DCT Bản thân biến đổi DCT không nén được dữ liệu vì cũng 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, hướng thẳng đứng hay 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 block. Đ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 block. 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ã hoá phù hợp, chỉ các hệ số DCT quan trọng nhất mới được mã hoá để truyền đi.
Khối hệ số DCT có thể chia thành 3 miền, 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ố giữa , và miền tần số cao. Các thông tin trong miền tần số cao thường không mang tính tri giác cao, khi nén JPEG thì thường loại bỏ thông tin trong miền này.
Low Middle band High
(a)
(b)
©
Hình 2.3: Phân chia 3 miền tần số ảnh của phép biến đổi DCT (a): Miền tần số thấp, (b): Miền tần số ở giữa, (c): Miền tần số cao Trong các thuật toán thuỷ 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ố cao 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. Trong thuật toán đề xuất cũng sử dụng miền tần số ở giữa (phần được bôi đen trong hình vẽ số 7).
Trong thuật toán dưới đây sẽ sử dụng phương pháp nhúng thuỷ 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 thuỷ vân là miền tần số ở giữa của một 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 ngẫu nhiên từ ảnh ban đầu và được áp dụng phép biến đổi Cosine rời rạc DCT để chuyển sang miền tần số. Mỗi tín hiệu thuỷ vân sẽ được chứa trong một khối.
2. 2. Các thuật toán thủy vân ảnh dựa vào phép biến đổi Cosine rời rạc
* Mô tả thuật toán
• Input:
− Watermark: Một chuỗi các bit B
− Một ảnh F
• Output:
− Một ảnh sau khi thuỷ vân, F’
− Khoá để giải mã K
• Quá trình Watermarking
− Một ảnh có kích thước m × n sẽ được chia thành (m×n)/64 khối 8×8, mỗi bit sẽ được giấu trong một khối.
− Chọn một khối bất kì B và biến đổi DCT khối đó thu được B’
− Chọn hai hệ số ở vị trí bất kì trong miền tần số ở giữa của khối DCT, giả sử đó là b’(i,j) và b’(p,q). Tính
d = || b’(i,j)|- |b’(p,q)|| mod a
trong đó, a là một tham số thoả mãn: a = 2(2t+1), t là số nguyên dương.
Bit si sẽ được nhúng sao cho thoả mãn điều kiện:
d >= 2t+1 nếu si = 1 d < 2t+1 nếu si = 0
nếu d<2t+1 mà si = 1 thì một trong hai hệ số DCT b’(i,j) hoặc b’(p,q) có trị tuyệt đối lớn hơn sẽ bị thay đổi để d>=2t +1 theo công thức sau:
max(|b’(i,j)| , |b’(p,q)|) + (INT(0.75 *a) - d)
với hàm max(|b’(i,j)| , |b’(p,q)|) là hàm chọn ra hệ số có trị tuyệt đối lớn hơn, hệ số được chọn sẽ được cộng thêm một lượng là:
(INT(0.75 *a) - d),
hoặc cũng có thể biến đổi một trong hai hệ số theo công thức:
min(|b’(i,j)| , |b’(p,q)|) - (INT(0.25 *a) + d )
với hàm min(|b’(i,j)| , |b’(p,q)|) là hàm chọn ra hệ số có trị tuyệt đối nhỏ hơn, hệ số được chọn sẽ bị trừ đi một lượng là (INT(0.25 *a) + d), trong đó INT() là hàm lấy phần nguyên của một số thực.
− Tương tự, nếu d >= 2t+1 mà si = 0 thì một trong hai hệ số DCT b’(i,j) hoặc b’(p,q) có trị tuyệt đối lớn hơn sẽ được thay đổi để thoả mãn d<2t +1 như sau:
max(|b’(i,j)|,|b’(p,q)|) - (d - INT(0.25*a))
hàm max(|b’(i,j)| , |b’(p,q)|) là hàm chọn ra hệ số có trị tuyệt đối lớn hơn, hệ số được chọn sẽ bị trừ đi một lượng là (d - INT(0.25 *a)), hoặc cũng có thể biến đổi một trong hai hệ số theo công thức:
min(|b’(i,j))|,|b’(p,q)|) + INT(1.25*a) - d
hàm min(|b’(i,j)| , |b’(p,q)|) là hàm chọn ra hệ số có trị tuyệt đối nhỏ hơn, hệ số được chọn sẽ được cộng thêm một lượng là
(INT(1.25 *a) - d)
Quá trình nhúng thuỷ vân được mô tả qua sơ đồ sau:
Ảnh gốc
{ Các khối ảnh }
{Các khối DCT}
Watermark
{Các khối đã nhúng thuỷ vân }
{ Các khối đã biến đổi ngược IDCT }
Ảnh đã nhúng thuỷ vân Tách khối
Biến đổi DCT
Nhúng thuỷ vân
Biến đổi IDCT
Ghép ảnh
Hình 2.4: Quá trình nhúng thuỷ vân
Giả sử ta cần giấu các bit sau M: 101101…Mỗi bit sẽ được giấu vào một khối ảnh 8x8, ta chọn a = 18 = 2(2*4 +1) suy ra t = 4. Quá trình giấu tin được thực hiện như sau:
Chọn một khối ảnh B 8x8 bất kì mà chưa được giấu tin lần nào giả sử khối đó có giá trị như bảng 1. Khối này được lấy ra từ thành phần Blue của một ảnh màu 24 bit:
Bảng 1: Chọn một khối ảnh bất kỳ 8x8
Sau khi biến đổi DCT, ta thu được khối 8x8 các hệ số DCT B’:
Bảng 2: Thu được khối 8x8 sau khi biến đổi DCT
Từ khối hệ số trên ta sẽ chọn bất kỳ hai hệ số trong miền tần số ở giữa được đánh dấu sẫm. Giả sử đó là hai vị trí b’(4,2) và b’(8,1) có hai giá trị tương ứng là 144 và 72.
Tính d: d = ||144| -|72|| mod 18 = 0
vì d < 2*t +1 = 9 nên nếu phải giấu bit 0 vào khối này thì ta sẽ giữ nguyên khối vì d đã thoả mãn điều kiện giấu. Nhưng trong trường hợp này ta
phải giấu bit đầu tiên của M là bit 1, vậy ta sẽ phải thay đổi một trong hai hệ số đã chọn để d >= 2t +1
vì b’(4,2) =144 có trị tuyệt đối lớn hơn b’(8,1) nên được chọn để thay giá trị. Giá trị mới của b’(4,2) là:
b’’(4,2)= b’(4,2) + INT(0.75 * a) -d
= 144 + INT (0.75 *18) - 0
= 178 + 14 - 6 = 158
Bây giờ, ta tính lại d với trường hợp hệ số b’(4,2) đã thay đổi thành 158.
d = ||158| - |72|| mod 18 = 14 > 9 = 2*t +1
Vậy suy ra thoả mãn điều kiện giấu bit 1 vào khối. Sau đó, khối lại được biến đổi ngược DCT để thu được khối ảnh mới:
Bảng 3: Thu được khối 8x8 sau khi biến đổi ngược DCT
Các bit tiếp theo ta cũng làm như vậy cho đến hết dữ liệu hoặc hết khối giấu thi dừng. Mỗi một lần giấu xong ta phải lưu lại thông tin về chỉ số của khối, vị trí của hai hệ số được chọn. Khoá giải mã sẽ bao gồm các thông tin:
hệ số a, tập chỉ số khối của từng lần giấu và tập vị trí hai hệ số chọn.
- Thuật toán được thực hiện như sau:
Input: Ảnh chủ bird.jpg (kich thước 256x256)
Hình 2.5: Ảnh chủ trong kỹ thuật DCT Ảnh thuỷ vân: text.bmp
Hình 2.6: Ảnh thuỷ vân trong kỹ thuật DCT
Sau khi tiến hành thuỷ vân theo công thức trên ta thu được kết quả
Hình 2.7: Ảnh thu được sau khi thuỷ vân trong kỹ thuật DCT
• Quá trình giải nhúng
Đọc vào khối DCT đã nhúng thuỷ vân và vị trí hai hệ số đã biến đổi, sau đó tính:
d = ||b’(i,j)|-|b’(p,q)|| mod a với (a =2(2t+1)) nếu d >= 2t+1 thì si =1
nếu d<2t +1 thì si = 0
Quá trình giải mã được mô tả như sau:
Hình 2.8: Quá trình giải mã
• Chứng minh tính đúng đắn của thuật toán Xét các trường hợp sau đây:
− Nếu d < 2t +1 với si = 0 và d >= 2t+1 với si =1 thì sẽ không thay đổi gì hệ số của khối DCT, và vì DCT là phép biến đổi hoàn toàn đảo ngược nên khi giải mã sẽ thu được kết quả chính xác.
− Nếu d <2t+1 và si = 1.
Ảnh đã nhúng thuỷ vân
Lấy ra các khối đã chọn
Khối đã biến đổi DCT
Watermarks Tách khối
Biến đổi DCT
Giải mã
Biến đổi một trong hai hệ số b’(i,j) và b’(p,q) như sau:
max(|b’(i,j)|,|b’(p,q)|) + (INT(0.75*a) -d) Khi đó giá trị d mới là:
d’=(||b’(i,j)| - |b’(p,q)|| + (INT( 0.75 *a) - d)) mod a
d’=(||b’(i,j)|- |b’(p,q)|| mod a )+ (INT( 0.75*a) mod a) - (d mod a)
d’=d + INT(0.75*a) - d = INT( 0.75 *a) > 0.5 *a = 2t +1 (dfcm)
Hoặc ta sử dụng cách biến đổi hai hệ số theo kiểu khác:
min(|b’(i,j)| - |b’(p,q)|) - (INT(0.25 *a) +d)) Tính lại d:
d’=(||b’(i,j)|-|b’(p,q)|| - (INT(0.25*a) +d)) mod a
d’=(||b’(i,j)|- |b’(p,q)|| mod a) - (INT(0.25*a) mod a) - (d mod a)
d’=d-(INT(0.25*a) mod a) - d
= - INT(0.25*a) mod a = INT(0.75*a) >2t +1
− Nếu d>=2t +1 và si = 0
Ta sẽ biến đổi một trong hai hệ số DCT b’(i,j) hoặc b’(p,q) như sau:
max(||b’(i,j)|,|b’(p,q)||) - (d- INT(0.25*a)) Giá trị của d mới sẽ là:
d’=(||b’(i,j)|-|b’(p,q)|| - (d-(INT(0.25*a)) mod a
d’=((||b’(i,j)|-|b’(p,q)||) mod a) - (d mod a)+ (INT(0.25*a) mod a)
d’=d - d + 0.25*a = 0.25*a < 0.5 *a = 2t +1 (dfcm)
Hoặc sử dụng cách biến đổi khác đối với hai hệ số DCT:
min(||b’(i,j)|- |b’(p,q)||) + INT(1.25*a) - d Tính lại d:
d’= (||b’(i,j)|-|b’(p,q)|| + INT(1.25*a) -d) mod a
d’=(||b’(i,j))|-|b’(p,q)|| mod a)+(INT(1.25*a) mod a -(d mod a)
d’=d +INT(0.25*a) -d = INT(0.25*a) < 0.5*a = 2t+1
Vậy với các phép biến đổi trên, điều kiện giấu tin luôn được thoả mãn.
- Với ảnh chủ đã nhúng thuỷ vân ở trên, sau khi tác thuỷ vân ta thu được kết quả:
Hình 2.9: Ảnh thu được sau khi tách thuỷ vân
• Kết quả thực nghiệm
Kết quả thực tế cài đặt thử nghiệm được cho trong bảng sau. Các hàng là số lượng bít đã giấu vào ảnh. Các cột lần lượt là các hệ số a đã chọn. Giao giữa hàng và cột là tỉ lệ lỗi bít được tính bằng tổng số bít lỗi trên tổng số bít đã đem giấu được tính bằng hệ số tương quan C (cross- relation)
Ảnh được giấu là một ảnh đa cấp xám Lena.BMP cỡ 512 × 512 pixel.
Hình 2.10. Ảnh Lena.BMP 512 × 512 a = 10
Bảng 4: Thực nghiệm với ảnh Lena.Bmp 512 × 512 (chưa nén JPEG)
a=10 a=14 a=18
100 bit 0,990 0,993 0,997
200 bit 0,975 0,990 0,995
300 bit 0,973 0,993 0,997
5000 bit 0,974 0,988 0,994
1000 bit 0,970 0,984 0,994
Dưới đây là kết quả thu được sau khi nén JPEG ảnh đã được thuỷ vân với tỉ lệ nén lần lượt là 100%, 90%, 80%, 50%. KT là kích thước file ban đầu và sau khi nén. C là hệ số tương quan giữa thuỷ vân trước khi giấu và sau khi giấu. Thuỷ vân có độ dài là 1000 bít, các hệ số a1, a2, a3 lần lượt là 10,14,18.
Bảng 5: Thực nghiệm với ảnh Lena.Bmp 512 × 512 với các trường hợp nén JPEG
Chất lượng (%) 100 90 80 50
KT (a1) 1,4M 363KB 156KB 121KB 68KB
C 0,994 0,983 0,972 0,932
Số bít lỗi 4 6 21 50
KT (a2) 1,4M 363KB 172KB 136KB 78KB
C 0,993 0,984 0,967 0,941
Số bít lỗi 5 12 25 44
KT (a3) 1,4M 538KB 200KB 157KB 108KB
C 0,986 0,947 0,953 0,896
Số bít lỗi 10 40 34 79
Tiếp theo là kết quả thu được khi thực hiện phép lọc, làm sắc ảnh.
Bảng 6: Kết quả kiểm nghiệm với phép tấn công làm sắc ảnh
Số lần làm sắc 1 2 3 4 5
C (a2= 14) 0,950 0,948 0,918 0,878 0,832
C (a2=18) 0,905 0,847 0,780
Hình 2.11: Ảnh Lena sau khi giấu tin
Hình 2.12: Ảnh Lena sau 5 lần tấn công làm sắc
Cuối cùng, khảo sát thực nghiệm với phép tấn công croping ảnh, với các ảnh được chọn ngẫu nhiên và cắt với các tỉ lệ khác nhau.
Bảng kết quả thu được:
Tỉ lệ cắt 25% 50% 75%
C 0,860 0,751 0,641
(a) Cắt 25%
(b) Cắt 50%
(c) Cắt 75%
Hình 2.13: Các ảnh mô tả cropping
Thuật toán nhúng thuỷ vân vào ảnh tĩnh sử dụng kỹ thuật giấu tin trên miền biến đổi cosin rời rạc. Ảnh được chia thành các khối 8×8, các khối này được chọn một cách ngẫu nhiên để nhúng
thuỷ vân mỗi khối sẽ được áp dụng phép biến đổi cosin rời rạc để chuyển dữ liệu về tần số của khối ảnh. Miền tần số thấp của khối ảnh đã được chứng minh là chứa dữ liệu nhìn thấy của ảnh, các thay đổi dữ liệu trên miền này sẽ dẫn đến thay đổi đáng kể ảnh hiển thị [1]. Ngược lại, miền tần số cao chứa dữ liệu ảnh không ảnh hưởng đáng kể đến tri giác ảnh. Đây là miền tần số cho phép thay đổi mà không gây nhiễu nhiều đến ảnh. Tuy nhiên, thuỷ vân trong miền này lại không bền vững với các phép biến đổi ảnh thông thường.
Với thuật toán này, miền được chọn để giấu tin là miền có tần số ở giữa tần số cao và tần số thấp, kết quả thực nghiệm của thuật toán cũng cho thấy thuỷ vân đảm bảo được tính chất ẩn trên ảnh và bền vững trên một số phép biến đổi ảnh thông thường.