Thuật toán thủy vân

Một phần của tài liệu Kỹ thuật bảo vệ bản quyền bản đồ trong hệ thống thông tin địa lý (Trang 43 - 46)

2.2.5.1. Nhúng thủy vân

Gọi là tỷ lệ đích của các đa giác đƣợc nhúng, là một tham số cho thuật toán. Với mỗi đa giác trong tập dữ liệu ta tính định danh bền vững . Sau đó gieo cho bộ sinh số giả ngẫu nhiên với hạt . Nếu số nguyên đầu tiên sinh bởi G modulo bằng 0 thì ta nhúng một bit vào đa giác. Bit đƣợc chọn dựa theo giá trị nhị phân tiếp theo sinh bởi G và đƣợc nhúng vào sử dụng phƣơng pháp giãn mô tả ở phần trƣớc.

Thuật toán 2.1. Thủy vân bản đồ vùng bằng co giãn đa giác Input: khóa bí mật , tỷ lệ thủy vân , , bƣớc lƣợng tử

Data: là tập dữ liệu bản đồ gốc.

Output: tập dữ liệu đã nhúng thủy vân.

foreach ( ) do

O centroid( );

id hsb( ); /* robust identifier id */

seed( ); /* seed the PRNG G with K · id */

if nextInteger( ) mod then // Nhúng thủy vân đa giác P. orientation( ); /* orientation */

max{ }; /* main length */

nextFloat

nextInteger( ) mod 2; /* watermark bit b */ quantize ( ); /* quantize */ ; /* expansion factor */ expand ; if testCollision() then rollback() ; endif; endif; endfor.

2.1.5.2. Tách thủy vân

Cho một tập dữ liệu . Trƣớc hết ta dịch nó vào hệ quy chiếu gốc để nhận đƣợc . Thuật toán phát hiện (tách) thủy vân cũng tƣơng tự nhƣ thuật toán nhúng. Nó gồm hai bƣớc: tính tỷ số các đa giác đối chiếu và so tỷ số này với một ngƣỡng định trƣớc . Các giá trị của và đƣợc dùng để phát hiện phải giống với các giá trị đƣợc dùng trong quá trình nhúng thủy vân. Vì thế ngƣời chủ sở hữu phải giữ các giá trị này bí mật. Với mỗi đa giác ta gieo mầm số giả ngẫu nhiên từ khóa nối với định danh. Thuật toán tách thủy vân:

Thuật toán 2.2. Tách thủy vân đã nhúng

Input: khóa bí mật , tỷ lệ thủy vân , , bƣớc lƣợng tử , xác suất lỗi tối đa .

Data: là tập dữ liệu bản đồ cần tách thủy vân.

Output: MARK hay là NO-MARK (có nhúng thủy vân hay không).

foreach building P in DB do

centroid(P); hsb(O, h); seed( );

if nextInteger( ) mod then

++; /* increment total count */ orientation(P);

max{ };

nextFloat( ). ( ); nextInteger( ) mod 2; /* expected bit b */ ;

quantize( ); /* closest 0-quantizer */ quantize( ); /* closest 1-quantizer */

if then

; /* found bit is b′= 1 */

else

; /* found bit is b′= 0 */

if b = b′then m++; /* increment match count */

endif;

endfor;

threshold( );

If then return MARK; else return NO MARK;

Giải mã. Để giải mã một bit từ một giá trị đã lƣợng tử hóa , ta đơn giản kiểm

tra nó là một trong các 1-lƣợng tử hoặc một trong các 0-lƣợng tử. Nếu không thuộc các -lƣợng tử thì ta tính giá trị lƣợng tử hóa gần nhất trong các 1-lƣợng tử và giá trị lƣợng tử hóa gần nhất trong các 0-lƣợng tử. Sau đó tính các khoảng

cách . Nếu thì ta giải mã ra bit 0, nếu

thì ta giải mã đƣợc bit 1. Nếu thì không giải mã ra bit nào. Chú ý rằng một giá trị lƣợng tử với bƣớc có thể đƣợc biến đổi nhiều nhất một khoảng cỡ mà không làm sai kết quả giải mã. Sự lƣợng tử hóa đƣợc chọn vì nó cho phép tối ƣu thỏa hiệp giữa trung bình nhiễu (ở đây là ) và biến đổi tối thiểu gây sai số kết quả giải mã ( ).

Nếu bit mong muốn là và bit giải mã đƣợc là giống nhau thì ta nói rằng đa giác được khớp. Ta duy trì hai bộ đếm (khớp) và (tổng). Biến đƣợc tăng mỗi lần một đa giác thỏa mãn điều kiện thủy vân đƣợc tìm thấy. Biến tƣang mỗi lần đa giác đó đƣợc khớp. Do đó, tỷ số phát hiện là tỷ lệ các đa giác khớp. Dễ thấy rằng trên một tập dữ liệu của hãng thứ ba, xác suất để mỗi đa giác khớp là 1/2. Do vậy, tỷ lệ đƣợc so sánh với giá trị kỳ vọng 1/2 của nó để quyết định xem dấu thủy vân của ngƣời chủ sở hữu có đƣợc nhúng vào trong tài liệu hay không. Trong thực tế ngƣời ta sử dụng một ngƣỡng phát hiện để quyết định vùng có nhúng thủy

vân hay không. Vùng có nhúng thủy vân nếu nhƣ có . Sự phù hợp của quá trình phát hiện thủy vân phụ thuộc nhiều vào giá trị của .Ta có thể chọn

làm ngƣỡng phát hiện trong thực nghiệm.

Một phần của tài liệu Kỹ thuật bảo vệ bản quyền bản đồ trong hệ thống thông tin địa lý (Trang 43 - 46)