Nhiệm vụ luận văn Nội dung 1: Tìm hiểu cách sử dụng phần mềm “Quartus” và “Nios II Software Build Tool for Eclipse” để thiết kế hệ thống SOPC trên vi xử lý NIOS Nội dung 2: Tìm hiểu các
Trang 1BỘ MÔN ĐIỆN TỬ
-o0o -LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
NHẬN DIỆN BIỂN SỐ XE BẰNG KIT DE2
DÙNG NIOS II
GVHD: THS.HỒ TRUNG MỸ SVTH: DƯƠNG THIÊN LÝ MSSV: 40901520
TP HỒ CHÍ MINH, THÁNG 12 NĂM 2013
Trang 2-✩ - -✩ -
Số: /BKĐT Khoa: Điện – Điện tử Bộ Môn: Điện Tử NHIỆM VỤ LUẬN VĂN TỐT NGHIỆP
1 HỌ VÀ TÊN : MSSV: 2 NGÀNH: ĐIỆN TỬ - VIỄN THÔNG LỚP : 3 Đề tài: 4 Nhiệm vụ (Yêu cầu về nội dung và số liệu ban đầu):
5 Ngày giao nhiệm vụ luận văn:
6 Ngày hoàn thành nhiệm vụ:
7 Họ và tên người hướng dẫn: Phần hướng dẫn
Nội dung và yêu cầu LVTN đã được thông qua Bộ Môn Tp.HCM, ngày… tháng… năm 20 CHỦ NHIỆM BỘ MÔN NGƯỜI HƯỚNG DẪN CHÍNH PHẦN DÀNH CHO KHOA, BỘ MÔN: Người duyệt (chấm sơ bộ):
Đơn vị:
Ngày bảo vệ :
Điểm tổng kết:
Nơi lưu trữ luận văn:
Trang 3Em xin gửi lời cám ơn tới gia đình – chỗ dựa vững chắc cho em trong những lúc khó khăn và tạo điều kiện tốt nhất để em học tập
Em đã tham khảo rất nhiều bài viết (được liệt kê trong danh mục tham khảo) trên mạng internet về đề tài này, cũng như các đề tài liên quan trong lĩnh vực xử lý ảnh Em xin chân thành cám ơn tác giả các bài viết đó Bài báo cáo này cũng xem như
là sự tổng hợp kinh nghiệm mà em tích lũy được trong quá trình đọc và thực hành các
giải thuật
Biên Hòa, ngày 24 tháng 12 năm 2013
Sinh viên
Trang 4TÓM TẮT LUẬN VĂN
Luận văn này trình bày về đề tài:
“NHẬN DIỆN BIỂN SỐ XE BẰNG KIT DE2 DÙNG NIOS II”
Việc thực hiện luận văn bao gồm hai phần chính:
Sử dụng các thư viện trong SOPC Builder để xây dựng phần cứng cho chương trình CPU xử lý sử dụng NIOS II
Viết code C để thực hiện chương trình nhận diện biển số xe trên core NIOS II
Trang 5MỤC LỤC
1 GIỚI THIỆU 1
1.1 Tổng quan 1
1.2 Tình hình nghiên cứu trong và ngoài nước 1
1.3 Nhiệm vụ luận văn 1
2 LÝ THUYẾT 2
2.1 Chương 1: SOPC Builder và Nios II Software Build tool for Eclipse 2
SOPC Builder: 2
Các bước thiết kế một hệ thống SOPC builder 7
Nios II Software Build Tools for Eclipse: 12
2.2 Chương 2: Các kỹ thuật xử lý ảnh 18
Mô hình ảnh màu RGB: 18
Ảnh xám (gray image): 19
Định dạng ảnh BMP: 20
Phát hiện cạnh: 22
Biến đổi Hough: 25
Xoay ảnh: 27
Resize ảnh: 30
Phương pháp SVM: 34
Bài toán nhận diện chữ quang học: 38
3 THIẾT KẾ VÀ THỰC HIỆN PHẦN CỨNG 47
3.1 Yêu cầu thiết kế 47
3.2 Sơ đồ khối tổng quát của hệ thống: 48
Giải thích sơ đồ: 48
Trang 63.3 Chi tiết thiết kế: 50
CPU: 50
Clock Signal 51
Character buffer for VGA display 51
Pixel Buffer 52
Pixel Buffer DMA Controller 52
RGB Resampler 53
Scaler 53
Alpha Blender 54
Dual Clock FIFO: 54
VGA Controller 55
Jtag Uart 56
SDRAM Controller 56
Giao tiếp bộ nhớ Flash: 57
Parallel Port 59
16x2 Character Display 60
3.4 Kết quả thiết kế hệ thống: 62
4 THIẾT KẾ VÀ THỰC HIỆN PHẦN MỀM 63
4.1 Yêu cầu đặt ra cho phần mềm 63
4.2 Phân tích 63
Load ảnh 63
Tiền xử lý 69
Tách biển số: 69
Nhận dạng ký tự 72
Giao diện người dùng: 74
Trang 75 KẾT QUẢ THỰC HIỆN 78
5.1 Cách thức đo đạc, thử nghiệm 78
5.2 Giải thích và phân tích về kết quả thu được 78
Kết quả thu được: 78
Khuyết điểm của đề tài 79
6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 80
6.1 Kết luận 80
6.2 Hướng phát triển 80
7 TÀI LIỆU THAM KHẢO 81
8 PHỤ LỤC 83
Trang 8DANH SÁCH HÌNH MINH HỌA
Hình 2-1 Ví dụ về một hệ thống Nios thực hiện trên kit DE2 bằng SOPC builder 3
Hình 2-2 Sơ đồ block diagram của core Nios II 4
Hình 2-3 Tổ chức bộ nhớ và I/O của Nios II 5
Hình 2-4 Các phiên bản của NIOS II 7
Hình 2-5 Các bước thiết kế hệ thống SOPC 7
Hình 2-6 Các bước thiết kế hệ thống SOPC 8
Hình 2-7 Các bước thiết kế hệ thống SOPC 9
Hình 2-8 Các bước thiết kế hệ thống SOPC 9
Hình 2-9 Các bước thiết kế hệ thống SOPC 10
Hình 2-10 Các bước thiết kế hệ thống SOPC 10
Hình 2-11 Các bước thiết kế hệ thống SOPC 11
Hình 2-12 Các bước thiết kế hệ thống SOPC 11
Hình 2-13 Các bước thiết kế hệ thống SOPC 12
Hình 2-14 Các bước thực hiện Nios II Software 13
Hình 2-15 Các bước thực hiện Nios II Software 14
Hình 2-16 Kết quả biên dịch chương trình Nios Demo 15
Hình 2-17 Đổ chương trình đã biên dịch từ Quartus xuống FPGA 16
Hình 2-18 Kết quả chạy chương trình Nios 17
Hình 2-19 Minh họa mô hình màu RGB 18
Hình 2-20 Ảnh xám 20
Hình 2-21 Ảnh trước và sau khi phát hiện cạnh 22
Hình 2-22 b) Sobel c)Prewitt d) Robert e)Laplacian f)LoG 25
Hình 2-23 Ma trận ảnh và ma trận Hough 26
Hình 2-24 Minh họa việc xoay ảnh một góc a 27
Hình 2-25 Xoay điểm N quanh gốc O một góc a sẽ được điểm M 28
Hình 2-26 Kết quả xoay ảnh của phương pháp Forward Mapping 29
Hình 2-27 Các bước đổi tọa độ ảnh [4] 30
Hình 2-28 Ảnh ban đầu 33
Hình 2-29 Ảnh resize theo phương pháp điểm lân cận gần nhất 33
Hình 2-30 Ảnh resize theo phương pháp bilinear 34
Hình 2-31 Ảnh resize theo phương pháp bicubic 34
Hình 2-32 Giả sử có hai nhóm dữ liệu huấn luyện cần phân lớp biết trước xi, yi 36
Hình 2-33 Câu hỏi đặt ra là siêu phẳng nào là tốt nhất? p1,p2 hay p3? 36
Hình 2-34 Xây dựng các siêu phẳng là lề của các lớp, các mẫu nằm trên lề là vector tựa (Support Vector) 37
Hình 2-35 Siêu phẳng phân lớp cách đều hai siêu phẳng lề 37
Hình 2-36 Hình chiếu ngang và chiếu dọc của một đoạn ký tự 43
Hình 2-37 a OVR b.OVO c.DAG 45
Hình 3-1 Sơ đồ khối hệ thống được thiết kế bằng SOPC 48
Hình 3-2: chế độ màu của VGA 49
Trang 9Hình 3-3: Frame hình hiển thị lên VGA 49
Hình 3-4 Cách định địa chỉ cho pixel hiển thị 49
Hình 3-5 Thông số chọn CPU 50
Hình 3-6 Thông số cấu hình cho Clock Signals 51
Hình 3-7 Thông số cấu hình cho character buffer for VGA display 52
Hình 3-8 Thông số cấu hình cho SRAM Controller 52
Hình 3-9 Thông số cấu hình Pixel Buffer DMA Controller 53
Hình 3-10 Thông số cấu hình RGB Resampler 53
Hình 3-11 Thông số cấu hình Scaler 54
Hình 3-12 Thông số cấu hình Alpha Blender 54
Hình 3-13 Thông số cấu hình Dual Clock FIFO 55
Hình 3-14 Thông số cấu hình VGA Controller 55
Hình 3-15 Thông số cấu hình JTAG UART 56
Hình 3-16 Thông số cấu hình SDRAM Controller 57
Hình 3-17 Cấu hình khối Tristate Bridge 58
Hình 3-18 Cấu hình khối Flash Memory Interface 58
Hình 3-19 Thông số timing của CFI 59
Hình 3-20 Thông số cho Parallel Port kết nối với Slider Switches 59
Hình 3-21 Thông số cấu hình cho Parallel Port kết nối với Buttons 60
Hình 3-22 Thông số cấu hình cho khối giao tiếp LCD 61
Hình 3-23 Kết quả thiết kế SOPC của hệ thống 62
Hình 3-24 Địa chỉ các vùng nhớ của hệ thống 62
Hình 4-1 Các bước load ảnh vào bộ nhớ Flash 64
Hình 4-2 Quá trình phân đoạn ký tự 73
Hình 4-3 Cách định địa chỉ mảng một chiều 74
Hình 4-4 Cách định địa chỉ trong character buffer 75
Hình 4-5 Địa chỉ các thanh ghi của LCD 76
Hình 4-6 Cách định địa chỉ vị trí trên màn hình LCD 76
Hình 5-1 Ảnh đầu vào 78
Hình 5-2 Ảnh chụp màn hình VGA sau khi nhận dạng 79
Trang 10DANH SÁCH BẢNG SỐ LIỆU
Bảng 2-1 Định dạng file ảnh BMP 22 Bảng 4-1 mã lệnh của LCD 76
Trang 111 GIỚI THIỆU
1.1 Tổng quan
Trong những năm gần đây kỹ thuật xử lý ảnh đang phát triển mạnh mẽ Ngày càng nhiều ứng dụng liên quan đến xử lý ảnh trong nhiều lĩnh vực của cuộc sống: công nghệ thông tin, hệ thống nhúng Các nghiên cứu về hệ thống SOPC thường được ứng dụng để thử nghiệm
hệ thống trước khi đi vào chế tạo thực tế
Luận văn sử dụng các giải thuật xử lý ảnh cơ bản để nhận diện biển số xe trên hệ thống SOPC của ALTERA
1.2 Tình hình nghiên cứu trong và ngoài nước
Đề tài: “ nhận diện biển số xe” là đề tài không mới Nó đã được nghiên cứu và hoàn thiện, đã được ứng dụng rộng rãi ở trong và ngoài nước Ứng dụng của đề tài:
o Quản lý xe ra vào ở bãi giữ xe
o Nhận diện biển số của xe vi phạm luật giao thông trên đường
o Đưa vào hệ thống chặn xe ở các trạm thu phí
o …
Tuy đề tài không mới nhưng việc nghiên cứu các đề tài này trên hệ thống SOPC chưa nhiều Việc nghiên cứu thiết kế hệ thống và lập trình vi xử lý từ cấp đơn giản nhất là tiền đề
để nghiên cứu các ứng dụng xử lý ảnh khác với tốc độ và sự phức tạp hơn nữa
1.3 Nhiệm vụ luận văn
Nội dung 1: Tìm hiểu cách sử dụng phần mềm “Quartus” và “Nios II Software Build Tool for Eclipse” để thiết kế hệ thống SOPC trên vi xử lý NIOS
Nội dung 2: Tìm hiểu các giải thuật xử lý ảnh căn bản
Nội dung 3: Xây dựng hệ thống SOPC cho đề tài
Nội dung 4: Thiết kế giải thuật cho quá trình nhận diện biển số xe
Nội dung 5: Xây dựng phần mềm hoàn chỉnh cho hệ thống
Trang 12Thông thường khi sử dụng SOPC Builder người ta thường dùng vi xử lý NIOS II được xây dựng sẵn trong thư viện Nhưng SOPC Builder là công cụ để tạo hệ thống sử dụng hoặc không sử dụng vi xử lý Bạn cũng có thể sử dụng vi xử lý khác để lập trình phần mềm
SOPC Builder tự động thiết kế các thành phần(components) phần cứng cho hệ thống theo ý bạn Trong phương pháp thiêt kế truyền thống, bạn phải tự viết mã VHDL hoặc
Verilog để thiết kế các thành phần phần cứng hoặc nối dây cho các thành phần của hệ thống Với SOPC Builder bạn có thể dễ dàng đặc tả các thành phần với GUI của chương trình Và SOPC Builder sẽ tự động tạo ra mã HDL của thành phần đó và nối dây bên trong hệ thống Bạn chỉ cần viết file top-level HDL để nối dây bên ngoài hệ thống: nối các hệ thống với nhau, nối hệ thống với các linh kiện hoặc tín hiệu thực trên kit DE2
Các thành phần có sẵn trong thư viện SOPC:
Vi xử lý Nios II
Các ngoại vi của vi xử lý như: DMA controller và timer
Giao diện truyền nối tiếp như: UART, SPI(serial peripheral interface)
Các I/O thông thường
Thiết bị liên lạc ngoại vi như 10/100/1000 Ethernet MAC
Giao tiếp với thiết bị off-chip
Ngoài các thành phần có sẵn trong thư viện, người dùng có thể tự thiết kế thêm các thành phần mới bằng ngôn ngữ HDL rồi đưa vào hệ thống SOPC
Trang 13Hình 2-1 Ví dụ về một hệ thống Nios thực hiện trên kit DE2 bằng SOPC builder
Các thành phần được thiết kế trên chip Cyclone II được gọi là on-chip
Các thành phần phần như SRAM, SDRAM, Flash được gọi là bộ nhớ off-chip
Giới thiệu về vi xử lý Nios II:
Nios II là một bộ xử lý nhúng được thiết kế đặc biệt cho chip FPGA của Altera Nios
II kết hợp nhiều cải tiến hơn so với kiến trúc Nios ban đầu để phù hợp hơn với sự đa dạng của các ứng dụng nhúng: từ DSP tới hệ thống điều khiển
Nios II có thể được sử dụng cho các cell ASIC tiêu chuẩn thông qua nhà cung cấp IP thứ ba, Synopsys Thông qua giấy phép (license), người thiết kế có thể xuất thiết kế Nios từ nền tảng FPGA sang sản xuất hàng loạt các thiết bị ASIC
Nios II là thế hệ tiếp theo bộ xử lý thế hệ đầu của Altera (cấu hình 16 bit) là Nios Nios II là một core xử lý thông thường dạng RISC với các đặc tính:
Tập lệnh, data path, đường địa chỉ 32 bit
Trang 14 Có 32 nguồn ngắt
Có bộ điều khiển ngắt ngoài
Lệnh đơn nhân và chia thực hiện trên 32 bit và kết quả tạo ra 32 bit
Lệnh dành riêng cho kết quả nhân 64 bit và 128 bit
Lệnh thực hiện các phép tính dấu chấm động với độ chính xác đơn
Lệnh đơn cho phép toán dịch
Truy cập các thiết bị ngoại vi on-chip, bộ nhớ off-chip và các ngoại vi khác nhau
Cung cấp môi trường phần mềm GNU (General Public License) dựa trên
C/C++ và Nios II Software Build Tools (SBT) for Eclipse
Hiệu suất lên tới 250 DMIPS Cấu trúc core xử lý Nios II
Hình 2-2 Sơ đồ block diagram của core Nios II
Tổ chức bộ nhớ và I/O:
Tổ chức bộ nhớ và I/O do người dùng tùy chỉnh nên nó khác nhau ở các thiết kế khác nhau
Trang 15Một core xử lý Nios II dùng một hay nhiều cách dưới đây để truy xuất bộ nhớ và I/O
Instruction master port
Instruction cache- bộ nhớ cache nhanh nằm bên trong core Nios
Data master port
Data cache-bộ nhớ cache nhanh nằm trong core Nios
Tightly-coupled instruction or data memory port
Hình 2-3 Tổ chức bộ nhớ và I/O của Nios II
Instruction và Data Buses:
Nios II có kiến trúc theo kiểu Harvard cung cấp hai đường bus dữ liệu và bus chương trình riêng biệt Cả hai loại bus này đều theo chuẩn AVALON-MM Master port Data Master port kết nối với cả bộ nhớ dữ liệu và các thiết bị ngoại vi, còn Instruction Master port kết nối với các bộ nhớ lệnh
Instruction Master Port:
Trang 16Bus chương trình của hệ thống theo chuẩn 32 bit Avalon –MM master port Master port chương trình thực hiện chức năng duy nhất là tìm nạp lệnh
Kiến trúc Nios cung cấp bộ nhớ Cache chương trình để quá trình tìm nạp lệnh diễn ra nhanh hơn
Data Master Port:
Nios II có Bus dữ liệu theo chuẩn 32 bit Avalon-MM master port Master port dữ liệu thực hiện hai chức năng:
Đọc dữ liệu từ ngoại vi hoặc bộ nhớ khi bộ xử lý thực hiện lệnh load
Ghi dữ liệu ra ngoại vi hoặc bộ nhớ khi bộ xử lý thực hiện lệnh write Kiến trúc Nios II cung cấp bộ nhớ cache dữ liệu để cải thiện tốc độ đọc và ghi dữ liệu
Các loại bộ nhớ của Nios II:
Bộ nhớ Cache:
Kiến trúc Nios cung cấp bộ nhớ cache cho cả master port chương trình và master port
dữ liệu Bộ nhớ Cache là on-chip và là một phần của core xử lý Nios II Bộ nhớ cache cải thiện thời gian truy xuất bộ nhớ cho các hệ thống sử dụng bộ nhớ off-chip như SDRAM
Bộ nhớ Cache là tùy chọn, một core xử lý có thể có một, hai hoặc không có bộ nhớ cache nào, kích thước của bộ nhớ cache cũng do người thiết kế quyết định Người thiết kế phải đánh đổi giữa kích thước core xử lý và dung lượng bộ nhớ cache
Bộ nhớ ghép (tighty couple memory)
Bộ nhớ được truy xuất qua hệ thống Bus Avalon, là một loại bộ nhớ on-chip, nhưng không nằm trong core xử lý Có thể có một hay nhiều bộ nhớ ghép Nếu hệ thống không có bộ nhớ Cache thì cần ít nhất một bộ nhớ ghép
Bộ nhớ off-chip:
Bộ nhớ off-chip là các bộ nhớ hoặc ngoại vi không nằm trên chip FPGA, nó gồm các loại như: SRAM, SDRAM, FLASH, Nó được truy xuất thông qua các thành phần trung gian đóng vai trò giao diện (interface) giữa core xử lý và bộ nhớ Tốc độ truy xuất của bộ nhớ off-chip nhỏ hơn bộ nhớ on-chip
Các phiên bản của core Nios II:
Nios II /f : là bộ xử lý “fast” được thiết kế cho các ứng dụng hiệu suất cao Có những tùy chọn cấu hình cao mà không có trong các phiên bản Nios II còn lại
Nios II/s: là bộ xử lý “standard” được thiết kế với kích thước nhỏ trong khi vẫn duy trì hiệu suất vừa phải
Trang 17Nios II/e: là bộ xử lý “economic” được thiết kế với kích thước nhỏ nhất với hiệu suất
thích hợp
Hình 2-4 Các phiên bản của NIOS II
Các bước thiết kế một hệ thống SOPC builder
Thực hiện thiết kế hệ thống SOPC theo các bước sau [1]:
Tạo một project thông thường trên phần mềm Quartus, sử dụng chip Cylone II
EP2C35F672C6
Vào nhãn Tool>SOPC Builder, chương trình sẽ hiện ra cửa sổ như hình Đặt
tên cho hệ thống của mình, chọn ngôn ngữ HDL sử dụng rồi bấm OK
Hình 2-5 Các bước thiết kế hệ thống SOPC
Trang 18Hình 2-6 Các bước thiết kế hệ thống SOPC
Cửa sổ như hình 2-6 được hiện ra
Tùy theo mục đích thiết kế mà người dùng chọn các thành phần trong thư viện
ở bên tay phải để add vào hệ thống
Ở đây em làm một ví dụ xây dựng hệ thống SOPC đơn giản nhất như sau:
Trong danh sách ở thư viện bên tay phải chọn mục Processors>Nios II
Processor , một cửa sổ mới hiện ra như hình 2-8
Đây là cửa sổ để chọn các thông số cho vi xử lý Nios II, ở đây em chọn
phiên bản Nios đơn giản nhất là Nios II/e Sau đó chọn Finish (Các tab
ở phía sau có thể được điều chỉnh theo ý người dùng nếu cần)
Chọn bộ nhớ chương trình như hình 2-9 Rồi bấm Finish
Chọn thêm thành phần JTAG UART như hình 2-10 Sau đó bấm
Finish
Trở lại mục Nios II Processor để chỉnh lại Reset Vector và Exception
Vector như hình
Trang 19Hình 2-7 Các bước thiết kế hệ thống SOPC
Hình 2-8 Các bước thiết kế hệ thống SOPC
Trang 20Hình 2-9 Các bước thiết kế hệ thống SOPC
Hình 2-10 Các bước thiết kế hệ thống SOPC
Trang 21Hình 2-11 Các bước thiết kế hệ thống SOPC
Cuối cùng Save rồi bấm Generate như hình dưới:
Hình 2-12 Các bước thiết kế hệ thống SOPC
Trang 22Sau khi generate, ta vào file thienly.v ở thư mục chứa Project để xem các tín hiệu in/out của hệ thống Hoặc có thể coi trong file thienly Quartus II Block Symbol File cũng trong thư mục đó để xem sơ đồ chân
Hệ thống SOPC sau khi được tạo thành sẽ có sơ đồ chân như sau:
Hình 2-13 Các bước thiết kế hệ thống SOPC
Trong Project vidu đã tạo ở trên ta tạo một file Verilog như sau:
Trong đó thienly là tên hệ thống SOPC ta đã đặt ở bước đầu thiết kế SOPC
Save file và biên dịch Project này
Nios II Software Build Tools for Eclipse:
Viết phần mềm cho core xử lý Nios II cũng tương tự như các bộ xử lý nhúng khác Nios II Software Build Tools for Eclipse hay còn gọi là Nios II SBT for Eclipse là một môi trường phát triển để viết mã, biên dịch, nạp và debug chương trình cho bộ xử lý đã xây dựng
ở bước trên
Các bước xây dựng phần mềm cho bộ xử lý:
Click vào biểu tượng của phần mềm đã cài đặt trên máy
Chọn đường dẫn đến thư mục bất kỳ mong muốn tạo project rồi bấm OK
Trang 23Hình 2-14 Các bước thực hiện Nios II Software
Chọn File>New>NiosII Application and BSP from Template
Trang 24Hình 2-15 Các bước thực hiện Nios II Software
Chọn đường dẫn của SOPC Information file name như hình
Đặt tên cho Project name
Ở khung Template thông thường chọn Blank Project để viết chương trình theo ý muốn của
người thiết kế
Chọn Finish
Tạo file source c đặt tên là main.c (tên do người viết đặt)
Trang 25Viết code c vào file này rồi click chuột phải vào thư mục có tên soft (tên đã đặt cho project ở bước trên) ở cửa sổ sát tay trái, chọn Build Project
Kết quả biên dịch như dưới là đúng
Hình 2-16 Kết quả biên dịch chương trình Nios Demo
Trở lại cửa sổ của chương trình Quartus, chọn thẻ Programmer>Start
Nếu nạp chương trình trên Quartus thành công thì trở lại chương trình Nios Sau đó click
chuột phải vào thư mục soft rồi chọn Run As>Nios II Hardware
Trang 26Hình 2-17 Đổ chương trình đã biên dịch từ Quartus xuống FPGA
Kết quả chạy như hình
Trang 27Hình 2-18 Kết quả chạy chương trình Nios
Trang 28Hình 2-19 Minh họa mô hình màu RGB
Cơ sở sinh học:
Các màu gốc có liên quan đến các khái niệm sinh học hơn là vật lý, nó dựa trên cơ sở phản ứng sinh lý học của mắt người đối với ánh sáng Mắt người có các tế bào cảm quang có hình nón nên còn được gọi là tế bào hình nón, các tế bào này thông thường có phản ứng cực đại với ánh sáng vàng - xanh lá cây (tế bào hình nón L), xanh lá cây (tế bào hình nón M) và xanh lam (tế bào hình nón S) tương ứng với các bước sóng khoảng 564 nm, 534 nm và
420 nm Ví dụ, màu vàng thấy được khi các tế bào cảm nhận màu xanh ánh vàng được kích thích nhiều hơn một chút so với tế bào cảm nhận màu xanh lá cây và màu đỏ cảm nhận được khi các tế bào cảm nhận màu vàng - xanh lá cây được kích thích nhiều hơn so với tế bào cảm nhận màu xanh lá cây
Mặc dù biên độ cực đại của các phản xạ của các tế bào cảm quang không diễn ra ở các bước sóng của màu "đỏ", "xanh lá cây" và "xanh lam", ba màu này được mô tả như là các màu gốc vì chúng có thể sử dụng một cách tương đối độc lập để kích thích ba loại tế bào cảm quang
Để sinh ra khoảng màu tối ưu cho các loài động vật khác, các màu gốc khác có thể được sử dụng Với các loài vật có bốn loại tế bào cảm quang, chẳng hạn như nhiều loại chim,
Trang 29người ta có lẽ phải nói là cần tới bốn màu gốc; cho các loài vật chỉ có hai loại tế bào cảm quang, như phần lớn các loại động vật có vú, thì chỉ cần hai màu gốc
RGB và hiển thị:
Một trong những ứng dụng phổ biến nhất của mô hình màu RGB là việc hiển thị màu sắc trong các ống tia âm cực, màn hình tinh thể lỏng hay màn hình plasma, chẳng hạn như màn hình máy tính hay ti vi Mỗi điểm ảnh trên màn hình có thể được thể hiện trong bộ nhớ máy tính như là các giá trị độc lập của màu đỏ, xanh lá cây và xanh lam Các giá trị này được chuyển đổi thành các cường độ và gửi tới màn hình Bằng việc sử dụng các tổ hợp thích hợp của các cường độ ánh sáng đỏ, xanh lá cây và xanh lam, màn hình có thể tái tạo lại phần lớn các màu trong khoảng đen và trắng
Phần lớn các màn hình máy tính trên thế giới sử dụng RGB
Các định dạng pixel theo kiểu RGB thường gặp:
Trang 30Hình 2-20 Ảnh xám
Chuyển đổi từ định dạng RGB sang Gray:
𝑌′= 0.299𝑅′+ 0.587𝐺′+ 0.114𝐵′
Với R’, G’, B’ là cường độ của pixel trong ảnh RGB
Y’ là cường độ pixel trong ảnh xám
Cấu trúc một file BMP gồm 4 phần sau:
Bitmap Header (14 byte): giúp nhận dạng một tập tin bitmap
Bitmap Information (40 bytes): lưu một số thông tin chi tiết giúp hiển thị ảnh Có
thể là DIB Header hoặc BITMAPINFOHEADER
Color Palette (4*x bytes), x là số màu của ảnh: định nghĩa các màu sẽ được sử dụng
trong ảnh
Bitmap Data: lưu dữ liệu ảnh
Có nhiều phiên bản được sử dụng để lưu trữ ảnh bmp khác nhau Nhưng tất cả đều có các trường chung sau đây
Bitmap Header
0000h 2 bytes Signature Dùng để nhận dạng cách lưu trữ:
Trang 31BM – Windows 3.1x, 95, NT,
etc
BA – OS/2 struct Bitmap Array
CI – OS/2 struct Color Icon
CP – OS/2 const Color Pointer
IC – OS/2 struct Icon
PT – OS/2 Pointer
Thông thường là dùng BM 0002h 4 bytes FileSize Độ dài của toàn file BMP tính bằng
bytes 0006h 2 bytes Reserved Giá trị thực tế phụ thuộc vào ứng dụng
dùng để lưu ảnh 0008h 2 bytes Reserved Giá trị thực tế phụ thuộc vào ứng dụng
dùng để lưu ảnh 000Ah 4 bytes DataOffset Giá trị Offset bắt đầu lưu Data của ảnh
Bitmap Information
=40 12h 4 Width Chiều rộng của ảnh tính bằng pixel 16h 4 Height Chiều cao của ảnh tính bằng pixel
1Ch 2 BitCount Số bit để biểu diễn một pixel:
1: ảnh nhị phân Numcolors=2;
4: 4 bit xám Numcolors=16 8: 8 bit xám Numcolors=256 16: ảnh 16 bit RGB
Numcolors=65,536 24: ảnh 24 bit RGB Numcolors xấp xỉ 16,7 triệu màu
0: ảnh không nén RGB (thường là loại này)
1: RLE 8bit/1pixel 2: RLE 4bit/1pixel 3: Bit field hoặc Huffman 1D 4: JPEG RLE-24
5: PNG 6: Bit feild
26h 4 XpixelsPerM Độ phân giải theo phương ngang
Pixels/Meter
Trang 322Ah 4 YpixelsPerM Độ phân giải theo phương dọc
Pixels/Meter 2Eh 4 ColorsUsed Số màu trong Color Palette
32h 4 ColorsImportant Số màu quan trọng, 0 nếu tất cả đều
quan trọng
Color Palette có độ lớn là 4*NumColors, chỉ có ý nghĩa với ảnh 1,4,8bit
Bitmap Data: nơi lưu dữ liệu ảnh
Bảng 2-1 Định dạng file ảnh BMP
Phát hiện cạnh:
Phát hiện cạnh là một bước quan trọng trong nhiều bài toán xử lý ảnh Từ ảnh đầu vào
là ảnh đa mức xám, qua phương pháp phát hiện cạnh sẽ cho ảnh đầu ra là ảnh đa mức xám với các cạnh có cường độ cao hơn hẳn các điểm còn lại trong ảnh
Hình 2-21 Ảnh trước và sau khi phát hiện cạnh
Cơ sở toán học:
Trang 33𝜕𝑦 )
2]
1 2
Trang 34Vì mặt nạ Laplacian về cơ bản dựa trên đạo hàm bậc hai nên nó rất nhạy với nhiễu Vì vậy để kết quả ổn định, trước khi dùng mặt nạ Laplacian người ta thường dùng mặt nạ
Gaussian để lọc bớt nhiễu Để thuận tiện người ta có thể nhân chập hai loại mặt nạ trước khi cho trượt qua ảnh để tính Điều này mang đến cái lợi là giảm số lượng các bước tính toán, vì thể sẽ giảm thời gian xử lý
Laplacian of Gaussian
Ví dụ về một mặt nạ LoG với 𝜎 = 1.4
Trang 35So sánh kết quả:
Hình 2-22 b) Sobel c)Prewitt d) Robert e)Laplacian
f)LoG
Nhận xét: nhìn chung các phương pháp ở trên đều cho kết quả tương đối giống nhau
Ưu điểm của chúng là đơn giản và dễ thực hiện Tuy nhiên trừ (LoG) các phương pháp còn lại
đều nhạy với nhiễu LoG có khuyết điểm là thường bị mất ở góc, mất cạnh đường cong
Các phương pháp phát hiện cạnh cao cấp hơn như kỹ thuật Canny sẽ đạt kết quả tốt
hơn, nhưng lại mất thời gian tính toán phức tạp hơn (sẽ không đề cập đến ở mục này)
Biến đổi Hough:
Trang 36Hình 2-23 Ma trận ảnh và ma trận Hough
Phép biến đổi Hough biến đổi mỗi pixel có tọa độ (𝑥0, 𝑦0) trong mặt phẳng x-y thành
một đường cong có phương trình là
𝑝 = 𝑓(𝜃) = 𝑥0𝑐𝑜𝑠𝜃 + 𝑦0𝑠𝑖𝑛𝜃 trong mặt phẳng Hough Hàm trên là một hàm tuần hoàn với chu kỳ là 2𝜋
Trong mặt phẳng x-y ta ký hiệu 𝑝0 và 𝜃0 lần lượt là khoảng cách từ gốc tọa độ đến
đường thẳng t như hình vẽ Khi đó ta có với mọi (x, y) thuộc đường thẳng t thì:
𝑝0 = 𝑥𝑐𝑜𝑠𝜃0 + 𝑦𝑠𝑖𝑛𝜃0Như vậy mọi điểm (x, y) thuộc đường thẳng t khi biến đổi qua mặt phẳng Hough thì
đều đi qua điểm có tọa độ là (𝜃0, 𝑝0) Điều này suy ra rằng: nếu đường thẳng t trong mặt
phẳng ảnh x-y được biểu diễn bởi n pixel, thì trong mặt phẳng Hough điểm (𝜃0, 𝑝0) sẽ có n
đường cong đi qua Vì vậy hình thành khái niệm điểm tích lũy trên mặt phẳng Hough Theo
đó, cứ mỗi lần có một đường thẳng đi qua một điểm (𝜃, 𝑝) thì giá trị tích lũy của điểm đó sẽ
tang lên 1 đơn vị
Do ta xét mặt phẳng ảnh x-y chỉ nằm trên góc phần tư thứ nhất với 𝑥 ≥ 0 𝑣à 𝑦 ≥ 0
nên ta chỉ xét khoảng −90 ≤ 𝜃 ≤ 90 trên mặt phẳng Hough
Khoảng cách lớn nhất giữa đường thẳng trong mặt phẳng ảnh với gốc tọa độ bằng với
đường chéo của ảnh, ta đặt là pmax Khoảng của p phải xét trong mặt phẳng Hough là
−𝑝𝑚𝑎𝑥 ≤ 𝑝 ≤ 𝑝𝑚𝑎𝑥
Các bước của bài toán phát hiện đường thẳng bằng biến đổi Hough:
Biến đổi ảnh về ảnh nhị phân cạnh
Thực hiện biến đổi Hough cho những pixel trắng trên ảnh cạnh
Trang 37Kiểm tra ma trận tích lũy trên mặt phẳng Hough Lọc ra các điểm (𝜃, 𝑝) có giá trị tích lũy lớn hơn một ngưỡng nào đó
Với mỗi 𝜃0 𝑣à 𝑝0 ta đã tìm ra một phương trình đường thẳng trên mặt phẳng ảnh x-y
là
𝑝0 = 𝑥𝑐𝑜𝑠𝜃0 + 𝑦𝑠𝑖𝑛𝜃0Lưu ý: độ chia của mặt phẳng Hough theo phương 𝜃 𝑣à 𝑝 không nên quá nhỏ, vì thời gian tính toán sẽ lớn Đối với biến đổi Hough thời gian tính là một yếu tố quan trọng vì nó sử dụng 3 vòng lặp lồng nhau Vì vậy với ảnh có độ phân giải lớn sử dụng biến đổi Hough rất tốn thời gian
Xoay ảnh:
Bài này xin trình bày cách xoay ảnh như hình minh họa dưới
Hình 2-24 Minh họa việc xoay ảnh một góc a
Thuật toán sử dụng là quay tất cả các điểm quanh điểm trên cùng bên trái của ảnh một góc alpha theo chiều dương qui ước Có hai cách để thực hiện việc xoay này là ánh xạ xuôi (forward mapping) và ánh xạ ngược (reverse mapping) Forward mapping sẽ làm cho ảnh có
lỗ Với reverse mapping, ảnh mượt hơn nhưng các mép vẫn không được mềm lắm [3]
Forward mapping
Trong forward mapping, từ mỗi điểm của ảnh gốc, xác định một điểm của ảnh kết quả
Do phải làm tròn số khi thực hiện phép xoay nên ở ảnh gốc, có những pixel không được "tô màu" làm cho trên ảnh xuất hiện những "lỗ" li ti Đối với ảnh đen trắng không cần chất lượng cao, sau khi tạo ra ảnh xoay với những lỗ trống chưa được gán trị, ta có thể tự gán trị cho lỗ trống đó bằng giá trị trung bình của các điểm ảnh xung quanh
Hình học giải tích cấp 3 và đại số tuyến tính đại học có trình bày về cách xoay điểm M(x, y) quanh gốc tọa độ góc a, thành N(x', y') như sau:
Forward mapping:
Trang 38Hình 2-25 Xoay điểm N quanh gốc O một góc a sẽ được điểm M
| 𝑦′| = | 𝑥′ 𝑐𝑜𝑠𝑎 −𝑠𝑖𝑛𝑎 𝑠𝑖𝑛𝑎 𝑐𝑜𝑠𝑎 | | 𝑦| 𝑥Hay
có hiện tượng "lỗ" như ở trên
Ta tìm ma trận xoay ảnh trong trường hợp này như sau:
Trang 39Hình 2-26 Kết quả xoay ảnh của phương pháp Forward Mapping
Xoay ảnh ở tâm:
Ở trên vừa trình bày cách xoay ảnh ở góc tọa độ ban đầu của ảnh, tức là góc trên cùng bên trái Tuy nhiên trong phần lớn các ứng dụng, người ta thường cần xoay ảnh ở tâm của bức ảnh Để làm được việc đó trước và sau khi xoay ảnh người lập trình tiến hành đổi hệ tọa độ quy chiếu bức ảnh như sau:
Trang 40Hình 2-27 Các bước đổi tọa độ ảnh [4]
Resize ảnh:
Có nhiều phương pháp resize ảnh khác nhau Sau đây là các phương pháp thường dùng
Nội suy là phương pháp ước tính giá trị của các điểm dữ liệu chưa biết trong phạm vi
của một tập hợp rời rạc chứa một số điểm dữ liệu đã biết
Trong khoa học kỹ thuật, người ta thường có một số điểm dữ liệu đã biết giá trị bằng cách lấy mẫu thực nghiệm Những điểm này là giá trị đại diện của một hàm số của một biến
số độc lập có một lượng giới hạn các giá trị Thường chúng ta phải nội suy (hoặc ước tính) giá trị của hàm số này cho một giá trị trung gian của một biến độc lập Điều này có thể thực hiện bằng phương pháp đường cong phù hợp hoặc phân tích hồi quy
Phương pháp nội suy điểm lân cận gần nhất (Nearest-neighbor):
Ý tưởng của phương pháp này là ta xấp xỉ giá trị của điểm trên ảnh kết quả bằng với giá trị của điểm gần nhất trên ảnh gốc sau khi nhân với tỉ lệ chiều dọc và chiều ngang
Giả sử ta có ảnh ban đầu là I có kích thước 𝑤 × ℎ
Ta cần resize ảnh này thành ảnh I’ kích thước 𝑤′ × ℎ′
Ta tiến hành tính như sau: