4. Ý nghĩa khoa học và thực tiễn của đề tài
2.4. Lấy thông tin về vùng ROI trên ảnh
2.4.2. Giải thuật áp dụng
2.4.2.2. Giải thuật Douglas–Peucker chuyển một biên về dạng Polygon
Thuật toán Douglas-Peucker là một thuật toán để giảm số lượng các điểm trong một đường cong, tức là xấp xỉ bằng một chuỗi các điểm. Thuật toán này hoạt động từ trên xuống, bắt đầu với một phỏng đoán thô ban đầu là một đường gấp khúc (polyline) đơn giản, cụ thể là một cạnh duy nhất, nối đỉnh đầu tiên và đỉnh cuối cùng của polyline. Sau đó, các đỉnh còn lại được kiểm tra độ gần với cạnh đó. Nếu có những đỉnh xa cạnh đang xét hơn một dung sai quy định, ε> 0, thì những đỉnh xa này được thêm vào đường gấp khúc đơn giản hóa ban đầu.
Điều này tạo ra một polyline dự đoán đơn giản mới. Sử dụng đệ quy, quá trình này tiếp tục đối với mỗi cạnh của dự đoán hiện tại cho đến khi tất cả các đỉnh của polyline ban đầu đều nằm trong dung sai đã định. Cụ thể hơn, trong thuật toán Douglas-Peucker, hai điểm đầu và cuối của một polyline được kết nối bằng một đoạn thẳng làm xấp xỉ thô ban đầu của polyline. Sau đó, độ chính xác của xấp xỉ với toàn bộ polyline được xác định bằng cách tính toán khoảng cách từ tất cả các đỉnh polyline trung gian đó đến đoạn thẳng này. Nếu tất cả các khoảng
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
cách này là bé hơn dung sai ε quy định, thì xấp xỉ là tốt, các điểm đầu và điểm cuối được giữ lại, và các đỉnh khác bị loại trừ. Tuy nhiên, nếu có những khoảng cách còn vượt quá dung sai ε, thì xấp xỉ là không đủ tốt. Trong trường hợp này, chúng tôi chọn điểm xa nhất làm một đỉnh mới, phân chia polyline gốc thành hai polylines ngắn hơn [2].
Ý tưởng cơ bản của thuật toán Douglas-Peucker 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 (xem Hình 2.6) 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.6. Đơn giản hóa đường công theo thuật toán Douglas Peucker[2]
Các bước thực hiện thuật toán:
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.
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.
h >
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Thuật toán Douglas-Peucker là rất đơn giản để lập trình và làm việc được với số chiều tùy ý, vì nó chỉ dựa vào khoảng cách giữa các điểm và đường thẳng.[14]. Nguyên tắc cơ bản của nó là xấp xỉ cần phải chứa (một tập hợp con của) các điểm dữ liệu ban đầu và tất cả các điểm dữ liệu ban đầu phải nằm trong một khoảng cách nhất định (được xác định trước) tới đường xấp xỉ.
Với một chuỗi các đỉnh như mô tả trong hình 2.7.a. Thuật toán Douglas-Peucker có cấu trúc phân cấp, làm mịn dần. Bắt đầu với một dự đoán xấp xỉ thô đầu tiên, cụ thể là một cạnh duy nhất nối đỉnh đầu tiên và đỉnh cuối cùng của polyline (Hình 2.7.b). Sau đó, kiểm tra khoảng cách từ các đỉnh còn lại tới cạnh đó. Nếu có những đỉnh xa hơn dung sai đã cho, thì đỉnh xa nhất trong số đó được thêm vào polyline đơn giản hóa trước đó. Điều này tạo ra một xấp xỉ mới cho đường cong ban đầu (Hình 2.7.c). Sử dụng phép đệ quy, quá trình này tiếp tục cho mỗi cạnh (Hình 2.7.d, e) cho đến khi tất cả các đỉnh của đường cong ban đầu đều ở trong dung sai giới hạn ε (Hình 2.7.f).
Hình 2.7: Các bước cơ bản thuật toán Douglas-Peucker.
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Thuật toán này có độ phức tạp thời gian xấu nhất là O(nm) và độ phức tạp thời gian trung bình là O(n log n), ở đây n là số đỉnh của đầu vào và m là số lượng các đoạn (cạnh) của polyline đơn giản hóa. Lưu ý rằng đây là một thuật toán phụ thuộc đầu ra, và sẽ rất nhanh khi m nhỏ, tức là khi xấp xỉ thô. Mặt khác, nếu ε có giá trị lớn hơn, các polyline đơn giản hóa có thể tự cắt với chính nó.