Phân đoạn bả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 44 - 48)

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.3. Thuật toán thủy vân trên dữ liệu dạng tuyến

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 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 điểm giản lƣợc nằm trong các nhóm khác nhau thì điểm không giản lƣợc không đƣợc gán vào nhóm nào. Chi tiết thuật toán đƣợc chỉ ra trong thuật toán sau:

Thuật toán 2.4. Map_Segmentation Algorithm Input: Tập đỉnh trong bản đồ gốc.

Output: Các nhóm con đƣợc chia * +

Tính toán bản đồ rút gọn bằng cách đơn giản bản đồ với thuật toán DP.

set * ( ) + /* Tập các đỉnh đặc trƣng */

for i=1 to N F=Dilate(F, S) endfor;

Chia F thành các thành phần liên thông rời nhau * + bằng cách kết nối với bản đồ gốc.

foreach" trong nhƣng không thuộc "

Giả sử rằng nằm trên polyline với điểm cuối và trong . if"cả và thuộc cùng một nhóm " then

" đƣợc gán vào trong nhóm ";

else

" không đƣợc gán vào nhóm nào cả";

endif;

endfor;

end. /*Map_Segmentation Algorithm*/

function Dilate(F, S) foreach

if "tồn tại nào đó trong kề với " then

"Đánh d u là đã duyệt".

endif;

endfor;

"Bổ sung t t cả các đỉnh đã duyệt vào trong "

return F;

end./*Function Dilate()*/

Nếu tính liên thông của bản đồ không bị thay đổi, thì thủ tục phân đoạn là bền vững và đồng bộ sau các loại t n công khác nhau. Thậm chí các t n công làm nhiễu xáo trộn các tọa độ của các đỉnh thì kết quả phân đoạn vẫn giống nhƣ kết quả ban đầu. Bước phân đoạn cũng chống chịu được ph p giản lược DP, vì tập F các điểm đặc trƣng thu từ tập S sau ph p đơn giản DP.

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 44 - 48)

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

(76 trang)