Nhiều thuật toán khác nhau đã được áp dụng trong điều hướng tự động, tuy nhiên hệ thống điều hướng tự động áp dụng thuật toán Hough Transform [1] được sử dụng rộng rãi nhờ tính ồn định k
Sub-Module YUV422 TO 444
Hinh 3.19: Sub-Module YUV422 TO 444
Mỗi một điểm anh sẽ có giá tri ứng với 16 bit dữ liệu đang ở định dạng YCbCr 4:2:2 trong đó hai thành phần sắc độ màu sắc Cb, Cr sẽ bằng một nửa thành phần độ sáng Y Điều này làm loại bỏ bớt giá trị màu sắc để giảm dung lượng dữ liệu nhưng không phù hợp với hệ thống Do đó sub-module YUV422 TO 444 trong Hình 3.19 được thiết kế dé biến đổi 16 bit dữ liệu từ định dang YCbCr 4:2:2 thành 24 bit dit liệu định dạng YCbCr 4:4:4 với thành phần độ sáng Y có giá trị lần lượt bang với giá trị
34 của hai thành phần sắc độ màu sắc Cb, Cr Định dang dữ liệu YCbCr 4:4:4 được mô tả như Hình 3.20.
Pixeli ¡ Pixel2 ¡ ¡ Pixelô36 : Pixel637 ¡ Pixel638 ¡ Pixel639 ¡ Pixel 640
YỊC|C|Y|C|Y Y[ỊC|C|Y|C|Y|LY|LC|IC|LY|LC|Y|Y|C|Y
BIR BỊR BỊR BỊR BI] R BIR BIR
Hình 3.20: Dữ liệu chuẩn YCbCr 4:4:4 của 640 điểm ảnh
Sub-Module YCbCr2RGB ¿555cc5cccccccxsrersex 35 3.4.3 Sub-Module RGB2GRAY 3.4.4 Sub-Module GRID GENERATOR 555555 37 3.4.5 Sub-Module GAUSSIAN FILTER 3.4.6 Sub-Module SOBEL OPERATOR . >‹
Hinh 3.21: Sub-Module YCbCr2RGB
Giá tri của thành phần độ sáng Y (luma) và hai thành phần sắc độ màu sắc Cb,
Cr sau khi tách được từ sub-module YUV422 TO 444 đều ở dang 8 bit, tuy nhiên dé DAC Chip ADV7123 có thé chuyền đổi tín hiệu số sang tín hiệu tương tự thì cần phải thay đổi 8 bit dit liệu của thành phần độ sáng Y và hai thành phần sắc độ màu sắc Cb,
Cr sang 10 bit dữ liệu RGB Sub-Module YCbCr2RGB có nhiệm vụ thực hiện công việc này được biểu diễn ở Hình 3.21.
Phương trình dùng dé biến đổi từ dang 8 bit di liệu sang 10 bit đữ liệu RGB:
Téi giản các phương trình trên sẽ có được các phương trình (3.4), (3.5), (3.6).
Những phương trình nếu hiện thực lên phan cứng sẽ phải sử dụng các phép toán dấu chấm động, dẫn đến hệ thống trở nên phức tạp hơn nên bắt buộc phải tránh sử dụng càng nhiều càng tốt Dé khắc phục van đề này chỉ cần xấp xi các giá trị rồi áp dụng phép nhân và chia thì sẽ có được các giá trị R, G và B gần đúng.
Tới đây các phép toán dau cham động bị loại bỏ, các phép tính nhân được thực thi bởi các khối MAC (Multiplier Accumulator) còn phép chia cho 2? được thực hiện bang cách dịch phải 9 bit nhưng chip DAC cần dang 10 bit RGB nên từng giá trị R,
G và B đang ở dạng 8 bit sẽ được nhân với 4 (hay dịch trái 2 bit) Vì vậy thay vì phải dịch phải 9 bit thì chỉ cần dịch phải 7 bit.
Hinh 3.22: Sub-Module RGB2GRAY
Hình ảnh thông thường được lưu trữ dưới dạng RGB (Red — Green — Blue). Điều này nghĩa là sẽ có ba ma trận xám tương ứng cho từng màu Red, Green và Blue.
Do đó nhiệm vụ của sub- module RGB2GRAY ở Hình 3.22 chính là tìm cách tổng hợp ba ma trận này về thành một ma trận duy nhất Một trong số các phương trình phô biến dé thực hiên việc biến đổi này được trình bày như sau:
Từ chi can thực hiện một số phép dịch phải cho từng giá trị mau sé nhận được giá trị màu xám mong muốn.
Hình 3.23: Sub-Module GRID GENERATOR
Trong suốt quá trình làm min, lọc nhiễu và tim biên của anh sẽ phải dùng các ma trận lọc (Kernel) có kích thước lần lượt là 5x5 (đối với GAUSSIAN FILTER) và 3x3 (đối với SOBEL OPERATOR) Do đó, sub-module GRID GENERATOR ở Hình 3.23 được thiết kế dé lưu trữ các mảng điểm ảnh đọc được từ hình ảnh đầu vảo Mảng điểm ảnh dùng bộ nhớ đệm dòng (Line Buffer) dé lưu trữ các dòng điểm ảnh chiều ngang cho đến khi chúng bị ghi đè bởi điểm ảnh mới Các bộ nhớ đệm được dùng trong sub-module GRID GENERATOR có độ dài 640 phần tử để chứa duy nhất một dòng hình ảnh Sub-module GAUSSIAN FILTER sử dụng ma trận lọc 5x5 nên nó sé được kết nối tới 5x5 GRID GENERATOR Ngoài ra, 3x3 GRID GENERATOR sẽ được kết nối tới sub-module SOBEL OPERATOR vì các tính toán trong sub-module này chỉ yêu câu ma trận lọc có kích thước 3x3.
Hinh 3.24: Sub-Module GAUSSIAN FILTER
Thiết kế bộ loc GAUSSIAN trong Hình 3.24 là một bước quan trọng trong xử lý ảnh vì nó sẽ giúp giảm chỉ tiết không liên quan (nhiễu) và làm mịn ảnh Nguyên tắc chung của phương pháp lọc ảnh này là nhân ma trận ảnh đầu vào (hình ảnh đang được xử lý) với một ma trận lọc Gauss có kích thước 5x5 Việc nhân hai ma trận ảnh và ma trận lọc tương tự với việc cho ma trận lọc này trượt theo hàng trên ảnh và nhân với từng vùng của ma trận ảnh, sau đó cộng các kết quả lại thành kết quả của điểm ảnh trung tâm Với bộ lọc Gauss, mỗi một điểm ảnh phụ thuộc vào 24 điểm ảnh còn lại, hay nói chỉ tiết hơn thì điểm ảnh đó sẽ chịu ảnh hưởng nhiều bởi các điểm ảnh ở gần và ít chịu sự ảnh hưởng của các điểm ảnh ở xa.
Hinh 3.25: Sub-Module SOBEL FILTER
Sub-module SOBEL OPERATOR trong Hình 3.25 có nhiệm vu phat hiện cạnh, giúp giảm bớt những thành phần không liên quan trước khi đưa vào sub-module BRIGHTEST INTENSITY PIXEL Phát hiện cạnh bao gồm một mặt nạ hay ma trận lọc 3x3 và thực hiện phép nhân mặt nạ với ma trận ảnh trên hai chiều (hình ảnh đang
38 xử lý) Đầu tiên mặt nạ sẽ được đặt tại vị trí (0,0) và các điểm ảnh bên dưới mặt nạ được nhân với giá trị tương ứng của mặt nạ Sau đó tất cả sẽ được cộng lại với nhau và điều này sẽ mang lại gia tri điểm ảnh mới cho vị trí (1,1) Hình ảnh sau khi qua SOBEL OPERATOR được tạo ra băng cách liên tục trượt mặt nạ qua phải một và lặp lại công đoạn trên Phương trình tổng quả tìm hình ảnh kết quả được thê hiện trong hai phương trình (3.11) và (3.12)
Trong phương trỡnh (3.11), ứ là mặt na Sobel theo chiều ngang được biểu diễn ở hình 3.26a và ƒ là ma trận ảnh.
Trong phương trình (3.12), v là mat na Sobel theo chiéu doc được biểu diễn ở hình 3.26b và ƒ là ma trận ảnh.
(a) Mặt nạ Sobel theo chiều ngang (b) Mặt na Sobel theo chiều dọc
Hình 3.26: Hai mặt na Sobel
Sub-Module SOBEL OPERATOR sử dụng mặt nạ Sobel theo chiều ngang ở Hình 3.26a dé tìm các cạnh ngang và mặt nạ theo chiều doc ở Hình 3.26b dé tìm các cạnh dọc, sau đó cộng lại với nhau theo mô tả trong phương trình (3.13).
EdgePixel _ Final =|EdgePixel _ Horizontal | + |EdgePixel _ Vertical | (3.13)
Cách thức hoạt động của SOBEL OPERATOR sẽ được minh họa thông qua một ví dụ sau:
Một ma trận ảnh đầu vào có kích thước 480x640 như Hình 3.27 ứng với một hình ảnh có độ phân giải 640x480.
Hình 3.27: Ma trận ảnh đầu vào kích thước 480x640
Hai ma trận mặt nạ Sobel có các giá trị khác nhau được dùng cho thuật toán phát hiện cạnh được biểu diễn ở Hình 3.28a và Hình 3.28b.
(a) Giá trị mặt nạ Sobel ngang (b) Giá trị mặt nạ Sobel dọc
Hình 3.28: Hai mặt na Sobel với các giá trị khác nhau
Sử dụng phương trình (3.11) để thực hiện việc phát hiện cạnh ngang với hai tham số x và y được thay đổi từ 1 đến 640 Kết quả phát hiện cạnh ngang cũng là một ma trận 480x640 được mô tả trong Hình 3.29 với ranh giới của ma trận sẽ bị bỏ qua.
Hinh 3.29: Phat hién diém anh canh ngang
Sử dụng phương trình (3.12) dé thực hiện việc phát hiện cạnh dọc với hai tham số x và y cũng được thay déi từ 1 đến 640 Kết quả phát hiện cạnh dọc cũng là một ma trận 640x480 được mô tả trong Hình 3.30 với ranh giới của ma trận sẽ bi bỏ qua.
Hình 3.30: Phát hiện điểm ảnh cạnh dọc
Sau khi hoàn thành hai ma trận phát hiện cạnh ngang và dọc, hình ảnh phát hiện cạnh cuối cùng có thể thu được bằng cách cộng độ lớn của chúng lại Kết quả phát hiện cạnh cuối cùng là một ma trận 640x480 được mô tả trong Hình 3.31 với ranh giới của ma trận sẽ bị bỏ qua. nỗi bật các cạnh theo hướng dọc Kết quả đầu ra sẽ được tính bằng công thức sau:
Cuối cùng, giá trị độ lớn kể trên sẽ được so sánh với một ngưỡng đầu vào Nếu giá trị này lớn hơn ngưỡng đầu vào thì đó sẽ là cạnh, ngược lại nếu nhỏ hơn thì không phải cạnh mà hệ thong dang cần tìm Sau đó, hệ thống sẽ được kiểm tra thực nghiệm nhiều lần dé tìm ra được một giá trị ngưỡng phù hợp tùy theo điều kiện môi trường khác nhau.
Mặt nạ được trượt trên một vùng của hình ảnh đầu vào, thay đôi giá tri của điểm ảnh đó, sau đó dịch chuyển sang bên phải một điểm ảnh và tiếp tục cho sang bên phải cho đến khi tới cuối hàng Tiếp theo nó sẽ bắt đầu ở hàng kế tiếp Ví dụ trên cho thấy mặt nạ được trượt qua phần trên cùng bên trái của hình ảnh đầu vào, được biểu thị bằng đường viền màu đỏ Các phương trình đề cập tới cũng cho biết cách tinh giá tri diém anh cu thé trong hinh anh dau ra Trung tâm cua mặt nạ được đặt trên điêm ảnh mà nó đang thao tác trong ảnh Điêu quan trọng cân lưu ý là các điêm ảnh
Sub-Module SPLITTEN - 5< 525++c+cseererrerrsrersee 43 3.4.8 Sub-Module BRIGHTEST INTENSITY PIXEL
Hinh 3.32: Sub-Module SPLITTER Sub- Module SPLITTER được mô tả trong Hình 3.32 sẽ thực thi việc chia nhỏ khung hình Đường đi trên mỗi khung hình 640x480 sẽ gồm hai vạch kẻ đường, do đó cần phải chia nhỏ khung hình gốc thành hai khung hình nhỏ hơn có kích thước 320x480 và lúc này hệ thống chỉ cần nhận diện từng đường riêng lẻ trên mỗi khung hình con.
3.4.8 Sub-Module BRIGHTEST INTENSITY PIXEL
Hinh 3.33: Sub-Module BRIGHTEST INTENSITY PIXEL
Sub-Module Brightest Intensity Pixel trong Hình 3.34 có chức năng chính là trích xuất từng điểm ảnh sáng nhất trên từng dòng của mỗi khung hình con 320x480.
Hình 3.34: Luu đồ giải thuật của Brightest Intensity Pixel Lưu đồ thuật toán Brightest Intensity Pixel được thé hiện qua Hình 3.35 Thuật toán sẽ dò diém ảnh sáng nhât trên moi dòng của khung hình Với cách này, có thê
44 tìm thay đường thắng tiềm năng bằng cách coi nó là vật thé sáng nhất trên hình ảnh chụp được từ đường Tuy nhiên do thuật toán này phát hiện một điểm ảnh sáng nhất trên mỗi dòng nên chỉ một đường thắng có thé được tìm ra trên ảnh Mặt khác trên mỗi hình lại có hai đường cân nhận diện nên khung ảnh ban đâu có kích thước
640x480 được chia thành hai khung hình con có kích thước nhỏ hơn 320x480 và áp dụng thuật toán Brightest Intensity Pixel lên từng khung hình con Phương thức hoạt động của thuật toán sẽ được trình bày như sau: © Bước 1: Thuật toán bắt đầu tại cột Col = 0, dòng Row = 0 và đầu tiên sẽ gán giá trị BrightestIntensity = 0 rồi tiếp tục Bước 2.
Bước 2: Kiểm tra giá trị của điểm ảnh Sobel có vị trí tại Col = 0 và Row = 0.
Nếu giá trị của điểm ảnh Sobel tại vị trí này lớn hơn BrightestIntensity thì giá trị BrightestIntensity luc này sẽ được gan bởi giá trị Sobel[0][0] và chuyền sang Bước 3 Ngược lại nêu nhỏ hơn thì giữ nguyên giá trị BrighestIntensity hiện tại đồng thời chuyên sang Bước 3.
Bước 3: Tại đây sẽ chuyên sang cột tiếp theo băng cách Col = Col + 1.
Bước 4: Kiêm tra đã hết 639 cột hay chưa? Nếu chưa quay lại Bước 2 và tiếp tục thực hiện các bước kế tiếp, ngược lại nếu đã tới cột thứ 639 (hay Col 639) thì tiếp tục Bước 5.
Bước 5: Lúc này giá trị của điểm ảnh sáng nhất trên dòng thứ Row
BrightestPixel[Row] sẽ được gan bởi giá trị BrightestIntensity Mặt khác sẽ chuyên sang dòng tiếp theo bằng cách tăng dòng Row thêm 1 và bat đầu lại từ cột Col = 0 Sau đó tiép tục tới Bước 6.
Bước 6: Kiểm tra đã tới dòng 479 (hay hết một khung hình) hay chưa? Nếu chưa thi quay lại Bước 2 và tiếp tục thực thi các bước tiếp theo Ngược lại nêu đã tới dòng 479 thì kết thúc thuật toán.
Hinh 3.35: Sub-Module DOWN SAMPLE
Sub-Module DOWN SAMPLE trong Hình 3.36 sẽ phụ trách giảm kích thước hình ảnh từ 640x480 về 160x120 Do tài nguyên bộ nhớ của FPGA DE1-SoC không đủ khả năng để lưu trữ toàn bộ một hình ảnh có kích thước 640x480 (307200 điểm ảnh) với mỗi điểm ảnh được biéu diễn bởi 10 bit Vì vậy, số lượng bit nhớ cần có dé lưu trữ một khung hình 640x480 là (3072000 bit) Ngoài ra, hệ thống còn sử dụng nhiều sub-module có nhiệm vụ khác nhau cũng tiêu tốn một lượng tài nguyên phần cứng nhất định Đề có thể giảm độ phân giải theo chiều ngang từ 640 về 160, những dòng chia hết cho 4 sẽ được giữ lại, còn lại sẽ bị bỏ qua Mặt khác, để giảm độ phân giải theo chiều dọc từ 480 về 120, những dòng chia hết cho 4 sẽ được giữ lại, lại bị bỏ qua Cách thức trích xuất kích thước theo chiều ngang (640) và chiều dọc (480) được biéu diễn ở Hình 3.37a và Hình 3.37b.
(a) Trích xuất theo chiều ngang
(b) Trich xuất theo chiều dọc
Hình 3.36: Trích xuât hình ảnh kích thước 160x120
Chương 4 QUA TRÌNH XỬ LÝ ANH
4.1 Quá trình Xử lý ảnh dựa trên phần mềm
Cách thức hiện thực thuật toán Hough Transform dựa trên phần mềm và được xử lý bởi bộ xử lý Nios II trên FPGA sẽ được trình bày trong chương này Như đã trình bày, thuật toán Hough Transform rat thích hợp để áp dụng trong nhận diện các vạch kẻ đường được tô màu đen ở Hình 5.1 vì kết qua dau ra của phép biến đổi Hough là phương trình một đường thẳng, được sử dụng để phân tích vị trí và hướng của đường thẳng, các kết quả sẽ không thay đổi nếu cường độ nhiễu vừa phải.
Hình 4.1: Hai đường thắng màu “đen” được nhận diện bởi Hough Transform
4.1.1 Hiện thực thuật toán Hough Transform dựa trên phan mềm
Thuật toán Hough Transform sẽ được áp dụng với từng điểm ảnh sau khi qua xử lý với thuật toán Brightest Intensity Pixel Vì độ phân giải của hình ảnh đã được giảm xuống còn 160x120, giả sử có một đường thang / nằm trong một bức hình có kích thước 160x120 Đường thang / có thé được biểu diễn bởi phương trình r=xcosỉ+ ysinỉ (4.1)
Giá tri của r có thé nằm trong khoảng từ 0 đến d = V160° +120° = 200, hay d chính là đường thang chéo của hình anh Do đó giá trị của r trong không gian biến được giảm xuống dựa vào khụng gian (x, y) của khung hỡnh Mặt khỏc, giỏ trị của ỉ nằm trong khoảng 0< ỉ