Thuật toán nhận diện hình dạng của blob là tròn, tam giác hay chữ nhật

Một phần của tài liệu NHẬN DIỆN BIỂN BÁO GIAO THÔNG DÙNG KỸ THUẬT XỬ LÝ ẢNH TRÊN NỀN VI ĐIỀU KHIỂN (Trang 57)

Hình 3.49 Biển báo cấm rẽ trái, biển báo giao nhau với đường ưu tiên, biển báo cấm đi ngược chiều

Ý tưởng: thuật toán sẽ tính diện tích và chu vi của blob phát hiện được, nhờ các thông số này, ta có thể ước lượng gần đúng hình dạng của blob. Bước tiếp theo, tính tỉ lệ diện tích của blob so với diện tích của hình chữ nhật bao quanh blob đó, tính tỉ số chu vi của blob so với chu vi của hình chữ nhật bao quanh blob đó.

Đầu vào là ảnh trắng đen của blob, đầu ra là ảnh chỉ chứa đường biên bao ngoài cùng của blob đó và trả về các giá trị chu vi và diện tích của blob đó.

Các bước thực hiện: để tìm diện tích và chu vi của đối tượng, ta áp dụng

Bước 1: Tìm đường biên ngoài cùng theo chiều ngang.

Tìm đường bao quanh ngoài cùng của blob bằng cách sau: Xét lần lượt từng hàng, trên mỗi hàng, ta kiểm tra xem pixel nào ở mức 1 xuất hiện đầu tiên, ghi nhận lại vị trí pixel này. Một khi đã phát hiện pixel đầu tiên, ta tìm pixel 1 nào ở vị trí cuối cùng trong hàng đó bằng cách xét theo chiều ngược lại, ghi nhận lại pixel này. Quá trình được lặp lại cho đến hàng cuối cùng. Ta gọi quá trình này là xét theo chiều ngang.

40

Start

Số thứ tự hàng n = 1 Số thứ tự cột m = 1

Blob(n,m) = 1?

Đây là pixel trắng đầu tiên trong hàng matrixPerHorizon(n,m) = 1

PositionXFirst(n) = m Y

Tìm pixel trắng đầu tiên trong hàng

N m = width? N m = m + 1

n = n + 1 m = 1 Y

Tìm pixel trắng cuối cùng trong hàng

Số thứ tự cột m = width

Blob(n,m) = 1? N m = m - 1

Đây là pixel trắng cuối cùng trong hàng matrixPerHorizon(n,m) = 1 PositionXEnd(n) = m Y End n = n + 1 m = 1

Hình 3.50 Lưu đồ thuật toán tìm đường biên ngoài cùng theo chiều ngang

Bước 2: Tìm đường biên ngoài cùng theo chiều dọc. (Thực hiện tương tự bước 1) Ta thực hiện quá trình như trên nhưng theo chiều dọc. Có nghĩa là, xét lần lượt từng cột, trên mỗi cột, ta kiểm tra xem pixel nào ở mức 1 xuất hiện đầu tiên, ghi nhận

41

lại vị trí pixel này. Một khi đã phát hiện pixel đầu tiên, ta tìm pixel 1 nào ở vị trí cuối cùng trong hàng đó bằng cách xét theo chiều ngược lại, ghi nhận lại pixel này. Quá trình được lặp lại cho đến hàng cuối cùng.

Start

Số thứ tự hàng n = 1 Số thứ tự cột m = 1

Blob(n,m) = 1?

Đây là pixel trắng đầu tiên trong cột matrixPerVertical(n,m) = 1

PositionYFirst(m) = n Y

Tìm pixel trắng đầu tiên trong cột

N n = height? N n = n + 1

m = m + 1 n = 1 Y (adsbygoogle = window.adsbygoogle || []).push({});

Tìm pixel trắng cuối cùng trong cột

Số thứ tự hàng n = height

Blob(n,m) = 1? N n = n - 1

Đây là pixel trắng cuối cùng trong hàng matrixPerVertical(n,m) = 1 PositionYEnd(m) = n Y End m = m + 1 n = 1

42

Bước 3: Tìm đường biên chính thức của blob và tính chu vi là diện tích.

Đường biên chính thức của blob được tính bằng cách OR hai biến matrixPerHorizon và matrixPerVertical lại với nhau tương ứng. Các pixel có giá trị 1 chính là đường biên ngoài cũng bao quanh blob.

Chu vi là số pixel nằm trên đường biên chính thức

Diện tích được tính bằng cách đếm tất cả các pixel nằm bên trên và bên trong đường biên đó.

Ví dụ 3.9: Tìm đường biên của blob trong hình 4.51

Hình 3.52 Biển báo cấm đi ngược chiều

Ảnh sau khi qua thuật toán chuyển đổi không gian màu và so sánh ngưỡng Cr

43

Ảnh khi đã qua bước 1 (Xét theo chiều ngang)

Hình 3.54 Đường biên tìm theo chiều ngang

Ảnh khi đã qua bước 2 (Xét theo chiều dọc)

Hình 3.55 Đường biên tìm theo chiều dọc

Ảnh đường biên chính thức: ảnh OR của hai ảnh trên

44 Theo lý thuyết, ta có:  Đối với hình tròn (gần tròn) 𝑆𝑏𝑙𝑜𝑏 𝑆𝑏𝑜𝑥 = 1 4 × 𝜋𝑎𝑏 𝑎𝑏 = 𝜋 4⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡(3.31) 𝑃𝑏𝑙𝑜𝑏 𝑃𝑏𝑜𝑥 = 2𝜋𝑅 8𝑅 = 𝜋 4⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡(3.32)

 Đối với hình tam giác

𝑆𝑏𝑙𝑜𝑏 𝑆𝑏𝑜𝑥 = 1 2 × 𝑎𝑏 𝑎𝑏 = 1 2⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡(3.33) 𝑃𝑏𝑙𝑜𝑏 𝑃𝑏𝑜𝑥 = 3𝑎 𝑎(2 + √3)= 6 − 3√3⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡(3.34)

 Đối với hình chữ nhật thì các tỉ số này xấp xỉ 1

Thực tế cho thấy, diện tích tam giác sẽ lớn hơn khoảng10% so với diện tích theo như hình vẽ trên bởi vì phần bo tròn trên biển báo thực tế, cụ thể xem hình bên.

Hình 3.57 Biển báo giao nhau với đường ưu tiên

Theo như các kết quả thử nghiệm, sai số của các tỉ lệ về diện tích chấp nhận ở mức 10%, về tỉ số chu vi là 12%.

Thuật toán này là bước tiền nhận dạng ảnh. Nó đóng vai trò như một bộ lọc. Chỉ những blob mà thuật toán cho là có dạng tròn hoặc tam giác mới được xét tiếp, còn không sẽ bị loại bỏ.

Ưu điểm:

45

Giúp cho việc nhận dạng tốt hơn, tránh sai xót, và nhanh chóng. Nhược điểm:

Nhược điểm: (adsbygoogle = window.adsbygoogle || []).push({});

Chỉ áp dụng được với các đối tượng có dạng lồi, nễu lõm xảy ra trường hợp như sau, đường biên tính chưa chính xác, dẫn đến sai xót về chu vi và diện tích.

Hình 3.58 Đối tượng có dạng lõm

Hình 3.59 Đường biên của đối tượng lõm

Việc tính toán diện tích và chu vi chỉ mang tính chất tương đối, độ chính xác chưa cao. Rõ ràng sai số 10%, 12% thì thuật toán này chưa chặt chẽ.

46

Một phần của tài liệu NHẬN DIỆN BIỂN BÁO GIAO THÔNG DÙNG KỸ THUẬT XỬ LÝ ẢNH TRÊN NỀN VI ĐIỀU KHIỂN (Trang 57)