Frame hình hiển thị lên VGA

Một phần của tài liệu NHẬN DIỆN BIỂN số XE BẰNG KIT DE2 DUNG NIOS II (Trang 59 - 97)

Hình 3-4 Cách định địa chỉ cho pixel hiển thị

Tổn dung lượng bộ nhớ để lưu 1 frame ảnh:

640 × 480 × 30 = 9 216 000 𝑏𝑖𝑡 = 1.1 𝑀𝐵

Để quá trình truy xuất ảnh được nhanh thì cần dùng bộ nhớ SRAM để làm buffer lưu ảnh. Nhưng vấn đề là dung lượng của SRAM chỉ có 512 KB. Bộ nhớ onchip tạo ra nhờ thiết kế FPGA thì dung lượng rất nhỏ (do ràng buộc về số phần tử logic khi thiết kế FPGA). Bộ nhớ SDRAM cần được dùng làm bộ nhớ dữ liệu và bộ nhớ chương trình, vì dữ liệu xử lý cũng có dung lượng rất lớn.

Do đó cần phải thu nhỏ độ phân giải của frame ảnh và chế độ hiển thị pixel lại. Hai khối RGB Resampler và Scaler nhằm đạt yêu cầu về dung lượng.

 Khối RGB Resampler: chuyển pixel định dạng RGB 16 bit thành pixel RGB 30 bit.

 Khối Scaler chuyển ảnh độ phân giải từ 320x240 sang ảnh 640x480

Bộ nhớ lưu ảnh Flash:

29 20 19 10 9 0

50 Flash là bộ nhớ lưu ảnh được down từ laptop xuống. Altera sử dụng gói file định dạng ZIP không nén để chứa 1 hay nhiều ảnh khác nhau. Độ lớn của bộ nhớ Flash là 4 MB. Để sử dụng bộ nhớ Flash cần dùng khối “flash memory interface” để giao tiếp với bộ nhớ Flash off chip.

Bộ nhớ chương trình và dữ liệu:

Sử dụng SDRAM để chứa dữ liệu đang xử lý vì dữ liệu của các mảng ảnh rất lớn. Các bộ nhớ khác không đủ dung lượng để chứa.

Jtag Uart:

Dùng để in hàm “printf” ra cửa sổ chương trình – dùng để kiểm sốt trong quá trình thiết kế phần mềm.

Hệ thống clock:

Clock hệ thống sử dụng nguồn xung clock trên board là clock 50 MHz. Bộ “Clock Signal” có chức năng tạo thêm clock để sử dụng cho khối “VGA Controller” và khối “SDRAM Controller” từ clock vào hệ thống 50MHz [9]

VGA clock: có tần số 25 MHz.

SDRAM Controller clock: tần số 50MHz nhưng trễ pha 3ns so với clock hệ thống.

3.3. Chi tiết thiết kế: CPU: CPU:

Chọn CPU Nios II/s

Hình 3-5 Thơng số chọn CPU

51

Clock Signal

Tạo xung clock cho SDRAM và VGA Controller từ clock hệ thống 50 MHz

Hình 3-6 Thơng số cấu hình cho Clock Signals

Character buffer for VGA display

Đây là khối nhận đầu vào là mã ASCII rồi chuyển sang dạng hiển thị hình ảnh, sử dụng phương thức DMA để hiển thị lên màn hình VGA.

52

Hình 3-7 Thơng số cấu hình cho character buffer for VGA display

Pixel Buffer

Sử dụng bộ nhớ Sram để làm Pixel Buffer nhằm thực hiện kỹ thuật DMA.

Hình 3-8 Thơng số cấu hình cho SRAM Controller

Pixel Buffer DMA Controller

53 Default Buffer Start Address: địa chỉ bắt đầu của buffer ảnh. Ở đây là địa chỉ của của SRAM.

Hình 3-9 Thơng số cấu hình Pixel Buffer DMA Controller

RGB Resampler

Khối chuyển đổi định dạng 16 bit RGB sang định dạng 30 bit RGB

Hình 3-10 Thơng số cấu hình RGB Resampler

Scaler

54

Hình 3-11 Thơng số cấu hình Scaler

Alpha Blender

Khối kết hợp hai dòng ảnh: character và pixel thành một dòng duy nhất. Dòng pixel được gọi là “background” còn dòng character là “foreground”.

Hình 3-12 Thơng số cấu hình Alpha Blender

55 Giúp chuyển đổi dòng video giữa hai vùng có tần số clock khác nhau. Ở ngõ vào chuỗi dữ liệu vào với tần số clock vào, sau đó đi qua bộ đệm FIFO và ra với tần số clock khác.

Hình 3-13 Thơng số cấu hình Dual Clock FIFO

VGA Controller

Là khối giao tiếp với bộ “VGA DAC” (off-chip).

56

Jtag Uart

Truyền dữ liệu giữa board và máy tính. Dùng cho q trình debug trong quá trình lập trình phần mềm

Hình 3-15 Thơng số cấu hình JTAG UART

SDRAM Controller

Cấu hình cho SDRAM Controller như bên dưới để giao tiếp với bộ nhớ SDRAM trên board.

57

Hình 3-16 Thơng số cấu hình SDRAM Controller

Giao tiếp bộ nhớ Flash:

Để maped bộ nhớ Flash trên board DE2 với vùng địa chỉ bộ nhớ dữ liệu ta cần sử dụng hai khối trong thư viện: “Tristate Bridge” và “Flash Memory Interface (CFI)”

Cấu hình CFI như hình vẽ để giao tiếp với bộ nhớ Flash 4MB. Các thông số Timing chọn như hình vẽ.

58

Hình 3-17 Cấu hình khối Tristate Bridge

59

Hình 3-19 Thơng số timing của CFI

Parallel Port

Trong đề tài này em sử dụng 2 port song song để kết nối với: Buttons và Slider Switches. Với port Buttons cần tick vào các lựa chọn tạo ngắt như hình. [10] [11]

60

Hình 3-21 Thơng số cấu hình cho Parallel Port kết nối với Buttons.

16x2 Character Display

61

62

3.4. Kết quả thiết kế hệ thống:

Hình 3-23 Kết quả thiết kế SOPC của hệ thống

Sơ đồ bộ nhớ của các thành phần hệ thống:

63

4. THIẾT KẾ VÀ THỰC HIỆN PHẦN MỀM

4.1. Yêu cầu đặt ra cho phần mềm

 Đọc file ảnh bitmap từ bộ nhớ Flash  Cắt được vùng chứa biển số

 Nhận dạng ký tự trên biển số

 Xây dựng giao diện giao tiếp giữa người dùng và chương trình. Để đơn giản hóa bài toán ta đặt ra các tiêu chuẩn cho ảnh đầu vào:

 Kích cỡ biển số phải tương đối lớn trong ảnh

 Biển số có thể nghiêng nhưng không nghiêng quá 45 độ

 Giả định là biển số cịn trơng rõ số.

4.2. Phân tích

Để nhận diện được biển số xe có rất nhiều giải thuật khác nhau. Nhưng hầu hết các cách đều đi qua các cơng đoạn chính sau đây:

Ngồi ra cịn cần đảm bảo việc giao tiếp giữa người dùng và chương trình thơng qua các thiết bị ngoại vi: màn hình VGA, LCD, PushButtons, Slider Switches.

Vì vậy chương trình cần thực hiện thêm các chức năng:  Hiển thị ảnh lên màn hình VGA

 Hiển thị chữ lên màn hình VGA

 Xây dựng hệ thống nút bấm điều khiển được: PushButtons, Slider Switches

 Hiển thị kết quả ra màn hình LCD

Load ảnh

Tải ảnh vào bộ nhớ Flash:

Đầu tiên gói các ảnh bitmap cần sử dụng vào một gói file .zip khơng nén.

Load ảnh

Đọc file ảnh từ bộ

nhớ Flash trên Board

Tiền xử lý Chuyển đổi định dạng ảnh RGB sang ảnh đa mức xám Tách biển số Xác định vùng chứa biển số Cắt vùng chứa biển số

Xoay biển số lại cho

thẳng thẳng thẳng Nhận dạng ký tự Phân đoạn ký tự Áp dụng bài toán nhận dạng chữ quang học vào việc nhận dạng ký tự.

64 Sau đó nhấp chuột phải vào project trong cửa sổ sát tay trái. Chọn mục “Flash

Programer” như hình.

65 Chọn file .sopcinfo trong thư mục lưu project quartus như hình

66 Sau đó bấm “Start”. Cửa sổ giao diện hiện ra như bên dưới là đúng.

67 Sau đó vào BSP Editor thực hiện theo các bước sau để tạo đường dẫn vào bộ nhớ Flash.

68 Sau đó bấm vào nút “Generate”

Như vậy các ảnh được gói trong file “xe.zip” đều được down vào bộ nhớ Flash. Để truy xuất đến một ảnh trong Flash ta cần sử dụng đường dẫn:

my_fs/xe/xe2_24bit.bmp\0 “xe2_24bit.bmp” là tên của file ảnh cần load.

Đọc ảnh bitmap từ bộ nhớ Flash:

Dựa vào cấu trúc của file bitmap đã trình bày phần trước mà ta dễ dàng đọc được file ảnh.

Sử dụng các hàm trong thư viện chuẩn của C : “stdio.h” để đọc ảnh bitmap 24 bit:

Phải chuyển sang định dạng RGB 16 bit vì hệ thống SOPC được thiết kế để hiển thị ảnh 16 bit từ buffer ảnh lên màn hình. Định dạng RGB 16 bit là định dạng tiện lợi nhất cho việc hiển thị.

Định dạng 24 bit thì mỗi màu R, G, B mỗi màu được biểu diễn bởi 8 bit

Định dạng 16 bit thì R và B mỗi màu chiếm 5 bit, riêng G được biểu diễn bởi 6 bit Cách chuyển đổi từ định dạng pixel 24 bit sang 16 bit như sau:

(Unsigned short)Red=Red_24>>3; Mở file Sử dụng hàm fopen để mở file ảnh đọc các thông số ảnh (Sử dụng hàm fseek) để: đọc chiều rộng, chiều dài ảnh

số bit biểu diễn 1

pixel

địa chỉ offset đến data

Đọc data ảnh

Dựa vào địa chỉ offset đã tìm được ở bước trước để nhảy đến địa chỉ lưu data (dùng hàm

fseek)

Đọc giá trị data ảnh 24 bit theo từng byte (hàm fgetc).

Chuyển đổi data ảnh

Chuyển định dạng pixel RGB 24 bit thành định

69 (Unsigned short)Green=Green_24>>3;

(Unsigned short)Blue=Blue_24>>3;

RGB_16= (Red<<11) | (( (Green<<1) | 0x01)<<5) | (blue)

Tiền xử lý

Chuyển đổi ảnh RGB 16 bit sang ảnh xám 8 bit.

Sử dụng công thức chuyển ảnh màu sang ảnh xám đã đề cập ở phần lý thuyết để chuyển

𝑌′= 0.299𝑅′+ 0.587𝐺′+ 0.114𝐵′

Tuy nhiên vì Y’ là giá trị 8 bit nên các giá trị R’, G’, B’ ở trên đều phải ở định dạng biểu diễn mỗi màu 8 bit.

Hơn nữa với vòng lặp rất lớn như vịng lặp xử lý ảnh. Việc tính tốn số thập phân sẽ mất rất nhiều thời gian hơn số nguyên. Nên ta cần chuyển biểu thức trên thành dạng số nguyên như sau:

𝑌′ = (8487 ∗ 𝑅′+ 19234 ∗ 𝐺′+ 3735 ∗ 𝐵′) ≫ 15 Với 8487 = 0.299 ∗ 215 19234 = 0.587 ∗ 215 3735 = 0.114 ∗ 215 Tách biển số:

Đây được xem là phần quan trọng nhất trong các bước, là phần quyết định kết quả cho cả bài toán. Phần này là phần tạo nên sự khác biệt và cần được nghiên cứu và cải tiến nhất trong toàn bộ giải thuật.

Sau đây là một số cách làm thường được sử dụng

 Sử dụng phương pháp Hough để phát hiện cạnh biển số rồi cắt ra vùng biển số  Phân đoạn ảnh dựa vào mức xám rồi lọc ra vùng có nhiều đặc điểm là biển số

nhất

 Tìm vùng chữ nhật có mật độ cạnh lớn nhất trong ảnh  Phân đoạn vùng chứa biển số dựa vào màu sắc từ ảnh RGB  Sử dụng phương pháp training: dùng đặc trưng Haar

Mỗi phương pháp trong các phương pháp trên đều có ưu điểm và nhược điểm riêng. Mỗi loại sẽ nhạy với một tác động nào đó trong ảnh. Tùy vào độ phức tạp

70 của giải thuật, các phương pháp lọc nhiễu của người viết mà mỗi phương pháp sẽ cải thiện được phần nào các khuyết điểm.

 Phương pháp Hough dựa trên việc phát hiện cạnh đoạn thẳng trong ảnh do đó sẽ sai nếu q trình phát hiện cạnh khơng tốt. Nếu trong ảnh có nhiều đoạn thẳng song song hay vng góc nhau thì phương pháp này khơng thể áp dụng được. Nó phụ thuộc nhiều vào kích thước biển số trong ảnh  Phân đoạn ảnh dựa vào mức xám: phương pháp này nhạy với độ chói, kích

thước biển số xe, màu sắc trong ảnh, nếu ảnh xe màu trắng thì phương pháp này rất dễ sai. Độ thành cơng phụ thuộc rất nhiều vào q trình lấy ngưỡng của ảnh.

 Phương pháp đơn thuần dựa vào mật độ cạnh. Đây là phương pháp không ổn định rất dễ bị nhiễu kết quả chính xác khơng cao.

 Phương pháp dựa vào màu sắc của ảnh RGB lại rất nhạy với màu sắc, kích thước biển số, nó rất gần với phương pháp phân đoạn ảnh dựa vào mức xám.

 Rất tiếc vì biết quá trễ nên em chưa nghiên cứu phương pháp phát hiện vùng biển số dựa vào training.

Trong đề tài này em chọn phương pháp biến đổi Hough để phát hiện biển số.

Kết thúc quá trình này ta sẽ cắt được ảnh biến số đã được xử lý xoay ảnh cho thẳng.

Một điểm lưu ý ở phần này là đối với các phép tốn trong vịng lặp cần được thực hiện dạng số nguyên. Các giá trị sin, cos cần được tính trước bằng Matlab và lưu lại dưới dạng mảng trị khởi tạo.

Lấy cạnh

Sử dụng mặt nạ Sobel để phát hiện cạnh

Biến đổi Hough

Biến đổi Hough ảnh nhị phân sau khi lấy cạnh.  Độ chia nhỏ nhất của ma trận Hough là:  2 độ theo phương góc và

 2 đv theo phương khoảng cách

 Mỗi điểm trong ma trận Hough được biểu diễn bởi 1 struct với 3 trường giá trị: khoảng cách (r), góc (theta), giá trị tích lũy (acc).

71 Sử dụng nhiều điều kiện khác nhau để lọc các điểm trên ma trận Hough để tìm ra điểm cần tìm:

 Giá trị tích lũy phải đủ lớn

 Giá trị tích lũy là cực trị trong vùng lân cận giới hạn bởi bán kích 2.(ơ vng 5x5)

 Giá trị góc >70 hoặc abs(góc)>15 hoặc (góc)<-80

Tìm ứng viên cạnh

Chia các điểm trên ma trân Hough tìm được ở trên thành 2 nhóm sao cho :

 Hai điểm đầu tiên trong hai nhóm có hiệu góc trong khoảng từ 86 đên 90 độ  Giá trị góc của điểm đầu tiên trong nhóm 1 nhỏ hơn giá trị góc của điểm đầu

tiên trong nhóm 2

 Các điểm nằm trong cùng một nhóm có giá trị góc lệch nhau không quá 6 độ

Xác định 4 đoạn thẳng cạnh

Trong hai nhóm đoạn thẳng tìm được ở trên trong mỗi nhóm tìm điểm có giá trị tích lũy lớn nhất làm điểm chuẩn mỗi nhóm. Sau đó trong mỗi nhóm lại tìm một điểm thứ hai thỏa tính chất:

 Là điểm lớn nhất trong các điểm cịn lại có giá trị khoảng cách chênh lệch với giá trị khoảng cách của điểm chuẩn một giá trị nào đó (Giá trị này phụ thuộc vào chiều rộng và chiều cao của biển số đang xét)

Tìm 4 góc của của biển số và góc nghiêng của biển số

 Dựa vào 4 điểm đã tìm được trong 2 nhóm ở trên ta có được 4 phương trình đoạn thẳng trong ma trận ảnh. (dễ dàng so sánh các giá trị góc và khoảng cách để phân biện được đoạn nào là đoạn ngang ở trên , đoạn ngang ở dưới, đoạn dọc trái, đoạn dọc phải)

 Giải hệ 4 hệ phương trình bậc nhất hai ẩn để tìm ra 4 giao điểm là 4 góc của biển số. Từ 4 giao điểm này mà ta quyết định tọa độ của hình chữ nhật ngoại tiếp biển số.

 Lưu giá trị góc nghiêng của đoạn thẳng ngang trên cùng lại để xét xem biển số có cần xoay lại cho thẳng hay khơng

72 Kết thúc bước trên ta đã có ảnh vùng biển số (có thể bị méo) và góc nghiêng của cạnh ngang biển số. Giả sử góc nghiêng đó là b.

Ta tìm góc nghiêng ảnh cần xoay thẳng lại bằng biểu thức:

𝐴𝑙𝑝ℎ𝑎 = −(𝑏 − 90𝑜)

Việc xoay ảnh được thực hiện bằng phương pháp Forward mapping, tâm xoay là điểm trung tâm ảnh.

Trước khi xoay ta cần xác định trước vị trí mới của 4 đỉnh biển số. Từ đó suy ra được kích thước ảnh sau khi xoay để sau khi hình biển số nằm vừa khít mảng ảnh.

Sau khi xoay ta gán giá trị các lỗ trống bằng trung bình của 4 điểm lân cận nó. Do biển số chỉ có màu trắng và đen nên chất lượng của ảnh không bị ảnh hưởng đáng kể.

Nhận dạng ký tự

Phần này ta áp dụng bài toán nhận diện chữ quang học đã trình bày ở phần lý thuyết vào để nhận dạng chữ số.

Chuyển ảnh xám thành ảnh trắng đen

Từ biển số là ảnh xám ta chọn một ngưỡng nào đó, ví dụ 130 để chuyển đổi ảnh thành ảnh đen trắng. Để tổng quát hơn ta có thể sử dụng các phương pháp lấy ngưỡng để chuyển đổi.

Phân đoạn ký tự

73

Hình 4-2 Quá trình phân đoạn ký tự

Resize từng ký tự:

Sử dụng phương pháp resize điểm gần nhất để đưa ảnh các ký tự về kích thước [10x20]. Mặc dù phương pháp này cho chất lượng resize ảnh không cao, nét ảnh không mịn, nhưng do ảnh resize là ảnh đen trắng nên chất lượng ở đây khơng ảnh hưởng gì đến việc nhận

Một phần của tài liệu NHẬN DIỆN BIỂN số XE BẰNG KIT DE2 DUNG NIOS II (Trang 59 - 97)

Tải bản đầy đủ (PDF)

(97 trang)