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,...,Sm1 dựa vào bộ dữ liệu đã thuỷ vân DW, khoá bí mật KS, và số phần dữ liệu đã phân 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
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
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 bl1,...,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 Sk với
i l
kmod . Các bít lấy ra được giải mã nhờ kỹ thuật chọn theo đa số. Mỗi bít
i
b được lấy ra
l m
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ânDW,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 Sj 6. i j mod l
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 7. value Si,0,c 8. if valueT* 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.