2.2.4. Thuật toán 2 (Wu-Lee)
Thuật toán này của 2 tác giả M.Y. Wu và J.H.Lee [17] đƣa ra cải tiến hơn thuật toán 1 bằng việc đƣa thêm khóa K sử dụng trong quá trình nhúng và tách thủy vân đồng thời đƣa thêm các điều kiện đảo bit trong mỗi khối. Với thuật toán này, có thể nhúng một bít vào mỗi khối bằng cách hiệu chỉnh nhiều nhất 1 bít của khối. Kỹ thuật này có khả năng làm tăng dữ liệu có thể nhúng.
Xét ảnh gốc F, khóa bí mật K và một số dữ liệu đƣợc nhúng vào F. Khóa bí mật K là một ma trận ảnh có kích thƣớc mxn. Để đơn giản ta giả sử kích thƣớc của ảnh gốc F là bội số của mxn. Quá trình nhúng thu đƣợc ảnh F có một số bit đã bị hiệu chỉnh. Thuật toán thực hiện nhƣ sau:
a/ Quá trình nhúng tin
Bước 1: Chia F thành các khối, mỗi khối có kích thƣớc mxn.
Bước 2: Với mỗi khối Fi thu đƣợc ở bƣớc 1. Kiểm tra điều kiện: 0< SUM(Fi^K)< SUM(K)
Nếu điều kiện trên đúng thì tiếp tục thực hiện bƣớc 3 để nhúng một bit vào Fi. Ngƣợc lại, dữ liệu sẽ không đƣợc nhúng vào Fi và Fi sẽ đƣợc giữ nguyên.
Bước 3: Giả sử bit đƣợc nhúng vào Fi là b. Để hiệu chỉnh Fi ta làm nhƣ sau: Trƣờng hợp 1: Nếu (SUM(FiK) mod2 = b) thì không thay đổi Fi và bit b hiển nhiên đã đƣợc nhúng vào khối Fi
Trƣờng hợp 2: Nếu (SUM(FiK) mod2 ≠ b) và SUM(FiK)=1 thì chọn ngẫu nhiên một bit của Fi tại vị trí (i,j) mà Fi(j,k)=0 và K(j,k)=1, đảo Fi(j,k) thành 1.
Trƣờng hợp 3: Nếu (SUM(FiK) mod2 ≠ b) và SUM(FiK)=SUM(K)-1 thì chọn ngẫu nhiên một bit của Fi tại vị trí (j,k) mà Fi(j,k)=1 và K(j,k)=1, đảo Fi(j,k) thành 0.
Trƣờng hợp 4: Nếu (SUM(FiK) mod2 ≠ b) và 1<SUM(FiK)<SUM(K)-1 thì chọn ngẫu nhiên một bit của Fi tại vị trí (j,k) mà K(j,k)=1 và đảo ngƣợc Fi(j,k).
- Trong bước 3 chỉ thực hiện tối đa một phép đảo một bit của Fi để thu đƣợc khối Fi’ nhằm đảo bảo tính bất biến.
Ví dụ minh họa:
Giả sử ta cần nhúng dãy bit d=011 vào một ảnh F có kích thƣớc 6x6 với một ma trận khóa K có kích thƣớc 3x3 nhƣ trong hình 2.3. Ta có SUM(K)=5
Chia ảnh F thành bốn khối nhỏ mỗi khối sẽ có kích thƣớc là 3x3 ta thu đƣợc F1, F2, F3, F4.
Bít dữ liệu nhúng 0 1 1