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 46 - 50)

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

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 46 - 50)

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

(79 trang)