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

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

Chương 2: MỘT SỐ KỸ THUẬT BẢO VỆ BẢN QUYỀN BẢN ĐỒ VỚI THỦY VÂN SỐ

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

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ệ ( );

- Tính độ dài chính * +;

- 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ủ 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ủ 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 */

endif;

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

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

Tải bản đầy đủ (PDF)

(76 trang)