Thuật toỏn tỡm xương

Một phần của tài liệu Giáo trình môn xử lý ảnh ppt (Trang 67 - 71)

a) b)

Trong mục này sẽ trỡnh bày ý tưởng cơ bản của thuật toỏn tỡm xương và mụ tả bằng ngụn ngữ tựa Pascal.

Tăng trưởng: Việc tớnh toỏn sơ đồ Voronoi được bắt đầu từ một điểm sinh trong mặt phẳng. Sau đú điểm sinh thứ hai được thờm vào và quỏ trỡnh tớnh toỏn tiếp tục với đa giỏc Voronoi đó tỡm được với điểm vừa được thờm vào đú. Cứ như thế, quỏ trỡnh tớnh toỏn sơ đồ Voronoi được thực hiện cho đến khi khụng cũn điểm sinh nào được thờm vào. Nhược điểm của chiến lược này là mỗi khi một điểm mới được thờm vào, nú cú thể gõy ra sự phõn vựng toàn bộ cỏc đa giỏc Voronoi đó được tớnh.

Chia để trị: Tập cỏc điểm biờn đầu tiờn được chia thành hai tập điểm cú kớch cỡ bằng nhau. Sau đú thuật toỏn tớnh toỏn sơ đồ Voronoi cho cả hai tập con điểm biờn đú. Cuối cựng, người ta thực hiện việc ghộp cả hai sơ đồ Voronoi trờn để thu được kết quả mong muốn. Tuy nhiờn, việc chia tập cỏc điểm biờn thành hai phần khụng phải được thực hiện một lần, mà được lặp lại nhiều lần cho đến khi việc tớnh toỏn sơ đồ Voronoi trở nờn đơn giản. Vỡ thế, việc tớnh sơ đồ Voronoi trở thành vấn đề làm thế nào để trộn hai sơ đồ Voronoi lại với nhau.

Thuật toỏn sẽ trỡnh bày ở đõy là sự kết hợp của hai ý tưởng ở trờn. Tuy nhiờn, nú sẽ mang nhiều dỏng dấp của thuật toỏn chia để trị.

Hỡnh 4.3 minh hoạ ý tưởng của thuật toỏn này. Mười một điểm biờn được chia thành hai phần (bờn trỏi: 1- 6, bờn phải: 7-11) bởi đường gấp khỳc δ, và hai sơ đồ Voronoi tương ứng Vor(SL) và Vor(SR). Để thu được sơ đồ Vornonoi Vor(SL ∪ SR), ta thực hiện việc trộn hai sơ đồ trờn và xỏc định lại một số đa giỏc sẽ bị sửa đổi do ảnh hưởng của cỏc điểm bờn cạnh thuộc sơ đồ kia. Mỗi phần tử của δ sẽ là một bộ phận của đường trung trực nối hai điểm mà một điểm thuộc Vor(SL) và một thuộc Vor(SR). Trước khi xõy dựng δ, ta tỡm ra phần tử đầu và cuối của nú. Nhỡn vào hỡnh trờn, ta nhận thấy rằng cạnh δ1 và δ5 là cỏc tia. Dễ nhận thấy rằng việc tỡm ra cỏc cạnh đầu và cuối của δ trở thành việc tỡm cạnh vào tα và cạnh ra tω.

Hỡnh 4.3. Minh hoạ thuật toỏn trộn hai sơ đồ Voronoi

Sau khi đó tỡm được tα và tω, cỏc điểm cuối của tα được sử dụng để xõy dựng phần tử đầu tiờn của δ (δ1 trong hỡnh trờn). Sau đú thuật toỏn tỡm điểm giao của δ với Vor(SL) và Vor(SR). Trong vớ dụ trờn, δ đầu tiờn giao

1 2 4 3 6 5 7 9 8 11 10 CH(SR) CH(SL) δ1 δ5 tα t ω

với V(3). Kể từ đõy, cỏc điểm nằm trờn phần kộo dài δ sẽ gần điểm 6 hơn điểm 3. Do đú, phần tử tiếp theo δ2 của δ sẽ thuộc vào đường trung trực của điểm 6 và điểm 7. Sau đú điểm giao tiếp theo của δ sẽ thuộc và Vor(SL); δ bõy giờ sẽ đi vào V(9) và δ2 sẽ được thay thế bởi δ3. Quỏ trỡnh này sẽ kết thỳc khi δ gặp phần tử cuối δ5.

Trờn đõy chỉ là minh hoạ cho thuật trộn hai sơ đồ Voronoi trong chiến lược chia để trị. Tuy nhiờn, trong thuật toỏn sẽ trỡnh bày ở đõy thỡ sự thực hiện cú khỏc một chỳt. Tập cỏc điểm ảnh khụng phải được đưa vào ngay từ đầu mà sẽ được quột vào từng dũng một. Giả sử tại bước thứ i, ta đó thu được một sơ đồ Voronoi gồm i-1 hàng cỏc điểm sinh Vor(Si-1). Tiếp theo, ta quột lấy một hàng Li cỏc điểm ảnh từ tập cỏc điểm biờn cũn lại. Thực hiện việc tớnh sơ đồ Voronoi Vor(Li) cho hàng này, sau đú trộn Vor(Si-1) với Vor(Li). Kết quả ta sẽ được một sơ đồ mới, và lại thực hiện việc quột hàng Li+1 cỏc điểm sinh cũn lại v.v.. Quỏ trỡnh này sẽ kết thỳc khi khụng cũn điểm biờn nào để thờm vào sơ đồ Voronoi. Do Vor(Li) sẽ cú dạng răng lược (nếu Li cú k điểm thỡ Vor(Li) sẽ gồm k-1 đường thẳng đứng), nờn việc trộn Vor(Si-1) với Vor(Li) cú phần đơn giản hơn.

Hỡnh 4.4. Minh hoạ thuật toỏn thờm một điểm biờn vào sơ đồ Voronoi

Giải thuật trờn cú thể được mụ tả bằng ngụn ngữ tựa Pascal như sau:

Procedure VORONOI

(*Si: Tập cỏc điểm của i dũng quột đầu tiờn, 0 <= i <=iMAX,

Vor(Si) sơ đồ Vorronoi của Si *)

δ tα tω p1 p2 p 3 p4 p5 p6 p 7 p8 p9 p 10 v1 v2 v3 v4 v5 v6 Cỏc i m thu c đ ể ộ S i-1 Cỏc i m thu c đ ể ộ Li

Begin

i:=0; Si:=rỗng;

While (i<imax ∧ Si ⊂ straight_line) do Begin

(*Khởi tạo sơ đồ Voronoi cho đến khi nú chứa ớt nhất một đỉnh*) increment i;

GetScanLine Li;

Vor(Si) = VoroPreScan(Vor(Si-1, Li));

End

While (i < imax) do Begin

Increment i; GetScanLine Li;

Vor(Li) := cỏc đường trung trực sinh bởi cỏc điểm sinh thuộc Li Vor(Si) := VoroLink(Vor(Si-1), Vor(Li));

End End.

Giả sử xột trờn hệ toạ độ thực. Ảnh vào được quột từ dưới lờn. Toạ độ y (biến i) tương ứng với từng dũng quột được tăng dần theo từng dũng. Trong thủ tục trờn, hàm quan trọng nhất là hàm VoroLink, hàm này thực hiện việc trộn sơ đồ Voronoi của Li-1 dũng đó được quột trước đú với sơ đồ Voronoi của dũng hiện tại thứ i. Trong vũng lặp trờn, hàm VoroPreScan là một biến thể của hàm VoroLink, cú nhiệm vụ khởi tạo sơ đồ Voronoi và thoỏt khỏi vũng lặp ngay khi nú thành lập được sơ đồ Voronoi chứa ớt nhất một đỉnh. Hàm VoroLink thực hiện việc trộn hai sơ đồ Voronoi Vor(Si-1) và Vor(Li) với nhau để thành Vor(Si).

Chương 5:

CÁC KỸ THUẬT HẬU XỬ Lí (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Giáo trình môn xử lý ảnh ppt (Trang 67 - 71)