Khác với các phép thủy vân dựa trên biến đổi không gian ảnh, tƣơng đối dễ bị tấn công và phát hiện, năm 1995, Cox đã đƣa ra một mô hình khác, đó là nhúng thủy vân vào miền tần số.
Hình 13. Mô hình nhúng thủy vân của Cox.
Trong mô hình của Cox, một chuỗi các giá trị c0 = c0[1], c0[2], …, c0[n] đƣợc trích xuất từ ảnh. Các giá trị này đƣợc gọi là các giá trị mang, và chúng sẽ chứa thủy vân. Thủy vân là một chuỗi số thực w = w[1], w[2], …, w[n].
Theo Cox đề xuất, thủy vân có thể đƣợc nhúng theo một trong ba công thức:
Trong đó tham số α đặc trƣng cho tính bền vững của thủy vân, và đƣợc thay đổi tùy từng bài toán cụ thể.
Để kiểm tra thủy vân, ngƣời ta cũng phải dùng tới thống kê.
Dựa trên mô hình của Cox, năm 1998, Burgett đã đề xuất một thuật toán thủy vân ảnh dựa vào biến đổi DCT với định dạng ảnh JPEG.
Thuật toán của Burgett sẽ chia ảnh JPEG thành các khối (block) có kích thƣớc 8x8 điểm ảnh. Mỗi khối sẽ đƣợc biến đổi DCT. Thuật toán sẽ chọn ngẫu nhiên các khối để nhúng thủy vân. Thủy vân đƣợc nhúng trên mỗi khối bằng cách đổi chỗ một cặp hệ số của biến đổi DCT.
65
Năm 2002, GS.TSKH Nguyễn Xuân Huy có đề xuất một thuật toán thủy vân ảnh trên miền DCT nhƣ sau:
1/.Quá trình nhúng thủy vân:
Chia ảnh có kích thƣớc m x n thành (m x n)/64 khối, mỗi khối có kích thƣớc 8x8. Biến đổi DCT cho từng khối.
Xét một khối bất kỳ B sau khi biến đổi DCT thu đƣợc khối B‟, ta chọn hai hệ số bất kỳ trong miền tần số giữa của B‟, gọi hai hệ số là b‟(i, j) và b‟(p, q).
Gọi a là tham số của thuật toán, thỏa mãn a = 2 (2t + 1) với t là số nguyên dƣơng. Tính d = ||b‟(i, j)| - |b‟(p, q)|| mod a.
Bit si sẽ đƣợc nhúng sao cho thỏa mãn điều kiện sau: d ≥ 2t + 1 nếu si = 1. d < 2t + 1 nếu si = 0.
Nếu d < 2t + 1 và si = 1, thì một trong hai hệ số DCT có giá trị tuyệt đối lớn hơn sẽ bị thay đổi theo công thức sau để thỏa mãn d ≥ 2t + 1:
max(|b‟(i,j)|, |b‟(p,q)|) = max(|b‟(i,j)|, |b‟(p,q)|) + ([0,75 *a] - d) với phép toán [] là phép toán lấy phần nguyên.
Hoặc cũng có thể thay đổi theo công thức sau:
min(|b‟(i,j)|, |b‟(p,q)|) = min(|b‟(i,j)|, |b‟(p,q)|) - ([0,25 *a] + d)
Tƣơng tự, nếu d ≥ 2t + 1 và si = 0, thì ta áp dụng hai công thức sau để thay đổi hệ số DCT:
max(|b‟(i,j)|,|b‟(p,q)|) = max(|b‟(i,j)|,|b‟(p,q)|) - (d – [0,25*a]) hoặc:
min(|b‟(i,j))|,|b‟(p,q)|) = min(|b‟(i,j))|,|b‟(p,q)|) + [1,25*a] – d
2/.Quá trình tách thủy vân:
Đọc khối DCT từ ảnh chứa thủy vân và vị trí hai hệ số đã biến đổi, sau đó tính: d = ||b‟(i,j)|-|b‟(p,q)|| mod a
66