Thuật toán phát hiện thuỷ vân sẽ lấy ra thuỷ vân đã nhúng nhờ các tham số bí mật gồm có: KS, m, ξ , c, T.
Thuật toán này bắt đầu bằng việc sinh các phần dữ liệu {S0 ,..., S m−1 } dựa vào bộ dữ liệu đã thuỷ vân D
W , khoá bí mật K S , và số phần dữ liệu đã phân 2
hoạch m là đầu vào của thuật toán phân hoạch dữ liệu (get_partitions). Mỗi phần sẽ mã hoá một bít thuỷ vân đơn. Để lấy ra bít đã nhúng, ta sử dụng lược đồ giải mã ngưỡng dựa vào ngưỡng tối ưu T làm cực tiểu hoá xác suất xảy ra
lỗi giải mã như đã trình bày trong mục 2.5. Nếu kích thước phân vùng dữ liệu nhỏ hơn ξ thì bít giải mã không được thực hiện, ngược lại nó được giải mã nhờ lược đồ giải mã ngưỡng.
Vì thuỷ vân W = bl −1 ,...,
b0 được nhúng nhiều lần trong bộ dữ liệu, mỗi bít thuỷ vân được lấy ra nhiều lần ở nơi bít bi được lấy ra từ phần S
k
với
k modl = i . Các bít lấy ra được giải mã nhờ kỹ thuật chọn theo đa số. Mỗi bít
m
bi được lấy ra
l lần .
Thuật toán phát hiện thuỷ vân như sau:
Thuật toán: detect_watermark
Đầu vào: Tập dữ liệu đã nhúng thủy vân DW ,m,c,ξ, KS ,T , Độ dài thủy vân l
Đầu ra: Thủy vân thu được WD 1. Đặt ones[0, …, l-1] ← 0 2. Đặt zeros[0, …, l-1] ← 0 3. S0, …, Sm-1 ← get_partitions(Dw, Ks, m) 4. for j=0, …, m-1 5. if S j ≥ ξ 6. i ← j mod l
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên t nu . e du . v n
7.value ← Θ(Si ,0, c) 8. if value ≥ T * 9. ones[i] ← ones[i] + 1 10. else 11. zeros[i] ← zeros[i] + 1 12. for j=0 , …, l-1 13. if ones[j] > zeros[j] 14. WD|j| ← 1
15. else if ones[j] < zeros[j] 16. WD|j| ← 0
17. else
18.WD|j| ← x 19. return WD
Trường hợp quan hệ đa thuộc tính bền vững thuỷ vân được tăng lên do nhúng thuỷ vân trong nhiều thuộc tính.