Tiến trình tạo Vector (tạo đồ thị cĩ hướng)

Một phần của tài liệu Ứng dụng xử lý ảnh trong điều khiển (Trang 61 - 69)

CÁC PHƯƠNG PHÁP TRÁNH VẬT CẢN

4.2.3Tiến trình tạo Vector (tạo đồ thị cĩ hướng)

Đây là tiến trình đổi khung (Skeleton) của đối tượng trong ảnh từ dạng Raster qua dạng Vector. Các pixel được phân thành các tập, mỗi tập biểu diễn một đường cong. Tuy nhiên, khung của vùng khơng gian trống thường chứa các điểm giao nhau. Tại các điểm giao này pixel khơng phải là nền cĩ nhiều hơn 2 pixel lân cận khơng phải là nền. Thêm vào đĩ, bộ khung cĩ thể chia thành những đoạn riêng biệt bởi những pixel này. Vì khi Robot di chuyển từ vùng này qua vùng khác Robot bắt buộc phải đi qua các điểm cắt này, nên các điểm cắt này cần phải được lưu lại để xác định các đích phụ và xác định vị trí Vector cho

từng đoạn của bộ khung. Tiến trình Vector hố ảnh từ bộ khung khơng gian trống chia làm hai bước:

•Chia bộ khung thành các tập hợp các đoạn dựa trên các điểm cắt. •Vector hố các đoạn riêng biệt và liên kết lại

Sau đây là thuật tốn phân chia bộ khung của ảnh: 1. Quét ảnh tìm một pixel khơng phải là nền 2. Đánh dấu pixel này

3. Xác định số pixel khơng phải là nền trong số 8 pixel lân cận nĩ. 4. Nếu số này nhỏ hơn hoặc bằng 1

5. Nếu bằng 1, tạo Vector cho tất cả các pixel đã đánh dấu và xố chúng.

• Nếu bằng 0, đặt pixel này về màu nền và quay lại bước 2 6. Nếu số pixel lân cận 8 của pixel này cĩ số pixel khơng phải là nền

nhiều hơn 1

• Lưu pixel này vào trong một danh sách gọi là crossed_list cùng với số các pixel lân cận khác nền (number)

• Nếu số những pixel đánh dấu nhiều hơn 1, tạo Vector từ tập các pixel đã đánh dấu và xố nĩ.

• Lưu toạ độ và nhãn của pixel đã chọn (đích phụ sub-goal) cho việc tìm đường ngắn nhất.

• Lấy pixel tiếp theo từ crossed_list • Giảm số number đi 1

Thuật tốn tạo Vector: 1) Nếu đoạn khơng rỗng

2) Tìm pixel đầu tiên của đoạn

3) Chuyển tới pixel tiếp theo trong đoạn và đánh dấu nĩ 4) Một lần nữa, chuyển tới pixel tiếp theo của đoạn

5) Nếu khoảng cách giữa pixel đầu và pixel đang chọn lớn hơn giá trị pre- defined-length nhảy tới bước 8

6) Tính tốn khoảng cách từ tất cả các điểm đã đánh dấu tới đường thẳng nối pixel đầu tiên tới pixel đang chọn

7) Nếu tất cả khoảng cách đều nhỏ hơn giá trị pre-defined-length đánh dấu điểm chọn và quay lại bước 3

8) Else_Nếu tất cả khoảng cách đều nhỏ hơn giá trị pre-defined-length • Lưu vị trí của điểm chọn và điểm đầu.

• Xố điểm đầu và tất cả pixel đã đánh dấu • Quay lại bước 1

9) Else dừng

GVHD: TS. Nguyễn Văn Giáp SVTH: Vương Ngọc Dũng

Hình 4.10 : Khung được chia thành các đoạn riêng biệt. Những vị trí cĩ dấu X là điểm cắt (cross_linked point )

• Giá trị pre-defined-length là giá trị định trước nhằm hạn chế chiều dài Vector, nghĩa là giảm khoảng cách giữa hai đích phụ vì nếu khoảng cách này quá dài sẽ làm giảm hiệu quả của việc tạo các đích phụ trong mội trường động.

• Như vậy chúng ta đã tích hợp việc tạo Vector vào trong việc phân rời đường khung, trong tập các đích phụ đưa ra cĩ nhiều các đích liền kề nhau. Do đĩ việc loại bỏ bớt các đích phụ dư thừa là rất cần thiết.

• Đến bước này chúng ta đã cĩ tập các đích trung gian chung. Bước tiếp theo ta phải xác định thứ tự tập con điều khiển Robot để tìm đích chính. Rõ ràng, đích đầu tiên trong tập con được đặt ở vị trí của Robot trên bản đồ đường và điểm cuối cùng chính là điểm đích mà Robot phải di chuyển đến. Để tìm ra tập đích trung gian chúng ta thực hiện hai bước sau:

1) Xác định điểm đầu và cuối trong tập con. Hai điểm này được chọn bằng điều kiện định nghĩa trước. Cụ thể ở đây hai điểm này chính là vị trí Robot và điểm rìa của vùng di chuyển. (xin xem mơ hình)

2) Tìm kiếm trên đồ thị, tìm đường đi ngắn nhất giữa hai điểm nĩi trên – tất cả các đích trung gian cịn lại sẽ được đưa vào tập con để điều khiển Robot tìm đích chính.

Cơng việc kế tiếp: tìm đường di chuyển ngắn nhất cĩ thể được thực hiện bằng hai cách:

• Dùng giải thuật tìm kiếm theo chiều rộng. (Breadth-first search) (adsbygoogle = window.adsbygoogle || []).push({});

• Dùng giải thuật tìm đường đi ngắn nhất trên đồ thị cĩ trọng số: giải thuật Dijkstra.

Trước khi đi vào từng giải thuật ta sẽ đưa ra một số định nghĩa của đồ thị (xin tham khảo tài liệu [2]) vì cả hai phương pháp đều sử dụng lý thuyết đồ thị để giải quyết bài tốn tìm đường đi ngắn nhất.

- Đồ thị là một bộ ba cĩ trật tự <V,E,I> với: + V là một tập hợp gọi là tập đỉnh. + E là một tập hợp gọi là tập cạnh.

+ I là quan hệ giữa V và E, đĩ là tập con của VxExV, cịn gọi là quan hệ tới.

Từ đây ta cĩ thể đưa ra định nghĩa: “Đồ thị <g> là một phạm trù gồm các yếu tố cơ bản là đỉnh và cạnh, cĩ một biểu diễn trên mặt phẳng hình học mà mỗi đỉnh là một điểm, mỗi cạnh là một đường liên tục trên mặt phẳng nối liền hai đỉnh.”

B E

A

D F

C

Hình 4.12 : Tập đích phụ tìm được từ khung khơng gian trống

- Bậc của một đỉnh là số cạnh tới đỉnh này. - Cho đồ thị<g>=<V,E,I>

- Nếu phân biệt phần tử XeY với phần tử YeX trong tập hợp I thì gọi là đồ thị cĩ định hướng.

- Nếu khơng phân biệt phần tử XeY với phần tử YeX trong tập hợp I thì gọi là đồ thị vơ hướng.

- Đồ thị cĩ trọng số là đồ thị mà mỗi cạnh của nĩ được gán cho một giá trị bằng số.

- Đồ thị liên thơng là đồ thị mà mọi cặp đỉnh đều cĩ đường nối.

Trên đây là một số định nghĩa được sử dụng, các tính chất của đồ thị và các giải thuật cĩ liên quan xin tham khảo trong tài liệu [2].

Hướng giải quyết thứ nhất sẽ gán nhãn riêng biệt cho từng nút trung gian đồng thời các đường nối liên quan cũng được lưu trữ. Lấy ví dụ như hình 4.12, mỗi đích trung gian chung khi được chuyển sang đồ thị sẽ tương ứng với một nút, và đường nối giữa hai đích trung gian được mơ tả là đường nối giữa hai nút. Bằng cách lập một danh sách các đích phụ kề nhau ta sẽ dễ dàng tìm được đường di chuyển ngắn nhất.

Theo cách giải quyết thứ hai thì ta sẽ sử dụng giải thuật Dijkstra để tìm đường đi ngắn nhất trên đồ thị cĩ được với trọng số ở đây chính là khoảng cách giữa hai nút trên đồ thị (tính theo pixel). Sau đây là nội dung giải thuật Dijkstra:

4.2.3.1 Giải thuật tìm đường đi ngắn nhất trên đồ thị cĩ trọng số Hình 4.13 : Danh sách kề các đích phụ của khơng gian trống

Nguyên lý thuật tốn:

1. Xuất phát từ đỉnh 1. Gọi M = { 2,..,n}

2. Ở mỗi bước lặp, chọn đỉnh đánh dấu là đỉnh cĩ độ dài ngắn nhất. • k = Argminx∈M d[x].

• cập nhật lại d[i], Pr[i] với i∈ M\{k} theo cơng thức: - d[i] = d[k] + l[k,i] nếu d[i] > d[k] + l[k,i]. - Pr[i] k.

•Thay M = M\{k}.

3. Nếu M = ∅. Dừng nếu khơng quay lại bước 2. Hiện thực giải thuật DIJKSTRA:

•Giả sử đã nhập ma trận chiều dài theo dạng ma trận kề. •Gán ban đầu cho M, d, Pr, Mark

For (int I =1; i <= i++ ) { d[i] = l(1,i); Pr[i] = 1; Mark[1] = 0; } Mark[1] = 1; n0=n-1; • While ( n0 > 0) { k= Argmin { d[i]; i∈M}; // cập nhật lại d, M, Pr, mark Mark[k] = 1;

// xố đỉnh k M = M\{k}; }

Kết quả của quá trình trên là một đường nối ngắn nhất từ vị trí của Robot đến điểm đích mà ta quy định trên mơ hình. Tuy nhiên kết quả này chỉ mang tính lý thuyết, việc hiện thực kết quả này lên mơ hình (thực tế) thường cĩ sai số (nguyên nhân cĩ thể là chủ quan như do độ chính xác khi chế tạo mơ hình hay khách quan như do các tác động của mơi trường). Tiếp theo đây sẽ là các bước thiết kế mơ hình gồm một Robot được điều khiển từ xa thơng qua máy tính và một khung đỡ Camera.

Chương này sẽ trình bày các bước thiết kế mơ hình minh họa cho bài tốn đặt ra, cụ thể là hai mơ hình: (adsbygoogle = window.adsbygoogle || []).push({});

Robot tự hành điều khiển từ xa thơng qua cổng COM của máy tính.

Giá đỡ Camera giúp Camera cĩ thể trượt dọc khung nhằm mở rộng

thị trường.

Cụ thể chương này sẽ đưa ra:

Các thơng số của bộ truyền được sử dụng.

Kích thước và vật liệu chế tạo Robot.

Quy ước frame truyền trong quá trình điều khiển Robot.

Thơng số của động cơ Step sử dụng và các bước thiết kế driver điều

khiển.

Sơ đồ mạch phần điều khiển vơ tuyến.

(tài liệu tham khảo về họ vi xử lý 8051 và lập trình ghép nối máy tính xin xem ở phần phụ lục và tài liệu [3], [7], [11]).

Một phần của tài liệu Ứng dụng xử lý ảnh trong điều khiển (Trang 61 - 69)