Rút gọn số lượng điểm biểu diễn

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu một số phương pháp rút gọn số lượng điểm biểu diễn Luận văn ThS Công nghệ thông tin 1 01 10 (Trang 27 - 32)

Chương 2: RÚT GỌN BIỂU DIỄN BỀ MẶT

2.1. Rút gọn số lượng điểm biểu diễn

Trong thực tế các đường cong số hoá thu được sau các quá trình véctơ hoá hay số hoá bằng bàn số hoá chứa rất nhiều điểm. Vấn đề đặt ra là làm thế nào có thể giảm bớt số lượng điểm mà đường cong mới nhận được vẫn gần giống với đường cong ban đầu.

Bài toán: Cho đường cong trong không gian hai chiều được biểu diễn bởi dãy các toạ độ (x1,y1), (x2,y2),.., (xn,yn). Cần bỏ bớt đi một số điểm sao cho đường cong mới nhận được (xi1,yi1), (xi2,yi2),.., (xim,yim) gần giống đường cong ban đầu, nhưng vẫn thoả mãn các đặc trưng của đường cong.

Dưới đây là bài toán thể hiện dưới dạng ngôn ngữ đặc tả RAISE [4].

Điểm gồm cặp số thực và hàm d(p,q) được dùng để chỉ khoảng cách Euclid giữa hai điểm p và q.

scheme POINT=

class

type Point=Real><Real value d:Point><Point->Real

d((x,y),(u,v)) is sqrt((x-u)*(x-u)+(y-v)*(y-v)), end

Sơ đồ POLYLINE gồm kiểu Polyline – dãy điểm có độ dài nhỏ nhất là 2. POINT

scheme POLYLINE= extend POINT with

class type Polyline={|pl:Point-list:-len pl>=2|} end

Có thể đặc tả hàm đơn giản hoá đường cong để được đường cong có số điểm nhỏ hơn đường cong ban đầu, tức là đỉnh của đường cong mới nằm trên đường cong cũ.

Đơn giản hoá đường cong smpl:Polyline->Polyline

smpl(pl) as pl' post len pl' <=len pl /\ elems pl' <<= elems pl 2.1.1. Thuật toán đơn giản hóa Douglas-Peucker

Ý tưởng cơ bản của thuật toán Douglas-Peucker [2,5,6] là xét xem khoảng cách lớn nhất từ đường cong tới đoạn thẳng nối hai đầu mút đường cong (Hình 2.1) có lớn hơn ngưỡng  không. Nếu điều này đúng thì điểm xa nhất được giữ lại làm điểm chia đường cong và thuật toán được thực hiện tương tự với hai đường cong vừa tìm được. Trong trường hợp ngược lại, kết quả của thuật toán đơn giản hoá là hai điểm đầu mút của đường cong.

Hình 2.1: Đơn giản hóa đường cong theo thuật toán Douglas-Peucker

Thuật toán Douglas-Peucker:

Bước 1: Chọn ngưỡng .

Bước 2: Tìm khoảng cách lớn nhất từ đường cong tới đoạn thẳng nối hai đầu đoạn đường cong h.

Bước 3: Nếu h   thì dừng.

h >  

Bước 4: Nếu h >  thì giữ lại điểm đạt cực đại này và quay trở lại bước 1.

*) Nhận xét: Thuật toán này tỏ ra thuận lợi đối với các đường cong thu nhận được mà gốc là các đoạn thẳng, phù hợp với việc đơn giản hoá trong quá trình véctơ các bản vẽ kỹ thuật, sơ đồ thiết kế mạch in v.v..

2.1.2. Thuật toán Band Width

Trong thuật toán Band Width [2,5,6], ta hình dung có một dải băng di chuyển từ đầu mút đường cong dọc theo đường cong sao cho đường cong nằm trong di băng đó cho đến khi có điểm thuộc đường cong chạm vào biên của dải băng, điểm này sẽ được giữ lại. Quá trình này được thực hiện với phần còn lại của đường cong bắt đầu từ điểm vừa tìm được cho đến khi hết đường cong. Cụ thể như sau:

Hình 2.2: Đơn giản hóa đường cong theo thuật toán BandWidth

Bắt đầu bằng việc xác định điểm đầu tiên trên đường cong và coi đó như là một điểm chốt (P1). Điểm thứ ba (P3) được coi là điểm động. Điểm giữa điểm chốt và điểm động (P2) là điểm trung gian. Ban đầu khoảng cách từ điểm trung gian đến đoạn thẳng nối điểm chốt và điểm động được tính toán và kiếm tra. Nếu khoảng cách tính được này nhỏ hơn một ngưỡng  cho trước thì điểm trung gian có thể bỏ đi, tiến trình tiếp tục với điểm chốt là điểm chốt cũ, điểm trung gian là điểm động cũ và điểm động là điểm kế tiếp sau điểm động cũ. Trong trường hợp ngược lại, khoảng cách tính được lớn hơn ngưỡng  cho trước thì điểm trung gian sẽ được giữ lại, tiến trình

di

P3

P2

P4

dk

P5

P1

tiếp tục với điểm chốt là điển trung gian, điểm trung gian là điểm động cũ và điểm động là điểm kế tiếp sau điểm động cũ. Tiến trình được lặp cho đến hết đường cong (Hình 2.2 minh họa thuật toán Band-Width).

Thuật toán Band-Width:

Bước 1: Xác định điểm đầu tiên trên đường cong và coi đó như là một điểm chốt (P1). Điểm thứ ba (P3) được coi là điểm động. Điểm giữa điểm chốt và điểm động (P2) là điểm trung gian.

Bước 2: Tính khoảng cách từ điểm trung gian đến đoạn thẳng nối hai điểm chốt và điểm động.

Bước 3: Kiểm tra khoảng cách tìm được nếu nhỏ hơn một ngưỡng  cho trước thì điểm trung gian có thể bỏ đi. Trong trường hợp ngược lại điểm chốt chuyển đến điểm trung gian.

Bước 4: Chu trình được lặp lại thì điểm trung gian được chuyển đến điểm động và điểm kế tiếp sau điểm động được chỉ định làm điểm động mới.

*) Nhận xét: Thuật toán này tăng tốc độ trong trường hợp đường ống chứa nhiều điểm, điều đó có nghĩa là độ lệch giữa các điểm trong đường thẳng là nhỏ, hay độ dày nét của đường được véctơ hoá là mảnh.

2.1.3. Thuật toán Angles

Thuật toán Angles [2,5,6] tựa như thuật toán Band Width nhưng thay vì tính khoảng cách thì ta tính các góc. Nếu góc tại đỉnh được tạo bởi hai cạnh mà lớn hơn ngưỡng cho trước thì đỉnh đó bị loại bỏ.

Để mô tả sơ đồ ANG_SIMP cần các hàm sau: Vị từ is_ANG_sim(pl,) được dùng để kiểm tra xem dãy điểm pl đã được đơn giản hoá với ngưỡng

 chưa, hàm angle(A, B, C) là số đo của góc Aˆ của tam giác ABC.

Hàm ANGLE_al(pl,) được dùng để đơn giản hoá đường cong pl theo thuật toán Angularity với ngưỡng  cho trước.

ANGLE_al:Polyline><Real->Polyline ANGLE_al(pl,) is

local

variable pl':Polyline, i:Nat value

loai:Polyline><Nat->Polyline

loai(pl,n) as pl’ post (exists pl1,pl2:Polyline:- pl=pl1^<.pl(n).>^pl2 /\ pl’=pl1^pl2,

ANGLE_al:Unit-> read pl', i write pl', i Unit ANGLE_al() is pl':=pl;

while is_ANG_sim(pl',) do for i in <.1..len pl'.> do

pl':=if angle(pl(i-1),pl(i),pl(i))< then loai(pl',i) else pl'

end /*endif*/

end /*end for*/

end /*end while*/

in pl' end

Hình 2.3: Đơn giản hóa đường cong theo thuật toán Angles

*) Nhận xét: Do trong quá trình đơn giản hoá thuật toán sử dụng các bước tính góc nên thuận lợi đối với các đường cong thu nhận được mà gốc là các đường uốn, phù hợp với việc đơn giản hoá trong quá trình véctơ các bản đồ địa hình, thuỷ văn, đường giao thông v.v..

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu một số phương pháp rút gọn số lượng điểm biểu diễn Luận văn ThS Công nghệ thông tin 1 01 10 (Trang 27 - 32)

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

(69 trang)