Tính toán định danh bền vững

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 38)

Ta sử dụng các bit quan trọng cao nhất của trọng tâm của đa giác để làm định danh bền vững. Nếu là một đa giác với n điểm thì diện tích của nó và trọng tâm của nó có thể tính đƣợc theo các công thức sau đây:

(2. 3)

(2. 4)

Hình 2. 2. Nhúng bit bằng phép co giãn đa giác.

Các trọng tâm của các đa giác A và B đƣợc biểu diễn bởi các chấm đen trên hình 2.2 (a) và hình 2.5(b). Ta cần chắc chắn rằng các bit quan trọng cao nhất đƣợc chọn là đủ quan trọng. Giả sử rằng bit thứ là bit ít quan trọng nhất. Mặc khác, phải "đủ cao" sao cho các biến đổi nhỏ của đa giác không làm thay đổi chúng, đồng thời h phải "đủ thấp" để hai đa giác kề nhau không chung nhau cùng một định danh. Nhƣ ta thấy sau này, hai đa giác đƣợc đánh dấu thủy vân chung một định danh sẽ đƣợc giãn sử dụng cùng bƣớc lƣợng tử hóa. Thông tin nhƣ vậy có thể đƣợc kẻ tấn công dùng để phá vỡ thủy vân. Do đó cần phải tránh việc dùng chung các định danh. Một lựa chọn tốt là chọn giá trị nhỏ nhất của hsao cho các định danh khác nhau với các đa giác khác nhau. Ta minh họa cách tính giá trị h bằng ví dụ. Với dữ liệu bản đồ thật, với mỗi đa giác ta đo khoảng cách giữa trọng tâm và đỉnh xa nhất so với trọng tâm. Ta thu đƣợc giá trị trung bình khoảng 12 (mét) và một độ lệch tiêu chuẩn khoảng 10.5 mét, nghĩa là hầu hết các đa giác có đƣờng kính nằm khoảng giữa2 x (12-10.5) = 3(mét) và2 x (12+10.5) = 50(mét). Ta coi 3 mét là cỡ nhỏ nhất của một đa giác, hầu hết các đa giác có trọng tâm cách nhau ít nhất 6 mét. Thậm chí trƣờng hợp các cấu hình đặc biệt thì ta chọn h = 2 gần nhƣ có thể nói hai đa giác không chung nhau cùng một định danh. Khi đó l = 2h = 4(mét) đƣợc xem nhƣ là khoảng cách quan trọng (có nghĩa) tối thiểu. Bằng thực nghiệm, ta xác nhận rằng bằng cách chọn và 8 ta sẽ có và 300 trƣờng hợp các định danh xung đột trong số 4278 đa giác trên bản đồ. Từ đó ta có thể dùng công thức

(2. 6)

trong đó và là trung bình và độ lệch tiêu chuẩn của chiều dài chính của các đa giác trong tập dữ liệu.

Định danh của một đa giác đƣợc tính bằng cách cắt bớt trong dạng biểu diễn nhị phân của các tọa độ và của nó các bit biểu diễn các lũy thừa của hai nhiều nhất là bit và nối chúng lại. Ta ký hiệu phép toán này bởi

(2. 7)

2.2.3. Tính hướng của đa giác

Ta định nghĩa hƣớng chính của một đa giác là hƣớng có trọng số lớn nhất trong các cạnh của nó. Ví dụ, nếu chỉ hai cạnh có hƣớng thì trọng số của góc bằng tổng chiều dài của các cạnh . Vấn đề là các bức tƣờng song song trong bản đồ thực không nhất thiết phải ánh xạ với các cạnh song song trong tập dữ liệu. Vì thế chúng ta cần tính tổng độ dài của các cạnh gần nhƣ được coi là song

song. Chúng ta định nghĩa là sai số cho phép của góc, tức là hai cạnh đƣợc coi là có cùng hƣớng nếu nhƣ các hƣớng của nó thỏa mãn

. Để có thể tính toán hiệu quả ta định nghĩa một thuật toán phân cụm dựa trên quan sát thực tế rằng thƣờng chỉ một số nhỏ các hƣớng khác nhau cho mỗi đa giác. Thuật toán bao gồm ba bƣớc sau đây: Trƣớc hết ta tạo một tập cụm rỗng, với đƣợc chọn sao cho . Trong cụm , ta đặt tất cả các cạnh có cùng một hƣớng nằm trong khoảng và . Khi đó trong các cụm thứ và ta có tất cả các cạnh gần nhƣ có hƣớng là . Sau đó, ta tập hợp các cụm nhỏ lại thành

các cụm lớn bằng cách hợp nhất hai cụm nếu không có hai cụm rỗng nào nằm giữa chúng. Hƣớng chính của một vùng đa giác đƣợc tính nhƣ là giá trị trung bình của cụm có trọng số cao nhất (trọng số của một cụm bằng tổng các độ dài các cạnh trong cụm). Có thể có trƣờng hợp ba cụm hoặc nhiều hơn đƣợc tập hợp lại dẫn tới việc phải xét khả năng các hƣớng đƣợc coi là bằng nhau khi độ sai khác của chúng lớn hơn sai số góc cho phép. Đây là điều hiếm khi xảy ra vì ta thấy các tòa nhà thực tế chỉ có một vài hƣớng (2, 3 hƣớng trong đa số trƣờng hợp) phân biệt đƣợc một cách rõ ràng. Một tiếp cận tƣơng tự là ta tính tất cả các trọng số của hƣớng rồi chọn hƣớng có trọng số lớn nhất. Phƣơng pháp của ta hiệu quả hơn, đồng thời cũng có thể chính xác hơn trong một số tình huống cụ thể.

2.2.4. Phép co giãn để nhúng bit

Ở phần này ta chỉ ra cách nhúng một bit thủy vân vào một đa giác . Để chắc rằng dấu thủy vân là đủ bền vững, ta biến đổi tất cả hình dạng các đa giác. Chính xác hơn là ta biến đổi khoảng cách lớn nhất dọc theo hƣớng từ tâm O tới một đỉnh . Với một đa giác là hình chữ nhật thì độ dài này bằng một nửa độ dài của cạnh dài. Ta gọi độ dài chính này là khoảng cách dài nhất. Nhƣng chỉ thay thế các tọa độ của thì không hợp lý bởi vì nó có thể thấp hơn chất lƣợng góc (các góc vuông có thể bị tù đi qua phép biến đổi này). Vì thế ta chọn cách biến đổi tất cả các cạnh có chiều dọc theo hƣớng sao cho hầu hết các góc của đa giác đƣợc bảo tồn. Định nghĩa là vectơ sao cho hợp thành một hệ trực chuẩn, quá trình nhúng thủy vân nhƣ sau:

- Tính hoành độ của mỗi điểm của đa giác trong hệ ;

- Giãn tất cả các tọa độ dọc theo hƣớng sao cho trở thành một trong các giá trị để mã hóa một bit thủy vân 0 hoặc 1. Phép toán này trên đƣợc gọi là phép lƣợng tử hóa nhƣ trình bày sau đây.

Cho một bƣớc lƣợng tử , ta định nghĩa 0-lƣợng tử (tƣơng ứng 1-lƣợng tử) là (tƣơng ứng, ), . Bằng trực giác có thể thấy 0-lƣợng tử (tƣơng ứng, 1-lƣợng tử) đƣợc dùng để mã hóa một bit 0 (tƣơng ứng bit 1). Để lƣợng tử giá trị sử dụng i-lƣợng tử , ta tìm sao cho là bé nhất. Chính xác hơn, việc này thu đƣợc qua các bƣớc sau:

- Tính ;

- Làm tròn tới số nguyên gần nhất ; - Xác định giá trị lƣợng tử của là

Hình 2. 3. Mã hóa bit 1 hoặc 0 vào bằng lượng tử hóa.

Hệ số co giãn của đa giác đƣợc định nghĩa bởi: . Ta biến đổi mỗi điểm trong đa giác gốc vào một điểm trong đa giác đƣợc nhúng thủy vân.

Phép giãn sao cho biến dạng lớn nhất trên một đỉnh của một đa giác nhiều nhất là . Lƣu ý rằng biến dạng này có thể đạt đƣợc chỉ với các điểm xa nhất tính từ trọng tâm theo hƣớng . Trung bình với các điểm này thì biến dạng thực tế vào khoảng cỡ .

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

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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.

2.3. Thuật toán thủy vân trên dữ liệu dạng tuyến

Các lớp bản đồ vectơ dạng tuyến (nhƣ mạng đƣờng phố) có nhiều ứng dụng trong các thiết bị di động hiện nay nhƣ là tìm đƣờng đi, tìm vị trí đối tƣợng, v.v.... Chúng có một số đặc trƣng nhƣ có nhiều giao điểm giữa các đƣờng không khép kín, có nhiều đỉnh bậc cao. Các đỉnh có bậc cao thƣờng giữ vị trí quan trọng và ít bị thay đổi qua các phép tấn công vì chúng liên quan đến giá trị sử dụng của bản đồ số, chúng đƣợc gọi là các điểm đặc trƣng. Do vậy các thuật toán thủy vân căn cứ trên các đỉnh đặc trƣng thƣờng có tính bền vững cao qua các phép tấn công lên bản đồ dạng tuyến [2][6].

2.3.1. Phân đoạn bản đồ

Các bản đồ vectơ số chứa các thông tin địa lý chi tiết và thƣờng chứa tới hàng chục nghìn đỉnh. Để giảm bớt tính toán và làm tăng tính bền vững, các bản đồ thƣờng đƣợc chia thành các bản đồ con hoặc các khối. Một số cách tiếp cận chia bản đồ thành các khối cùng cỡ (cùng số đỉnh). Tuy nhiên chúng gặp phải vấn đề về sự đồng bộ hóa. Phần này trình bày một cách ổn định để phân đoạn (phân nhóm) bản đồ mà không cần sử dụng bản đồ gốc cũng nhƣ các điểm tham chiếu. Các bƣớc phân đoạn bản đồ gốc nhƣ sau:

Bƣớc 1. Đơn giản bản đồ bằng thuật toán Douglas-Peucker

Phép giản lƣợc Douglas Peucker (DP) đƣợc dùng để thu đƣợc bản đồ giản lƣợc từ bản đồ gốc, do Douglas và Peucker đề xuất năm 1973 [1]. Thuật toán DP khá nổi tiếng cho việc lƣợc giản các bản đồ đa đoạn (polyline). Ta xét một polyline với hai điểm đầu mút A và B và một sai số xấp xỉ . Đầu tiên, tìm một điểm C trên polyline mà có khoảng cách lớn nhất tới đƣờng thẳng A-B. Nếu khoảng cách

đó bé hơn thì polyline đƣợc xấp xỉ bởi đƣờng thẳng A-B. Nếu không thì lặp lại quá trình xấp xỉ trên với các đƣờng A-C và C-B để thu đƣợc xấp xỉ cuối cùng. Giả mã của thuật toán này nhƣ sau đây [2].

Thuật toán2.3. Thuật toán Douglas-Peucker. function DouglasPeucker(PointList[], epsilon) //Find the point with the maximum distance dmax = 0; index = 0;

for i = 2 to (length(PointList) - 1)

d = OrthogonalDistance(PointList[i], Line(PointList[1], PointList[end]));

if d > dmax then

index = i; dmax = d;

endif; endfor;

//If max distance is greater than epsilon, recursively simplify

if dmax >= epsilon then //Recursive call

recResults1[] = DouglasPeucker(PointList[1...index], epsilon); recResults2[] = DouglasPeucker(PointList[index...end], epsilon); // Build the result list

ResultList[] = {recResults1[1...end-1] recResults2[1...end]};

else

ResultList[] = {PointList[1], PointList[end]};

endif;

//Return the result return ResultList[];

end./*Function*/

Hình 2.4 dƣới đây biểu diễn quá trình giản lƣợc bản đồ bằng thuật toán DP. Để thuận tiện trong tính toán, đồng thời làm tăng tính bền vững của dấu thủy vân với các bản đồ lớn, ta lấy để loại bỏ mọi đỉnh bậc hai của bản đồ.

Hình 2. 4. Quá trình lược giản bản đồ bằng thuật toán Douglas-Peucker (adsbygoogle = window.adsbygoogle || []).push({});

Bƣớc 2. Chia bản đồ đã giản lƣợc thành các nhóm khác nhau.

Nói chung, các điểm với bậc lớn (có nhiều polyline nối với nhau tại điểm này) là các điểm đặc trƣng quan trọng trong một bản đồ vectơ. Chúng ta nghiên cứu các điểm với bậc lớn hơn hoặc bằng một ngƣỡng chọn trƣớc trong bản đồ lƣợc giản nhƣ là các điểm đặc trƣng, gọi là ngưỡng đặc trưng. Một điểm đặc trƣng và các điểm láng giềng nối với nó hình thành nên một sự kết nối tự nhiên. Chính sách là phân đoạn bản đồ thành nhiều nhóm, trực tiếp hoặc gián tiếp kề với các điểm đặc trƣng. Các điểm trong bản đồ đã giản lƣợc đƣợc duyệt bằng cách "giãn rộng". Các điểm đã duyệt sau đó đƣợc thêm vào cùng nhóm các điểm đang duyệt. Khởi đầu, tất cả các điểm đặc trƣng đều đƣợc duyệt.

Sau đó, tập các điểm đã duyệt đƣợc giãn ra một đơn vị, nghĩa là các điểm với khoảng cách Dijkstra bằng 1 từ tập đã duyệt đƣợc thêm vào tập đã duyệt. Sau khi giãn lần, các điểm với khoảng cách Dijkstra không lớn hơn từ bất cứ điểm đặc trƣng nào sẽ đƣợc thêm vào tập đã duyệt. Sau phép giãn đó là quá trình tìm các thành phần liên thông trong tập đã duyệt và đặt các thành phần đó vào các nhóm riêng biệt.

Hình 2. 5. Bản đồ với các điểm đặc trưng (bậc >2)

Bƣớc 3. Gán cho các đỉnh không bị lƣợc bỏ vào các nhóm riêng biệt.

Sau khi bản đồ giản lƣợc đƣợc phân đoạn, các điểm khác trong bản đồ gốc mà không có trong bản đồ giản lƣợc đƣợc gán vào các nhóm thích hợp. Nếu một điểm không giản lƣợc nằm giữa hai điểm giản lƣợc trong cùng một nhóm thì điểm đó đƣợc thêm vào trong nhóm đó. Ngƣợc lại, nếu điểm không giản lƣợc nằm giữa hai

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 38)