www.ngohaibac.

net
1
ĐẠI HỌC BÁCH KHOA HÀ NỘI
KHOA ĐIỆN – BỘ MÔN ĐIỀU KHIỂN TỰ ĐỘNG
THIẾT KẾ HỆ THỐNG XỬ LÝ ẢNH SỐ TRÊN
NỀN FPGA
Nhóm sinh viên thực hiện: Ngô Hải Bắc
Đỗ Trung Hiếu
Lớp Điều khiển tự động 1 – K48
Giáo viên hướng dẫn: Ts. Lưu Hồng Việt
HÀ NỘI - 2008
www.ngohaibac.net
2
Lời cảm ơn
Trước hết, chúng em xin gửi lời cảm ơn sâu sắc đến thầy giáo TS. Lưu
Hồng Việt, người đã giúp đỡ rất nhiều về định hướng nghiên cứu, thiết bị thí
nghiệm phục vụ cho nghiên cứu.
Chúng em xin chân thành cảm ơn các thầy cô giáo đã giảng dạy chúng
em, đặc biệt là các thầy cô giáo trong Bộ môn Điều khiển tự động – Khoa
Điện, TS. Phạm Ngọc Nam – Phó Trưởng bộ môn Điện tử - Tin học – Khoa
Điện tử Viễn Thông – Trường Đại học Bách Khoa Hà Nội đã tạo điều kiện
giúp đỡ chúng em hoàn thành đồ án tốt nghiệp này.
Xin chân thành cảm ơn Dave Vanden Bout, kĩ sư của công ty XESS
Corporation đã trả lời tận tình những thắc mắc của chúng em về KIT XSA-
3S1000 và XST-3.0.
Và cuối cùng, chúng em xin dành tất cả lòng biết ơn và kính trọng sâu sắc
nhất tới bố mẹ chúng em, những người đã sinh thành, nuôi dưỡng chúng em
nên người, đã lo lắng, chỉ bảo từ những việc nhỏ nhất, đã tạo mọi điều kiện
cho chúng em được sống và học tập một cách tốt nhất để vươn tới những ước
mơ và hoài bão của mình.
Mặc dù đã rất nỗ lực và cố gắng để hoàn thành luận văn tốt nghiệp này,
song chắc chắn không thể tránh khỏi sai sót. Vì vậy, chúng em rất mong được
sự chỉ bảo của thầy cô giáo để đề tài tốt nghiệp này hoàn thiện hơn.
www.ngohaibac.net
3
Mục lục
Lời cảm ơn.................................................................................................................................................. 2
Mục lục ....................................................................................................................................................... 3
Danh mục các hình vẽ trong đồ án tốt nghiệp...................................................................................... 6
Mở đầu........................................................................................................................................................ 8
Phần 1 : Cơ sở lý thuyết xử lý ảnh số................................................................................................... 10
1.1. Khái quát về hệ thống Thị giác máy tính và Cảm biến thị giác........................................ 10
1.3. Các thành phần của hệ thống xử lý ảnh: ............................................................................. 16
1.3.1. Thành phần thu thập ảnh, Camera và vấn đề định dạng ảnh.................................. 16
1.3.2. Thành phần xử lý ảnh .................................................................................................... 17
1.3.2.1. Các khái niệm cơ bản của xử lý ảnh số................................................................ 17
1.3.2.2. Các thuật toán xử lý ảnh số ................................................................................... 18
1.4. Một số giải pháp phần cứng cho hệ thống thị giác máy ................................................... 28
FPGA................................................................................................................................................ 28
DSP Processor................................................................................................................................. 28
Mainboard, laptop ......................................................................................................................... 29
Phần 2 : Khái quát về FPGA và mạch phát triển XST 3S1000 của XESS...................................... 31
2.1. Giới thiệu chung về FPGA và ngôn ngữ VHDL.............................................................. 31
2.1.1. Khái niệm và ứng dụng FPGA.................................................................................... 31
2.1.2. Kiến trúc FPGA............................................................................................................... 32
2.1.2.1. Kiến trúc chung FPGA.......................................................................................... 32
Configurable Logic Blocks (CLBs)...................................................................................... 33
Configurable I/O Blocks....................................................................................................... 34
Programmable Interconnect................................................................................................. 34
Mạch đồng hồ (Clock Circuitry )......................................................................................... 35
2.1.2.2. So sánh giữa cấu trúc nhỏ và cấu trúc lớn......................................................... 36
2.1.2.3. So sánh giữa SDRAM Programming và Anti-fuse programming................ 36
2.1.2.4. Cấu trúc FPGA của Spartan 3............................................................................... 37
2.1.3. Trình tự thiết kế một chip............................................................................................ 38
www.ngohaibac.net
4
Ghi các đặc điểm kĩ thuật ..................................................................................................... 39
Chọn công nghệ...................................................................................................................... 40
Chọn một hướng tiếp cận thiết kế ...................................................................................... 40
Chọn công cụ tổng hợp ......................................................................................................... 40
Thiết kế chip ........................................................................................................................... 41
Mô phỏng – cái nhìn tổng quan về thiết kế ...................................................................... 41
Tổng hợp.................................................................................................................................. 41
Place and Route ...................................................................................................................... 41
Mô phỏng lại – tổng quan cuối cùng.................................................................................. 42
Kiểm tra.................................................................................................................................... 42
2.1.4. Ngôn ngữ mô tả phần cứng VHDL............................................................................. 42
Trình tự thiết kế một chíp dựa trên VHDL........................................................................... 43
2.2. Giới thiệu mạch phát triển XST 3S 1000 của hãng XESS................................................ 44
2.2.1. XSA-3S1000...................................................................................................................... 45
2.2.2. XST-3.0 (XStend Board)................................................................................................. 46
2.3. Giới thiệu hãng Xilinx và các công cụ lập trình: .............................................................. 49
Hãng Xilinx ..................................................................................................................................... 49
ISE 9.2............................................................................................................................................... 49
LogicCore 9.2................................................................................................................................... 49
EDK 9.2............................................................................................................................................. 50
System Generator 9.2..................................................................................................................... 50
Phần 3 : Xây dựng hệ thống xử lí ảnh động trên nền FPGA.......................................................... 51
3.1. Sơ đồ cấu trúc hệ thống xử lí ảnh động ............................................................................. 51
3.2. Xây dựng hệ thống thu thập, lưu trữ, xử lý và hiển thị ảnh.......................................... 53
3.2.1. Thành phần thu thập ảnh Framegrabber................................................................... 53
3.2.2. Lưu dữ liệu từ Framegrabber vào SDRAM .............................................................. 55
3.2.3. Các cơ chế ghi đọc SDRAM: SDRAM Controller, Dual Port SDRAM................ 55
SDRAM Controller.................................................................................................................... 55
Pipeline Read Operation ...................................................................................................... 56
Pipeline Write Operation ..................................................................................................... 56
Dualport Module for the SDRAM Controller...................................................................... 58
www.ngohaibac.net
5
3.2.4. Image Processing core ................................................................................................... 60
3.2.5. Hiển thị ảnh lên VGA: VGA Generator .................................................................... 67
VGA Color Signals .................................................................................................................... 67
VGA Signal Timing................................................................................................................... 68
Nguyên tắc hoạt động của VGA Generator .......................................................................... 69
3.2.6. Picoblaze và hệ thống điều khiển trung tâm............................................................ 71
3.2.6.1. Khái quát PicoBlaze............................................................................................... 71
KCPSM3 Module ................................................................................................................... 73
Kết nối với bộ nhớ ROM chương trình.............................................................................. 73
3.2.6.2. Sơ đồ cấu trúc của khối xử lý trung tâm............................................................ 75
Thuật toán của chương trình................................................................................................. 75
3.3. Thiết kế giao diện điều khiển hệ thống............................................................................. 76
Chức năng.................................................................................................................................... 77
3.4. Mô phỏng và kết quả............................................................................................................. 77
Phương án mô phỏng..................................................................................................................... 77
Kết quả.............................................................................................................................................. 78
Kết luận .................................................................................................................................................... 79
Tài liệu tham khảo................................................................................................................................. 82
www.ngohaibac.net
6
Danh mục các hình vẽ trong đồ án tốt nghiệp
Hình 1.1 Một tay máy thực hiện gắp đối tượng với sự trợ giúp của hệ thống thị giác
máy tính
Hình 1.2 Các bước cơ bản của xử lý ảnh số.
Hình 1.3 Những kiểu liên kết giữa các điểm ảnh.
Hình 1.4 Những kiểu đường liên kết giữa các điểm ảnh.
Hình 1.5 Kết quả của phép lọc Gaussian với cửa sổ 3x3.
Hình 1.6 Kết quả thuật toán dò biên.
Hình 1.7 Phân ngưỡng theo lược đồ xám.
Hình 1.8 Loại bỏ nhiễu và khôi phục đối tượng bằng quá trình làm mảnh-làm đầy.
Hình 1.9 Sơ đồ thuật toán gán nhãn đối tượng.
Hình 2.1 Kiến trúc chung của FPGA.
Hình 2.2 Một Logic Block điển hình.
Hình 2.3 Configurable Logic Blocks.
Hình 2.4 Programmable Interconnect.
Hình 2.5 Cấu trúc các thành phần của Spartan 3A.
Hình 2.6 Design Flow.
Hình 2.7 Qui trình thiết kế chip dựa trên VHDL.
Hình 2.8 KIT XSA-3S1000.
Hình 2.9 Sơ đồ cấu trúc của XSA-3S1000.
Hình 2.10 XST-3.0 Board.
Hình 2.11 XST-3S1000.
Hình 3.1 Một ảnh cần được xử lý.
Hình 3.2 Sơ đồ chung của hệ thống.
Hình 3.3 Pixel stream waveform.
Hình 3.4 Framegrabber state machine.
Hình 3.5 Pipelined Read Operation timing waveforms.
Hình 3.6 Pipelined Write Operation timing waveforms.
Hình 3.7 Ghép nối với SDRAM Controller.
Hình 3.8 Ghép nối dualport với SDRAM Controller.
Hình 3.9 Xây dựng 4 ports SDRAM interface.
Hình 3.10 Sơ đồ khối xử lý ảnh.
Hình 3.11 Khối ghi dữ liệu từ read_fifo vào Buffer.
www.ngohaibac.net
7
Hình 3.12 Khối thuật toán xử lý ảnh.
Hình 3.13 Cơ chế ghi và đọc buffer.
Hình 3.14 Khối đọc dữ liệu từ buffer.
Hình 3.15 Sơ đồ khối thanh ghi dịch Pixel register
Hình 3.16 Cấu trúc nhân chập.
Hình 3.17 Cấu trúc bộ xử lý đồng cấu ảnh nhị phân.
Hình 3.18 Khối gán nhãn đối tượng.
Hình 3.19 VGA Connection.
Hình 3.20 8 màu cơ bản.
Hình 3.21 CRT Display Timing Example.
Hình 3.22 640 x 480 Mode VGA Control Timing.
Hình 3.23 Sơ đồ khối cấu trúc của VGA Generator.
Hình 3.24 Sơ đồ khối cấu trúc của PicoBlaze.
Hình 3.25 Sơ đồ cấu trúc PicoBlaze Microcontroller.
Hình 3.26 Sơ đồ khối điều khiển trung tâm và giao tiếp UART.
Hình 3.27 Giao diện điều khiển.
www.ngohaibac.net
8
Mở đầu
Thị giác máy là một lĩnh vực đã và đang rất phát triển. Khái niệm thị giác
máy – Computer vision có liên quan tới nhiều ngành học và hướng nghiên
cứu khác nhau. Từ những năm 1970 khi mà năng lực tính toán của máy tính
ngày càng trở nên mạnh mẽ hơn, các máy tính lúc này có thể xử lý được
những tập dữ liệu lớn như các hình ảnh, các đoạn phim thì khái niệm và kỹ
thuật về thị giác máy ngày càng được nhắc đến và nghiên cứu nhiều hơn cho
tới ngày nay.
Thị giác máy bao gồm lý thuyết và các kỹ thuật liên quan nhằm mục đích
tạo ra một hệ thống nhân tạo có thể tiếp nhận thông tin từ các hình ảnh thu
được hoặc các tập dữ liệu đa chiều.
Ngày nay, ứng dụng của thị giác máy đã trở nên rất rộng lớn và đa dạng,
len lỏi vào mọi lĩnh vực từ quân sự, khoa học, vũ trụ, cho đến y học, sản xuất,
và tự động hóa tòa nhà.
Mục đích của đồ án này là nghiên cứu các khái niệm cơ bản của Thị giác
máy tính và xử lý ảnh số. Đồng thời trên cơ sở đó, chúng em xây dựng một
hệ thống cảm biến thị giác trên nền phần cứng vi mạch khả trình FPGA. Cảm
biến này thực hiện các chức năng cơ sở của một cảm biến thị giác : đó là tiếp
nhận thông tin từ hình ảnh thu được để xử lý và phục vụ cho các quá trình
phân tích cao hơn.
www.ngohaibac.net
9
Trong phần 1 của đồ án, chúng em đề cập đến những các khái niệm của hệ
thống thị giác máy tính, những ứng dụng và các thành phần của nó. Đồng
thời chúng em trình bày cơ sở kiến thức xử lý ảnh số sẽ được dùng trong việc
xây dựng hệ thống cảm biến thị giác.
Trong phần 2, chúng em trình bày những khái niệm cơ bản về chip khả
trình FPGA, hãng Xilinx và những công cụ lập trình và phát triển hệ thống
với FPGA. Chúng em cũng đề cập đến vi mạch tích hợp XST 3S 1000 của
hãng XESS, được sử dụng trong đồ án này.
Phần 3, chúng em trình bày phương án thực thi hệ thống thị giác máy trên
nền FPGA. Việc xây dựng các thành phần thu thập ảnh, lưu trữ ảnh, xử lý
ảnh và hiện thị ảnh trên mạch tích hợp XST 3S 1000 được đề cập chi tiết trong
phần này. Trong phần này, chúng em cũng trình bày phương án chạy mô
phỏng kiểm tra hoạt động của hệ thống.
Và cuối cùng, chúng em tổng kết những kết quả đạt được, những ưu
điểm, nhược điểm của giải pháp, hiệu quả của giải pháp và những hướng
phát triển.
www.ngohaibac.net
10
Phần 1 : Cơ sở lý thuyết xử lý ảnh số
1.1. Khái quát về hệ thống Thị giác máy tính và Cảm biến thị giác
Theo định nghĩa từ [1] : Hệ thống thị giác - bao gồm cả thị giác máy
(machine vision) và thị giác máy tính (computer vision)- là những hệ thống
tiếp nhận thông tin từ các cảm biến thị giác (vision sensor) với mục đích cho
phép máy móc đưa ra những quyết định thông minh.
Thị giác máy tính là một ngành khoa học mới phát triển. Mặc dù đã có
những ứng dụng của xử lý ảnh số trong những thập niên đầu của thế kỉ XX
vào một số lĩnh vực, nhưng phải đến những năm 1970, những nghiên cứu về
lĩnh vực này mới được bắt đầu khi máy tính đã có thể quản lý các quá trình
xử lý một lượng lớn dữ liệu như các ảnh số.
Lĩnh vực nghiên cứu của thị giác máy rất rộng, và đặc điểm chung là các
bài toán về thị giác máy tính đều không có một đề bài chung và cách giải duy
nhất. Mỗi giải pháp giải quyết vấn đều được một kết quả nhất định cho
những trường hợp cụ thể. Ta có thể thấy sự tương quan giữa Computer
vision với các lĩnh vực khác như sau:
www.ngohaibac.net
11
Qua sơ đồ trên, ta có thể thấy thị giác máy tính và thị giác máy có liên
quan đến rất nhiều ngành như tự động điều khiển, xử lý ảnh số, quang học,
sinh học, toán học, máy học. và Trí tuệ nhân tạo. Sự kết hợp của những
ngành này tạo cho Thị giác máy tính một khả năng ứng dụng hết sức rộng
lớn trong mọi lĩnh vực của khoa học, sản xuất và đời sống. Có thể liệt kê một
số ứng dụng của thị giác máy tính như sau :
Điều khiển tiến trình (ví dụ: trong các robot công nghiệp, hay các thiết bị,
xe tự hành).
Phát hiện sự kiện (ví dụ: các thiết bị giám sát)
Tự động hóa tòa nhà.
Mô hình hoá đối tượng (ví dụ: quá trình kiểm tra trong môi trường công
nghiệp, xử lý ảnh trong y học).
Tương tác (đóng vai trò làm đầu vào cho thiết bị trong quá trình tương
tác giữa người và máy).
Nhận dạng
Quân sự.
Trong lĩnh vực điều khiển tiến trình, thị giác máy tính đóng vai trò đặc
biệt quan trọng như một cảm biến vị trí cho robot công nghiệp hoặc xe tự
hành.
Trong hệ thống máy CNC, hoặc các dây chuyền công nghệ, các cảm biến
thị giác thu thập dữ liệu ảnh về đối tượng công nghiệp, xử lý và tách đối
tượng ra khỏi ảnh. Sau khi tách đối tượng, hệ thống thị giác máy tính toán
các đặc trưng của đối tượng, như vị trí, hướng, để giúp cánh tay máy của
robot công nghiệp thao tác chính xác việc gắp hoặc gia công đối tượng.
Với những hệ thống thị giác được tích hợp các camera có độ phân giải lớn,
được lập trình chính xác, có thể điều khiển tay máy để thao tác với những vi
mạch nhỏ đòi hỏi độ chính xác gần như tuyệt đối.
www.ngohaibac.net
12
Hình 1.1: Một tay máy thực hiện gắp đối tượng với sự trợ giúp của hệ thống thị giác
máy tính
Cũng như vậy, với xe tự hành đi trong môi trường phức tạp, nhiều vật
cản, hệ thống thị giác máy giúp cho xe phát hiện ra những đối tượng, vị trí và
khoảng cách của chúng đối với xe. Trong trường hợp này, hệ thống thị giác
máy không chỉ đóng vai trò như môt cảm biến thị giác, mà còn thực hiện việc
vẽ bản đồ đối tượng, cho phép xe tự hành chọn được đường đi thích hợp
nhất.
Hệ thống thị giác máy còn được ứng dụng trong những lĩnh vực công
nghiệp với vai trò như một cảm biến kiểm soát lỗi bề mặt sản phẩm. Camera
thu thập hình ảnh về bề mặt sản phẩm, sẽ truyền dữ liệu vào cho hệ thống xử
lý để tìm ra lỗi trên sản phẩm, vị trí lỗi và kích thước lỗi. Với những hệ thống
thị giác sử dụng camera hồng ngoại, ta còn có thể đo nhiệt độ sản phẩm và sự
phân bố nhiệt độ trên sản phẩm.
Như vậy, có thể nói, trong lĩnh vực công nghiệp, thị giác máy và cảm biến
thị giác có thể thay thế một lượng lớn các cảm biến ví trí thông thường, vốn
cần rất nhiều trong một dây chuyền sản xuất hoặc CNC, giúp giảm thiểu chi
phí và công sức lắp đặt cảm biến, và quan trọng nhất là tạo nên một hệ thống
xử lý thống nhất những thông tin về quá trình và đối tượng công nghiệp.
Trong lĩnh vực tự động hóa tòa nhà, hệ thống thị giác máy cũng đóng một
vai trò ngày càng quan trọng.
www.ngohaibac.net
13
Với sự phát triển của các thuật toán xử lý dữ liệu ảnh, ứng dụng các thành
tựu mới nhất của công nghệ xử lý và trí tuệ nhân tạo, các cảm biến thị giác
ngày nay có thẻ thực hiện những chức năng thông minh như đếm số người
trong phòng, nhận dạng đối tượng chuyển động, nhận dạng khuôn mặt, cảnh
báo sự kiện, nhận dạng vân tay....
Các hãng như ALTALS và SELTEC, đã cho ra đời những máy đếm số
người, dựa trên chuỗi hình ảnh. Bằng cách quan sát sự di chuyển của dòng
người và số người , hệ thống thị giác máy sẽ tính toán tốc độ và mật độ dòng
người di chuyển. Bài toán này được ứng dụng nhiều trong những khu công
cộng như nhà ga, tàu điện ngầm để kiểm soát lưu lượng người ra vào nhằm
đưa ra những quyết định điều hành chính xác.[2]
Hệ thống thị giác máy còn được ứng dụng rộng rãi trong việc nhận dạng,
chuẩn đoán y học, quân sự ( xác định vị trí đối phương) và vũ trụ...
Xu thế phát triển của các cảm biến ngày nay, đó là độ chính xác cao, kèm
với tính phân tán, thông minh, khả năng loại bỏ lỗi (fault tolerance). Các hệ
thống cảm biến thị giác đang chứng tỏ ngày càng đáp ứng được xu thế đấy.
Các hệ thống cảm biến thị giác ngày nay, đã có thể thay thế được một lượng
lớn cảm biến vị trí trong những bài toán cụ thể, đồng thời, khả năng xử lý
thông tin không cần đến sự điều khiển của bộ điều khiển trung tâm, cho
phép chúng có thể tích hợp rộng rãi vào những hệ thống điều khiển phân tán.
Thêm vào đó, các cảm biến thị giác có tính linh hoạt rất cao, có thể ứng dụng
trong nhiều bài toán với những yêu cầu đo đạc và giám sát khác nhau. Và
cuối cùng, do đặc điểm hoạt động của mình, các cảm biến thị giác có thể hoạt
động tốt trong những môi trường khắc nghiệt, như nhiệt độ cao, phóng xạ,
bụi, điện trường, độ ẩm lớn...
Với những lý do đó, hệ thống thị giác máy và cảm biến thị giác đang ngày
càng được ứng dụng nhiều trong những hệ thống phức tạp và hiện đại, hoạt
động liên tục và đòi hỏi yêu cầu về độ chính xác và xử lý thông tin cao.
1.2. Khái quát quá trình xử lý ảnh số trong hệ thống thị giác máy
tính
Hệ thống thị giác máy tính bao gồm nhiều lĩnh vực, trong đó xử lý ảnh số
đóng một vai trò quyết định.
www.ngohaibac.net
14
Hệ thống xử lý ảnh số bao gồm một phạm vi rộng các kiến thức về phần
cứng, phần mềm và cơ sở lý thuyết.
Các bước cơ bản của xử lý ảnh số được mô tả trong sơ đồ dưới đây:
Xử lý và
nhận dạng
Biểu diễn
Tiền xử lý
Thu nhận
ảnh
Phân vùng,
phân ngưỡng
Cơ sở kiến thức
Hình 1.2 : Các bước cơ bản của xử lý ảnh số
Thu thập ảnh(image acquision) : Ảnh số được thu thập bằng một cảm
biến ảnh có khả năng biến thông tin về cường độ sáng và mức xám của ảnh
thực thành tín hiệu điện áp dưới dạng analog. Tín hiệu này sau đó được số
hóa để trở thành tín hiệu số.
Hiện nay có một số cảm biến ảnh thực hiện cả việc thu nhận tín hiệu về
cường độ sáng của ảnh và số hóa tín hiệu. Trong trường hợp cảm biến không
có chức năng số hóa thì cần phải có một bộ biến đổi ảnh tương tự thành ảnh
số (video decoder). Tín hiệu ảnh sau khi được số hóa còn được mã hóa theo
những chuẩn video (video format) nhất định trước khi được đưa vào quá
trình lưu trữ và xử lý. Các chuẩn video thường gặp như IUT-R-BT 656, 601...
Tiền xử lý ảnh : Sau khi ảnh số được thu thập dưới dạng tín hiệu số, cần
phải trải qua giai đoạn tiền xử lý. Chức năng chủ yếu của tiền xử lý là cải
thiện ảnh, nâng cao các tính chất của ảnh giúp cho các quá trình xử lý về sau
www.ngohaibac.net
15
được thuận tiện hơn. Các công đoạn cơ bản của tiền xử lý là : nâng cao độ
tương phản, lọc nhiễu...
Phân vùng ảnh: Bước tiếp theo của quá trình xử lý là phân vùng ảnh. Ảnh
sau khi đã được cải thiện, sẽ trở nên thuận tiện hơn cho việc phân ngưỡng và
phân vùng. Nhiệm vụ chính của phân ngưỡng và phân vùng ảnh là tách ảnh
đầu vào thành các đối tượng, vật thể riêng biệt. Kết quả của quá trình phân
vùng ảnh, ta sẽ được một tập hợp các điểm ảnh có liên kết với nhau thành các
đối tượng, được đánh số phân biệt, thuận tiện cho các quá trình xử lý cao
hơn.
Đầu ra của quá trình phân vùng ảnh là các pixel chưa được lọc, bao gồm
liên kết của 1 vùng hoặc tất cả các điểm ảnh trong vùng đó. Số liệu này cần
được biến đổi thành dạng thích hợp cho máy tính xử lý.
Phân tích ảnh: đây là giai đoạn xử lý bậc cao trong hệ thống xử lý ảnh số.
Ảnh sau khi được phân vùng thành các đối tượng riêng biệt, đã được đánh số
phân biệt, sẽ được phân tích để phục vụ những mục đích khác nhau như:
Xác định các đặc trưng hình học của đối tượng: dựa trên cơ sở đối tượng
đã được xác định và phân biệt, ta có thể thực hiện xác định các đặc trưng
hình học của mỗi đối tượng đấy, như : vị trí, kích thước, hướng, ... và số đối
tượng hay mật độ đối tượng trong ảnh. Đây là các đặc trưng được dùng
nhiều trong hệ thống thị giác máy (machine vision)
Nhận dạng : các đối tượng có thể là các vật thể có hình dạng nhất định,
hoặc các kí tự số, chữ cái, dấu vân tay...Ảnh sau khi được phân vùng có thể
được nhận dạng theo những phương pháp nhất định như phương pháp
neural, để tìm ra mẫu hình dạng mà đối tượng đó thuộc về.
Để hướng dẫn hoạt động của từng module xử lý, cần có một hệ cơ sở kiến
thức để kiểm tra hoạt động và tương tác giữa các module. Hệ này có nhiệm
vụ kiểm soát hoạt động của từng module và sắp xếp trình tự hoạt động của
chúng trong từng thời điểm, giải quyết bài toán xung đột.
www.ngohaibac.net
16
1.3. Các thành phần của hệ thống xử lý ảnh:
1.3.1. Thành phần thu thập ảnh, Camera và vấn đề định dạng ảnh.
Giới thiệu chung về camera : Trong hệ thống xử lý ảnh số, camera là một
thiết bị rất quan trọng có chức năng quan sát và thu nhận ảnh đầu vào của
hệ thống. Nó thường được coi là hộp đen trong đó có các quá trình biến đổi
để chuyển một ảnh thành dạng lưu trữ trong máy tính. Các bước xử lý này
bao gồm sự phát sáng, thấu kính, sensor, các phần tử quang điện và bộ số
hoá, mỗi thành phần này phối hợp nhằm đưa ra ảnh số cuối cùng. Điểm đặc
biệt quan trọng trong nhận dạng ảnh là đặc tính thời gian của camera, vì vậy
quá trình xử lí ảnh có vai trò như bộ lấy mẫu trong hệ thống nhận dạng ảnh.
Cảm biến nhìn chung gồm 2 thành phần chính. Thành phần thứ nhất tạo
ra tín hiệu điện ở đầu ra tỉ lệ với mức năng lượng mà nó nhận được. Thành
phần thứ 2 là bộ số hóa(digitalize) , là phần tử biến đổi tín hiệu tương tự
thành tín hiệu số. Tùy thuộc vào thành phần số hóa thực chất là bộ chuyển
đổi ADC, chúng ta có các tín hiệu với số bit khác nhau: 4 bit, 8bit, 10 bit, 12
bit..., tương ứng ta sẽ được các ảnh có 16, 256....mức xám khác nhau.
Trước đây, người ta sử dụng các camera dựa trên thiết bị phóng tia điện
tử, linh kiện bán dẫn, tuy nhiên những thiết bị này thường cồng kềnh, thiếu
bền vững, độ ổn định thấp. Từ những năm 1980, đã bắt đầu xuất hiện các
sensor ảnh trong các camera như sensor CMOS, CCD. Các sensor này chứa
một số lượng phần tử quang rời rạc, hay các điểm ảnh (pixel), mỗi phần tử
chứa thông tin liên quan đến độ sáng chiếu vào nó.
Độ phân giải của các sensor phụ thuộc vào số điểm ảnh trên nó. Số điểm
ảnh của các sensor là đa dạng, từ thấp (32x32 điểm ảnh), đến trung bình
(256x256 điểm ảnh) cho đến cao (640x480 ) hoặc cao hơn nữa là 1280x1024
điểm ảnh.
Trong đề tài này, chúng em sử dụng loại camera AVC 301D của hãng
AVTech, đây là một loại camera quan sát cho ảnh xám, sử dụng sensor có độ
phân giải tương đối lớn (510x482 điểm ảnh), cho ra tín hiệu ảnh dạng tương
tự và cần phải được số hóa trước khi đi vào quá trình xử lý. Tín hiệu ảnh
www.ngohaibac.net
17
tương tự được số hóa thành ảnh số bởi bộ video decoder TVP5150 theo chuẩn
ITU-R-BT 601.
Mỗi frame ảnh thu về được biểu diễn dưới dạng I(x,y) trong đó x,y là tọa
độ của pixel trên frame và I là mức xám tương ứng của pixel đó.
Như vậy 1 frame ảnh thu được sẽ được biểu diễn dưới dạng một ma trận
2 chiều n x m với n là số pixel trên 1 hàng, m là số hàng trong 1 frame. Trong
đồ án này, ảnh thu được từ camera có kích thước 510x482, tuy nhiên sau quá
trình số hóa theo chuẩn ITU 601 ta có ảnh số 8bit với kích thước chuẩn là
720x525.
1.3.2. Thành phần xử lý ảnh
1.3.2.1. Các khái niệm cơ bản của xử lý ảnh số
Pixel và các lân cận : Như đã biết, mỗi frame ảnh được mô tả dưới dạng
ma trận 2 chiều, trong đó mỗi phần tử của ma trận tương ứng với mức xám
của 1 điểm ảnh (pixel). Mỗi điểm ảnh này có các lân cận xung quanh. Nếu
hiển thị mỗi pixel dưới dạng một ô vuông, mỗi điểm có chung biên với 4
điểm lân cận, và có chung góc với 4 điểm lân cận khác.
Hai điểm lân cận gọi là "liên kết 4" nếu chúng có chung biên với nhau, và
"liên kết 8" nếu chung góc và chung biên với nhau.

Hình 1.3 : Những kiểu liên kết giữa các điểm ảnh
Đường liên kết: Đường liên kết là đường nối từ pixel
1, 1
[ ] i j
đến pixel
,
[ ]
n n
i j
, qua một chuỗi các pixel
1, 1
[ ] i j
,
2, 2
[ ] i j
,...
,
[ ]
k k
i j
..., trong đó mỗi pixel
www.ngohaibac.net
18
liên kết với pixel trước nó. Ta có đường liên kết 4 hoặc liên kết 8 nếu các pixel
liên kết 4 hoặc 8 với nhau

a) Liên kết 4 b) Liên kết 8
Hình 1.4 : Những kiểu đường liên kết giữa các điểm ảnh.
Có thể dễ dàng nhận thấy, nếu có một đường liên kết giữa 2 điểm
,
[ ]
a a
i j
,
,
[ ]
b b
i j
, và giữa 2 điểm
,
[ ]
a a
i j
,
,
[ ]
c c
i j
thì cũng sẽ có đường liên kết giữa 2
điểm
[ ]
b b
i j

[ ]
c c
i j
. Liên kết có tính tương đối.
Đối tượng và nền : Ảnh sau khi được nhị phân hóa ( các điểm ảnh chỉ có
giá trị 0 hoặc 1) sẽ phân biệt được đối tượng và nền. Trong đề tài này, ta giả
định đối tượng là tập hợp các điểm ảnh có liên kết với nhau và có mức xám là
0 (đen), ta ký hiệu là S, và nền là những điểm có mức xám 1 (trắng) .
Biên: biên của một đối tượng S là tập các điểm trên S và có liên kết 4 với
~S (phần bù của S) hay nền của ảnh.
Miền trong của S : là các điểm thuộc S nhưng không nằm trên biên của
nó.
1.3.2.2. Các thuật toán xử lý ảnh số
Toán tử cửa sổ (windowing operator): Trong việc thực thi các thuật toán
xử lý ảnh số cơ bản, người ta thường sử dụng một toán tử đặc biệt gọi là toán
tử cửa sổ. Toán tử cửa sổ là một tập hợp có hình dạng nhất định, gồm các
pixel có liên kết với một pixel trung tâm, là pixel đang được xử lý. Các phép
www.ngohaibac.net
19
toán trên các pixel này sẽ có ảnh hưởng đến các pixel trung tâm cũng là các
pixel đang được xử lý trong một thuật toán xử lý ảnh.
Toán tử cửa sổ có nhiều hình dạng, tùy thuộc vào thuật toán thực hiện.
Tuy nhiên thường dùng nhất là các toán tử có dạng hình vuông với các cạnh
là một số lẻ, ví dụ :3x3, 5x5, 7x7...
Trong đồ án này, chúng em sử dụng thường xuyên toán tử cửa sổ có dạng
3x3, vì đây là kích thước hợp lý để thực hiện hiệu quả tất cả các thuật toán xử
lý cơ bản và nâng cao, đồng thời lại dễ thực hiện và rút ngắn tối đa quá trình
xử lý. Nếu sử dụng cửa sổ 5x5 và 7x7, thời gian xử lý sẽ tăng lên rất nhiều.
Tăng độ tương phản : Ảnh sau khi thu được từ camera, có thể do sự
tương phản ảnh sáng kém, dẫn đến độ chói quá cao, khó phân biệt. Để cải
thiện ảnh, hỗ trợ các quá trình xử lý cao hơn, ta sử dụng các phương pháp
hiệu chỉnh: hiệu chỉnh min-max, hiệu chỉnh histogram, hiệu chỉnh Gamma, ...
Ở đây ta sử dụng phương pháp hiệu chỉnh min-max vì nó dãn đều mức
xám của ảnh trong dải cho phép (không ảnh hưởng đến mức xám chung).
Công thức để nâng cấp ảnh theo hiệu chỉnh min-max:
min
max min
.256
old
new
I I
I
I I
÷
=
÷
Trong đó:
max
I
,
min
I
- là các mức xám cao nhất và thấp nhất.
new
I
,
old
I
- là mức xám sau khi hiệu chỉnh và trước khi hiệu chỉnh.
Sau khi hiệu chỉnh mức xám, ta sẽ dãn mức xám của ảnh ra các giá trị cách
biệt nhau hơn, tạo thuật tiện cho việc xử lý và nhận dạng sau này.
Các thuật toán nhân chập
Nhân chập (convolution) : nhân chập không phải là một thuật toán xử lý
ảnh, mà là phép toán thông dụng trong các thuật toán xử lý ảnh sử dụng toán
www.ngohaibac.net
20
tử cửa sổ. Nhân chập được sử dụng trong các bài toán dò biên (edge
detection) và lọc tuyến tính (linear filter).
Nhân chập tính toán ra giá trị mới của pixel trung tâm của toán tử cửa sổ,
bằng cách thực hiện phép tính với các pixel lân cận và chính pixel trung tâm.
Việc thực thi phép nhân chập như sau: cho một cửa sổ với pixel trung tâm
chạy trên toàn bộ frame ảnh, với mỗi cửa sổ 3x3 thu được, ta thực hiện phép
toán :
1 1
1 1
( , ) ( , ). ( , )
j i
n i m j
I i j c n m I n m
+ +
= ÷ = ÷
=
¿ ¿
(1.1).
Kết quả tính được cho ra giá trị mới của pixel trung tâm.
Trong (1.1), c(n,m) là các phần tử của một ma trận gọi là mặt nạ (mask).
Mỗi thuật toán xử lý khác nhau sử dụng một mặt nạ khác nhau để tính giá trị
của các điểm ảnh.
Lọc tuyến tính, dò biên: Đây là 2 thuật toán cơ sở sử dụng phép nhân
chập.
Lọc tuyến tính(linear filter) có tác dụng cải thiện ảnh, loại bỏ nhiễu hỗ trợ
cho các quá trình xử lý cao hơn.
Mỗi bộ lọc khác nhau sử dụng một mặt nạ khác nhau, cho hiệu quả khác
nhau tùy vào mục đích sử dụng và tình trạng của ảnh sau khi thu thập. Ví dụ
đối với ảnh có nhiễu phân bố đều, ngẫu nhiên độc lập với mỗi pixel, ta có thể
sử dụng mặt nạ dành cho lọc trung bình, mặt nạ này sẽ làm giảm ảnh hưởng
của nhiễu đối với pixel trung tâm bằng cách lấy trung bình cộng các pixel lân
cận trong cửa sổ.
11 12 13
21 22 23
31 32 33
1 1 1
1
1 1 1
9
1 1 1
c c c
c c c c
c c c
| | | |
| |
= =
| |
| |
\ . \ .
Nếu ảnh có nhiễu Gaussian, ta sử dụng mặt nạ
www.ngohaibac.net
21
11 12 13
21 22 23
31 32 33
1 2 1
1
2 4 2
16
1 1 1
c c c
c c c c
c c c
| | | |
| |
= =
| |
| |
\ . \ .

a) Trước khi lọc b)Sau khi lọc
Hình 1.5 : Kết quả của phép lọc Gaussian với cửa sổ 3x3
Dò biên : Biên của một đối tượng được xác định ở nơi mức xám của các
pixel có sự thay đổi đột ngột. Có nhiều cách xác định biên, như dò biên theo
gradient, dò biên bằng cách lấy đạo hàm bậc 2 của mức xám theo tọa độ
pixel. Hầu hết các thuật toán dò biên sử dụng nhân chập, dù không phải là
tất cả . Thuật toán dò biên mà chúng em sử dụng trong đồ án này là thuật
toán Laplacien.
Thuật toán Laplacien dò biên chỉ quan tâm đến sự thay đổi đột ngột của
mức xám ( lấy đạo hàm bậc 2 ) mà không quan tâm đến hướng của biên.
Thuật toán này được thực thi bằng cách sử dụng mặt nạ:
11 12 13
21 22 23
31 32 33
1 1 1
1 8 1
1 1 1
c c c
c c c c
c c c
÷ ÷ ÷
| | | |
| |
= = ÷ ÷
| |
| |
÷ ÷ ÷
\ . \ .
cho liên kết 8
www.ngohaibac.net
22
11 12 13
21 22 23
31 32 33
0 1 0
1 4 1
0 1 0
c c c
c c c c
c c c
| | | |
| |
= = ÷
| |
| |
\ . \ .
cho liên kết 4


a) Ảnh gốc b) Kết quả dò biên
Hình 1.6 : Kết quả thuật toán dò biên
Phân ngưỡng, phân vùng và nhị phân hóa ảnh số: Ảnh sau quá trình tiền
xử lý, nâng cấp, để tới những quá trình xử lý cao hơn cần được nhị phân hóa,
phân vùng thành các đối tượng riêng biệt.
Tìm ngưỡng : đây là quá trình tìm ra ngưỡng của một ảnh để thực hiện
việc phân vùng. Ngưỡng đóng vai trò quyết định quá trình nhị phân hóa ảnh
số có hiệu quả hay không. Nếu chọn ngưỡng không tốt, sẽ bỏ qua một số đối
tượng, hoặc cho đối tượng với kích thước, vị trí không đúng, hoặc tệ hơn là
làm các đối tượng không phân biệt được với nhau.
Có nhiều thuật toán tìm ngưỡng, cho kết quả khác nhau : Trong đó điển
hình là tìm ngưỡng trung bình và tìm ngưỡng theo histogram.
Tìm ngưỡng trung bình, ngưỡng được tính theo công thức:
www.ngohaibac.net
23
1 1
1
( , )
.
n m
tb
i j
ng tb
I I i j
n m
I I
= =
=
= + A
¿¿
n x m - kích thước ảnh

tb
I
,
ng
I
, A - mức xám trung bình, giá trị ngưỡng và số gia hiệu chỉnh.
Tìm ngưỡng theo histogram: là phương pháp tìm ngưỡng dựa theo lược
đồ xám.
Hình 1.7 : Phân ngưỡng theo lược đồ xám
Ngưỡng tìm được theo công thức:
ng
I
=(
max1
I
+
max2
I
)/2. Trong đó
max1
I

max2
I
là 2 mức xám tương ứng cực đại trên histogram.
Phân vùng và nhị phân hóa ảnh số: sau khi tìm ngưỡng, ta có thể nhị
phân hóa ảnh số và tách các đối tượng. Trong ảnh xám ban đầu, ta coi đối
tượng là những vùng ảnh có mức xám thấp, nền là vùng ảnh có mức xám
cao. Ta có thể tách đối tượng ra bằng thuật toán phân ngưỡng:
www.ngohaibac.net
24
Ta sẽ được đối tượng có màu đen( mức xám 1) và nền có màu trắng (mức
xám 0).
Xử lý đồng cấu ảnh nhị phân
Ảnh nhị phân thu được sau khi phân ngưỡng, phân vùng ảnh thành các
đối tượng, vẫn có thể chưa hoàn chỉnh để thực hiện các quá trình phân tích
tiếp theo. Đó là do trên ảnh vẫn có thể tồn tại các nhiễu là các chấm đen chưa
bị loại bỏ sau các thuật toán nâng cấp ảnh và lọc, hoặc do ngưỡng được chọn
chưa thực sự tốt để tách hoàn toàn các đối tượng. Để giải quyết vấn đề này, ta
sử dụng các thuật toán xử lý đồng cấu ảnh nhị phân (morphological
algorithms) .
Có 2 phương pháp xử lý tiêu biểu : Thuật toán làm đầy( dilation) và làm
mảnh (erosion).
2 phương pháp này đều sử dụng một cửa sổ- phần tử cấu trúc(structure
element) quét qua ảnh. Dựa trên việc phân tích cửa sổ này ta tính ra giá trị
của pixel trung tâm.
- Làm đầy (dilation)
( , ) I i j
= 0 chỉ khi tất cả các pixel trong phần tử
cấu trúc có giá trị bằng 0 (cửa sổ nằm hoàn toàn bên ngoài đối
tượng)
- Làm mảnh (erosion)
( , ) I i j
= 1 chỉ khi tất cả các pixel trong phần tử
cấu trúc có giá trị bằng 1 ( cửa sổ nằm hoàn toàn trong đối tượng )
Kết quả của quá trình làm mảnh là ảnh sẽ loại bỏ bớt được những nhiễu
nhỏ, đồng thời làm nhỏ bớt đối tượng, tách các đối tượng gần nhau ra. Để
khôi phục đối tượng trở lại như cũ, ta dùng thuật toán làm đầy. Sau quá trình
này các nhiễu đã bị loại bỏ sẽ không xuất hiện trở lại. Có thể loại bỏ hẳn các
nhiễu tương đối lớn bằng cách thực hiện nhiều lần thuật toán làm mảnh và
làm đầy. Tuy nhiên sau đó hình dạng đối tượng không được khôi phục hoàn
toàn như trước.
www.ngohaibac.net
25
Hình 1.8 : Loại bỏ nhiễu và khôi phục đối tượng bằng quá trình làm mảnh-làm đầy.
Bài toán đánh nhãn đối tượng: với phương pháp xử lý đồng cấu ảnh nhị
phân, ta đã được 1 ảnh nhị phân với các đối tượng được tách ra rõ rệt, và loại
bỏ được các nhiễu. Để thực hiện việc xác định các đặc trưng hình học của đối
tượng, phục vụ cho hệ thống định vị và nhận dạng, cần phải phân biệt các
đối tượng (các vùng ảnh đen) với nhau bằng cách gán cho chúng các nhãn
khác nhau.
Thuật toán gán nhãn đối tượng cũng sử dụng một cửa sổ 3x3 chạy khắp
frame. Pixel trung tâm sẽ được kiểm tra để gán nhãn, và các pixel lân cận
được dùng để xác định nhãn mới cho pixel trung tâm. Thuật toán thực hiện
như sau:
www.ngohaibac.net
26
Hình 1.9 : Sơ đồ thuật toán gán nhãn đối tượng
Thuật toán gán nhãn đối tượng được thực hiện như sau: ban đầu ta khởi
tạo biến đếm đối tượng n_object=0. Cửa sổ đọc từ vị trí xuất phát (góc trái
www.ngohaibac.net
27
phía trên của frame). Kiểm tra xem pixel trung tâm có bằng 0. Nếu khác 0 thì
dịch cửa sổ. Nếu bằng 0, kiểm tra nhãn của pixel trung tâm(pixel_index). Nếu
khác 0 thì quay trở lại. Nếu bằng 0 thì kiểm tra nhãn các pixel lân cận
(pixel_nei_index) và gán pixel_cen_index=min(pixel_nei_index). Nếu
pixel_cen_index khác 0 thì dịch cửa sổ. Nếu bằng 0 thì pixel đó là thuộc đối
tượng chưa đánh nhãn. Ta tăng biến đếm đối tượng n_object thêm 1, đồng
thời gán pixel_cen_index = n_object. Sau đó quay trở lại dịch cửa sổ.
Với thuật toán này, ta sẽ thực hiện đánh nhãn đối tượng gồm các pixel có
liên kết 8 với nhau. Nhãn đối tượng được lưu vào một phần của thông tin về
pixel chứa trong RAM.
Các đặc trưng hình học của đối tượng
Sau khi ảnh đã được phân vùng và đánh nhãn thành công, ta thực hiện
việc xác định các đặc trưng của đối tượng.
Các đặc trưng hình học của đối tượng cần được xác định bao gồm :
-Diện tích: bằng số pixel của đối tượng :

1 1
( , )
n m
i j
A I i j
= =
=
¿¿ trong đó
( , ) I i j
=1 hoặc 0;
-Chu vi đối tượng: bằng số pixel nằm trên biên đối tượng.
-Vị trí (tọa độ) của đối tượng, cũng là tọa độ trọng tâm vật thể,được tính
theo công thức :
1 1
1 1
1
. ( , );
1
. ( , );
n m
i j
n n
i j
x i I i j
A
y j I i j
A
= =
= =
=
=
¿¿
¿¿
www.ngohaibac.net
28
1.4. Một số giải pháp phần cứng cho hệ thống thị giác máy
Có thể thấy, các thuật toán xử lý ảnh số trong hệ thống thị giác máy đều
tương đối phức tạp, với khối lượng tính toán rất lớn (hàng trăm ngàn pixel).
Do đó, để thỏa mãn yêu cầu về tốc độ và hiệu suất xử lý, đòi hỏi những nền
phần cứng đủ mạnh với khả năng xử lý và tính thời gian thực cao.
Dưới đây là một số giải pháp phần cứng thường được sử dụng cho một hệ
thống xử lý ảnh số.
FPGA
Đây là giải pháp về phần cứng mà hay được sử dụng hiện nay. Tận dụng
đặc tính của FPGA là linh hoạt và tốc độ xử lý nhanh (cứng hoá các giải
thuật), đặc biệt với khả năng xử lý song song, FPGA rất phù hợp với các bài
toán xử lý ảnh đòi hỏi một khối lượng tính toán phức tạp.
DSP Processor
DSP Processor được giới thiệu đầu tiên vào những năm 1978, 1979 bởi
Intel, Bell Labs. Các bộ xử lý DSP có những đặc tính nổi bật như sau:
- Thích hợp cho các quá trình cần xử lý theo thời gian thực
- Hiệu năng được tối ưu với dữ liệu dạng luồng
- Chương trình và dữ liệu được bố chí riêng biệt (kiến trúc Harvard)
- Tích hợp các chỉ thị lệnh đặc biệt SIMD (Single Instruction, Multiple
Data)
- Không hỗ trợ đa nhiệm
- Tương tác trực tiếp với bộ nhớ của thiết bị
- Tích hợp sẵn ADC và DAC
www.ngohaibac.net
29
DSP Processor ngày nay đã được tích hợp nhiều thành phần khác nhau,
làm tăng khả năng linh hoạt và tốc độ xử lý. Đặc biệt các DSP Processor rất
thích hợp cho những nhu cầu cần tính toán nhanh, xử lý số thực. Đặc biệt một
số còn có sẵn những chỉ thị lệnh giúp cho việc tính toán ma trận, tích chập
hay thậm chí các phép biến đổi DCT trong quá tình nén ảnh. Với những ưu
điểm đó DSP Processor được dùng trong nhiều thiết bị xử lý ảnh chuyên
nghiệp.
Mainboard, laptop
Đây là một trong những phương pháp đơn giản nhất. Có thể tận dụng các
mainboard máy tính hay thậm chí các máy tính xách tay với chức năng là một
đơn vị xử lý ảnh, và đưa ra quyết định. Với việc kết nối một camera hay
webcam ta hoàn toàn chủ động trong quá trình nhận/xử lý ảnh. Các giao tiếp
ngoại vi phổ biến như UART, Parallel, USB hay Keyboard.
Việc sử dụng mainboard, laptop sẽ có những ưu/ nhược điểm sau:
- Ưu điểm
- Có tốc độ xử lý cao
- Dễ dàng lập trình, kiểm lỗi
- Hệ điều hành quen thuộc (windows/linux)
- Các công cụ lập trình/biên dịch phổ biến (MSVC, gcc)
- Nhược điểm
- Kích thước, khối lượng lớn
- Dễ hư hỏng do va đập hay các tác nhân khác
- Giá thành rất đắt (>600$)
- Có quá nhiều thành phần không sử dụng đến
www.ngohaibac.net
30
- Chỉ có thể giao tiếp với ngoại vi thông qua các chuẩn phổ biến như
UART, USB
Ngoài các giải pháp trên, còn nhiều những giải pháp phần cứng khác cho
một hệ thống xử lý ảnh số như : Main công nghiệp, Single Board
Computer(SBC) sử dụng Single on Chip (SoC)....
Trong đồ án này, chúng em sử dụng giải pháp là vi mạch khả trình FPGA
để xây dựng toàn bộ hệ thống xử lý ảnh và điều khiển trung tâm. Mục đích
của đề tài là xây dựng một hệ thống xử lý ảnh trên nên FPGA, trong đó thực
hiện được một số thuật toán cơ bản như lọc, phân ngưỡng, phân vùng, xử lý
đồng cấu ảnh nhị phân, đánh nhãn đối tượng và cuối cùng là tính toán các
đặc trưng của đối tượng. (vị trí, diện tích...)
Hệ thống được xây dựng với mục đích thử nghiệm những thuật toán xử
lý ảnh số đã được nghiên cứu, sử dụng công nghệ FPGA, đồng thời tạo nền
tảng cho hệ thống thị giác máy tính với những thuật toán xử lý cao hơn.
www.ngohaibac.net
31
Phần 2 : Khái quát về FPGA và mạch phát triển XST 3S1000 của
XESS
2.1. Giới thiệu chung về FPGA và ngôn ngữ VHDL
2.1.1. Khái niệm và ứng dụng FPGA
Khái niệm
FPGA (Field Programable Gate Arrays) là một thiết bị bán dẫn bao gồm
các khối logic lập trình được gọi là "Logic Block", và các kết nối khả trình. Các
khối logic có thể được lập trình để thực hiện các chức năng của các khối logic
cơ bản như AND, XOR, hoặc các chức năng kết hợp phức tạp hơn như
decoder hoặc các phép tính toán học. Trong hầu hết các kiến trúc FPGA, các
khối logic cũng bao gồm cả các phần tử nhớ. Đó có thể là các Flip-Flop hoặc
những bộ nhớ hoàn chỉnh hơn.
Các kết nối khả trình cho phép các khối logic có thể nối với nhau theo thiết
kế của người xây dựng hệ thống, giống như một bảng mạch khả trình.
Một kiến trúc khác tương tự nhưng đơn giản hơn FPGA, là CPLD (
Complex Programable Logic Device ). Thực chất đây là tiền thân của FPGA.
Năm 1984, Ross Freeman, một đồng sáng lập của Xilinx đã phát minh ra
FPGA. FPGA và CPLC đều bao gồm một số lượng khá lớn các phần tử logic
khả trình. Mật độ cổng logic (Logic Gate) của CPLD nằm trong khoản từ vài
nghìn cho đến 10 nghìn cổng. Trong khi đó FPGA thông thường chứa từ 10
nghìn cho đến vài triệu cổng.
Khác biệt cơ bản giữa FPGA và CPLD là ở kiến trúc của chúng. CPLD có
một kiến trúc bị giới hạn trong một hoặc một vài dãy logic khả trình cùng với
một lượng nhỏ thanh ghi định thời. Do đó nó kém linh hoạt hơn, nhưng lại có
ưu điểm là khả năng dự đoán trễ lớn hơn và tỉ lệ logic-kết nối cao hơn.
Ngược lại, trong kiến trúc của FPGA lại có sự trội hơn về số lượng kết nối.
Điều này làm cho nó trở nên linh hoạt hơn ( về số lượng thiết kế được thực
www.ngohaibac.net
32
thi bên trong) nhưng cũng đồng nghĩa với việc phức tạp hơn trong quá trình
thiết kế.
Một khác biệt đáng chú ý nữa giữa FPGA và CPLD là : hầu hết các FPGA
hiện nay đều bao có các phần tử chức năng tích hợp cao hơn ( như bộ cộng,
nhân tích hợp) , và bộ nhớ tích hợp.
Một số kiến trúc FPGA hiện nay còn có thể cho phép cấu hình lại từng
phần (partial re-configuration). Có nghĩa là cho phép một phần của thiết kế
được cấu hình lại trong khi những thiết kế khác vẫn tiếp tục hoạt động.
Một ưu điểm khác của FPGA, là người thiết kế có thể tích hợp vào đó các
bộ xử lý mềm (soft processor) hay vi xử lý tích hợp (embedded processor).
Các vi xử lý này có thể được thiết kế như các khối logic thông thường, mà mã
nguồn do các hãng cung cấp, thực thi các lệnh theo chương trình được nạp
riêng biệt, và có các ngoại vi được thiết kế linh động ( khối giao tiếp UART,
vào/ra đa chức năng GPIO, ethernet...). Các vi xử lý này cũng có thể được lập
trình lại (re-configurable computing) ngay trong khi đang chạy.
Ứng dụng.
FPGA được ứng dụng điển hình trong các lĩnh vực như: xử lý tín hiệu số,
xử lý ảnh, thị giác máy, nhận dạng giọng nói, mã hóa, mô phỏng
(emulation)...FPGA đặc biệt mạnh trong các lĩnh vực hoặc ứng dụng mà kiến
trúc của nó yêu cầu một lượng rất lớn xử lý song song, đặc biết là mã hóa và
giải mã. FPGA cũng được sử dụng trong những ứng dụng cần thực thi các
thuật toán như FFT, nhân chập (convolution), thay thế cho vi xử lý.
Hiện nay công nghệ FPGA đang được sản xuất và hỗ trợ phần mềm bởi
các hãng như :Xilinx, Altera, Actel, Atmel... Trong đó Xilinx và Altera là 2
hãng hàng đầu. Xilinx cung cấp phần mềm miễn phí trên nền Windows,
Linux, trong khi Altera cung cấp những công cụ miễn phí trên nền Windows,
Linux và Solaris.
2.1.2. Kiến trúc FPGA
2.1.2.1. Kiến trúc chung FPGA
www.ngohaibac.net
33
Hình 2.1 : Kiến trúc chung của FPGA
Mỗi nhà sản xuất FPGA có riêng cấu trúc FPGA, nhưng nhìn chung cấu
trúc được thể hiện giống như trong hình bên trên. Cấu trúc FPGA bao gồm có
configuration logic blocks (CLBs), configurable I/O blocks (IOB), và
programmable interconnect. Và tất nhiên, chúng có mạch clock để truyền tín
hiệu clock tới các logic block, và thêm vào đó có các logic resources như
ALUs, memory và có thể có cả decoders. Các phần tử lập trình được của
FPGA có 2 dạng cơ bản là các RAM tĩnh (Static RAM) và anti-fuses.
Configurable Logic Blocks (CLBs)
Configurable Logic Blocks (CLBs) bao gồm các Look-Up Tables (LUTs) rất
linh động có chức năng thực thi các logic và các phần tử nhớ dùng như là các
flip-flop hoặc các chốt (latch). CLB thực hiện phần lớn các chức năng logic
như là lưu trữ dữ liệu,..
www.ngohaibac.net
34
Hình 2.2 : Một Logic Block điển hình
Configurable I/O Blocks
Input/Output Blocks (IOBs) điều khiển dòng dữ liệu giữa các chân vào ra
I/O và các logic bên trong của FPGA. Nó bao gồm có các bộ đệm vào và ra
với 3 trạng thái và điều khiển ngõ ra dạng open collector. Phần lớn là có trở
kéo lên ở ngõ ra và thỉnh thoảng lại có trở kéo xuống.IOBs hỗ trợ luồng dữ
liệu 2 chiều (bidirectional data flow) và hoạt động logic 3 trạng thái (3 state).
Hỗ trợ phần lớn các chuẩn tín hiệu, bao gồm một vài chuẩn tốc độ cao, như
Double Data-Rate (DDR).
Hình 2.3 : Configurable Logic Blocks
Programmable Interconnect
www.ngohaibac.net
35
Interconnect ở FPGA khác xa so với ở CPLD, tuy nhiên lại giống với của
gate array ASIC. Có một line dài được dùng để nối các CLBs quan trọng mà
chúng lại ở cách xa nhau mà không gây ra quá nhiều trễ. Chúng có thể được
dùng như là các bus ở trong chip. Có các line ngắn được dùng để liên kết các
CLBs riêng rẽ nhưng đặt gần nhau. Và cũng thường có vài ma trận chuyển
đổi (switch matrices), giống như trong CPLD, nối giữa các line dài và ngắn lại
với nhau theo một số cách đặc biệt. Các chuyển đổi lập trình được
(Programmable switches) bên trong chip cho phép kết nối giữa CLBs tới các
interconnect line và giữa interconnect line với các line khác và với switch
matrix. Các bộ đệm 3 trạng thái được dùng để kết nối phần lớn các CLBs với
các line dài (long line), tạo nên các bus. Các long line đặc biệt, gọi là các line
clock toàn cục (global clock lines), được thiết kế đặc biệt cho trở kháng thấp
và nhờ đó mà thời gian lan truyền nhanh hơn. Chúng được kết nối với các bộ
đệm clock và với mỗi phần tử được clock trong mỗi CLB.Đó là cách mà clock
có thể phân phối bên trong FPGA.
Hình 2.4 : Programmable Interconnect
Mạch đồng hồ (Clock Circuitry )
Các khối vào ra với bộ đệm clock high drive gọi là các clock driver,nằm rải
rác xung quanh chip. Các bộ đệm này được nối với các chân clock vào và lái
www.ngohaibac.net
36
các tín hiệu clock vào các đường clock toàn cục (global clock line) như mô tả
ở bên trên. Các đường clock được thiết kế sao cho thời gian thời gian lệch nhỏ
nhất và thời gian lan truyền nhanh. Thiết kế đồng bộ là yêu cầu bắt buộc với
FPGA, từ khi độ lệch tuyệt đối và trễ không được bảo đảm. Chỉ khi dùng các
tín hiệu clock từ các bộ đệm clock thì thời gian trễ tương đối và thời gian lệch
mới được đảm bảo.
2.1.2.2. So sánh giữa cấu trúc nhỏ và cấu trúc lớn
FPGA có cấu trúc nhỏ giống như các mảng cổng của hệ ASIC với các CLBs
chỉ bao gồm các phần tử cơ bản rất nhỏ như các cổng NAND, cổng NOR, …
Các nhà lý luận cho rằng các phần tử nhỏ có thể nói với nhau tạo lên các chức
năng lớn hơn mà không tốn nhiều các phần tử logic. Trong các FPGA có cấu
trúc lớn, các CLB có thể bao gồm 2 hoặc nhiều flip-flop, các thiết kế mà không
cần nhiều flip-flop sẽ khiến cho nhiều flip-flop không được dùng đến. Tiếc
rằng, các cấu trúc nhỏ lại yêu cầu khá nhiều nguồn kết nối (routing resource),
dẫn đến tăng không gian và thêm vào một lượng lớn trễ mà không thể bù lại
để có hiệu quả hơn.
2.1.2.3. So sánh giữa SDRAM Programming và Anti-fuse programming
Có 2 cách để lập trình FPGA. Cách đầu tiên là SDRAM Programming, bao
gồm một vài bit Static RAM cho mỗi phần tử lập trình. Ghi một bit với giá trị
0 sẽ ngắt switch, trong khi ghi giá trị 1 sẽ đóng switch. Cách còn lại là anti-
fuse bao gồm các cấu trúc rất nhỏ, không giống như các cầu chì thông
thường, bình thường chúng không tạo ra một kết nối nào cả. Một dòng điện
có cường độ nhất định trong khi lập trình thiết bị sẽ dẫn đến việc hai bên của
anti-fuse kết nối với nhau.
Thuận lợi của cấu trúc FPGA dựa trên SRAM là chúng dùng một quá trình
sản xuất chuẩn mà ở đó các kế hoạch sản xuất chip là gần như giống nhau và
luôn luôn được tối ưu cho khả năng hoạt động. Từ khi mà SRAM có thể lập
trình lại được thì FPGA có thể lập trình lại bất cứ khi nào muốn, thận chí
ngay cả khi chúng đang ở trong hệ thống, đơn giản như là ghi vào SRAM
thông thường. Chúng có nhược điểm là vùng nhớ volatile nên một vấn đề về
www.ngohaibac.net
37
nguồn có thể thay đổi nội dung của RAM. Các thiết bị dựa trên SDRAM cũng
có thời gian trễ đường truyền lớn.
Thuận lợi của cấu trúc FPGA dựa trên anti-fuse là chúng là non-volatile và
các trễ khi nối dây sẽ rất nhỏ vì thế nên chúng có khuynh hướng nhanh hơn.
Nhược điểm là chúng yêu cầu một bộ lập trình bên ngoài để lập trình và mỗi
khi lập trình xong thì không thể thay đổi được.
2.1.2.4. Cấu trúc FPGA của Spartan 3
Cấu trúc tổng quan của Spartan 3 gồm có 5 thành phần có chức năng khả
trình cơ bản sau:
- Configurable Logic Blocks (CLBs) bao gồm các Look-Up Tables (LUTs)
rất linh động có chức năng thực thi các logic và các phần tử nhớ dùng như là
các flip-flop hoặc các chốt (latch). CLB thực hiện phần lớn các chức năng logic
như là lưu trữ dữ liệu,..
- Input/Output Blocks (IOBs) điều khiển dòng dữ liệu giữa các chân vào
ra I/O và các logic bên trong của FPGA. IOBs hỗ trợ luồng dữ liệu 2 chiều
(bidirectional data flow) và hoạt động logic 3 trạng thái (3 state). Hỗ trợ phần
lớn các chuẩn tín hiệu, bao gồm một vài chuẩn tốc độ cao, như Double Data-
Rate (DDR).
- Block RAM cho phép lưu trữ dữ liệu dưới dạng các khối (block) dual-
port 18-Kbit.
- Multiplier Blocks cho phép 2 số nhị phân 18bit làm đầu vào và dễ dàng
tính toán tích của chúng.
- Digital Clock Manager (DCM) Blocks cung cấp khả năng tự xác định
xung clock, là giải pháp số hoàn chỉnh cho các tín hiệu clock phân phối, trễ,
nhân, chia và dịch bit.
Các phần tử này được tổ chức như trong hình sau:
www.ngohaibac.net
38
.
Hình 2.5 : Cấu trúc các thành phần của Spartan 3A
Từ hình vẽ ta thấy, các IOBs bao quanh các mảng CLBs, riêng Spartan-3E
chỉ có một vòng các IOBs. Mỗi cột block RAM bao gồm một vài block RAM
18-Kbit, mỗi block RAM lại gắn liền với một multiplier dành riêng. Các DCM
được đặt ở các vị trí: 2 DCM phía trên và 2 cái phía dưới của thiết bị, và đối
với các device lớn hơn thì có thêm các DCM ở phía bên cạnh.
Đặc điểm chung mạng Spartan-3 là kết nối liên thông giữa 5 phần tử cơ
bản này, và truyền tín hiệu giữa chúng. Mỗi thành phần chức năng này có
một switch matrix dành riêng để cho phép chọn lựa kết nối cho việc đi dây
trong FPGA.
2.1.3. Trình tự thiết kế một chip
Trình tự thiết kế một hệ thống trên nền FPGA bao gồm các bước sau:
www.ngohaibac.net
39
Hình 2.6. Design Flow
Ghi các đặc điểm kĩ thuật
Tầm quan trọng của các đặc điểm kĩ thuật (specification) không thể phóng
đại quá. Nó chỉ tuyệt đối cần đặc biệt khi là một hướng dẫn để chọn công
nghệ phù hợp và tạo những yêu cầu của bạn cho các nhà sản xuất chip. Và
các đặc điểm kĩ thuật cho phép mỗi kĩ sư hiểu về thiết kế hệ thống chung và
công việc của họ trong hệ thống đó là gì. Và nó cũng cho phép các kĩ sư thiết
kế giao diện đúng cho một loạt các phần của chip. Các đặc điểm kĩ thuật cũng
giúp tiết kiệm thời gian và sự hiểu lầm. Sẽ không làm gì được nếu không có
các bảng ghi các đặc điểm kĩ thuật.
Chi tiết kĩ thuật nên bao gồm các thông tin sau đây:
- Sơ đồ khối bên ngoài để chỉ ra chip đó được đặt vào trong hệ thống
như thế nào.
- Sơ đồ khối bên trong chỉ rõ mỗi chức năng của các thành phần.
www.ngohaibac.net
40
- Miêu tả các chân vào ra bao gồm khả năng lái đầu ra, mức ngưỡng
đầu vào.
- Thời gian ước lượng bao gồm thời gian thiết lập và giữ ở các chân vào,
thời gian lan truyền ra các cổng ra và thời gian chu kì clock.
- Đếm xấp xỉ số gate
- Dạng đóng gói
- Tiêu thụ nguồn
- Giá cả
- Các thủ tục để kiểm tra
Một điều rất quan trọng nữa là đó là các tài liệu trực tuyến. Rất nhiều
phần sẽ được dự đoán tốt nhất ở trong đó, nhưng sẽ thay đổi trong quá trình
chip được thiết kế.
Chọn công nghệ
Mỗi khi một chi tiết miêu tả kĩ thuật được xuất bản, nó có thể được dùng
để chọn nhà sản xuất chip tốt nhất với công nghệ và cấu trúc giá cả là tốt nhất
đáp ứng được yêu cầu của bạn.
Chọn một hướng tiếp cận thiết kế
Tại thời điểm này bạn phải quyết định cách thực hiện thiết kế mà bạn
mong muốn. Đối với các chip nhỏ thì cách tiếp cận bằng sơ đồ nguyên lý
(schematic) thường được chọn, đặc biệt là khi các kĩ sư thiết kế đã quen thuộc
với các công cụ này. Thế nhưng đối với các thiết kế lớn hơn, nguôn ngữ miêu
tả phần cứng (hardware description language) HDL như Verilog và VHDL
được dùng bởi khả năng mềm dẻo, dễ đọc, dễ chuyển giao. Khi dùng ngôn
ngữ cấp cao, phần mềm tổng hợp (synthesis software) sẽ được yêu cầu tổng
hợp (synthesize) thiết kế. Có nghĩa rằng phần mềm này sẽ tạo ra các cổng ở
cấp thấp từ miêu tả ở cấp cao hơn.
Chọn công cụ tổng hợp
Tại điểm này, bạn phải quyết định chọn phần mềm tổng hợp nào sẽ được
dùng nếu bạn có kế hoạch thiết kế FPGA với HDL. Điều đó rất quan trọng kể
www.ngohaibac.net
41
từ khi mỗi công cụ tổng hợp được khuyên dùng và sự ủy thác của cách thiết
kế phần cứng nên nó có thể hoạt động tổng hợp đúng hơn.
Thiết kế chip
Có một số cách để thiết kế chip
- Top-down design (Thiết kế từ trên xuống dưới)
- Macros
- Synchronous design
- Protect against metastability
- Avoid floating nodes
- Avoid bus contention
Mô phỏng – cái nhìn tổng quan về thiết kế
Mô phỏng là một quá trình liên tục khi mà thiết kế xong. Từng phần nhỏ
của thiết kế nên được mô phỏng trước khi kết hợp chúng thành các phần lớn
hơn. Điều này rất là cần thiết và sự mô phỏng theo thứ tự sẽ kiểm tra chức
năng hoạt động đúng của từng phần.
Mỗi khi thiết kế và mô phỏng hoàn thành, dẫn đến một cái nhìn tổng quan
khác về thiết kế vì thế thiết kế có thể được kiểm tra lại. Thật là quan trọng để
nhận các kết quả khác cho phép nhìn qua các mô phỏng và chắc chắn rằng
không có điều gì bị quên và không sự tổn hao nào gặp phải. Đó là một trong
những khái quát quan trọng nhất bởi vì khi mô phỏng đúng và thành công
thì bạn sẽ biết được chip của bạn sẽ hoạt động đúng trong hệ thống.
Tổng hợp
Nếu thiết kế dùng HDL, bước tiếp theo là tổng hợp chip, bao gồm việc
dùng phần mềm tổng hợp để chuyển đổi thật tối ưu từ thiết kế mức RTL
(register transfer level) sang thiết kế mức gate mà có thể gắn vào các khối
logic trong FPGA.
Place and Route
www.ngohaibac.net
42
Bước tiếp theo là sắp đặt chip, kết quả trong việc thiết kế vật lý cho chip
thực. Điều này bao gồm các công cụ của nhà sản xuất đẻ tối ưu lập trình cho
chip để thực hiện thiết kế. Sau đó, thiết kế được lập trình vào cho chip.
Mô phỏng lại – tổng quan cuối cùng
Sau khi sắp đặt xong, thì chip phải được mô phỏng lại với các con số về
thời gian tạo ra bởi các layout thực tế. Nếu mọi thứ đều tốt đến thời điểm
này, thì một kết quả mô phỏng mới sẽ đúng với các kết quả dự đoán.
Kiểm tra
Đối với các thiết bị lập trình được, đơn giản là lập trình thiết bị đó và ngay
lập tức có mẫu thử. Sau đó bạn có trách nhiệm đặt mấu thử này vào trong hệ
thống và xem xem hệ thống có làm việc đúng không. Nếu bạn làm lần lượt
các bước ở bên trên thì đa phần là hệ thống sẽ hoạt động đúng chỉ với một
vài lỗi rất nhỏ. Các lỗi này thường được làm việc xung quanh với việc thay
đổi hệ thống và thay đổi phần mềm hệ thống. Các lỗi này cần được kiểm tra
và trích dẫn lại để có thể được sửa chữa trong phiên bản tiếp theo của chip.
Kiểm tra hệ thống nhúng là cần thiết tại thời điểm này để đưa ra kết quả rằng
mọi phần của hệ thống đều hoạt động đúng khi kết hợp với nhau.
Khi các chíp được đưa vào sản xuất, rất cần thiết có một vài kiểm tra để có
một vài kiểm tra burn-in trong hệ thống để test thường xuyên hệ thống qua
thời gian dài. Nếu một chip được thiết kế đúng, thì nó chỉ bị hỏng khi lỗi điện
học hoặc lỗi cơ học sẽ thường xuyên xảy ra với loại kiểm tra khắc nghiệt này.
2.1.4. Ngôn ngữ mô tả phần cứng VHDL
VHDL là một ngôn ngữ mô tả phần cứng (hardware description
language), mô tả hành vi của mạch điện hoặc hệ thống, từ đó mạch điện vật
lý hoăc hệ thống có thể được thực thi.
VHDL là viết tắt của VHSIC Hardware Description Language. Bản thân
VHSIC là viết tắt của Very High Speed Integrated Circuits (mạch tích hợp tốc
độ cao), lần đầu tiên được sáng lập bởi United State Department of Defense
trong những năm 80, sau đó tạo ra VHDL. Phiên bản đầu tiên là VHDL 87,
www.ngohaibac.net
43
lần nâng cấp sau đó có tên là VHDL 93. VHDL là ngôn ngữ mô tả phần cứng
nguyên gốc đầu tiên được chuẩn hóa bởi Institue of Electrical and Electronics
Engineers (IEEE), tới chuẩn IEEE 1076. Trong IEEE 1164, có một chuẩn được
thêm vào là giới thiệu hệ thống logic đa giá trị (multi-valued logic system).
Động cơ thúc đẩy cơ bản khi dùng VHDL (hay dùng Verilog) là VHDL là
một ngôn ngữ độc lập chuẩn của các nhà công nghệ, các nhà phân phối do đó
chúng có khả năng portable và kế thừa cao (reusable). Hai ứng dụng trực tiếp
chính của VHDL là trong mảng các thiết bị logic lập trình được (
Programmable Logic Devices) (bao gồm CPLDs – Complex Programmable
Logic Devices và FPGAs – Field Programmable Gate Arrays). Mỗi khi mã
nguồn VHDL được viết, chúng có thể được dùng để thực thi mạch điện trong
các thiết bị lập trình được (từ Altera, Xilinx, Almel, ..) hoặc có thể gửi đến các
xưởng chế tạo các chíp ASIC. Hiện này, rất nhiều các chip thương mại phức
tạp (ví dụ như các microcontrollers ) được thiết kế dựa trên cách tiếp cận này.
Một điều chú ý về VHDL là trái ngược với các chương trình máy tính
thông thường được thực hiện tuần tự thì các câu lệnh được thực hiện song
song (concurrent). Vì lí do đó, nên VHDL thường được coi là một mã nguồn
hơn là một chương trình. Trong VHDL chỉ có các câu lệnh đặt trong
PROCESS, FUNCTION, hay PROCEDURE được thực thi tuần tự.
Trình tự thiết kế một chíp dựa trên VHDL
Một trong những tiện ích lớn của VHDL là cho phép tổng hợp mạch điện
hoặc hệ thống trong thiết bị khả lập trình (programmable devide) (PLD hoặc
FPGA) hoặc trong một hệ ASIC. Các bước thực hiện một project được tổng
kết như trong hình dưới:
www.ngohaibac.net
44
Hình 2.7: Qui trình thiết kế chip dựa trên VHDL
Chúng ta bắt đầu thiết kế bằng cách viết mã VHDL, được ghi trong các file
với đuôi mở rộng .vhd và tên giống như tên của ENTITY (thực thể). Bước
đầu tiên trong quá trình synthesis là biên dịch. Biên dịch là một quá trình
chuyển đổi giữa ngôn ngữ VHDL bậc cao tại Register Transfer Level (RTL)
sang netlist ở mức gate level. Bước thứ 2 là tối ưu thực hiện trên gate level net
list tối ưu về tốc độ hoặc cho diện tích. Cuối cùng là môt phần mềm place and
route sẽ tạo ra một physical layout cho các chíp PLD/FPGA hoặc tạo ra các
mặt nạ cho một hệ ASIC.
2.2. Giới thiệu mạch phát triển XST 3S 1000 của hãng XESS
Trang chủ của XESS Corp. : http://www.xess.com
X Engineering Software Systems Corporation (XESS) là công ty tại phía
Bắc Carolina (Mỹ) được thành lập từ năm 1990. XESS Corp. đưa ra những
công cụ phát triển logic lập trình được với giá phải chăng và các hướng dẫn
cho người dùng được viết bởi các kĩ sư, các nhà nghiên cứu, nhà thiết kế và
ngay cả của sinh viên.
www.ngohaibac.net
45
XESS giới thiệu 2 board chuyên dùng cho xử lý ảnh và audio:
2.2.1. XSA-3S1000
Hình 2.8 : KIT XSA-3S1000
KIT FPGA này bao gồm có 32 Mbyte DRAM đồng bộ và 2 Mbyte Flash để
xây dựng hệ thống vi điều khiển RISC hoàn thiện dựa trên phần mềm (soft-
core).
Có thể có tới 4 bitstream được lưu trữ trong Flash và ta có thể dùng switch
để lựa chọn bitstream nào được cấu hình cho FPGA khi áp đặt nguồn điện
vào KIT. Hoặc chúng ta có thể download trực tiếp vào FPGA nhờ cổng song
song (parallel port) dùng công cụ XSTOOLS ( trong bộ công cụ của XESS).
Giao diện CPLD trên XSA-3S1000 cũng hỗ trợ download dùng XILINX
iMPACT và circuit test/debug với ChipScope dùng cáp download song song
của Xilinx.
www.ngohaibac.net
46
Bổ sung thêm vào các chip FPGA, SDRAM và Flash, có thêm cổng VGA có
thể hiển thị đồ họa với 512 màu. Thêm vào đó, còn có thêm prototyping
header đưa cho ta 65 chân I/O để xây dựng các giao diện với các ngoại vi
khác.
Hình 2.9. Sơ đồ cấu trúc của XSA-3S1000
2.2.2. XST-3.0 (XStend Board)
www.ngohaibac.net
47
Hình 2.10 : XST-3.0 Board
Xstend Board là mạch hỗ trợ cho XSA Board có thể truy nhập qua giao
diện prototype. Bo mạch này mở rộng khả năng của XSA Board trên một số
mặt:
- Các pushbuttons, DIP switches, LEDs, và protopying area rất có ích
cho các thí nghiệm ở phòng Lab.
- Mạch stereo và dual-chanel analog I/O dùng cho xử lý âm thanh kết
hợp với các thành phần DSP được synthesize với phần mềm CORE
generation của Xilinx.
- Video decoder (bộ giải mã video) cho phép số hóa các video dạng
NTSC/PAL/SECAM trong các ứng dụng xử lý ảnh.
- Giao diện Ethernet 10/100 làm cho XSA Board có khả năng truy nhập
TCP/IP và các dạng mạng khác.
- Giao diện USB 1.1 làm cho XSA Board như một ngoại vi USB dạng low-
speed hoặc full-speed với PC.
www.ngohaibac.net
48
- Giao diện RS-232 rất hữu ích khi XSA Board cần phải gửi thông tin qua
liên kết giao tiếp nổi tiếp với tốc độ thấp.
- Giao diện IDE cung cấp cho XSA Board khả năng truy cập vào ổ đĩa
cứng (hard disk) để lưu và phục hồi dữ liệu.
- Các module với chức năng khác có thể thêm vào trong XST Board nhờ
các doughterboard connector.
Như vậy, kết hợp giữa XSA-3S1000 và XST-3.0 cho ta một Board ứng dụng
xử lý video rất hiệu quả.
Hình 2.11 : XST-3S1000
Hỗ trợ kĩ thuật: XESS có một group xsboard-user là một mailing list, giải
đáp mọi thắc mắc về thiết kế phần cứng và hệ thống phần mềm khi dùng bo
mạch logic khả trình của XESS Corp. Ngoài ra, các phần mềm và module
phát triển khá đầy đủ.
www.ngohaibac.net
49
2.3. Giới thiệu hãng Xilinx và các công cụ lập trình:
Hãng Xilinx
Xilinx là nhà phát triển hàng đầu hiện nay trong lĩnh vực chip khả trình.
Được thành lập bởi Ross Freeman, Bernie Vonderschmitt, và Jim Barnett, và
có trụ sở tại thung lũng Silicon. Trụ sở chính hiện nay ở San Jose , California.
Là thành viên của nhóm 100 công ti hàng đầu thế giới hiện nay do tạp chí
Fortune bình chọn.
Xilinx là nhà phát triển FPGA, CPLD được sử dụng rộng rãi trong những
ứng dụng truyền thông, tự động hóa, mật mã...và các lĩnh vực khác. Các sản
phẩm phần cứng của Xilin gồm có các dòng CPLD : CoolRunner, các họ
FPGA như Spartans, Virtex...
Xilinx còn cung cấp các phần mềm hỗ trợ lập trình FPGA, CPLD như ISE,
EDK, LogicCore, System Generator. Các công cụ này hỗ trợ rất nhiều cho quá
trình lập trình FPGA, giúp giảm thời gian và công sức thiết kế. Các phiên bản
phần mềm trên được nâng cấp thường xuyên. (Hiện giờ đã có phiên bản 10.1
cho các ứng dụng).
ISE 9.2
Là công cụ xây dựng và lập trình FPGA. ISE 9.2 thực sự là một môi trường
tổng hợp và thực thi toàn diện cho các chip khả trình của Xilinx. Với ISE9.2,
người thiết kế có thể lập trình, gỡ rối, mô phỏng, dịch và nạp chương trình
một cách nhanh chóng và dễ dàng. Người thiết kế cũng có thể thiết kế hệ
thống của mình theo nhiều cách khác nhau : với mã vhd, với sơ đồ RTL, hoặc
với sơ đồ trạng thái (state machine)
LogicCore 9.2
LogicCore 9.2 là thư viện của ISE 9.2, trong đó chứa các mã nguồn cho các
khối logic có thể được sử dụng cho việc xây dựng những hệ thống khác nhau.
Với Logic Core, người thiết kế có thể giảm đi rất nhiều công sức thiết kế, bỏ
qua việc xây dựng những thành phần đã có sẵn và tập trung vào việc xây
dựng hệ thống, đồng thời cũng tối ưu hóa các thiết kế của mình.
www.ngohaibac.net
50
EDK 9.2
Là công cụ để xây dựng hệ thống có các vi xử lý nhúng trong FPGA như
MicroBlaze (cho tất cả các họ FPGA ) và Power PC ( chỉ cho họ Virtex).
EDK 9.2 không chỉ giúp tạo ra các vi xử lý nhúng mà còn hỗ trợ thiết kế
các ngoại vi, giao diện cho chúng, với một thư viện ngoại vi đồ sộ, cho phép
vi xử lý thực thi bất cứ một nhiệm vụ nào mà các vi xử lý thông thường có
thể thực hiện được : như giao tiếp UART, Ethernet, các bộ nhớ RAM, ROM,
các I/O,....Các thiết kế vi xử lý nhúng cũng được tối ưu hóa. Ngoài ra EDK
cũng có công cụ mô phỏng rất mạnh.
System Generator 9.2
System Generator (sysgen)là công cụ phát triển hệ thống cho FPGA, cho
phép thiết kế hệ thống ở dạng các khối, và hỗ trợ mô phỏng, debug, tạo code
để nạp vào FPGA hoặc kết hợp vào những ứng dụng lớn hơn.
Sysgen được xây dựng như một Block Set của Simulink trong Matlab. Do
đó, sysgen thừa hưởng tất cả các ưu điểm của Simulink trong việc xây dựng
hệ thống và mô phỏng. Sysgen còn sử dụng thư viện của Logic Core để xây
dựng các block của mình. Trong thư viện của Sysgen có tất cả các khối thực
hiện các chức năng từ cơ bản như cộng, trừ, nhân, các khối logic,...cho đến
những thiết kế phức tạp hơn như các DSPs, bộ lọc số, nhân chập, UART..., các
bộ nhớ tích hợp: Single Port, DualPort Ram, FIFOs, các thanh ghi...
Sysgen còn cho phép người thiết kế tạo ra các khối để thực hiện những
nhiệm vụ riêng bằng khối Black Box, tại đây người thiết kế sẽ tạo ra các entity
và cài mã của nó vào Black Box để tạo ra các thiết kế riêng của mình.
Những thiết kế của Sysgen có thể được dịch ra nhiều kiểu dữ liệu, có thể
thành file bit để nạp ngay vào phần cứng, hoặc thành các thiết kế để ghép
vào một hệ thống lớn hơn.Với việc kết hợp với Mathwork để xây dựng
Sysgen, Xilinx đã làm cho việc thiết kế hệ thống trên nền FPGA của mình trở
nên thuận tiện và đơn giản hơn rất nhiều đối với người làm kĩ thuật. Trong
đồ án này, chúng em đã sử dụng Sysgen để xây dựng toàn bộ phần thuật
toán xử lý ảnh số cho thiết kế của mình.
www.ngohaibac.net
51
Phần 3 : Xây dựng hệ thống xử lí ảnh động trên nền FPGA
Yêu cầu hệ thống :
Trong phần này, chúng em trình bày chi tiết việc thực thi hệ thống cảm
biến thị giác trên nền FPGA. Dữ liệu ảnh thu được là của một tập hợp các đối
tượng tách rời nhau trên nền trắng. Nhiệm vụ của hệ thống là thu thập ảnh
và xử lý bằng các thuật toán xử lý đã nêu, nhằm loại bỏ nhiễu, tách các đối
tượng ra khỏi nền, gán nhãn cho đối tượng, đồng thời xác định các đặc trưng
cơ bản của đối tượng cho quá trình xử lý cao hơn hoặc cho việc điều khiển
tay máy thao tác với đối tượng.
Đồng thời, hệ thống cũng có nhiệm vụ giao tiếp với bộ xử lý trung tâm (
máy tính PC ) để truyền thông tin được xử lý ( số đối tượng, kích thước, vị
trí, ...của đối tượng ) và nhận tín hiệu điều khiển, trong khi điều khiển giao
tiếp VGA để hiển thị hình ảnh.
Hình 3.1 : Một ảnh cần được xử lý.
3.1. Sơ đồ cấu trúc hệ thống xử lí ảnh động
www.ngohaibac.net
52
Hình 3.2 : Sơ đồ chung của hệ thống
Trên đây là sơ đồ cấu trúc của hệ thống xử lý ảnh số. Hệ thống gồm có 3
phần chính sau:
www.ngohaibac.net
53
- Khối thu thập dữ liệu từ Camera và ghi vào SDRAM: dữ liệu từ video
decoder được xử lý ở khối Framegrabber chỉ lấy dữ liệu luminance và ghi
vào FIFO, sau đó được ghi vào SDRAM. Chip Video decoder được kích hoạt
nhờ tín hiệu điều khiển qua chuẩn I2C trên PC qua cổng Parallel Port (LPT).
- Khối xử lý ảnh: đọc dữ liệu từ SDRAM vào FIFO, xử lý và sau đó lại
ghi vào FIFO và ghi vào SDRAM qua dual port, SDRAM Controller. Chọn
thuật toán và kích hoạt từng module xử lý từng thuật toán đó được kích hoạt
từ bên ngoài qua các nút bấm (button) và các khóa chuyển (switch).
- Khối hiển thị ảnh lên VGA: hiển thị các pixel của ảnh trong SDRAM lên
màn hình máy tính CRT.
3.2. Xây dựng hệ thống thu thập, lưu trữ, xử lý và hiển thị ảnh
3.2.1. Thành phần thu thập ảnh Framegrabber
Nhiệm vụ: nhiệm vụ cơ bản của khối Framegrabber là đồng bộ với chip
Video Decoder để đọc các pixel và ghi vào FIFO.
Phân tích cách thực thi
Framegrabber dùng một Finite State Machine để giải mã và chốt thành
phần luminance (chỉ lấy các thành phần độ xám grayscale) từ pixel stream
của ITU-R BT.656 4:2:2 ( định dạng xuất ra mặc định của video decoder).
Pixel stream được định dạng như sau:
Hình 3.3: Pixel stream waveform
Đầu tiên là các byte đánh dấu bắt đầu một frame (FF-00-00), tiếp theo là
byte đồng bộ (embedded sync byte) ES. Theo sau là 1440 byte gồm: 720 giá trị
luminance (Y), 360 giá trị blue chromiance (Cb) và 360 giá trị red chrominace
(Cr) theo nhóm cứ một Cb và Cr thì có 2 giá trị Y:
1 b n r n
C Y C Y
+
.
www.ngohaibac.net
54
Sơ đồ cấu trúc của State machine như hình vẽ dưới đây:
Hình 3.4 : Framegrabber state machine
Từ hình vẽ ta thấy 3 trạng thái đầu: wait_for_embedded_sync,
wait_embedded_sync_1, wait_embedded_sync_2 dùng để kiểm tra 3 byte
đánh dấu đầu tiên (FF-00-00).
Tại trạng thái check_embedded_sync kiểm tra các tín hiệu đồng bộ gồm có
field id, field change và ghi byte đồng bộ vào FIFO để phục vụ cho việc ghi
dữ liệu vào FIFO và hiển thị VGA. Nếu có tín hiệu image_processing_start để
khởi động khối này thì tiếp tục chuyển sang các trạng thái tiếp theo để nhận
dữ liệu và ghi vào FIFO, còn không thì quay lại trạng thái ban đầu để kiểm
tra các byte đánh dấu của frame mới.
Sau khi đã đồng bộ xong thì liên tục thực hiện các trạng thái
grab_chromar và grab_luminance2. Dữ liệu lumincance được lấy ở trạng thái
grab_luminance2. Quá trình nhận dữ liệu kết thúc (tín hiệu done) xảy ra khi
trong các trạng thái này nhận được byte có giá trị 0xFF.
www.ngohaibac.net
55
Dữ liệu ghi vào FIFO bao gồm 16 bit có 2 bit đầu tiên là các bit đồng bộ:
field_id và field_change, theo sau là các bit 0 và byte luminance:
Pixel_in <= field_change & field_id & “000000” & luminance(7 downto 0)
3.2.2. Lưu dữ liệu từ Framegrabber vào SDRAM
Khối lưu dữ liệu này thực hiện rất đơn giản với State machine với 2 trạng
thái:
- Wait for pixel: chờ khi nào có pixel từ bộ đệm ghi Write Buffer, khi đó
chuyển sang trạng thái ghi pixel.
- Store pixel: Ghi pixel vào SDRAM qua SDRAM Controller
3.2.3. Các cơ chế ghi đọc SDRAM: SDRAM Controller, Dual Port SDRAM
SDRAM Controller
Đặc điểm: XSA Board synchronous DRAM (SDRAM) controller core chấp
nhận các yêu cầu đọc và ghi đơn giản từ phía host-side và tạo ra các dạng
sóng (timed waveform) cần thiết để thực hiện các hoạt động read, write với
SDRAM. Với chế độ đọc, ghi kiểu pipeline thì với một hàng của SDRAM có
thể không cần phải chốt sau mỗi chu kì đọc, vì thế tốc độ đọc và ghi có thể
gấp 10 lần so với cách đọc không pipeline từng pixel trong SDRAM ở các địa
chỉ không liền nhau. Bộ điều khiển cũng đảm nhiệm thực hiện refresh
SDRAM để giữ cho các dữ liệu không bị sai, và sẽ đặt SDRAM vào chế độ tự
làm tươi (self-refresh) nên dư liệu vẫn được giữ lại thậm chí khi bộ điều
khiển không hoạt động.
www.ngohaibac.net
56
Trong đồ án này, chúng em dùng read, write với chế độ pipeline.
Hình 3.5 : Pipelined Read Operation timing waveforms
Pipeline Read Operation
Trên đây là dạng sóng cho hoạt động đọc kiểu pipeline. Hoạt động đọc ở
chế độ pipeline được thực hiện bằng cách giữ cho tín hiệu rd lên cao trong
ghi liên tục cung cấp địa chỉ cần đọc mỗi khi mà tín hiệu earlyOpBegun hoặc
opBegun lên cao báo hiệu hoạt động đọc trước đã bắt đầu. Ví dụ trên mô tả 3
hoạt động đọc truy nhập các vùng nhớ SDRAM tại bank và hàng của
SDRAM đang được active. Nếu việc đọc thực hiện ở bank hoặc hàng khác
của SDRAM thì SDRAM Controller sẽ hoàn thành quá trình đọc hiện tại và
active bank và row mới trước khi tín hiệu earlyOpBegun và opBegun lên cao.
Pipeline Write Operation
www.ngohaibac.net
57
Hình 3.6 : Pipelined Write Operation timing waveforms
Hoạt động ghi ở chế độ pipeline được thực hiện bằng cách giữ cho tín
hiệu wr lên cao trong khi đó thì liên tục cung cấp địa chỉ mới mỗi khi tín hiệu
earlyOpBegun hay opBegun lên cao báo hiệu rằng quá trình ghi trước đó đã bắt
đầu. Ví dụ trên đây thực hiện 3 hoạt động ghi vào bộ nhớ trong bank và row
hiện tại của SDRAM. Nếu ghi vào địa chỉ ở bank hoặc row khác thì SDRAM
Controller sẽ hoàn thành việc ghi hiện tại và sau đó kích hoạt bank và row
mới trước khi tín hiệu earlyOpBegun và opBegun lên cao.
Nhờ đó mà việc ghi, đọc SDRAM trở nên dễ dàng hơn, theo cấu trúc sau:
www.ngohaibac.net
58
Hình 3.7 : Ghép nối với SDRAM Controller
Dualport Module for the SDRAM Controller
Chức năng: Dualport module đính vào phía các cổng bên host-side của bộ
điều khiển XESS SDRAM Controller và chia thành hai phần host-side riêng
biệt, mỗi phần có thể hoạt động như các cổng của host-side ban đầu do đó
ứng dụng có thể gồm nhiều thành phần truy nhập SDRAM nhưng chỉ dùng 1
bộ điều khiển SDRAM Controller. Bất kì ứng dụng nào thực hiện việc ghi đọc
bộ nhớ SDRAM đều độc lập với hoạt động đó ở các post khác. Băng thông
tổng cộng của SDRAM có thể được phân phối giữa 2 port để cho khớp với
data rate của các ứng dụng dùng dual port. Dualport module có thể xây
dựng kiểu tầng để xây dựng giao diện SDRAM với 3 hay nhiều cổng độc lập.
www.ngohaibac.net
59
Hình 3.8 : Ghép nối dualport với SDRAM Controller
Hình 3.9 : Xây dựng 4 ports SDRAM interface
Phân phối băng thông SDRAM cho các port của một dualport được thực
hiện qua tham số PORT_TIME_SLOTS, là một vector 16 bit với mỗi bit tương
ứng với một time slot trong khi một hoạt động đọc hoặc ghi của SDRAM có
www.ngohaibac.net
60
thể xảy ra. Thiết lập bit bằng 0 để cấu hình time slot cho port0, và thiết lập
bằng 1 để dành time slot cho port 1. Sau đây là một số cách thiết lập:
PORT_TIME_SLOTS => “1111000011110000” áp dụng 8 time slot cho mỗi
port, với mỗi port có 4 lần truy cập liền nhau vào SDRAM trước khi dual
port chuyển điều khiển cho port kia. Vì thế, mõi port được phân phối một
nửa băng thông của dual port.
Tham số PORT_TIME_SLOTS chỉ có tác động tới hoạt động của dualport
module khi các ứng dụng trên cả 2 port cùng cố gắng truy nhập vào SDRAM.
Ứng dụng ở một port sẽ truy nhập trực tiếp vào SDRAM nếu không có hoạt
động ghi và đọc đang tiến hành ở port kia. Vì thế PORT_TIME_SLOTS =
“1111111111111111” sẽ cho phép port 0 truy nhập SDRAM chỉ khi port 1
không truy cập, nhưng không ngăn hoàn toàn port 0 trong việc truy cập
SDRAM.
PORT_TIME_SLOTS = “1111111100000000” cấu hình một nửa băng thông
cho mỗi port tuy nhiên có thể block truy cập của một port lên tới 8 time slot
trong khi port kia được ưu tiên hơn. Để giảm trễ chỉ cần gàn
PORT_TIME_SLOTS = “0101010101010101” tuy nhiên sẽ lãng phí thời gian
bởi vì SDRAM Controller phải xóa pipeline trước mỗi quá trình chuyển port.
Vì thế, nhóm các bit liền nhau cùng một giá trị là giải pháp tốt nhất.
3.2.4. Image Processing core
Image Processing core là thành phần quan trọng nhất của hệ thống xử lý
ảnh, trong đó thực thi tất cả các thuật toán từ cơ bản( lọc, dò biên, phân
ngưỡng...) đến nâng cao ( gán nhãn đối tượng, xác định các đặc trưng ). Hoạt
động của thành phần này được điều khiển bởi bộ xử lý trung tâm.
Như đã thấy ở trên, mỗi pixel được thu thập, xử lý và lưu vào SDRAM có
dạng một word 16bit chứa thông tin như sau :
'field_id' | 'field_change' | "000000" | "luminance"
Trong đó, field_id và field_change là những bit thông tin về frame và
pixel, không được thay đổi trong quá trình xử lý. Luminance là số 8 bit biểu
www.ngohaibac.net
61
thị mức xám của pixel, sẽ được xử lý trong các thuật toán về sau. Còn lại 6 bit
cao sau field_change chưa được sử dụng đến, sẽ được dùng để gán nhãn đối
tượng.
Việc thiết kế Image Processing Core chủ yếu sử dụng công cụ System
Generator. Với công cụ này, người thiết kế có thể sử dụng các core có sẵn đã
được cung cấp bởi Xilinx, giảm thiểu công sức và thời gian thiết kế, đồng thời
vẫn có thể tự tạo ra các block riêng cho mình sử dụng công cụ Black Box, và
đặc biệt, việc gỡ rối và mô phỏng hệ thống có thể thực hiện hoàn toàn trên
Matlab, vốn đã rất quen thuộc với sinh viên Điều khiển tự động.
Hình 3.10: Sơ đồ khối xử lý ảnh.
Khối xử lý ảnh giao tiếp với SDRAM thông qua 2 FIFO là read_fifo và
store_fifo.
- read_fifo có nhiệm vụ đọc tuần tự dữ liệu từ SDRAM vào để khối xử lý
ảnh lưu vào buffer và xử lý. Việc đọc bắt đầu khi tín hiệu báo read_fifo
không còn trống (read_fifo_empty='0' hay read_fifo_avail='1') và dừng khi
đọc hết một frame. Việc đọc có thể tạm dừng khi sắp xảy ra xung đột quá
trình đọc và xử lý.
www.ngohaibac.net
62
- store_fifo có nhiệm vụ lấy dữ liệu đã xử lý từ khối xử lý ảnh và lưu tuần
tự trở lại vào SDRAM tại vị trí xác định. Cũng như read_fifo, việc ghi của
store_fifo điều khiển quá trình xử lý, khi store_fifo đầy thì tạm dừng việc xử
lý.
Cấu trúc của Image Processing Core gồm 2 thành phần :
fifo_to_buffer : thực thi việc giao tiếp với read_fifo và lưu dữ liệu vào một
bộ đệm. Thực chất bộ đệm dữ liệu là một Block Ram trong FPGA, có khả
năng lưu đến 27 dòng của frame. Việc lưu dữ liệu được điều khiển sao cho
tránh xung đột với thành phần xử lý.
Hình 3.11 : Khối ghi dữ liệu từ read_fifo vào Buffer
processing_algorithms : lựa chọn, thực thi tất cả các thuật toán xử lý ảnh,
từ lọc, dò biên, các thuật toán xử lý đồng cấu,... cho đến phân ngưỡng, phân
vùng và gán nhãn đối tượng. Đồng thời thành phần này còn thực hiện giao
tiếp giữa Image Processing Core trong việc giao tiếp với store_fifo để đưa dữ
liệu xử lý ra ngoài.
www.ngohaibac.net
63
Hình 3.12 : Khối thuật toán xử lý ảnh
Khối xử lý này đọc dữ liệu từ bộ đệm theo cùng một phương pháp trong
tất cả các thuật toán xử lý. Điều này có thể gây kéo dài thời gian xử lý đối với
một số ít thuật toán, nhưng lại giúp tiết kiệm rất nhiều tài nguyên và công
sức thiết kế cũng như giảm thiểu khả năng gây lỗi hoặc nhầm lẫn trong quá
trình thiết kế.
Việc ghi và đọc dữ liệu ở bộ đệm buffer như sau:
Ban đầu ta đọc tuần tự dữ liệu vào buffer cho đến khi đầy 10 dòng, ta lại
quay ngược trở lại vị trí ban đầu và tiếp tục đọc. Đồng thời, cửa sổ ghi ra để
xử lý được dịch tuần tự cho đến hết 10 dòng , rồi cũng quay ngược trở lại
dòng đầu tiên. Việc ghi và đọc được điều khiển sao cho không xảy ra sự xung
đột : chỉ ghi vào những dòng đã xử lý và chỉ đọc khi đã ghi đủ số dòng cần
thiết để xử lý.
Việc đọc và ghi như trên cho phép sử dụng một cách hiệu quả số block
ram hữu hạn của FPGA, tránh hoàn toàn khả năng xung đột đọc/ghi, đồng
thời loại giúp cho việc đọc và ghi trở nên tương đối độc lập với nhau, giảm
thiểu sai sót trong quá trình xử lý.
Việc đọc và ghi cũng được điều khiển bởi tín hiệu báo từ read_fifo và
store_fifo: dừng ghi khi read_fifo trống (read_fifo_avail= 0) và dừng xử lý khi
store_fifo đầy (store_fifo_full = 1).
www.ngohaibac.net
64
Các khối xử lý cơ bản
Khối đọc dữ liệu : các cửa sổ được đọc ra từ bộ đệm, để đưa vào một
thanh ghi dịch 9 word. Việc đọc được thực hiện tuần tự từ trên xuống theo
từng cột từ trái sang, dữ liệu đọc ra được dịch dần vào thanh ghi dịch.
Hình 3.13 : Khối đọc dữ liệu từ buffer
Khi chuyển sang cửa sổ kế tiếp, do 2 cửa sổ kề nhau có chung 6 word nên
để tiết kiệm thời gian, ta sẽ không đọc lại từ đầu 6 word cũ mà sử dụng lại
chúng với sự trợ giúp của thanh ghi dịch. Do đó ta sẽ chỉ việc đọc tiếp 3 pixel
ở cột tiếp theo. Tín hiệu full_win báo hiệu một cửa sổ vừa được đọc xong, cần
đưa vào quá trình xử lý.
Thanh ghi dịch Pixel register : Thanh ghi này có nhiệm vụ ghi dần các
pixel đọc từ buffer do khối đọc dữ liệu điều khiển. Các pixel được dịch dần
trong quá trình xử lý, do đó, cứ mỗi 3 chu kì xử lý, trong thanh ghi lại lưu
một cửa sổ mới.
Hình 3.14: Sơ đồ khối thanh ghi dịch Pixel register
www.ngohaibac.net
65
Có thể thấy, với thanh ghi dịch này, ta có thể tận dụng tối đa khả năng xử
lý song song của FPGA cho các thuật toán xử lý ảnh số.
Khối xử lý : Khối xử lý bao gồm nhiều thuật toán xử lý khác nhau. Tuy
nhiên, cấu trúc của các thuật toán là tương đối giống nhau và ta có thể tận
dụng một cơ chế đọc duy nhất để dùng chung cho tất cả các thuật toán.
Cấu trúc bộ lọc tuyến tính, dò biên : Bộ lọc tuyến tính và dò biên theo
phương pháp Laplacien cùng sử dụng phép nhân chập với 2 mặt nạ khác
nhau. Do đó ta có thể ghép chung lại thành một khối. Phép nhân chập có thể
được thực hiện rất nhanh chóng sử dụng cấu trúc song song. Dưới đây là cấu
trúc bộ nhân chập trong các bộ xử lý này :
Hình 3.15 : Cấu trúc nhân chập
Bộ xử lý đồng cấu ảnh nhị phân : Khối này chủ yếu tính ra giá trị max,min
của các pixel trong cửa sổ, do đó sử dụng các block so sánh. Cấu trúc như
sau:
www.ngohaibac.net
66
Hình 3.16 : Cấu trúc bộ xử lý đồng cấu ảnh nhị phân.
Khối tính ngưỡng và phân ngưỡng : Ngưỡng được tính theo phương pháp
trung bình. Tổng mức xám của các pixel sẽ được cộng dần vào một thanh ghi
và thực hiện phép chia bằng cách dịch bit. Kết hợp nhiều khối dịch bit với
nhau cho phép ta thực hiện phép chia với sai số của ngưỡng nhỏ hơn 3 và
thuật toán chỉ cần thực hiện trong 1 chu kì xung.
Khối đếm đối tượng: Khối đếm đối tượng cũng tận dụng khả năng xử lý
song song của FPGA để thực hiện đếm đối tượng. Với khối này, việc gán
nhãn cho mỗi pixel dựa trên nhãn của các pixel lân cận chỉ cần thực hiện
trong 1 chu kì đồng hồ.
www.ngohaibac.net
67
Hình 3.17 : Khối gán nhãn đối tượng
Đầu vào khối gán nhãn đối tượng là 9 pixel của cửa sổ hiện tại, với pixel 5
là trung tâm, cần được xem xét để gán nhãn. Việc gán nhãn cho pixel trung
tâm thực hiện như thuật toán đã trình bày ở phần 1.
3.2.5. Hiển thị ảnh lên VGA: VGA Generator
VGA Color Signals
Có 3 tín hiệu color là: red, green và blue gửi tín hiệu màu sắc (color
information) đến màn hình VGA. Mỗi một tín hiệu điều khiển một súng bắn
điện tử (electron gun) để phóng các hạt electron vẽ lên một màu cơ bản tại
một điểm trên màn hình. Dải của tín hiệu nằm từ từ 0 V (tương ứng với màu
tối hoàn toàn) và 0.7V (sáng hoàn toàn) điều khiển cường độ của mỗi thành
phần màu và 3 thành phần màu kết hợp với nhau tạo lên màu của điểm ảnh
(dot) hay phần tử ảnh (pixel) trên màn hình.
Hình 3.19 : VGA Connection
www.ngohaibac.net
68
Mỗi tín hiệu màu analog có thể là một trong 8 mức bằng 3 tín hiệu digital
bằng cách dùng bộ chuyển đổi digital to analog 3 bit (DAC 3 bit). Do đó, 8
mức trên mỗi tín hiệu analog kết hợp với nhau tạo nên phần tử ảnh (pixel)
với 8 x 8 x 8 = 512 màu khác nhau. Tuy nhiên trong đồ án này, chúng em chỉ
dùng camera đen trắng nên hiển thị trên màn hình chỉ được 8 màu khác nhau
hay 8 mức thôi.
Hình 3.20 : 8 màu cơ bản
VGA Signal Timing
Mỗi một ảnh (hay frame) trên màn hình hiển thị là kết hợp của h dòng,
mỗi dòng có w pixel. Kích thước của mỗi frame được biểu diễn w x h dưới
các dạng tiêu biểu gồm 640 x 480m 800 x 600, 1024 x 768 và 1280 x 1024.
Hình 3.21 : CRT Display Timing Example
www.ngohaibac.net
69
Để vẽ một frame, có những mạch điện có trách nhiệm di chuyển dòng
electron từ trái sang phải và từ trên xuống dưới dọc theo màn hình gọi là
deflection circuit. Những mạch này yêu cầu phải có 2 tín hiệu động bộ để
khởi động và dừng dòng electron tại đúng thời điểm để cho một dòng các
điểm ảnh được vẽ dọc theo màn hình và mỗi dòng được điền theo cơ chế từ
trên xuống dưới để tạo lên một ảnh.
Sau đây là ví dụ VGA Display Timing với chế độ 640 x 480:
Hình 3.22 : 640 x 480 Mode VGA Control Timing
Nguyên tắc hoạt động của VGA Generator
Sơ đồ cấu trúc của bộ hiển thị hình ảnh lên VGA như trên hình vẽ dưới.
Hệ thống bên ngoài ghi giá trị pixel vào trong bộ đệm pixel (pixel buffer)
(trong trường hợp này là FIFO 256 x 16). Các pixel được lấy từ bộ đệm rồi ghi
vào trong thanh ghi pixel (pixel register). Mỗi pixel cso thể là 1, 2, 4, 8 hoặc 16
bit vì thế nên nội dung của thanh ghi pixel này được dịch sau mỗi xung clock
để thay thế pixel hiện tại theo thứ tự các bít có trọng số thấp đến cao. Các bit
này được gửi đến colormap circuit để chuyển các pixel này sang các giá trị
red, green và blue rồi gửi đến bộ DAC video bên ngoài.
Hai mạch tạo xung đồng bộ (pulse generation circuit) được dùng để tạo
các xung đồng bộ đứng và nằm ngang (horizontal và vertical). Bộ hirizontal
www.ngohaibac.net
70
sync generator có đầu ra là tín hiệu gate một chu kì trùng khớp với sườn lên
của xung đồng bộ ngang ( horizontal sync pulse), tín hiệu gate này nối với
tín hiệu clock-enable của bộ vertical sync generator vì thế nên clock-enable
chỉ cập nhật bộ đếm thời gian sau mỗi dòng pixel (line of pixels). Tín hiệu
gate của vertical sync generator được dùng như tín hiệu báo kết thúc một
frame cho các khối dữ liệu pixel bên ngoài, đồng thời nó cũng reset và xóa
toàn bộ nội dung của pixel buffer nên bộ VGA generator luôn khởi động từ
trạng thái xóa sạch hoàn toàn với mọi frame.
Bộ tạo tín hiệu đồng bộ cũng tạo ra các tín hiệu horizontal và vertical
blanking. Khi dùng phép toán OR logic ta được tín hiệu blanking toàn cục.
Các tín hiệu blanking được kết hợp với các bit có trọng số thấp hơn ở bộ đếm
horizontal pixel counter để xác định khi nào đọc pixel từ bộ đệm. Ví dụ, nếu
mỗi pixel có độ rộng 16 bit, thì một từ 16 bit sẽ cần được đọc sau mỗi chu kì
clock. Vì thế nên hoạt động đọc được khởi tạo bất cứ khi nào tín hiệu video
không trống và 2 bit thấp của bộ đếm pixel đều bằng 0.
Hình 3.23 : Sơ đồ khối cấu trúc của VGA Generator
www.ngohaibac.net
71
Tín hiệu full signal được gửi ra nguồn dữ liệu pixel bên ngoài để báo cho
biết khi nào thì dừng việc điền dữ liệu vào bộ đệm. Với bộ đệm FIFO 256, tín
hiệu full lên cao khi 5 bit cao của tín hiệu FIFO level bằng 11111. Khiến cho
bỏ trống 7 bit trong FIFO để điền các pixel khi các nguồn dữ liệu bên ngoài
đã chót gửi dữ liệu vào trong pipe. Đây gọi là cơ chế bộ đệm an toàn.
3.2.6. Picoblaze và hệ thống điều khiển trung tâm
3.2.6.1. Khái quát PicoBlaze
Vi điều khiển PicoBlaze là vi điều khiển nhúng 8 bit có cấu trúc RISC được
tối ưu phát triển cho các họ FPGA như Spartan 3, Virtex II và Virtex II Pro
của Xilinx. Với vi điều khiển này chúng ta có thể làm một bộ điều khiển dựa
trên nền vi điều khiển rất hiệu quả, hay xử lý dữ liệu đơn giản.
Vi điều khiển PicoBlaze được tối ưu về mặt hiệu suất và chi phí phát triển
thấp. Nó chiểm khoảng 96 FPGA slices, hay chỉ 12.5% của XC3S50 FPGA và
chiếm một phần rất nhỏ ở mức 0.3% của XC3S5000 FPGA. Bình thường mỗi
block RAM của FPGA có thể lưu trữ tới 1024 câu lệnh chương trình (program
instructions) và các lệnh này được tự động load trong khi cấu hình FPGA, khi
đó vi điều khiển PicoBlaze có thể hoạt động từ 44000 tới 100000 câu lệnh trên
giây (MIPS – million instructions per second) tùy thuộc vào họ FPGA được
dùng là loại gì và tốc độ của họ đó.
Nhân của vi điều khiển PicoBlaze được nhúng hoàn toàn trong FPGA và
không cần một nguồn thêm nào. Đơn giản là các ngoại vi của PicoBlaze có thể
tự do lựa chọn cho phù hợp với các mục đích đặc biệt, chức năng và yêu cầu
về giá cả của sản phẩm cuối cùng. PicoBlaze được nhúng vào dưới dạng một
mã nguồn VHDL vì thế nó có thể nhúng vào các đời FPGA sau này và do đó
project của chúng ta sẽ có tính kế thừa cao. Được nhúng trong FPGA, vi điều
khiển PicoBlaze sẽ giảm kích thước mạch, giá thiết kế và thực hiện.
PicoBlaze FPC được hỗ trợ bởi một số các công cụ phát triển phù hợp bao
gồm assembler và môi trường phát triển đồ họa tích hợp (IDE – integrated
development environment), graphical instruction set simulator và mã nguồn
www.ngohaibac.net
72
VHDL và khối mô phỏng. Và rất đơn giản là vi điều khiển PicoBlaze được hỗ
trợ trong môi trường phát triển Xilinx System Generator hay ISE.
Hình 3.24 : Sơ đồ khối cấu trúc của PicoBlaze
Vi điều khiển PicoBlaze có các đặc điểm sau:
- 16 thanh ghi dữ liệu chức năng chung có độ rộng 8 bit.
- Lưu trữ được 1K lệnh trong chương trình có thê lâp trình được trong
chip và tự động nạp khi cấu hình FPGA hay khi khởi động FPGA.
- Khối tính toán logic (Arithmetic Logic Unit – ALU) với các cờ CARRY
và ZERO.
- Một bảng RAM 64 byte.
- 256 đầu vào và 256 đầu ra dễ dàng có thể mở rộng thêm.
- Automatic 31 location CALL/RETURN stack.
- Predictable performance, luôn luôn dùng 2 xung nhịp hệ thống cho một
câu lệnh, có thể đạt tới 200 MHz hoặc 100 MIPS trong Virtex – II Pro FPGA.
- Đáp ứng ngắt nhanh; worst-case 5 clock cycles.
- Được tối ưu cho cấu truc Spartan – 3, Virtex II, và Virtex II Pro FPGA
của Xilinx chỉ chiếm 96 slices và 0.5 tới 1 block RAM.
- Hỗ trợ mô phỏng tệp lệnh assembler.
Vi điều khiển PicoBlaze được cung cấp dưới file nguồn VHDL gọi là
KCPSM3.vhd, đã được tối ưu về việc thực thi hiệu quả và chắc chắn trong các
họ Spartan-3, Virtex-II hay Vertex-II Pro. Các mã nguồn phù hợp với cả quá
trình tổng hợp và mô phỏng và được phát triển và kiểm tra dùng công cụ
www.ngohaibac.net
73
Xilinx Synthesizs Tool (XST) cho tổng hợp logic và ModelSim cho mô phỏng.
Các nhà thiết kế cũng thành công khi dùng các công cụ tổng hợp logic và mô
phỏng khác. Các mã nguồn VHDL không nên bị chỉnh sửa trong bất kì hoàn
cảnh nào.
KCPSM3 Module
Module KCPSM3 bao gồm ALU, register file, scratchpad RAM, … Chỉ duy
nhất chức năng không nằm trong KCPSM3 là bộ nhớ chương trình. Khai báo
component và gắn chân như sau:
Kết nối với bộ nhớ ROM chương trình
www.ngohaibac.net
74
Bộ nhớ ROM chương trình của PicoBlaze được dùng trong thiết kế VHDL.
Từ file assembler tạo ra file VHDL, đã định nghĩa block RAM và khởi tạo nội
dung cho RAM. File VHDL này có thể được dùng cho cả tổng hợp logic và
mô phỏng vi điều khiển.
Sau đây là khai báo component và gán các thực thể của bộ nhớ chương
trình trong FPGA:
Do đó, sơ đồ cấu trúc của vi điều khiển PicoBlaze như sau:
Hình 3.25: Sơ đồ cấu trúc PicoBlaze Microcontroller
Để viết mã lệnh cho chương trình (với tên mở rộng là .psm) thì chúng ta
có thể dùng bất cứ trình soạn thảo nào để lập trình dựa theo 31 lệnh được
cung cấp. Và dùng file thực thi KCPSM3.exe và các form được định nghĩa sẵn
www.ngohaibac.net
75
của ROM dưới dạng file .vhd, .coe, .v để dịch ra các file .vhd, .v và cho vào
chương trình FPGA.
Để phối hợp hoạt động của tất cả các thành phần trên, đảm bảo hệ thống
hoạt động chính xác, ta phải có một hệ thống điều khiển trung tâm. Trong đồ
án này, chúng em sử dụng một vi xử lý nhúng có tên là PicoBlaze để điều
khiển hoạt động của các khối xử lý trong FPGA, đồng thời giao tiếp với máy
tính thông qua cổng RS232 và khối điều khiển giao tiếp RS232 : UART
Controller.
3.2.6.2. Sơ đồ cấu trúc của khối xử lý trung tâm
Sơ đồ cấu trúc của khối xử lý dùng PicoBlaze:
Hình 3.26 : Sơ đồ khối điều khiển trung tâm và giao tiếp UART
Ngoài vi điều khiển PicoBlaze, có sử dụng thêm 2 component là UART
Receive và UART Transmit. Hai component được cung cấp miễn phí bởi
Xilinx, bao gồm bộ đệm và các tín hiệu trạng thái để giao tiếp với cổng RS232.
Vi điều khiển PicoBlaze có nhiệm vụ nhận lệnh điều khiển từ chương
trình trên PC và ra các lệnh điều khiển để capture ảnh từ camera và các tín
hiệu lựa chọn thuật toán và kích hoạt khối xử lý frame ảnh đã lưu trong
SDRAM, đồng thời nhận tín hiệu done và báo về giao diện để biết thuật toán
đã xử lý xong.
Thuật toán của chương trình
www.ngohaibac.net
76
Chương trình chính luôn luôn nhận các kí tự từ giao diện người dùng và
kiểm tra xem gửi lệnh với cú pháp gì. Ví dụ: lệnh bắt đầu bằng chữ cái ‘C’
dùng để capture ảnh, bắt đầu bằng chữ cái M để chọn thuật toán xử lý như
M1 để lọc nhiễu, M2 để phân vùng, … và ra các tín hiệu điều khiển tương
ứng vào các chân Algorithm Selection của khối xử lý ảnh.
Khối xử lý ngắt sẽ được kích hoạt khi có tín hiệu done từ bộ xử lý ảnh và
khi đó xóa tín hiệu kích hoạt khối xử lý ảnh và gửi messenger lên PC.
3.3. Thiết kế giao diện điều khiển hệ thống
Giao diện của chương trình được xây dựng trên nền GUI (Graphic User
Interface) của Matlab R2007a.
Giao diện của chương trình điều khiển như hình vẽ dưới. Giao diện này
có thể thay đổi tại thời điểm bảo vệ.
Hình 3.27 : Giao diện điều khiển
www.ngohaibac.net
77
Chức năng
Chọn thông số của cổng RS232 để thiết lập giao tiếp RS232 với mạch phần
cứng bên dưới. Mặc định chọn cổng COM1, tốc độ 115200. Có thể lựa chọn
kết nối hoặc ngắt kết nối với RS232, có hộp thoại hiển thị trạng thái của giao
tiếp RS232.
Kích hoạt chip Video Decoder trên mạch phần cứng qua nút I2C để giao
tiếp I2C với chip qua cổng LPT. Mặc định chọn cổng LPT1, có thể phát triển
thêm để lựa chọn các cổng LPT khác nữa.
Cho phép download trực tiếp file cấu hình cho FPGA hoặc Flash qua cổng
LPT, nhờ các nút bấm ở phần LPT FPGA Programming.
Cho phép lựa chọn thuật toán thực hiện và có led hiển thị số thứ tự thuật
toán tương ứng. Do chưa có tên cụ thể của từng thuật toán cụ thể nên mới chỉ
đặt tên là thuật toán 1, thuật toán 2, … Mỗi khi kết thúc thuật toán đều có bức
điện thông báo đã thực hiện thành công.
Cho phép kích hoạt để capture ảnh từ camera và tự hiện lên màn hình
VGA. Đang phát triển để thực hiện lựa chọn giữa capture một ảnh và chụp
liên tục khoảng 30 hình/s.
3.4. Mô phỏng và kết quả
Phương án mô phỏng
Yêu cầu của bài toán mô phỏng: thực hiện tốt các thuật toán xử lý ảnh để
đếm số vật trên một frame, và định vị từng vật.
Phương án mô phỏng ở đây được thực hiện như sau: dùng camera chiếu
vào một tấm bảng một mầu (đen) có các vật có kích thước khác nhau. Khi đó,
dùng chương trình giao tiếp trên PC để điều khiển camera capture một ảnh
rõ nét, sau đó tiến hành thực hiện từng thuật toán theo trình tự nhất định và
xác định số vật. Từng kết quả chạy mỗi thuật toán đều hiển thị trực tiếp trên
màn hình VGA.
www.ngohaibac.net
78
Trình tự thực hiện như sau:
- Thuật toán 1 : Lọc ảnh bằng phép lọc Gausse, đồng thời tính ngưỡng
trung bình
- Thuật toán 2 : Phân ngưỡng ảnh theo thuật toán phân ngưỡng, sử
dụng ngưỡng vừa tính.
- Thuật toán 3 : Làm mảnh.
- Thuật toán 4 : Làm đầy, khôi phục ảnh.
- Thuật toán 5 : Thực hiện gán nhãn đối tượng, hiển thị số đối tượng
trong frame.
- Thuật toán 6 : Tính toán các đặc tính của lần lượt từng đối tượng, đồng
thời hiện đối tượng đó lên., hiển thị các đặc tính của đối tượng cần xác định
ra giao diện. Hoàn thành lượt mô phỏng.
Kết quả
Kết quả mô phỏng cho thấy việc thực thi các thuật toán và thiết kế hệ
thống thực hiện đúng như mong muốn. Việc phần vùng và đánh nhãn ảnh
thành công. Tuy nhiên, nếu ảnh có những nhiễu tương đối lớn ( độ dày
khoảng hơn 3 pixel ) thì cần nhiều quá trình làm mảnh liên tiếp mới xóa bỏ
hoàn toàn được nhiễu.
www.ngohaibac.net
79
Kết luận
Trong các giải pháp phần cứng cho việc xây dựng hệ thống thị giác máy
tính, có thể thầy FPGA là một trong những giải pháp phù hợp nhất. Với
FPGA, chúng ta có thể thiết kế hệ thống theo từng khối hoạt động song song,
cho phép tăng tốc độ xử lý lên nhiều lần so với xử lý tuần tự. Điều này là rất
quan trọng đối với những hệ thống đòi hỏi tốc độ xử lý nhanh, chẳng hạn
như những cánh tay robot gắp đồ vật đang chuyển động nhanh.
Trong đồ án này, chúng em đã thực thi thành công một hệ thống thị giác
máy với nhiệm vụ là tách các đối tượng trong một ảnh, gán nhãn và xác định
các đặc trưng hình học của đối tượng. Với khả năng xử lý như vậy, chúng em
nhận thấy hoàn toàn có thể mở rộng đề tài ra giải quyết các bài toán xử lý
nâng cao như :
- Nhận dạng : dựa trên các đặc trưng hình học của đối tượng, ta còn có
thể nhân dạng đối tượng, phục vụ cho bài toán nhân dạng đồ vật hoặc chữ
cái và số về sau. Việc nhận dạng có thể bằng mạng neural xây dựng trực tiếp
trên FPGA, bằng cách tạo ra các neural như các đơn vị xử lý kết nối với nhau.
- Xác định đối tượng chuyển động: Đối tượng được xử lý ở đây mới chỉ là
đối tượng tĩnh, trong khi camera truyền ảnh liên tục về đối tượng. Nếu kết
hợp các quá trình xử lý trong những thời điểm khác nhau, ta có thể giải quyết
bài toán xác định đối tượng chuyển động và cả tốc độ chuyển động của nó.
Việc giải quyết bài toán này có ý nghĩa thực tiễn rất lớn đối với các cơ cấu
bám đối tượng chuyển động.
- Xác định khoảng cách vật trong không gian : Mạch XST 3S 1000 có 2
cổng video. Thêm vào đó, project của chúng ta chưa chiếm hết một nửa tài
nguyên của hệ thống, trong khi nếu thêm một project nữa, ta vẫn có thể tận
dụng những tài nguyên cũ. Do đó chúng ta hoàn toàn có thể thực thi một hệ
thống với 2 camera cùng hoạt động. Điều này cho phép ta có thể quan sát các
đối tượng trong không gian 3D, thậm chí xác định hình dạng, kích thước và
thể tích của chúng. Ta cũng có thể xác định khoảng cách giữa các đối tượng
trong không gian nếu kết hợp kết quả xử lý được với các phép tính quang
học chính xác. Xa hơn nữa, ta hoàn toàn có thể xây dựng một hệ thống thị
www.ngohaibac.net
80
giác máy giúp cho việc di chuyển của xe tự hành và các thao tác của hệ thống
CNC đối với vật thể 3 chiều.
- Mở rộng khả năng giao tiếp của cảm biến thị giác để phù hợp với nhiều
chuẩn chứ không chỉ riêng RS232: chuẩn Ethernet, USB, CAN, RS 485... giúp
cho thiết bị dễ dàng tích hợp vào các hệ thống điều khiển phân tán thật sự.
- Cải thiện các thuật toán nhằm làm tăng khả năng xử lý, chất lượng ảnh
sau tiền xử lý.
Đó đều là những ứng dụng rất có giá trị thực tiễn trong nhiều lĩnh vực,
đặc biệt là Tự động điều khiển, và có khả năng thực thi nếu đi sâu nghiên
cứu.
Qua quá trình thực hiện đồ án này, chúng em cảm thấy đã học được rất
nhiều điều.
Đó là kỹ năng tự nghiên cứu trong những lĩnh vực còn hết sức mới mẻ đối
với sinh viên Điều khiển tự động : đó là Xử lý ảnh số, Thị giác máy tính và
công nghệ FPGA, trên nền tảng những kiến thức cơ sở đã học được ở nhà
trường.
Đó là kỹ năng làm việc theo nhóm : bằng cách phân công tương đối hợp
lý, chúng em đã chia tách công việc ra một cách khá cân bằng, đảm bảo mỗi
người phát huy hết sở trường của mình, để thực hiện đồ án một cách tốt nhất
trong khả năng có thể. Đây là một trong những kỹ năng quan trọng nhất cho
công việc của một kĩ sư về sau
Đó là kỹ năng trình bày những ý tưởng , hiểu biết và kiến thức của mình
vào một đồ án, nhằm truyền tải một cách đầy đủ nhất có thể những gì mình
hiểu về lĩnh vực mà mình đang nghiên cứu.
Cuối cùng, cũng phải nói rằng dù đã cố gắng rất nhiều, nhưng chúng em
vẫn không tránh khỏi những sai sót, trong việc xây dựng hệ thống, trong việc
trình bày luận văn. Nhưng chúng em vẫn luôn ý thức được rằng, những sai
sót ấy cũng là một cơ hội cho chúng em rèn luyện kỹ năng của mình : kỹ
năng sửa chữa những sai sót và khiếm khuyết, để thực hiện những đề tài, dự
www.ngohaibac.net
81
án về sau một cách hoàn chỉnh hơn. Đó tất cả là nhờ sự theo dõi, hướng dẫn ,
phản biện tận tình và nghiêm túc của các thầy, cô trong hội đồng bảo vệ.
Chúng em xin chân thành cảm ơn các thầy cô vì sự tận tụy ấy!
www.ngohaibac.net
82
Tài liệu tham khảo
[1]. Volnei A. Pedroni, Circuit Design with VHDL, MIT Press Cambridge,
Massachusetts London, England, 2004.
[2]. Texas Instruments, TVP5150PBS Ultralow-Power NTSC/PAL Video
Decoder, Texas Instruments Incorporated, May 2006.
[3]. D. Vanden Bout, XSA Board SDRAM Controller, XESS Corporation, July
12, 2005.
[4]. D. Vanden Bout, VGA Generator for the XSA Boards, XESS Corporation,
October 12, 2004.
[5]. D. Vanden Bout, Dualport Module for the SDRAM Controller, XESS
Corporation, July 12, 2005.
[6]. Karthikeyan Palanisamy, Interfacing Spartan-3 Devices with 166 MHz or
333 Mb/s DDR SDRAM Memories, Xilinx Corporation, October 14, 2004.
[7]. Anil K.Jail , Fundamentals Digital Image Processing, University of
California.
[8]. Xilinx Ltd, PicoBlaze 8-bit Embedded Microcontroller User Guide
UG129, www.xilinx.com, November 21, 2005.
[9]. Xilinx Ltd, Spartan-3E Starter Kit Board User Guide UG230 (v1.0),
www.xilinx.com , March 9, 2006.
[10]. Xilinx Ltd, Chapter 7 – Implementing DDR SDRAM Controller – MIG
User Guide UG086 (V2.0), www.xilinx.com, September 18, 2007.
[11]. Xilinx Ltd, System Generator for DSP Userguide Release 9.2.00,
www.xilinx.com, August 2007.
[12]. Xilinx Ltd, System Generator for DSP Reference Guide Release 9.2.00,
www.xilinx.com, August, 2007.
www.ngohaibac.net
83
[13]. Xilinx Ltd, System Generator for DSP Getting Started Guide Release
9.2.00, www.xilinx.com, August, 2007.
[14]. Gregory K.McMillan, Douglas M.Considine, Process/Industrial
Instruments and Controls Handbook, McGraw-Hill, 1999.
[15]. O.Gassman, H.Meixner, Sensors in Intelligent buildings, Wiley-VHC,
2001.
[16]. Trung tâm công nghệ FPT, Giới thiệu giải pháp phần cứng cho bài toán
thị giác máy trên nền Linux nhúng.
[17]. Nguyễn Đức Thành, Nguyễn Đức Minh, Computer Vision using Neural
Network, Application for Robot Manipulator Control, Bộ Môn Điều khiển
tự động, khoa Điện-Điện tử, Đại học Bách Khoa Thành phố Hồ Chí Minh,
2004.
[18]. Anthony Edward Nelson, Implementation of Image Processing
Algorithms on FPGA Hardware, Nashville, 2000.
[19]. Bruce Draper, Walid Najjar, Wim Böhm, Jeff Hammes, Bob Rinker,
Charlie Ross, Compiling and Optimizing Image Processing Algorithms for
FPGA’s, Colorado State University, 2000.
[20]. Ben Cope, Implementation of 2D Convolution on FPGA, GPU and CPU,
Imperial College London, 2000.
[21]. Bill Silver , An Introduction to Digital Image Processing, Cognex
Corporation, 2000.
[22]. Richard G. Shoup, Parameterized Convolution Filtering in a Field
Programmable Gate Array, California, 2000.
[23]. Chi-Jeng Chang, Pei-Yung Hsiao, Zen-Zi Hoang, Intergrated Operation
of Image Capturing in FPGA, Chang Gung University, Tao-Yuan, Taiwan,
2006.
[24]. Anil K.Jail , Fundamentals Digital Image Processing, University of
California.
www.ngohaibac.net
84
Các nguồn tham khảo trên Internet
[1]. http://tech.groups.yahoo.com/group/xsboard-users/ : thảo luận của XESS
Board group về thiết kế hệ thống nhúng dùng các board của XESS.
Trưởng nhóm là D. Vanden Bout có rất nhiều bài viết hay. Nhóm chúng
emđã được sự hỗ trợ tận tình từ phía Dave.
[2]. http://www.xilinx.com/: Trang web cung cấp mọi công cụ, hướng dẫn để
thực thi FPGA.

www.ngohaibac.net

Lời cảm ơn
Trước hết, chúng em xin gửi lời cảm ơn sâu sắc đến thầy giáo TS. Lưu Hồng Việt, người đã giúp đỡ rất nhiều về định hướng nghiên cứu, thiết bị thí nghiệm phục vụ cho nghiên cứu. Chúng em xin chân thành cảm ơn các thầy cô giáo đã giảng dạy chúng em, đặc biệt là các thầy cô giáo trong Bộ môn Điều khiển tự động – Khoa Điện, TS. Phạm Ngọc Nam – Phó Trưởng bộ môn Điện tử - Tin học – Khoa Điện tử Viễn Thông – Trường Đại học Bách Khoa Hà Nội đã tạo điều kiện giúp đỡ chúng em hoàn thành đồ án tốt nghiệp này. Xin chân thành cảm ơn Dave Vanden Bout, kĩ sư của công ty XESS Corporation đã trả lời tận tình những thắc mắc của chúng em về KIT XSA3S1000 và XST-3.0. Và cuối cùng, chúng em xin dành tất cả lòng biết ơn và kính trọng sâu sắc nhất tới bố mẹ chúng em, những người đã sinh thành, nuôi dưỡng chúng em nên người, đã lo lắng, chỉ bảo từ những việc nhỏ nhất, đã tạo mọi điều kiện cho chúng em được sống và học tập một cách tốt nhất để vươn tới những ước mơ và hoài bão của mình. Mặc dù đã rất nỗ lực và cố gắng để hoàn thành luận văn tốt nghiệp này, song chắc chắn không thể tránh khỏi sai sót. Vì vậy, chúng em rất mong được sự chỉ bảo của thầy cô giáo để đề tài tốt nghiệp này hoàn thiện hơn.

2

www.ngohaibac.net

Mục lục
Lời cảm ơn.................................................................................................................................................. 2 Mục lục ....................................................................................................................................................... 3 Danh mục các hình vẽ trong đồ án tốt nghiệp...................................................................................... 6 Mở đầu........................................................................................................................................................ 8 Phần 1 : Cơ sở lý thuyết xử lý ảnh số ................................................................................................... 10 1.1. 1.3. Khái quát về hệ thống Thị giác máy tính và Cảm biến thị giác........................................ 10 Các thành phần của hệ thống xử lý ảnh: ............................................................................. 16 Thành phần thu thập ảnh, Camera và vấn đề định dạng ảnh.................................. 16 Thành phần xử lý ảnh .................................................................................................... 17 Các khái niệm cơ bản của xử lý ảnh số ................................................................ 17 Các thuật toán xử lý ảnh số ................................................................................... 18

1.3.1. 1.3.2.

1.3.2.1. 1.3.2.2. 1.4.

Một số giải pháp phần cứng cho hệ thống thị giác máy ................................................... 28

FPGA ................................................................................................................................................ 28 DSP Processor ................................................................................................................................. 28 Mainboard, laptop ......................................................................................................................... 29 Phần 2 : Khái quát về FPGA và mạch phát triển XST 3S1000 của XESS...................................... 31 2.1. Giới thiệu chung về FPGA và ngôn ngữ VHDL .............................................................. 31 Khái niệm và ứng dụng FPGA .................................................................................... 31 Kiến trúc FPGA............................................................................................................... 32 Kiến trúc chung FPGA .......................................................................................... 32

2.1.1. 2.1.2.

2.1.2.1.

Configurable Logic Blocks (CLBs)...................................................................................... 33 Configurable I/O Blocks....................................................................................................... 34 Programmable Interconnect................................................................................................. 34 Mạch đồng hồ (Clock Circuitry )......................................................................................... 35 2.1.2.2. 2.1.2.3. 2.1.2.4. 2.1.3. So sánh giữa cấu trúc nhỏ và cấu trúc lớn ......................................................... 36 So sánh giữa SDRAM Programming và Anti-fuse programming................ 36 Cấu trúc FPGA của Spartan 3............................................................................... 37

Trình tự thiết kế một chip ............................................................................................ 38 3

www.ngohaibac.net Ghi các đặc điểm kĩ thuật ..................................................................................................... 39 Chọn công nghệ...................................................................................................................... 40 Chọn một hướng tiếp cận thiết kế ...................................................................................... 40 Chọn công cụ tổng hợp ......................................................................................................... 40 Thiết kế chip ........................................................................................................................... 41 Mô phỏng – cái nhìn tổng quan về thiết kế ...................................................................... 41 Tổng hợp.................................................................................................................................. 41 Place and Route ...................................................................................................................... 41 Mô phỏng lại – tổng quan cuối cùng.................................................................................. 42 Kiểm tra.................................................................................................................................... 42 2.1.4. Ngôn ngữ mô tả phần cứng VHDL............................................................................. 42

Trình tự thiết kế một chíp dựa trên VHDL........................................................................... 43 2.2. Giới thiệu mạch phát triển XST 3S 1000 của hãng XESS................................................ 44 XSA-3S1000...................................................................................................................... 45 XST-3.0 (XStend Board)................................................................................................. 46

2.2.1. 2.2.2. 2.3.

Giới thiệu hãng Xilinx và các công cụ lập trình: .............................................................. 49

Hãng Xilinx ..................................................................................................................................... 49 ISE 9.2 ............................................................................................................................................... 49 LogicCore 9.2................................................................................................................................... 49 EDK 9.2............................................................................................................................................. 50 System Generator 9.2..................................................................................................................... 50 Phần 3 : Xây dựng hệ thống xử lí ảnh động trên nền FPGA.......................................................... 51 3.1. 3.2. Sơ đồ cấu trúc hệ thống xử lí ảnh động ............................................................................. 51 Xây dựng hệ thống thu thập, lưu trữ, xử lý và hiển thị ảnh .......................................... 53 Thành phần thu thập ảnh Framegrabber................................................................... 53 Lưu dữ liệu từ Framegrabber vào SDRAM .............................................................. 55 Các cơ chế ghi đọc SDRAM: SDRAM Controller, Dual Port SDRAM................ 55

3.2.1. 3.2.2. 3.2.3.

SDRAM Controller .................................................................................................................... 55 Pipeline Read Operation ...................................................................................................... 56 Pipeline Write Operation ..................................................................................................... 56 Dualport Module for the SDRAM Controller...................................................................... 58 4

....................................................................... 75 Thuật toán của chương trình.............. 71 Khái quát PicoBlaze.................................................................................................2........................................................3........................................................................................5.....................www.................................................................................................................................................................................................. 69 3..................................................................6...................ngohaibac.. 73 Kết nối với bộ nhớ ROM chương trình............................. Mô phỏng và kết quả............ 3................................2..........................................net 3......... Image Processing core ....1............................................................................................................................................................. 67 VGA Color Signals ... KCPSM3 Module ..... 71 3........................................................................................................................................................ Thiết kế giao diện điều khiển hệ thống................................. 67 VGA Signal Timing.................. 75 3..................................................... 68 Nguyên tắc hoạt động của VGA Generator ................ 79 Tài liệu tham khảo ............................ Picoblaze và hệ thống điều khiển trung tâm ............................................................ 73 3...................................2........... 78 Kết luận ............4..............................2.......... 77 Kết quả........ Sơ đồ cấu trúc của khối xử lý trung tâm ..........................4.................................................................................................................... 77 Phương án mô phỏng ........................................................ 77 3..............6....................................... 82 5 ................. 76 Chức năng ........................2........................................................................................6...................... 60 Hiển thị ảnh lên VGA: VGA Generator ...................2...............................................

Ghép nối dualport với SDRAM Controller.11 Những kiểu liên kết giữa các điểm ảnh. Design Flow.1 Hình 1. Khối ghi dữ liệu từ read_fifo vào Buffer.www. Những kiểu đường liên kết giữa các điểm ảnh. 6 .1 Hình 2. Kết quả của phép lọc Gaussian với cửa sổ 3x3.0 Board.3 Hình 2. Sơ đồ khối xử lý ảnh. Sơ đồ thuật toán gán nhãn đối tượng. Cấu trúc các thành phần của Spartan 3A.3 Hình 1.2 Hình 3.2 Một tay máy thực hiện gắp đối tượng với sự trợ giúp của hệ thống thị giác máy tính Các bước cơ bản của xử lý ảnh số.5 Hình 1.4 Hình 2.8 Hình 2. Ghép nối với SDRAM Controller. Framegrabber state machine.5 Hình 3.10 Hình 2. Sơ đồ chung của hệ thống. Configurable Logic Blocks. Một ảnh cần được xử lý. Hình 1.11 Hình 3. Kiến trúc chung của FPGA. Programmable Interconnect.9 Hình 3.net Danh mục các hình vẽ trong đồ án tốt nghiệp Hình 1. Pixel stream waveform.9 Hình 2. Pipelined Write Operation timing waveforms.1 Hình 3.7 Hình 1.8 Hình 3.4 Hình 3.ngohaibac. Phân ngưỡng theo lược đồ xám. XST-3S1000.4 Hình 1. Sơ đồ cấu trúc của XSA-3S1000.8 Hình 1. KIT XSA-3S1000. Kết quả thuật toán dò biên. Pipelined Read Operation timing waveforms.10 Hình 3. Xây dựng 4 ports SDRAM interface.9 Hình 2. Loại bỏ nhiễu và khôi phục đối tượng bằng quá trình làm mảnh-làm đầy.5 Hình 2.3 Hình 3. XST-3.2 Hình 2.6 Hình 3.7 Hình 3. Qui trình thiết kế chip dựa trên VHDL.6 Hình 2. Một Logic Block điển hình.6 Hình 1.7 Hình 2.

22 Hình 3.26 Hình 3.net Hình 3.www. 7 .ngohaibac. Sơ đồ khối thanh ghi dịch Pixel register Cấu trúc nhân chập.19 Hình 3. 640 x 480 Mode VGA Control Timing. Khối gán nhãn đối tượng.14 Hình 3.15 Hình 3. Sơ đồ khối cấu trúc của VGA Generator. Sơ đồ cấu trúc PicoBlaze Microcontroller.12 Hình 3. Cơ chế ghi và đọc buffer. CRT Display Timing Example. Sơ đồ khối điều khiển trung tâm và giao tiếp UART.20 Hình 3.13 Hình 3.23 Hình 3.21 Hình 3. Giao diện điều khiển.18 Hình 3.24 Hình 3. VGA Connection.27 Khối thuật toán xử lý ảnh.16 Hình 3. Cấu trúc bộ xử lý đồng cấu ảnh nhị phân. 8 màu cơ bản. Sơ đồ khối cấu trúc của PicoBlaze.25 Hình 3.17 Hình 3. Khối đọc dữ liệu từ buffer.

và tự động hóa tòa nhà. 8 . sản xuất. Thị giác máy bao gồm lý thuyết và các kỹ thuật liên quan nhằm mục đích tạo ra một hệ thống nhân tạo có thể tiếp nhận thông tin từ các hình ảnh thu được hoặc các tập dữ liệu đa chiều. vũ trụ. Từ những năm 1970 khi mà năng lực tính toán của máy tính ngày càng trở nên mạnh mẽ hơn. cho đến y học. khoa học. các máy tính lúc này có thể xử lý được những tập dữ liệu lớn như các hình ảnh. ứng dụng của thị giác máy đã trở nên rất rộng lớn và đa dạng. Ngày nay.www. các đoạn phim thì khái niệm và kỹ thuật về thị giác máy ngày càng được nhắc đến và nghiên cứu nhiều hơn cho tới ngày nay. Khái niệm thị giác máy – Computer vision có liên quan tới nhiều ngành học và hướng nghiên cứu khác nhau. len lỏi vào mọi lĩnh vực từ quân sự. Cảm biến này thực hiện các chức năng cơ sở của một cảm biến thị giác : đó là tiếp nhận thông tin từ hình ảnh thu được để xử lý và phục vụ cho các quá trình phân tích cao hơn.ngohaibac.net Mở đầu Thị giác máy là một lĩnh vực đã và đang rất phát triển. Mục đích của đồ án này là nghiên cứu các khái niệm cơ bản của Thị giác máy tính và xử lý ảnh số. Đồng thời trên cơ sở đó. chúng em xây dựng một hệ thống cảm biến thị giác trên nền phần cứng vi mạch khả trình FPGA.

chúng em tổng kết những kết quả đạt được. nhược điểm của giải pháp. Và cuối cùng. Trong phần 2. chúng em trình bày phương án thực thi hệ thống thị giác máy trên nền FPGA. lưu trữ ảnh. chúng em trình bày những khái niệm cơ bản về chip khả trình FPGA. 9 . Việc xây dựng các thành phần thu thập ảnh. những ứng dụng và các thành phần của nó.www. được sử dụng trong đồ án này. xử lý ảnh và hiện thị ảnh trên mạch tích hợp XST 3S 1000 được đề cập chi tiết trong phần này. Chúng em cũng đề cập đến vi mạch tích hợp XST 3S 1000 của hãng XESS. chúng em đề cập đến những các khái niệm của hệ thống thị giác máy tính. Trong phần này.net Trong phần 1 của đồ án. những ưu điểm. chúng em cũng trình bày phương án chạy mô phỏng kiểm tra hoạt động của hệ thống. Đồng thời chúng em trình bày cơ sở kiến thức xử lý ảnh số sẽ được dùng trong việc xây dựng hệ thống cảm biến thị giác. hãng Xilinx và những công cụ lập trình và phát triển hệ thống với FPGA. Phần 3. hiệu quả của giải pháp và những hướng phát triển.ngohaibac.

Ta có thể thấy sự tương quan giữa Computer vision với các lĩnh vực khác như sau: 10 .ngohaibac.là những hệ thống tiếp nhận thông tin từ các cảm biến thị giác (vision sensor) với mục đích cho phép máy móc đưa ra những quyết định thông minh.www. Thị giác máy tính là một ngành khoa học mới phát triển. những nghiên cứu về lĩnh vực này mới được bắt đầu khi máy tính đã có thể quản lý các quá trình xử lý một lượng lớn dữ liệu như các ảnh số.1. Mặc dù đã có những ứng dụng của xử lý ảnh số trong những thập niên đầu của thế kỉ XX vào một số lĩnh vực. và đặc điểm chung là các bài toán về thị giác máy tính đều không có một đề bài chung và cách giải duy nhất. Lĩnh vực nghiên cứu của thị giác máy rất rộng.net Phần 1 : Cơ sở lý thuyết xử lý ảnh số 1. Mỗi giải pháp giải quyết vấn đều được một kết quả nhất định cho những trường hợp cụ thể. Khái quát về hệ thống Thị giác máy tính và Cảm biến thị giác Theo định nghĩa từ [1] : Hệ thống thị giác .bao gồm cả thị giác máy (machine vision) và thị giác máy tính (computer vision). nhưng phải đến những năm 1970.

để giúp cánh tay máy của robot công nghiệp thao tác chính xác việc gắp hoặc gia công đối tượng. 11 . Có thể liệt kê một số ứng dụng của thị giác máy tính như sau : Điều khiển tiến trình (ví dụ: trong các robot công nghiệp. sản xuất và đời sống. xe tự hành). và Trí tuệ nhân tạo. hướng. Sự kết hợp của những ngành này tạo cho Thị giác máy tính một khả năng ứng dụng hết sức rộng lớn trong mọi lĩnh vực của khoa học. Mô hình hoá đối tượng (ví dụ: quá trình kiểm tra trong môi trường công nghiệp. Nhận dạng Quân sự. Phát hiện sự kiện (ví dụ: các thiết bị giám sát) Tự động hóa tòa nhà. máy học. thị giác máy tính đóng vai trò đặc biệt quan trọng như một cảm biến vị trí cho robot công nghiệp hoặc xe tự hành. ta có thể thấy thị giác máy tính và thị giác máy có liên quan đến rất nhiều ngành như tự động điều khiển. hệ thống thị giác máy tính toán các đặc trưng của đối tượng. xử lý ảnh trong y học). Trong hệ thống máy CNC.net Qua sơ đồ trên. Sau khi tách đối tượng.ngohaibac. quang học. được lập trình chính xác. các cảm biến thị giác thu thập dữ liệu ảnh về đối tượng công nghiệp. hoặc các dây chuyền công nghệ. sinh học. như vị trí.www. hay các thiết bị. toán học. Trong lĩnh vực điều khiển tiến trình. xử lý ảnh số. Với những hệ thống thị giác được tích hợp các camera có độ phân giải lớn. xử lý và tách đối tượng ra khỏi ảnh. Tương tác (đóng vai trò làm đầu vào cho thiết bị trong quá trình tương tác giữa người và máy). có thể điều khiển tay máy để thao tác với những vi mạch nhỏ đòi hỏi độ chính xác gần như tuyệt đối.

hệ thống thị giác máy cũng đóng một vai trò ngày càng quan trọng. vốn cần rất nhiều trong một dây chuyền sản xuất hoặc CNC. với xe tự hành đi trong môi trường phức tạp. 12 . giúp giảm thiểu chi phí và công sức lắp đặt cảm biến. Với những hệ thống thị giác sử dụng camera hồng ngoại. có thể nói. thị giác máy và cảm biến thị giác có thể thay thế một lượng lớn các cảm biến ví trí thông thường. trong lĩnh vực công nghiệp. vị trí và khoảng cách của chúng đối với xe. Camera thu thập hình ảnh về bề mặt sản phẩm.ngohaibac. hệ thống thị giác máy giúp cho xe phát hiện ra những đối tượng.1: Một tay máy thực hiện gắp đối tượng với sự trợ giúp của hệ thống thị giác máy tính Cũng như vậy. hệ thống thị giác máy không chỉ đóng vai trò như môt cảm biến thị giác. Trong lĩnh vực tự động hóa tòa nhà. Như vậy. cho phép xe tự hành chọn được đường đi thích hợp nhất. Hệ thống thị giác máy còn được ứng dụng trong những lĩnh vực công nghiệp với vai trò như một cảm biến kiểm soát lỗi bề mặt sản phẩm.net Hình 1. và quan trọng nhất là tạo nên một hệ thống xử lý thống nhất những thông tin về quá trình và đối tượng công nghiệp. ta còn có thể đo nhiệt độ sản phẩm và sự phân bố nhiệt độ trên sản phẩm. sẽ truyền dữ liệu vào cho hệ thống xử lý để tìm ra lỗi trên sản phẩm. nhiều vật cản. vị trí lỗi và kích thước lỗi. Trong trường hợp này. mà còn thực hiện việc vẽ bản đồ đối tượng.www.

đó là độ chính xác cao. dựa trên chuỗi hình ảnh.[2] Hệ thống thị giác máy còn được ứng dụng rộng rãi trong việc nhận dạng. đã cho ra đời những máy đếm số người. 13 .. khả năng loại bỏ lỗi (fault tolerance). các cảm biến thị giác ngày nay có thẻ thực hiện những chức năng thông minh như đếm số người trong phòng. cho phép chúng có thể tích hợp rộng rãi vào những hệ thống điều khiển phân tán. 1.2.. hệ thống thị giác máy và cảm biến thị giác đang ngày càng được ứng dụng nhiều trong những hệ thống phức tạp và hiện đại. quân sự ( xác định vị trí đối phương) và vũ trụ. Thêm vào đó. khả năng xử lý thông tin không cần đến sự điều khiển của bộ điều khiển trung tâm. đồng thời... Xu thế phát triển của các cảm biến ngày nay. các cảm biến thị giác có tính linh hoạt rất cao. do đặc điểm hoạt động của mình. nhận dạng đối tượng chuyển động. trong đó xử lý ảnh số đóng một vai trò quyết định. Các hãng như ALTALS và SELTEC. chuẩn đoán y học. thông minh. có thể ứng dụng trong nhiều bài toán với những yêu cầu đo đạc và giám sát khác nhau..www. Các hệ thống cảm biến thị giác ngày nay. Khái quát quá trình xử lý ảnh số trong hệ thống thị giác máy tính Hệ thống thị giác máy tính bao gồm nhiều lĩnh vực. phóng xạ. Các hệ thống cảm biến thị giác đang chứng tỏ ngày càng đáp ứng được xu thế đấy. độ ẩm lớn. nhận dạng vân tay. hoạt động liên tục và đòi hỏi yêu cầu về độ chính xác và xử lý thông tin cao. Và cuối cùng. Bằng cách quan sát sự di chuyển của dòng người và số người . tàu điện ngầm để kiểm soát lưu lượng người ra vào nhằm đưa ra những quyết định điều hành chính xác.net Với sự phát triển của các thuật toán xử lý dữ liệu ảnh. bụi. nhận dạng khuôn mặt. kèm với tính phân tán. như nhiệt độ cao.. Với những lý do đó. điện trường. Bài toán này được ứng dụng nhiều trong những khu công cộng như nhà ga. cảnh báo sự kiện. đã có thể thay thế được một lượng lớn cảm biến vị trí trong những bài toán cụ thể. ứng dụng các thành tựu mới nhất của công nghệ xử lý và trí tuệ nhân tạo. hệ thống thị giác máy sẽ tính toán tốc độ và mật độ dòng người di chuyển.. các cảm biến thị giác có thể hoạt động tốt trong những môi trường khắc nghiệt.ngohaibac.

Tín hiệu này sau đó được số hóa để trở thành tín hiệu số. Tiền xử lý ảnh : Sau khi ảnh số được thu thập dưới dạng tín hiệu số. 601.www. phần mềm và cơ sở lý thuyết.ngohaibac. cần phải trải qua giai đoạn tiền xử lý. Tín hiệu ảnh sau khi được số hóa còn được mã hóa theo những chuẩn video (video format) nhất định trước khi được đưa vào quá trình lưu trữ và xử lý.2 : Các bước cơ bản của xử lý ảnh số Thu thập ảnh(image acquision) : Ảnh số được thu thập bằng một cảm biến ảnh có khả năng biến thông tin về cường độ sáng và mức xám của ảnh thực thành tín hiệu điện áp dưới dạng analog. Các chuẩn video thường gặp như IUT-R-BT 656. Chức năng chủ yếu của tiền xử lý là cải thiện ảnh.. Trong trường hợp cảm biến không có chức năng số hóa thì cần phải có một bộ biến đổi ảnh tương tự thành ảnh số (video decoder). nâng cao các tính chất của ảnh giúp cho các quá trình xử lý về sau 14 . phân ngưỡng Biểu diễn Tiền xử lý Cơ sở kiến thức Thu nhận ảnh Xử lý và nhận dạng Hình 1. Các bước cơ bản của xử lý ảnh số được mô tả trong sơ đồ dưới đây: Phân vùng. Hiện nay có một số cảm biến ảnh thực hiện cả việc thu nhận tín hiệu về cường độ sáng của ảnh và số hóa tín hiệu.net Hệ thống xử lý ảnh số bao gồm một phạm vi rộng các kiến thức về phần cứng..

. Nhiệm vụ chính của phân ngưỡng và phân vùng ảnh là tách ảnh đầu vào thành các đối tượng. dấu vân tay. hoặc các kí tự số.. được đánh số phân biệt. kích thước. đã được đánh số phân biệt. và số đối tượng hay mật độ đối tượng trong ảnh. như : vị trí. . Ảnh sau khi đã được cải thiện.net được thuận tiện hơn. sẽ được phân tích để phục vụ những mục đích khác nhau như: Xác định các đặc trưng hình học của đối tượng: dựa trên cơ sở đối tượng đã được xác định và phân biệt. Kết quả của quá trình phân vùng ảnh.www.. giải quyết bài toán xung đột. cần có một hệ cơ sở kiến thức để kiểm tra hoạt động và tương tác giữa các module.ngohaibac. Phân tích ảnh: đây là giai đoạn xử lý bậc cao trong hệ thống xử lý ảnh số. Số liệu này cần được biến đổi thành dạng thích hợp cho máy tính xử lý... Đầu ra của quá trình phân vùng ảnh là các pixel chưa được lọc. hướng.Ảnh sau khi được phân vùng có thể được nhận dạng theo những phương pháp nhất định như phương pháp neural. ta sẽ được một tập hợp các điểm ảnh có liên kết với nhau thành các đối tượng.. Phân vùng ảnh: Bước tiếp theo của quá trình xử lý là phân vùng ảnh. Để hướng dẫn hoạt động của từng module xử lý. 15 . Các công đoạn cơ bản của tiền xử lý là : nâng cao độ tương phản. bao gồm liên kết của 1 vùng hoặc tất cả các điểm ảnh trong vùng đó. Ảnh sau khi được phân vùng thành các đối tượng riêng biệt. thuận tiện cho các quá trình xử lý cao hơn. để tìm ra mẫu hình dạng mà đối tượng đó thuộc về. chữ cái. ta có thể thực hiện xác định các đặc trưng hình học của mỗi đối tượng đấy. Đây là các đặc trưng được dùng nhiều trong hệ thống thị giác máy (machine vision) Nhận dạng : các đối tượng có thể là các vật thể có hình dạng nhất định. lọc nhiễu. sẽ trở nên thuận tiện hơn cho việc phân ngưỡng và phân vùng. Hệ này có nhiệm vụ kiểm soát hoạt động của từng module và sắp xếp trình tự hoạt động của chúng trong từng thời điểm. vật thể riêng biệt.

độ ổn định thấp. Cảm biến nhìn chung gồm 2 thành phần chính. vì vậy quá trình xử lí ảnh có vai trò như bộ lấy mẫu trong hệ thống nhận dạng ảnh. thấu kính. hay các điểm ảnh (pixel). sensor. là phần tử biến đổi tín hiệu tương tự thành tín hiệu số. từ thấp (32x32 điểm ảnh). tương ứng ta sẽ được các ảnh có 16. Tín hiệu ảnh 16 . camera là một thiết bị rất quan trọng có chức năng quan sát và thu nhận ảnh đầu vào của hệ thống. Camera và vấn đề định dạng ảnh. cho ra tín hiệu ảnh dạng tương tự và cần phải được số hóa trước khi đi vào quá trình xử lý. đến trung bình (256x256 điểm ảnh) cho đến cao (640x480 ) hoặc cao hơn nữa là 1280x1024 điểm ảnh. Độ phân giải của các sensor phụ thuộc vào số điểm ảnh trên nó. Các thành phần của hệ thống xử lý ảnh: 1. Giới thiệu chung về camera : Trong hệ thống xử lý ảnh số. 8bit. tuy nhiên những thiết bị này thường cồng kềnh. chúng ta có các tín hiệu với số bit khác nhau: 4 bit. Các bước xử lý này bao gồm sự phát sáng.. linh kiện bán dẫn. sử dụng sensor có độ phân giải tương đối lớn (510x482 điểm ảnh)... 256. đây là một loại camera quan sát cho ảnh xám.ngohaibac.. Các sensor này chứa một số lượng phần tử quang rời rạc. Từ những năm 1980.net 1.mức xám khác nhau. Số điểm ảnh của các sensor là đa dạng.3. Điểm đặc biệt quan trọng trong nhận dạng ảnh là đặc tính thời gian của camera.www. CCD.. đã bắt đầu xuất hiện các sensor ảnh trong các camera như sensor CMOS. Tùy thuộc vào thành phần số hóa thực chất là bộ chuyển đổi ADC. Nó thường được coi là hộp đen trong đó có các quá trình biến đổi để chuyển một ảnh thành dạng lưu trữ trong máy tính. Trước đây. chúng em sử dụng loại camera AVC 301D của hãng AVTech. thiếu bền vững. 10 bit. Trong đề tài này. mỗi phần tử chứa thông tin liên quan đến độ sáng chiếu vào nó.3. mỗi thành phần này phối hợp nhằm đưa ra ảnh số cuối cùng. Thành phần thu thập ảnh.1. 12 bit. các phần tử quang điện và bộ số hoá. người ta sử dụng các camera dựa trên thiết bị phóng tia điện tử.. Thành phần thứ 2 là bộ số hóa(digitalize) . Thành phần thứ nhất tạo ra tín hiệu điện ở đầu ra tỉ lệ với mức năng lượng mà nó nhận được.

[i2.. m là số hàng trong 1 frame. và "liên kết 8" nếu chung góc và chung biên với nhau. Hình 1. 1. Mỗi điểm ảnh này có các lân cận xung quanh. Các khái niệm cơ bản của xử lý ảnh số Pixel và các lân cận : Như đã biết. Trong đồ án này. Như vậy 1 frame ảnh thu được sẽ được biểu diễn dưới dạng một ma trận 2 chiều n x m với n là số pixel trên 1 hàng.y là tọa độ của pixel trên frame và I là mức xám tương ứng của pixel đó. mỗi điểm có chung biên với 4 điểm lân cận.net tương tự được số hóa thành ảnh số bởi bộ video decoder TVP5150 theo chuẩn ITU-R-BT 601. tuy nhiên sau quá trình số hóa theo chuẩn ITU 601 ta có ảnh số 8bit với kích thước chuẩn là 720x525. Mỗi frame ảnh thu về được biểu diễn dưới dạng I(x. qua một chuỗi các pixel [i1. j1 ] . jn ] . trong đó mỗi pixel 17 .3.y) trong đó x. mỗi frame ảnh được mô tả dưới dạng ma trận 2 chiều.. Thành phần xử lý ảnh 1. và có chung góc với 4 điểm lân cận khác.3.ngohaibac. jk ] . j1 ] đến pixel [in .1.. ảnh thu được từ camera có kích thước 510x482. Hai điểm lân cận gọi là "liên kết 4" nếu chúng có chung biên với nhau..www. j2 ] .3 : Những kiểu liên kết giữa các điểm ảnh Đường liên kết: Đường liên kết là đường nối từ pixel [i1. trong đó mỗi phần tử của ma trận tương ứng với mức xám của 1 điểm ảnh (pixel).. [ik .2. Nếu hiển thị mỗi pixel dưới dạng một ô vuông..2.

jc ] thì cũng sẽ có đường liên kết giữa 2 điểm [ib jb ] và [ic jc ] . gồm các pixel có liên kết với một pixel trung tâm. là pixel đang được xử lý. Ta có đường liên kết 4 hoặc liên kết 8 nếu các pixel liên kết 4 hoặc 8 với nhau a) Liên kết 4 b) Liên kết 8 Hình 1. Các thuật toán xử lý ảnh số Toán tử cửa sổ (windowing operator): Trong việc thực thi các thuật toán xử lý ảnh số cơ bản. Các phép 18 . ta ký hiệu là S. [ib . ta giả định đối tượng là tập hợp các điểm ảnh có liên kết với nhau và có mức xám là 0 (đen).ngohaibac.2.4 : Những kiểu đường liên kết giữa các điểm ảnh. [ic . và nền là những điểm có mức xám 1 (trắng) . Trong đề tài này. Toán tử cửa sổ là một tập hợp có hình dạng nhất định. Miền trong của S : là các điểm thuộc S nhưng không nằm trên biên của nó. Liên kết có tính tương đối. ja ] . ja ] . Đối tượng và nền : Ảnh sau khi được nhị phân hóa ( các điểm ảnh chỉ có giá trị 0 hoặc 1) sẽ phân biệt được đối tượng và nền. và giữa 2 điểm [ia . jb ] .www.net liên kết với pixel trước nó. Biên: biên của một đối tượng S là tập các điểm trên S và có liên kết 4 với ~S (phần bù của S) hay nền của ảnh. người ta thường sử dụng một toán tử đặc biệt gọi là toán tử cửa sổ.3. nếu có một đường liên kết giữa 2 điểm [ia . Có thể dễ dàng nhận thấy.2. 1.

hiệu chỉnh histogram. chúng em sử dụng thường xuyên toán tử cửa sổ có dạng 3x3. khó phân biệt.ngohaibac. 7x7. tùy thuộc vào thuật toán thực hiện. I min . Để cải thiện ảnh. Tăng độ tương phản : Ảnh sau khi thu được từ camera..là các mức xám cao nhất và thấp nhất.là mức xám sau khi hiệu chỉnh và trước khi hiệu chỉnh. Các thuật toán nhân chập Nhân chập (convolution) : nhân chập không phải là một thuật toán xử lý ảnh.256 I max  I min I max .net toán trên các pixel này sẽ có ảnh hưởng đến các pixel trung tâm cũng là các pixel đang được xử lý trong một thuật toán xử lý ảnh. đồng thời lại dễ thực hiện và rút ngắn tối đa quá trình xử lý. . tạo thuật tiện cho việc xử lý và nhận dạng sau này. có thể do sự tương phản ảnh sáng kém. Trong đồ án này. Ở đây ta sử dụng phương pháp hiệu chỉnh min-max vì nó dãn đều mức xám của ảnh trong dải cho phép (không ảnh hưởng đến mức xám chung). ta sẽ dãn mức xám của ảnh ra các giá trị cách biệt nhau hơn. Nếu sử dụng cửa sổ 5x5 và 7x7. 5x5. hỗ trợ các quá trình xử lý cao hơn. Toán tử cửa sổ có nhiều hình dạng. dẫn đến độ chói quá cao. mà là phép toán thông dụng trong các thuật toán xử lý ảnh sử dụng toán 19 . vì đây là kích thước hợp lý để thực hiện hiệu quả tất cả các thuật toán xử lý cơ bản và nâng cao. ta sử dụng các phương pháp hiệu chỉnh: hiệu chỉnh min-max. hiệu chỉnh Gamma. Sau khi hiệu chỉnh mức xám. thời gian xử lý sẽ tăng lên rất nhiều. ví dụ :3x3.. Công thức để nâng cấp ảnh theo hiệu chỉnh min-max: I new  Trong đó: I old  I min ..www.. I new . Tuy nhiên thường dùng nhất là các toán tử có dạng hình vuông với các cạnh là một số lẻ. I old .

j )  n  i 1 m  j 1   c(n. Lọc tuyến tính(linear filter) có tác dụng cải thiện ảnh. Lọc tuyến tính.I (n. Mỗi bộ lọc khác nhau sử dụng một mặt nạ khác nhau.ngohaibac.www.net tử cửa sổ. dò biên: Đây là 2 thuật toán cơ sở sử dụng phép nhân chập.m) là các phần tử của một ma trận gọi là mặt nạ (mask). với mỗi cửa sổ 3x3 thu được. m). i 1 j 1 Kết quả tính được cho ra giá trị mới của pixel trung tâm. cho hiệu quả khác nhau tùy vào mục đích sử dụng và tình trạng của ảnh sau khi thu thập. Nhân chập được sử dụng trong các bài toán dò biên (edge detection) và lọc tuyến tính (linear filter). Việc thực thi phép nhân chập như sau: cho một cửa sổ với pixel trung tâm chạy trên toàn bộ frame ảnh. c(n.1). Mỗi thuật toán xử lý khác nhau sử dụng một mặt nạ khác nhau để tính giá trị của các điểm ảnh. mặt nạ này sẽ làm giảm ảnh hưởng của nhiễu đối với pixel trung tâm bằng cách lấy trung bình cộng các pixel lân cận trong cửa sổ.1). ta sử dụng mặt nạ 20 .  c11 c12  c   c21 c22 c  31 c32 c13   1 1 1 1   c23   1 1 1 9  c33    1 1 1 Nếu ảnh có nhiễu Gaussian. m) (1. ta có thể sử dụng mặt nạ dành cho lọc trung bình. bằng cách thực hiện phép tính với các pixel lân cận và chính pixel trung tâm. Ví dụ đối với ảnh có nhiễu phân bố đều. Trong (1. loại bỏ nhiễu hỗ trợ cho các quá trình xử lý cao hơn. ta thực hiện phép toán : I (i. Nhân chập tính toán ra giá trị mới của pixel trung tâm của toán tử cửa sổ. ngẫu nhiên độc lập với mỗi pixel.

dò biên bằng cách lấy đạo hàm bậc 2 của mức xám theo tọa độ pixel. như dò biên theo gradient.www. Hầu hết các thuật toán dò biên sử dụng nhân chập. Thuật toán dò biên mà chúng em sử dụng trong đồ án này là thuật toán Laplacien. Có nhiều cách xác định biên. Thuật toán Laplacien dò biên chỉ quan tâm đến sự thay đổi đột ngột của mức xám ( lấy đạo hàm bậc 2 ) mà không quan tâm đến hướng của biên. Thuật toán này được thực thi bằng cách sử dụng mặt nạ:  c11 c12  c   c21 c22 c  31 c32 c13   1 1 1    c23    1 8 1 cho liên kết 8 c33   1 1 1    21 . dù không phải là tất cả .5 : Kết quả của phép lọc Gaussian với cửa sổ 3x3 Dò biên : Biên của một đối tượng được xác định ở nơi mức xám của các pixel có sự thay đổi đột ngột.ngohaibac.net  c11 c12  c   c21 c22 c  31 c32 c13  1 2 1 1   c23    2 4 2  16   c33   1 1 1 a) Trước khi lọc b)Sau khi lọc Hình 1.

Nếu chọn ngưỡng không tốt.ngohaibac. cho kết quả khác nhau : Trong đó điển hình là tìm ngưỡng trung bình và tìm ngưỡng theo histogram.www. nâng cấp. Ngưỡng đóng vai trò quyết định quá trình nhị phân hóa ảnh số có hiệu quả hay không. hoặc tệ hơn là làm các đối tượng không phân biệt được với nhau. Có nhiều thuật toán tìm ngưỡng. phân vùng và nhị phân hóa ảnh số: Ảnh sau quá trình tiền xử lý. Tìm ngưỡng : đây là quá trình tìm ra ngưỡng của một ảnh để thực hiện việc phân vùng. Tìm ngưỡng trung bình.net  c11  c   c21 c  31 c12 c22 c32 c13   0 1 0     c23    1 4 1  c33   0 1 0     cho liên kết 4 a) Ảnh gốc b) Kết quả dò biên Hình 1. hoặc cho đối tượng với kích thước. ngưỡng được tính theo công thức: 22 . sẽ bỏ qua một số đối tượng.6 : Kết quả thuật toán dò biên Phân ngưỡng. phân vùng thành các đối tượng riêng biệt. vị trí không đúng. để tới những quá trình xử lý cao hơn cần được nhị phân hóa.

ngohaibac. Tìm ngưỡng theo histogram: là phương pháp tìm ngưỡng dựa theo lược Hình 1.www. j ) n. I ng . Trong đó I max1 I max2 là 2 mức xám tương ứng cực đại trên histogram. . nền là vùng ảnh có mức xám cao.m i 1 j 1 I ng  I tb   n x m .  đồ xám. Phân vùng và nhị phân hóa ảnh số: sau khi tìm ngưỡng.kích thước ảnh Itb . ta có thể nhị phân hóa ảnh số và tách các đối tượng.net 1 n m I tb   I (i. ta coi đối tượng là những vùng ảnh có mức xám thấp.7 : Phân ngưỡng theo lược đồ xám Ngưỡng tìm được theo công thức: và I ng =( I max1 + I max2 )/2.mức xám trung bình. giá trị ngưỡng và số gia hiệu chỉnh. Ta có thể tách đối tượng ra bằng thuật toán phân ngưỡng: 23 . Trong ảnh xám ban đầu.

Tuy nhiên sau đó hình dạng đối tượng không được khôi phục hoàn toàn như trước. phân vùng ảnh thành các đối tượng. Để giải quyết vấn đề này. Sau quá trình này các nhiễu đã bị loại bỏ sẽ không xuất hiện trở lại. đồng thời làm nhỏ bớt đối tượng. Có thể loại bỏ hẳn các nhiễu tương đối lớn bằng cách thực hiện nhiều lần thuật toán làm mảnh và làm đầy.  Làm đầy (dilation) tượng)  Làm mảnh (erosion) I (i. Có 2 phương pháp xử lý tiêu biểu : Thuật toán làm đầy( dilation) và làm mảnh (erosion). 24 . Để khôi phục đối tượng trở lại như cũ. j ) = 1 chỉ khi tất cả các pixel trong phần tử cấu trúc có giá trị bằng 1 ( cửa sổ nằm hoàn toàn trong đối tượng ) Kết quả của quá trình làm mảnh là ảnh sẽ loại bỏ bớt được những nhiễu nhỏ.www. ta dùng thuật toán làm đầy. Xử lý đồng cấu ảnh nhị phân Ảnh nhị phân thu được sau khi phân ngưỡng. Dựa trên việc phân tích cửa sổ này ta tính ra giá trị của pixel trung tâm. j ) = 0 chỉ khi tất cả các pixel trong phần tử cấu trúc có giá trị bằng 0 (cửa sổ nằm hoàn toàn bên ngoài đối I (i. hoặc do ngưỡng được chọn chưa thực sự tốt để tách hoàn toàn các đối tượng. vẫn có thể chưa hoàn chỉnh để thực hiện các quá trình phân tích tiếp theo. tách các đối tượng gần nhau ra. ta sử dụng các thuật toán xử lý đồng cấu ảnh nhị phân (morphological algorithms) . Đó là do trên ảnh vẫn có thể tồn tại các nhiễu là các chấm đen chưa bị loại bỏ sau các thuật toán nâng cấp ảnh và lọc. 2 phương pháp này đều sử dụng một cửa sổ.ngohaibac.net Ta sẽ được đối tượng có màu đen( mức xám 1) và nền có màu trắng (mức xám 0).phần tử cấu trúc(structure element) quét qua ảnh.

Pixel trung tâm sẽ được kiểm tra để gán nhãn. và loại bỏ được các nhiễu. và các pixel lân cận được dùng để xác định nhãn mới cho pixel trung tâm.net Hình 1. phục vụ cho hệ thống định vị và nhận dạng. ta đã được 1 ảnh nhị phân với các đối tượng được tách ra rõ rệt.www.8 : Loại bỏ nhiễu và khôi phục đối tượng bằng quá trình làm mảnh-làm đầy. Thuật toán gán nhãn đối tượng cũng sử dụng một cửa sổ 3x3 chạy khắp frame.ngohaibac. Thuật toán thực hiện như sau: 25 . Để thực hiện việc xác định các đặc trưng hình học của đối tượng. cần phải phân biệt các đối tượng (các vùng ảnh đen) với nhau bằng cách gán cho chúng các nhãn khác nhau. Bài toán đánh nhãn đối tượng: với phương pháp xử lý đồng cấu ảnh nhị phân.

ngohaibac. Cửa sổ đọc từ vị trí xuất phát (góc trái 26 .www.9 : Sơ đồ thuật toán gán nhãn đối tượng Thuật toán gán nhãn đối tượng được thực hiện như sau: ban đầu ta khởi tạo biến đếm đối tượng n_object=0.net Hình 1.

kiểm tra nhãn của pixel trung tâm(pixel_index).ngohaibac. Nếu bằng 0.net phía trên của frame). Nhãn đối tượng được lưu vào một phần của thông tin về pixel chứa trong RAM. Các đặc trưng hình học của đối tượng Sau khi ảnh đã được phân vùng và đánh nhãn thành công. Nếu bằng 0 thì kiểm tra nhãn các pixel lân cận (pixel_nei_index) và gán pixel_cen_index=min(pixel_nei_index). ta sẽ thực hiện đánh nhãn đối tượng gồm các pixel có liên kết 8 với nhau. Nếu khác 0 thì dịch cửa sổ. Sau đó quay trở lại dịch cửa sổ. A i 1 j 1 27 .được tính theo công thức : 1 n m x   i. đồng thời gán pixel_cen_index = n_object. j ) =1 hoặc 0.I (i. A i 1 j 1 1 n n y   j. j ). i 1 j 1 n m -Chu vi đối tượng: bằng số pixel nằm trên biên đối tượng. Nếu bằng 0 thì pixel đó là thuộc đối tượng chưa đánh nhãn. Với thuật toán này.www. j ).I (i. Kiểm tra xem pixel trung tâm có bằng 0. Các đặc trưng hình học của đối tượng cần được xác định bao gồm : -Diện tích: bằng số pixel của đối tượng : A   I (i. Nếu khác 0 thì quay trở lại. Ta tăng biến đếm đối tượng n_object thêm 1. cũng là tọa độ trọng tâm vật thể. Nếu pixel_cen_index khác 0 thì dịch cửa sổ. j ) trong đó I (i. -Vị trí (tọa độ) của đối tượng. ta thực hiện việc xác định các đặc trưng của đối tượng.

net 1. Do đó.www. để thỏa mãn yêu cầu về tốc độ và hiệu suất xử lý. đòi hỏi những nền phần cứng đủ mạnh với khả năng xử lý và tính thời gian thực cao. Các bộ xử lý DSP có những đặc tính nổi bật như sau:  Thích hợp cho các quá trình cần xử lý theo thời gian thực  Hiệu năng được tối ưu với dữ liệu dạng luồng  Chương trình và dữ liệu được bố chí riêng biệt (kiến trúc Harvard)  Tích hợp các chỉ thị lệnh đặc biệt SIMD (Single Instruction. Một số giải pháp phần cứng cho hệ thống thị giác máy Có thể thấy. 1979 bởi Intel. đặc biệt với khả năng xử lý song song. các thuật toán xử lý ảnh số trong hệ thống thị giác máy đều tương đối phức tạp. Tận dụng đặc tính của FPGA là linh hoạt và tốc độ xử lý nhanh (cứng hoá các giải thuật). FPGA rất phù hợp với các bài toán xử lý ảnh đòi hỏi một khối lượng tính toán phức tạp. Bell Labs. DSP Processor DSP Processor được giới thiệu đầu tiên vào những năm 1978.ngohaibac.4. với khối lượng tính toán rất lớn (hàng trăm ngàn pixel). Dưới đây là một số giải pháp phần cứng thường được sử dụng cho một hệ thống xử lý ảnh số. FPGA Đây là giải pháp về phần cứng mà hay được sử dụng hiện nay. Multiple Data)  Không hỗ trợ đa nhiệm  Tương tác trực tiếp với bộ nhớ của thiết bị  Tích hợp sẵn ADC và DAC 28 .

Các giao tiếp ngoại vi phổ biến như UART. gcc) Nhược điểm Kích thước.ngohaibac. làm tăng khả năng linh hoạt và tốc độ xử lý. laptop sẽ có những ưu/ nhược điểm sau:           Ưu điểm Có tốc độ xử lý cao Dễ dàng lập trình. Đặc biệt các DSP Processor rất thích hợp cho những nhu cầu cần tính toán nhanh. Việc sử dụng mainboard. Với những ưu điểm đó DSP Processor được dùng trong nhiều thiết bị xử lý ảnh chuyên nghiệp. xử lý số thực.net DSP Processor ngày nay đã được tích hợp nhiều thành phần khác nhau. laptop Đây là một trong những phương pháp đơn giản nhất. và đưa ra quyết định. Với việc kết nối một camera hay webcam ta hoàn toàn chủ động trong quá trình nhận/xử lý ảnh. khối lượng lớn Dễ hư hỏng do va đập hay các tác nhân khác Giá thành rất đắt (>600$) Có quá nhiều thành phần không sử dụng đến 29 . Mainboard. kiểm lỗi Hệ điều hành quen thuộc (windows/linux) Các công cụ lập trình/biên dịch phổ biến (MSVC. Đặc biệt một số còn có sẵn những chỉ thị lệnh giúp cho việc tính toán ma trận. tích chập hay thậm chí các phép biến đổi DCT trong quá tình nén ảnh. USB hay Keyboard. Có thể tận dụng các mainboard máy tính hay thậm chí các máy tính xách tay với chức năng là một đơn vị xử lý ảnh. Parallel.www.

Trong đồ án này.. trong đó thực hiện được một số thuật toán cơ bản như lọc. đồng thời tạo nền tảng cho hệ thống thị giác máy tính với những thuật toán xử lý cao hơn.) Hệ thống được xây dựng với mục đích thử nghiệm những thuật toán xử lý ảnh số đã được nghiên cứu. diện tích... chúng em sử dụng giải pháp là vi mạch khả trình FPGA để xây dựng toàn bộ hệ thống xử lý ảnh và điều khiển trung tâm.ngohaibac. USB Ngoài các giải pháp trên. (vị trí. phân ngưỡng..net  Chỉ có thể giao tiếp với ngoại vi thông qua các chuẩn phổ biến như UART. phân vùng. xử lý đồng cấu ảnh nhị phân. Single Board Computer(SBC) sử dụng Single on Chip (SoC).. Mục đích của đề tài là xây dựng một hệ thống xử lý ảnh trên nên FPGA. còn nhiều những giải pháp phần cứng khác cho một hệ thống xử lý ảnh số như : Main công nghiệp. 30 .www. đánh nhãn đối tượng và cuối cùng là tính toán các đặc trưng của đối tượng. sử dụng công nghệ FPGA.

Khái niệm và ứng dụng FPGA Khái niệm FPGA (Field Programable Gate Arrays) là một thiết bị bán dẫn bao gồm các khối logic lập trình được gọi là "Logic Block".1. FPGA và CPLC đều bao gồm một số lượng khá lớn các phần tử logic khả trình. Đó có thể là các Flip-Flop hoặc những bộ nhớ hoàn chỉnh hơn.1.net Phần 2 : Khái quát về FPGA và mạch phát triển XST 3S1000 của XESS 2. Các kết nối khả trình cho phép các khối logic có thể nối với nhau theo thiết kế của người xây dựng hệ thống. Điều này làm cho nó trở nên linh hoạt hơn ( về số lượng thiết kế được thực 31 . Ross Freeman. nhưng lại có ưu điểm là khả năng dự đoán trễ lớn hơn và tỉ lệ logic-kết nối cao hơn. Do đó nó kém linh hoạt hơn. giống như một bảng mạch khả trình. Một kiến trúc khác tương tự nhưng đơn giản hơn FPGA. Khác biệt cơ bản giữa FPGA và CPLD là ở kiến trúc của chúng. một đồng sáng lập của Xilinx đã phát minh ra FPGA. Năm 1984. Trong khi đó FPGA thông thường chứa từ 10 nghìn cho đến vài triệu cổng. hoặc các chức năng kết hợp phức tạp hơn như decoder hoặc các phép tính toán học. Trong hầu hết các kiến trúc FPGA.www. trong kiến trúc của FPGA lại có sự trội hơn về số lượng kết nối. các khối logic cũng bao gồm cả các phần tử nhớ.ngohaibac. Thực chất đây là tiền thân của FPGA. CPLD có một kiến trúc bị giới hạn trong một hoặc một vài dãy logic khả trình cùng với một lượng nhỏ thanh ghi định thời.1. Giới thiệu chung về FPGA và ngôn ngữ VHDL 2. XOR. Mật độ cổng logic (Logic Gate) của CPLD nằm trong khoản từ vài nghìn cho đến 10 nghìn cổng. Ngược lại. Các khối logic có thể được lập trình để thực hiện các chức năng của các khối logic cơ bản như AND. và các kết nối khả trình. là CPLD ( Complex Programable Logic Device ).

mà mã nguồn do các hãng cung cấp..FPGA đặc biệt mạnh trong các lĩnh vực hoặc ứng dụng mà kiến trúc của nó yêu cầu một lượng rất lớn xử lý song song. Ứng dụng.net thi bên trong) nhưng cũng đồng nghĩa với việc phức tạp hơn trong quá trình thiết kế. là người thiết kế có thể tích hợp vào đó các bộ xử lý mềm (soft processor) hay vi xử lý tích hợp (embedded processor). Actel..2. ethernet. xử lý ảnh.2. Linux và Solaris. Hiện nay công nghệ FPGA đang được sản xuất và hỗ trợ phần mềm bởi các hãng như :Xilinx.1.1.). Một ưu điểm khác của FPGA. Altera.www. FPGA được ứng dụng điển hình trong các lĩnh vực như: xử lý tín hiệu số. thực thi các lệnh theo chương trình được nạp riêng biệt. thay thế cho vi xử lý. nhân tích hợp) . Một khác biệt đáng chú ý nữa giữa FPGA và CPLD là : hầu hết các FPGA hiện nay đều bao có các phần tử chức năng tích hợp cao hơn ( như bộ cộng. FPGA cũng được sử dụng trong những ứng dụng cần thực thi các thuật toán như FFT.ngohaibac. và có các ngoại vi được thiết kế linh động ( khối giao tiếp UART. Kiến trúc FPGA 2. mã hóa. Một số kiến trúc FPGA hiện nay còn có thể cho phép cấu hình lại từng phần (partial re-configuration). vào/ra đa chức năng GPIO. trong khi Altera cung cấp những công cụ miễn phí trên nền Windows. Xilinx cung cấp phần mềm miễn phí trên nền Windows. nhận dạng giọng nói.. Linux. đặc biết là mã hóa và giải mã. Kiến trúc chung FPGA 32 . nhân chập (convolution).. mô phỏng (emulation).. 2. thị giác máy. Có nghĩa là cho phép một phần của thiết kế được cấu hình lại trong khi những thiết kế khác vẫn tiếp tục hoạt động.1. Các vi xử lý này có thể được thiết kế như các khối logic thông thường. Trong đó Xilinx và Altera là 2 hãng hàng đầu.. Atmel. Các vi xử lý này cũng có thể được lập trình lại (re-configurable computing) ngay trong khi đang chạy. và bộ nhớ tích hợp.

33 . chúng có mạch clock để truyền tín hiệu clock tới các logic block.1 : Kiến trúc chung của FPGA Mỗi nhà sản xuất FPGA có riêng cấu trúc FPGA. và programmable interconnect. CLB thực hiện phần lớn các chức năng logic như là lưu trữ dữ liệu..net Hình 2. configurable I/O blocks (IOB). Các phần tử lập trình được của FPGA có 2 dạng cơ bản là các RAM tĩnh (Static RAM) và anti-fuses. memory và có thể có cả decoders.www. Configurable Logic Blocks (CLBs) Configurable Logic Blocks (CLBs) bao gồm các Look-Up Tables (LUTs) rất linh động có chức năng thực thi các logic và các phần tử nhớ dùng như là các flip-flop hoặc các chốt (latch).ngohaibac. Và tất nhiên. Cấu trúc FPGA bao gồm có configuration logic blocks (CLBs).. và thêm vào đó có các logic resources như ALUs. nhưng nhìn chung cấu trúc được thể hiện giống như trong hình bên trên.

IOBs hỗ trợ luồng dữ liệu 2 chiều (bidirectional data flow) và hoạt động logic 3 trạng thái (3 state). Phần lớn là có trở kéo lên ở ngõ ra và thỉnh thoảng lại có trở kéo xuống.net Hình 2.ngohaibac.www. như Double Data-Rate (DDR). bao gồm một vài chuẩn tốc độ cao. Hình 2.2 : Một Logic Block điển hình Configurable I/O Blocks Input/Output Blocks (IOBs) điều khiển dòng dữ liệu giữa các chân vào ra I/O và các logic bên trong của FPGA.3 : Configurable Logic Blocks Programmable Interconnect 34 . Hỗ trợ phần lớn các chuẩn tín hiệu. Nó bao gồm có các bộ đệm vào và ra với 3 trạng thái và điều khiển ngõ ra dạng open collector.

Các bộ đệm này được nối với các chân clock vào và lái 35 . Có một line dài được dùng để nối các CLBs quan trọng mà chúng lại ở cách xa nhau mà không gây ra quá nhiều trễ. Có các line ngắn được dùng để liên kết các CLBs riêng rẽ nhưng đặt gần nhau. Và cũng thường có vài ma trận chuyển đổi (switch matrices). Chúng được kết nối với các bộ đệm clock và với mỗi phần tử được clock trong mỗi CLB. tuy nhiên lại giống với của gate array ASIC. được thiết kế đặc biệt cho trở kháng thấp và nhờ đó mà thời gian lan truyền nhanh hơn. Các bộ đệm 3 trạng thái được dùng để kết nối phần lớn các CLBs với các line dài (long line).net Interconnect ở FPGA khác xa so với ở CPLD.4 : Programmable Interconnect Mạch đồng hồ (Clock Circuitry ) Các khối vào ra với bộ đệm clock high drive gọi là các clock driver. giống như trong CPLD.nằm rải rác xung quanh chip.Đó là cách mà clock có thể phân phối bên trong FPGA.ngohaibac. nối giữa các line dài và ngắn lại với nhau theo một số cách đặc biệt. Các long line đặc biệt. gọi là các line clock toàn cục (global clock lines).www. tạo nên các bus. Hình 2. Chúng có thể được dùng như là các bus ở trong chip. Các chuyển đổi lập trình được (Programmable switches) bên trong chip cho phép kết nối giữa CLBs tới các interconnect line và giữa interconnect line với các line khác và với switch matrix.

các CLB có thể bao gồm 2 hoặc nhiều flip-flop. bình thường chúng không tạo ra một kết nối nào cả. dẫn đến tăng không gian và thêm vào một lượng lớn trễ mà không thể bù lại để có hiệu quả hơn. Một dòng điện có cường độ nhất định trong khi lập trình thiết bị sẽ dẫn đến việc hai bên của anti-fuse kết nối với nhau. … Các nhà lý luận cho rằng các phần tử nhỏ có thể nói với nhau tạo lên các chức năng lớn hơn mà không tốn nhiều các phần tử logic.2. 2. không giống như các cầu chì thông thường.www. Thiết kế đồng bộ là yêu cầu bắt buộc với FPGA. Ghi một bit với giá trị 0 sẽ ngắt switch. thận chí ngay cả khi chúng đang ở trong hệ thống. Cách còn lại là antifuse bao gồm các cấu trúc rất nhỏ. Thuận lợi của cấu trúc FPGA dựa trên SRAM là chúng dùng một quá trình sản xuất chuẩn mà ở đó các kế hoạch sản xuất chip là gần như giống nhau và luôn luôn được tối ưu cho khả năng hoạt động. trong khi ghi giá trị 1 sẽ đóng switch. Các đường clock được thiết kế sao cho thời gian thời gian lệch nhỏ nhất và thời gian lan truyền nhanh. So sánh giữa SDRAM Programming và Anti-fuse programming Có 2 cách để lập trình FPGA.ngohaibac. Chỉ khi dùng các tín hiệu clock từ các bộ đệm clock thì thời gian trễ tương đối và thời gian lệch mới được đảm bảo.2. Tiếc rằng. từ khi độ lệch tuyệt đối và trễ không được bảo đảm. Từ khi mà SRAM có thể lập trình lại được thì FPGA có thể lập trình lại bất cứ khi nào muốn.1. bao gồm một vài bit Static RAM cho mỗi phần tử lập trình. cổng NOR.1. Cách đầu tiên là SDRAM Programming. đơn giản như là ghi vào SRAM thông thường. 2.net các tín hiệu clock vào các đường clock toàn cục (global clock line) như mô tả ở bên trên. Chúng có nhược điểm là vùng nhớ volatile nên một vấn đề về 36 . So sánh giữa cấu trúc nhỏ và cấu trúc lớn FPGA có cấu trúc nhỏ giống như các mảng cổng của hệ ASIC với các CLBs chỉ bao gồm các phần tử cơ bản rất nhỏ như các cổng NAND. các thiết kế mà không cần nhiều flip-flop sẽ khiến cho nhiều flip-flop không được dùng đến. các cấu trúc nhỏ lại yêu cầu khá nhiều nguồn kết nối (routing resource). Trong các FPGA có cấu trúc lớn.2.3.

net nguồn có thể thay đổi nội dung của RAM.1. chia và dịch bit..  Block RAM cho phép lưu trữ dữ liệu dưới dạng các khối (block) dualport 18-Kbit.  Multiplier Blocks cho phép 2 số nhị phân 18bit làm đầu vào và dễ dàng tính toán tích của chúng. Hỗ trợ phần lớn các chuẩn tín hiệu. Nhược điểm là chúng yêu cầu một bộ lập trình bên ngoài để lập trình và mỗi khi lập trình xong thì không thể thay đổi được.  Input/Output Blocks (IOBs) điều khiển dòng dữ liệu giữa các chân vào ra I/O và các logic bên trong của FPGA. Các thiết bị dựa trên SDRAM cũng có thời gian trễ đường truyền lớn.  Digital Clock Manager (DCM) Blocks cung cấp khả năng tự xác định xung clock. 2. trễ. Thuận lợi của cấu trúc FPGA dựa trên anti-fuse là chúng là non-volatile và các trễ khi nối dây sẽ rất nhỏ vì thế nên chúng có khuynh hướng nhanh hơn. như Double DataRate (DDR).2. nhân. CLB thực hiện phần lớn các chức năng logic như là lưu trữ dữ liệu. Cấu trúc FPGA của Spartan 3 Cấu trúc tổng quan của Spartan 3 gồm có 5 thành phần có chức năng khả trình cơ bản sau:  Configurable Logic Blocks (CLBs) bao gồm các Look-Up Tables (LUTs) rất linh động có chức năng thực thi các logic và các phần tử nhớ dùng như là các flip-flop hoặc các chốt (latch). bao gồm một vài chuẩn tốc độ cao. Các phần tử này được tổ chức như trong hình sau: 37 . là giải pháp số hoàn chỉnh cho các tín hiệu clock phân phối..4. IOBs hỗ trợ luồng dữ liệu 2 chiều (bidirectional data flow) và hoạt động logic 3 trạng thái (3 state).ngohaibac.www.

Các DCM được đặt ở các vị trí: 2 DCM phía trên và 2 cái phía dưới của thiết bị.net . riêng Spartan-3E chỉ có một vòng các IOBs. Mỗi thành phần chức năng này có một switch matrix dành riêng để cho phép chọn lựa kết nối cho việc đi dây trong FPGA. Hình 2.3.www. Trình tự thiết kế một chip Trình tự thiết kế một hệ thống trên nền FPGA bao gồm các bước sau: 38 . và truyền tín hiệu giữa chúng. các IOBs bao quanh các mảng CLBs. mỗi block RAM lại gắn liền với một multiplier dành riêng. Đặc điểm chung mạng Spartan-3 là kết nối liên thông giữa 5 phần tử cơ bản này. 2. và đối với các device lớn hơn thì có thêm các DCM ở phía bên cạnh. Mỗi cột block RAM bao gồm một vài block RAM 18-Kbit.5 : Cấu trúc các thành phần của Spartan 3A Từ hình vẽ ta thấy.1.ngohaibac.

net Hình 2. Chi tiết kĩ thuật nên bao gồm các thông tin sau đây:   Sơ đồ khối bên ngoài để chỉ ra chip đó được đặt vào trong hệ thống Sơ đồ khối bên trong chỉ rõ mỗi chức năng của các thành phần. 39 như thế nào. Và các đặc điểm kĩ thuật cho phép mỗi kĩ sư hiểu về thiết kế hệ thống chung và công việc của họ trong hệ thống đó là gì. Sẽ không làm gì được nếu không có các bảng ghi các đặc điểm kĩ thuật.www. Design Flow Ghi các đặc điểm kĩ thuật Tầm quan trọng của các đặc điểm kĩ thuật (specification) không thể phóng đại quá. Nó chỉ tuyệt đối cần đặc biệt khi là một hướng dẫn để chọn công nghệ phù hợp và tạo những yêu cầu của bạn cho các nhà sản xuất chip.ngohaibac.6. Và nó cũng cho phép các kĩ sư thiết kế giao diện đúng cho một loạt các phần của chip. Các đặc điểm kĩ thuật cũng giúp tiết kiệm thời gian và sự hiểu lầm. .

Đối với các chip nhỏ thì cách tiếp cận bằng sơ đồ nguyên lý (schematic) thường được chọn. nguôn ngữ miêu tả phần cứng (hardware description language) HDL như Verilog và VHDL được dùng bởi khả năng mềm dẻo. thời gian lan truyền ra các cổng ra và thời gian chu kì clock. Rất nhiều phần sẽ được dự đoán tốt nhất ở trong đó. Đếm xấp xỉ số gate Dạng đóng gói Tiêu thụ nguồn Giá cả Các thủ tục để kiểm tra đầu vào. nhưng sẽ thay đổi trong quá trình chip được thiết kế.www. Chọn công cụ tổng hợp Tại điểm này.net        Miêu tả các chân vào ra bao gồm khả năng lái đầu ra. nó có thể được dùng để chọn nhà sản xuất chip tốt nhất với công nghệ và cấu trúc giá cả là tốt nhất đáp ứng được yêu cầu của bạn. mức ngưỡng Thời gian ước lượng bao gồm thời gian thiết lập và giữ ở các chân vào. Khi dùng ngôn ngữ cấp cao. Chọn một hướng tiếp cận thiết kế Tại thời điểm này bạn phải quyết định cách thực hiện thiết kế mà bạn mong muốn. Chọn công nghệ Mỗi khi một chi tiết miêu tả kĩ thuật được xuất bản. Một điều rất quan trọng nữa là đó là các tài liệu trực tuyến.ngohaibac. đặc biệt là khi các kĩ sư thiết kế đã quen thuộc với các công cụ này. Có nghĩa rằng phần mềm này sẽ tạo ra các cổng ở cấp thấp từ miêu tả ở cấp cao hơn. Điều đó rất quan trọng kể 40 . bạn phải quyết định chọn phần mềm tổng hợp nào sẽ được dùng nếu bạn có kế hoạch thiết kế FPGA với HDL. Thế nhưng đối với các thiết kế lớn hơn. dễ đọc. dễ chuyển giao. phần mềm tổng hợp (synthesis software) sẽ được yêu cầu tổng hợp (synthesize) thiết kế.

net từ khi mỗi công cụ tổng hợp được khuyên dùng và sự ủy thác của cách thiết kế phần cứng nên nó có thể hoạt động tổng hợp đúng hơn. Tổng hợp Nếu thiết kế dùng HDL.ngohaibac. Từng phần nhỏ của thiết kế nên được mô phỏng trước khi kết hợp chúng thành các phần lớn hơn.www. Thiết kế chip Có một số cách để thiết kế chip  Top-down design (Thiết kế từ trên xuống dưới)  Macros  Synchronous design  Protect against metastability  Avoid floating nodes  Avoid bus contention Mô phỏng – cái nhìn tổng quan về thiết kế Mô phỏng là một quá trình liên tục khi mà thiết kế xong. Đó là một trong những khái quát quan trọng nhất bởi vì khi mô phỏng đúng và thành công thì bạn sẽ biết được chip của bạn sẽ hoạt động đúng trong hệ thống. bước tiếp theo là tổng hợp chip. Place and Route 41 . dẫn đến một cái nhìn tổng quan khác về thiết kế vì thế thiết kế có thể được kiểm tra lại. Mỗi khi thiết kế và mô phỏng hoàn thành. Điều này rất là cần thiết và sự mô phỏng theo thứ tự sẽ kiểm tra chức năng hoạt động đúng của từng phần. Thật là quan trọng để nhận các kết quả khác cho phép nhìn qua các mô phỏng và chắc chắn rằng không có điều gì bị quên và không sự tổn hao nào gặp phải. bao gồm việc dùng phần mềm tổng hợp để chuyển đổi thật tối ưu từ thiết kế mức RTL (register transfer level) sang thiết kế mức gate mà có thể gắn vào các khối logic trong FPGA.

thì nó chỉ bị hỏng khi lỗi điện học hoặc lỗi cơ học sẽ thường xuyên xảy ra với loại kiểm tra khắc nghiệt này.4. thiết kế được lập trình vào cho chip. VHDL là viết tắt của VHSIC Hardware Description Language. Các lỗi này cần được kiểm tra và trích dẫn lại để có thể được sửa chữa trong phiên bản tiếp theo của chip. Các lỗi này thường được làm việc xung quanh với việc thay đổi hệ thống và thay đổi phần mềm hệ thống. Kiểm tra hệ thống nhúng là cần thiết tại thời điểm này để đưa ra kết quả rằng mọi phần của hệ thống đều hoạt động đúng khi kết hợp với nhau. rất cần thiết có một vài kiểm tra để có một vài kiểm tra burn-in trong hệ thống để test thường xuyên hệ thống qua thời gian dài. Sau đó. 42 . Nếu bạn làm lần lượt các bước ở bên trên thì đa phần là hệ thống sẽ hoạt động đúng chỉ với một vài lỗi rất nhỏ. sau đó tạo ra VHDL. Điều này bao gồm các công cụ của nhà sản xuất đẻ tối ưu lập trình cho chip để thực hiện thiết kế.ngohaibac. Nếu một chip được thiết kế đúng. đơn giản là lập trình thiết bị đó và ngay lập tức có mẫu thử. Phiên bản đầu tiên là VHDL 87. Mô phỏng lại – tổng quan cuối cùng Sau khi sắp đặt xong. Ngôn ngữ mô tả phần cứng VHDL VHDL là một ngôn ngữ mô tả phần cứng (hardware description language). thì một kết quả mô phỏng mới sẽ đúng với các kết quả dự đoán. lần đầu tiên được sáng lập bởi United State Department of Defense trong những năm 80. Kiểm tra Đối với các thiết bị lập trình được.www. Khi các chíp được đưa vào sản xuất. kết quả trong việc thiết kế vật lý cho chip thực. từ đó mạch điện vật lý hoăc hệ thống có thể được thực thi. Sau đó bạn có trách nhiệm đặt mấu thử này vào trong hệ thống và xem xem hệ thống có làm việc đúng không. 2. Nếu mọi thứ đều tốt đến thời điểm này. thì chip phải được mô phỏng lại với các con số về thời gian tạo ra bởi các layout thực tế. Bản thân VHSIC là viết tắt của Very High Speed Integrated Circuits (mạch tích hợp tốc độ cao).net Bước tiếp theo là sắp đặt chip. mô tả hành vi của mạch điện hoặc hệ thống.1.

chúng có thể được dùng để thực thi mạch điện trong các thiết bị lập trình được (từ Altera. Vì lí do đó. hay PROCEDURE được thực thi tuần tự.ngohaibac. Trong VHDL chỉ có các câu lệnh đặt trong PROCESS. Một điều chú ý về VHDL là trái ngược với các chương trình máy tính thông thường được thực hiện tuần tự thì các câu lệnh được thực hiện song song (concurrent). tới chuẩn IEEE 1076. Mỗi khi mã nguồn VHDL được viết. VHDL là ngôn ngữ mô tả phần cứng nguyên gốc đầu tiên được chuẩn hóa bởi Institue of Electrical and Electronics Engineers (IEEE).) hoặc có thể gửi đến các xưởng chế tạo các chíp ASIC.net lần nâng cấp sau đó có tên là VHDL 93. Almel. có một chuẩn được thêm vào là giới thiệu hệ thống logic đa giá trị (multi-valued logic system). Trình tự thiết kế một chíp dựa trên VHDL Một trong những tiện ích lớn của VHDL là cho phép tổng hợp mạch điện hoặc hệ thống trong thiết bị khả lập trình (programmable devide) (PLD hoặc FPGA) hoặc trong một hệ ASIC.. Hai ứng dụng trực tiếp chính của VHDL là trong mảng các thiết bị logic lập trình được ( Programmable Logic Devices) (bao gồm CPLDs – Complex Programmable Logic Devices và FPGAs – Field Programmable Gate Arrays). rất nhiều các chip thương mại phức tạp (ví dụ như các microcontrollers ) được thiết kế dựa trên cách tiếp cận này. FUNCTION. Trong IEEE 1164. nên VHDL thường được coi là một mã nguồn hơn là một chương trình. Hiện này. các nhà phân phối do đó chúng có khả năng portable và kế thừa cao (reusable). . Xilinx. Các bước thực hiện một project được tổng kết như trong hình dưới: 43 . Động cơ thúc đẩy cơ bản khi dùng VHDL (hay dùng Verilog) là VHDL là một ngôn ngữ độc lập chuẩn của các nhà công nghệ.www.

Bước thứ 2 là tối ưu thực hiện trên gate level net list tối ưu về tốc độ hoặc cho diện tích. XESS Corp.vhd và tên giống như tên của ENTITY (thực thể).net Hình 2. 44 . nhà thiết kế và ngay cả của sinh viên. : http://www. Bước đầu tiên trong quá trình synthesis là biên dịch.com X Engineering Software Systems Corporation (XESS) là công ty tại phía Bắc Carolina (Mỹ) được thành lập từ năm 1990. được ghi trong các file với đuôi mở rộng . 2. Cuối cùng là môt phần mềm place and route sẽ tạo ra một physical layout cho các chíp PLD/FPGA hoặc tạo ra các mặt nạ cho một hệ ASIC. đưa ra những công cụ phát triển logic lập trình được với giá phải chăng và các hướng dẫn cho người dùng được viết bởi các kĩ sư.www. Giới thiệu mạch phát triển XST 3S 1000 của hãng XESS Trang chủ của XESS Corp.xess. các nhà nghiên cứu.7: Qui trình thiết kế chip dựa trên VHDL Chúng ta bắt đầu thiết kế bằng cách viết mã VHDL.2.ngohaibac. Biên dịch là một quá trình chuyển đổi giữa ngôn ngữ VHDL bậc cao tại Register Transfer Level (RTL) sang netlist ở mức gate level.

www. 45 .net XESS giới thiệu 2 board chuyên dùng cho xử lý ảnh và audio: 2.ngohaibac. Hoặc chúng ta có thể download trực tiếp vào FPGA nhờ cổng song song (parallel port) dùng công cụ XSTOOLS ( trong bộ công cụ của XESS). Có thể có tới 4 bitstream được lưu trữ trong Flash và ta có thể dùng switch để lựa chọn bitstream nào được cấu hình cho FPGA khi áp đặt nguồn điện vào KIT.8 : KIT XSA-3S1000 KIT FPGA này bao gồm có 32 Mbyte DRAM đồng bộ và 2 Mbyte Flash để xây dựng hệ thống vi điều khiển RISC hoàn thiện dựa trên phần mềm (softcore). Giao diện CPLD trên XSA-3S1000 cũng hỗ trợ download dùng XILINX iMPACT và circuit test/debug với ChipScope dùng cáp download song song của Xilinx. XSA-3S1000 Hình 2.2.1.

XST-3.net Bổ sung thêm vào các chip FPGA.www. Hình 2.0 (XStend Board) 46 .ngohaibac.2.2. SDRAM và Flash. còn có thêm prototyping header đưa cho ta 65 chân I/O để xây dựng các giao diện với các ngoại vi khác. Thêm vào đó. Sơ đồ cấu trúc của XSA-3S1000 2. có thêm cổng VGA có thể hiển thị đồ họa với 512 màu.9.

www.ngohaibac.net

Hình 2.10 : XST-3.0 Board

Xstend Board là mạch hỗ trợ cho XSA Board có thể truy nhập qua giao diện prototype. Bo mạch này mở rộng khả năng của XSA Board trên một số mặt:  Các pushbuttons, DIP switches, LEDs, và protopying area rất có ích cho các thí nghiệm ở phòng Lab.  Mạch stereo và dual-chanel analog I/O dùng cho xử lý âm thanh kết hợp với các thành phần DSP được synthesize với phần mềm CORE generation của Xilinx.  Video decoder (bộ giải mã video) cho phép số hóa các video dạng NTSC/PAL/SECAM trong các ứng dụng xử lý ảnh.  Giao diện Ethernet 10/100 làm cho XSA Board có khả năng truy nhập TCP/IP và các dạng mạng khác.  Giao diện USB 1.1 làm cho XSA Board như một ngoại vi USB dạng lowspeed hoặc full-speed với PC.
47

www.ngohaibac.net

 Giao diện RS-232 rất hữu ích khi XSA Board cần phải gửi thông tin qua liên kết giao tiếp nổi tiếp với tốc độ thấp.  Giao diện IDE cung cấp cho XSA Board khả năng truy cập vào ổ đĩa cứng (hard disk) để lưu và phục hồi dữ liệu.  Các module với chức năng khác có thể thêm vào trong XST Board nhờ các doughterboard connector. Như vậy, kết hợp giữa XSA-3S1000 và XST-3.0 cho ta một Board ứng dụng xử lý video rất hiệu quả.

Hình 2.11 : XST-3S1000

Hỗ trợ kĩ thuật: XESS có một group xsboard-user là một mailing list, giải đáp mọi thắc mắc về thiết kế phần cứng và hệ thống phần mềm khi dùng bo mạch logic khả trình của XESS Corp. Ngoài ra, các phần mềm và module phát triển khá đầy đủ.
48

www.ngohaibac.net

2.3. Giới thiệu hãng Xilinx và các công cụ lập trình: Hãng Xilinx Xilinx là nhà phát triển hàng đầu hiện nay trong lĩnh vực chip khả trình. Được thành lập bởi Ross Freeman, Bernie Vonderschmitt, và Jim Barnett, và có trụ sở tại thung lũng Silicon. Trụ sở chính hiện nay ở San Jose , California. Là thành viên của nhóm 100 công ti hàng đầu thế giới hiện nay do tạp chí Fortune bình chọn. Xilinx là nhà phát triển FPGA, CPLD được sử dụng rộng rãi trong những ứng dụng truyền thông, tự động hóa, mật mã...và các lĩnh vực khác. Các sản phẩm phần cứng của Xilin gồm có các dòng CPLD : CoolRunner, các họ FPGA như Spartans, Virtex... Xilinx còn cung cấp các phần mềm hỗ trợ lập trình FPGA, CPLD như ISE, EDK, LogicCore, System Generator. Các công cụ này hỗ trợ rất nhiều cho quá trình lập trình FPGA, giúp giảm thời gian và công sức thiết kế. Các phiên bản phần mềm trên được nâng cấp thường xuyên. (Hiện giờ đã có phiên bản 10.1 cho các ứng dụng). ISE 9.2 Là công cụ xây dựng và lập trình FPGA. ISE 9.2 thực sự là một môi trường tổng hợp và thực thi toàn diện cho các chip khả trình của Xilinx. Với ISE9.2, người thiết kế có thể lập trình, gỡ rối, mô phỏng, dịch và nạp chương trình một cách nhanh chóng và dễ dàng. Người thiết kế cũng có thể thiết kế hệ thống của mình theo nhiều cách khác nhau : với mã vhd, với sơ đồ RTL, hoặc với sơ đồ trạng thái (state machine) LogicCore 9.2 LogicCore 9.2 là thư viện của ISE 9.2, trong đó chứa các mã nguồn cho các khối logic có thể được sử dụng cho việc xây dựng những hệ thống khác nhau. Với Logic Core, người thiết kế có thể giảm đi rất nhiều công sức thiết kế, bỏ qua việc xây dựng những thành phần đã có sẵn và tập trung vào việc xây dựng hệ thống, đồng thời cũng tối ưu hóa các thiết kế của mình.
49

www.ngohaibac.net

EDK 9.2 Là công cụ để xây dựng hệ thống có các vi xử lý nhúng trong FPGA như MicroBlaze (cho tất cả các họ FPGA ) và Power PC ( chỉ cho họ Virtex). EDK 9.2 không chỉ giúp tạo ra các vi xử lý nhúng mà còn hỗ trợ thiết kế các ngoại vi, giao diện cho chúng, với một thư viện ngoại vi đồ sộ, cho phép vi xử lý thực thi bất cứ một nhiệm vụ nào mà các vi xử lý thông thường có thể thực hiện được : như giao tiếp UART, Ethernet, các bộ nhớ RAM, ROM, các I/O,....Các thiết kế vi xử lý nhúng cũng được tối ưu hóa. Ngoài ra EDK cũng có công cụ mô phỏng rất mạnh. System Generator 9.2 System Generator (sysgen)là công cụ phát triển hệ thống cho FPGA, cho phép thiết kế hệ thống ở dạng các khối, và hỗ trợ mô phỏng, debug, tạo code để nạp vào FPGA hoặc kết hợp vào những ứng dụng lớn hơn. Sysgen được xây dựng như một Block Set của Simulink trong Matlab. Do đó, sysgen thừa hưởng tất cả các ưu điểm của Simulink trong việc xây dựng hệ thống và mô phỏng. Sysgen còn sử dụng thư viện của Logic Core để xây dựng các block của mình. Trong thư viện của Sysgen có tất cả các khối thực hiện các chức năng từ cơ bản như cộng, trừ, nhân, các khối logic,...cho đến những thiết kế phức tạp hơn như các DSPs, bộ lọc số, nhân chập, UART..., các bộ nhớ tích hợp: Single Port, DualPort Ram, FIFOs, các thanh ghi... Sysgen còn cho phép người thiết kế tạo ra các khối để thực hiện những nhiệm vụ riêng bằng khối Black Box, tại đây người thiết kế sẽ tạo ra các entity và cài mã của nó vào Black Box để tạo ra các thiết kế riêng của mình. Những thiết kế của Sysgen có thể được dịch ra nhiều kiểu dữ liệu, có thể thành file bit để nạp ngay vào phần cứng, hoặc thành các thiết kế để ghép vào một hệ thống lớn hơn.Với việc kết hợp với Mathwork để xây dựng Sysgen, Xilinx đã làm cho việc thiết kế hệ thống trên nền FPGA của mình trở nên thuận tiện và đơn giản hơn rất nhiều đối với người làm kĩ thuật. Trong đồ án này, chúng em đã sử dụng Sysgen để xây dựng toàn bộ phần thuật toán xử lý ảnh số cho thiết kế của mình.
50

gán nhãn cho đối tượng. Sơ đồ cấu trúc hệ thống xử lí ảnh động 51 .1 : Một ảnh cần được xử lý. kích thước..net Phần 3 : Xây dựng hệ thống xử lí ảnh động trên nền FPGA Yêu cầu hệ thống : Trong phần này. 3.1.của đối tượng ) và nhận tín hiệu điều khiển.ngohaibac. tách các đối tượng ra khỏi nền. đồng thời xác định các đặc trưng cơ bản của đối tượng cho quá trình xử lý cao hơn hoặc cho việc điều khiển tay máy thao tác với đối tượng.www. Nhiệm vụ của hệ thống là thu thập ảnh và xử lý bằng các thuật toán xử lý đã nêu. . hệ thống cũng có nhiệm vụ giao tiếp với bộ xử lý trung tâm ( máy tính PC ) để truyền thông tin được xử lý ( số đối tượng. Hình 3. vị trí. trong khi điều khiển giao tiếp VGA để hiển thị hình ảnh. Đồng thời.. Dữ liệu ảnh thu được là của một tập hợp các đối tượng tách rời nhau trên nền trắng. nhằm loại bỏ nhiễu. chúng em trình bày chi tiết việc thực thi hệ thống cảm biến thị giác trên nền FPGA.

2 : Sơ đồ chung của hệ thống Trên đây là sơ đồ cấu trúc của hệ thống xử lý ảnh số.ngohaibac.www. Hệ thống gồm có 3 phần chính sau: 52 .net Hình 3.

net  Khối thu thập dữ liệu từ Camera và ghi vào SDRAM: dữ liệu từ video decoder được xử lý ở khối Framegrabber chỉ lấy dữ liệu luminance và ghi vào FIFO.656 4:2:2 ( định dạng xuất ra mặc định của video decoder). Thành phần thu thập ảnh Framegrabber Nhiệm vụ: nhiệm vụ cơ bản của khối Framegrabber là đồng bộ với chip Video Decoder để đọc các pixel và ghi vào FIFO.  Khối hiển thị ảnh lên VGA: hiển thị các pixel của ảnh trong SDRAM lên màn hình máy tính CRT. SDRAM Controller. Theo sau là 1440 byte gồm: 720 giá trị luminance (Y).2. Xây dựng hệ thống thu thập.3: Pixel stream waveform Đầu tiên là các byte đánh dấu bắt đầu một frame (FF-00-00).1. 53 . xử lý và hiển thị ảnh 3. tiếp theo là byte đồng bộ (embedded sync byte) ES. lưu trữ. sau đó được ghi vào SDRAM. Phân tích cách thực thi Framegrabber dùng một Finite State Machine để giải mã và chốt thành phần luminance (chỉ lấy các thành phần độ xám grayscale) từ pixel stream của ITU-R BT.ngohaibac.  Khối xử lý ảnh: đọc dữ liệu từ SDRAM vào FIFO.www. xử lý và sau đó lại ghi vào FIFO và ghi vào SDRAM qua dual port. 360 giá trị blue chromiance (Cb) và 360 giá trị red chrominace (Cr) theo nhóm cứ một Cb và Cr thì có 2 giá trị Y: CbYnCrYn 1 .2. Chọn thuật toán và kích hoạt từng module xử lý từng thuật toán đó được kích hoạt từ bên ngoài qua các nút bấm (button) và các khóa chuyển (switch). 3. Pixel stream được định dạng như sau: Hình 3. Chip Video decoder được kích hoạt nhờ tín hiệu điều khiển qua chuẩn I2C trên PC qua cổng Parallel Port (LPT).

còn không thì quay lại trạng thái ban đầu để kiểm tra các byte đánh dấu của frame mới. Quá trình nhận dữ liệu kết thúc (tín hiệu done) xảy ra khi trong các trạng thái này nhận được byte có giá trị 0xFF. wait_embedded_sync_2 dùng để kiểm tra 3 byte đánh dấu đầu tiên (FF-00-00).ngohaibac. 54 . Nếu có tín hiệu image_processing_start để khởi động khối này thì tiếp tục chuyển sang các trạng thái tiếp theo để nhận dữ liệu và ghi vào FIFO.4 : Framegrabber state machine Từ hình vẽ ta thấy 3 trạng thái đầu: wait_for_embedded_sync.www. wait_embedded_sync_1. field change và ghi byte đồng bộ vào FIFO để phục vụ cho việc ghi dữ liệu vào FIFO và hiển thị VGA.net Sơ đồ cấu trúc của State machine như hình vẽ dưới đây: Hình 3. Tại trạng thái check_embedded_sync kiểm tra các tín hiệu đồng bộ gồm có field id. Sau khi đã đồng bộ xong thì liên tục thực hiện các trạng thái grab_chromar và grab_luminance2. Dữ liệu lumincance được lấy ở trạng thái grab_luminance2.

theo sau là các bit 0 và byte luminance: Pixel_in <= field_change & field_id & “000000” & luminance(7 downto 0) 3.www. Bộ điều khiển cũng đảm nhiệm thực hiện refresh SDRAM để giữ cho các dữ liệu không bị sai.2. vì thế tốc độ đọc và ghi có thể gấp 10 lần so với cách đọc không pipeline từng pixel trong SDRAM ở các địa chỉ không liền nhau.2. khi đó chuyển sang trạng thái ghi pixel.net Dữ liệu ghi vào FIFO bao gồm 16 bit có 2 bit đầu tiên là các bit đồng bộ: field_id và field_change.3. ghi kiểu pipeline thì với một hàng của SDRAM có thể không cần phải chốt sau mỗi chu kì đọc.ngohaibac. Với chế độ đọc. và sẽ đặt SDRAM vào chế độ tự làm tươi (self-refresh) nên dư liệu vẫn được giữ lại thậm chí khi bộ điều khiển không hoạt động.  Store pixel: Ghi pixel vào SDRAM qua SDRAM Controller 3. 55 .2. Các cơ chế ghi đọc SDRAM: SDRAM Controller. write với SDRAM. Dual Port SDRAM SDRAM Controller Đặc điểm: XSA Board synchronous DRAM (SDRAM) controller core chấp nhận các yêu cầu đọc và ghi đơn giản từ phía host-side và tạo ra các dạng sóng (timed waveform) cần thiết để thực hiện các hoạt động read. Lưu dữ liệu từ Framegrabber vào SDRAM Khối lưu dữ liệu này thực hiện rất đơn giản với State machine với 2 trạng thái:  Wait for pixel: chờ khi nào có pixel từ bộ đệm ghi Write Buffer.

Nếu việc đọc thực hiện ở bank hoặc hàng khác của SDRAM thì SDRAM Controller sẽ hoàn thành quá trình đọc hiện tại và active bank và row mới trước khi tín hiệu earlyOpBegun và opBegun lên cao. Hình 3.ngohaibac.5 : Pipelined Read Operation timing waveforms Pipeline Read Operation Trên đây là dạng sóng cho hoạt động đọc kiểu pipeline. Hoạt động đọc ở chế độ pipeline được thực hiện bằng cách giữ cho tín hiệu rd lên cao trong ghi liên tục cung cấp địa chỉ cần đọc mỗi khi mà tín hiệu earlyOpBegun hoặc opBegun lên cao báo hiệu hoạt động đọc trước đã bắt đầu. Pipeline Write Operation 56 . write với chế độ pipeline.www. chúng em dùng read.net Trong đồ án này. Ví dụ trên mô tả 3 hoạt động đọc truy nhập các vùng nhớ SDRAM tại bank và hàng của SDRAM đang được active.

Nhờ đó mà việc ghi. Ví dụ trên đây thực hiện 3 hoạt động ghi vào bộ nhớ trong bank và row hiện tại của SDRAM.ngohaibac. theo cấu trúc sau: 57 .net Hình 3. đọc SDRAM trở nên dễ dàng hơn.6 : Pipelined Write Operation timing waveforms Hoạt động ghi ở chế độ pipeline được thực hiện bằng cách giữ cho tín hiệu wr lên cao trong khi đó thì liên tục cung cấp địa chỉ mới mỗi khi tín hiệu earlyOpBegun hay opBegun lên cao báo hiệu rằng quá trình ghi trước đó đã bắt đầu. Nếu ghi vào địa chỉ ở bank hoặc row khác thì SDRAM Controller sẽ hoàn thành việc ghi hiện tại và sau đó kích hoạt bank và row mới trước khi tín hiệu earlyOpBegun và opBegun lên cao.www.

mỗi phần có thể hoạt động như các cổng của host-side ban đầu do đó ứng dụng có thể gồm nhiều thành phần truy nhập SDRAM nhưng chỉ dùng 1 bộ điều khiển SDRAM Controller. Dualport module có thể xây dựng kiểu tầng để xây dựng giao diện SDRAM với 3 hay nhiều cổng độc lập.ngohaibac.www. Băng thông tổng cộng của SDRAM có thể được phân phối giữa 2 port để cho khớp với data rate của các ứng dụng dùng dual port.net Hình 3. Bất kì ứng dụng nào thực hiện việc ghi đọc bộ nhớ SDRAM đều độc lập với hoạt động đó ở các post khác. 58 .7 : Ghép nối với SDRAM Controller Dualport Module for the SDRAM Controller Chức năng: Dualport module đính vào phía các cổng bên host-side của bộ điều khiển XESS SDRAM Controller và chia thành hai phần host-side riêng biệt.

8 : Ghép nối dualport với SDRAM Controller Hình 3. là một vector 16 bit với mỗi bit tương ứng với một time slot trong khi một hoạt động đọc hoặc ghi của SDRAM có 59 .www.ngohaibac.9 : Xây dựng 4 ports SDRAM interface Phân phối băng thông SDRAM cho các port của một dualport được thực hiện qua tham số PORT_TIME_SLOTS.net Hình 3.

dò biên. Luminance là số 8 bit biểu 60 .. và thiết lập bằng 1 để dành time slot cho port 1. Vì thế. xử lý và lưu vào SDRAM có dạng một word 16bit chứa thông tin như sau : 'field_id' | 'field_change' | "000000" | "luminance" Trong đó.2.. 3. Sau đây là một số cách thiết lập: PORT_TIME_SLOTS => “1111000011110000” áp dụng 8 time slot cho mỗi port.www. Image Processing core Image Processing core là thành phần quan trọng nhất của hệ thống xử lý ảnh. nhưng không ngăn hoàn toàn port 0 trong việc truy cập SDRAM.) đến nâng cao ( gán nhãn đối tượng. Như đã thấy ở trên. nhóm các bit liền nhau cùng một giá trị là giải pháp tốt nhất. Tham số PORT_TIME_SLOTS chỉ có tác động tới hoạt động của dualport module khi các ứng dụng trên cả 2 port cùng cố gắng truy nhập vào SDRAM. xác định các đặc trưng ). Hoạt động của thành phần này được điều khiển bởi bộ xử lý trung tâm. Thiết lập bit bằng 0 để cấu hình time slot cho port0. Ứng dụng ở một port sẽ truy nhập trực tiếp vào SDRAM nếu không có hoạt động ghi và đọc đang tiến hành ở port kia.net thể xảy ra.4.ngohaibac. mõi port được phân phối một nửa băng thông của dual port. Vì thế PORT_TIME_SLOTS = “1111111111111111” sẽ cho phép port 0 truy nhập SDRAM chỉ khi port 1 không truy cập. trong đó thực thi tất cả các thuật toán từ cơ bản( lọc. Vì thế. PORT_TIME_SLOTS = “1111111100000000” cấu hình một nửa băng thông cho mỗi port tuy nhiên có thể block truy cập của một port lên tới 8 time slot trong khi port kia được ưu tiên hơn. field_id và field_change là những bit thông tin về frame và pixel. mỗi pixel được thu thập. với mỗi port có 4 lần truy cập liền nhau vào SDRAM trước khi dual port chuyển điều khiển cho port kia. phân ngưỡng. không được thay đổi trong quá trình xử lý. Để giảm trễ chỉ cần gàn PORT_TIME_SLOTS = “0101010101010101” tuy nhiên sẽ lãng phí thời gian bởi vì SDRAM Controller phải xóa pipeline trước mỗi quá trình chuyển port.

net thị mức xám của pixel. Việc đọc có thể tạm dừng khi sắp xảy ra xung đột quá trình đọc và xử lý. sẽ được dùng để gán nhãn đối tượng. giảm thiểu công sức và thời gian thiết kế. Khối xử lý ảnh giao tiếp với SDRAM thông qua 2 FIFO là read_fifo và store_fifo.10: Sơ đồ khối xử lý ảnh.  read_fifo có nhiệm vụ đọc tuần tự dữ liệu từ SDRAM vào để khối xử lý ảnh lưu vào buffer và xử lý. Còn lại 6 bit cao sau field_change chưa được sử dụng đến.ngohaibac. sẽ được xử lý trong các thuật toán về sau. Hình 3. Việc đọc bắt đầu khi tín hiệu báo read_fifo không còn trống (read_fifo_empty='0' hay read_fifo_avail='1') và dừng khi đọc hết một frame. Việc thiết kế Image Processing Core chủ yếu sử dụng công cụ System Generator. người thiết kế có thể sử dụng các core có sẵn đã được cung cấp bởi Xilinx. 61 . vốn đã rất quen thuộc với sinh viên Điều khiển tự động. việc gỡ rối và mô phỏng hệ thống có thể thực hiện hoàn toàn trên Matlab. Với công cụ này.www. đồng thời vẫn có thể tự tạo ra các block riêng cho mình sử dụng công cụ Black Box. và đặc biệt.

Thực chất bộ đệm dữ liệu là một Block Ram trong FPGA. việc ghi của store_fifo điều khiển quá trình xử lý. Cũng như read_fifo.. có khả năng lưu đến 27 dòng của frame.. thực thi tất cả các thuật toán xử lý ảnh.net  store_fifo có nhiệm vụ lấy dữ liệu đã xử lý từ khối xử lý ảnh và lưu tuần tự trở lại vào SDRAM tại vị trí xác định. từ lọc. Việc lưu dữ liệu được điều khiển sao cho tránh xung đột với thành phần xử lý. các thuật toán xử lý đồng cấu. cho đến phân ngưỡng. Hình 3. Cấu trúc của Image Processing Core gồm 2 thành phần : fifo_to_buffer : thực thi việc giao tiếp với read_fifo và lưu dữ liệu vào một bộ đệm. 62 . dò biên. khi store_fifo đầy thì tạm dừng việc xử lý. Đồng thời thành phần này còn thực hiện giao tiếp giữa Image Processing Core trong việc giao tiếp với store_fifo để đưa dữ liệu xử lý ra ngoài.www.11 : Khối ghi dữ liệu từ read_fifo vào Buffer processing_algorithms : lựa chọn. phân vùng và gán nhãn đối tượng.ngohaibac..

Việc đọc và ghi như trên cho phép sử dụng một cách hiệu quả số block ram hữu hạn của FPGA. 63 .net Hình 3. Điều này có thể gây kéo dài thời gian xử lý đối với một số ít thuật toán. Đồng thời. Việc đọc và ghi cũng được điều khiển bởi tín hiệu báo từ read_fifo và store_fifo: dừng ghi khi read_fifo trống (read_fifo_avail= 0) và dừng xử lý khi store_fifo đầy (store_fifo_full = 1). giảm thiểu sai sót trong quá trình xử lý. nhưng lại giúp tiết kiệm rất nhiều tài nguyên và công sức thiết kế cũng như giảm thiểu khả năng gây lỗi hoặc nhầm lẫn trong quá trình thiết kế. cửa sổ ghi ra để xử lý được dịch tuần tự cho đến hết 10 dòng . rồi cũng quay ngược trở lại dòng đầu tiên. ta lại quay ngược trở lại vị trí ban đầu và tiếp tục đọc.www.12 : Khối thuật toán xử lý ảnh Khối xử lý này đọc dữ liệu từ bộ đệm theo cùng một phương pháp trong tất cả các thuật toán xử lý. đồng thời loại giúp cho việc đọc và ghi trở nên tương đối độc lập với nhau. Việc ghi và đọc được điều khiển sao cho không xảy ra sự xung đột : chỉ ghi vào những dòng đã xử lý và chỉ đọc khi đã ghi đủ số dòng cần thiết để xử lý.ngohaibac. Việc ghi và đọc dữ liệu ở bộ đệm buffer như sau: Ban đầu ta đọc tuần tự dữ liệu vào buffer cho đến khi đầy 10 dòng. tránh hoàn toàn khả năng xung đột đọc/ghi.

14: Sơ đồ khối thanh ghi dịch Pixel register 64 . Tín hiệu full_win báo hiệu một cửa sổ vừa được đọc xong. cứ mỗi 3 chu kì xử lý. do đó. ta sẽ không đọc lại từ đầu 6 word cũ mà sử dụng lại chúng với sự trợ giúp của thanh ghi dịch. do 2 cửa sổ kề nhau có chung 6 word nên để tiết kiệm thời gian.net Các khối xử lý cơ bản Khối đọc dữ liệu : các cửa sổ được đọc ra từ bộ đệm. Hình 3. Thanh ghi dịch Pixel register : Thanh ghi này có nhiệm vụ ghi dần các pixel đọc từ buffer do khối đọc dữ liệu điều khiển.ngohaibac. Các pixel được dịch dần trong quá trình xử lý. để đưa vào một thanh ghi dịch 9 word. Việc đọc được thực hiện tuần tự từ trên xuống theo từng cột từ trái sang. cần đưa vào quá trình xử lý. dữ liệu đọc ra được dịch dần vào thanh ghi dịch.www. Do đó ta sẽ chỉ việc đọc tiếp 3 pixel ở cột tiếp theo.13 : Khối đọc dữ liệu từ buffer Khi chuyển sang cửa sổ kế tiếp. trong thanh ghi lại lưu một cửa sổ mới. Hình 3.

Cấu trúc như sau: 65 .www. Khối xử lý : Khối xử lý bao gồm nhiều thuật toán xử lý khác nhau. Tuy nhiên.net Có thể thấy. ta có thể tận dụng tối đa khả năng xử lý song song của FPGA cho các thuật toán xử lý ảnh số. Dưới đây là cấu trúc bộ nhân chập trong các bộ xử lý này : Hình 3. với thanh ghi dịch này. Cấu trúc bộ lọc tuyến tính.ngohaibac. Phép nhân chập có thể được thực hiện rất nhanh chóng sử dụng cấu trúc song song.15 : Cấu trúc nhân chập Bộ xử lý đồng cấu ảnh nhị phân : Khối này chủ yếu tính ra giá trị max. cấu trúc của các thuật toán là tương đối giống nhau và ta có thể tận dụng một cơ chế đọc duy nhất để dùng chung cho tất cả các thuật toán. do đó sử dụng các block so sánh. dò biên : Bộ lọc tuyến tính và dò biên theo phương pháp Laplacien cùng sử dụng phép nhân chập với 2 mặt nạ khác nhau.min của các pixel trong cửa sổ. Do đó ta có thể ghép chung lại thành một khối.

www. Tổng mức xám của các pixel sẽ được cộng dần vào một thanh ghi và thực hiện phép chia bằng cách dịch bit.ngohaibac. Khối đếm đối tượng: Khối đếm đối tượng cũng tận dụng khả năng xử lý song song của FPGA để thực hiện đếm đối tượng. 66 .16 : Cấu trúc bộ xử lý đồng cấu ảnh nhị phân. Khối tính ngưỡng và phân ngưỡng : Ngưỡng được tính theo phương pháp trung bình. việc gán nhãn cho mỗi pixel dựa trên nhãn của các pixel lân cận chỉ cần thực hiện trong 1 chu kì đồng hồ.net Hình 3. Kết hợp nhiều khối dịch bit với nhau cho phép ta thực hiện phép chia với sai số của ngưỡng nhỏ hơn 3 và thuật toán chỉ cần thực hiện trong 1 chu kì xung. Với khối này.

với pixel 5 là trung tâm.www. cần được xem xét để gán nhãn.net Hình 3.17 : Khối gán nhãn đối tượng Đầu vào khối gán nhãn đối tượng là 9 pixel của cửa sổ hiện tại. Mỗi một tín hiệu điều khiển một súng bắn điện tử (electron gun) để phóng các hạt electron vẽ lên một màu cơ bản tại một điểm trên màn hình.19 : VGA Connection 67 . Hiển thị ảnh lên VGA: VGA Generator VGA Color Signals Có 3 tín hiệu color là: red.5. 3.7V (sáng hoàn toàn) điều khiển cường độ của mỗi thành phần màu và 3 thành phần màu kết hợp với nhau tạo lên màu của điểm ảnh (dot) hay phần tử ảnh (pixel) trên màn hình. green và blue gửi tín hiệu màu sắc (color information) đến màn hình VGA.ngohaibac. Hình 3. Dải của tín hiệu nằm từ từ 0 V (tương ứng với màu tối hoàn toàn) và 0. Việc gán nhãn cho pixel trung tâm thực hiện như thuật toán đã trình bày ở phần 1.2.

Hình 3.ngohaibac.20 : 8 màu cơ bản VGA Signal Timing Mỗi một ảnh (hay frame) trên màn hình hiển thị là kết hợp của h dòng. chúng em chỉ dùng camera đen trắng nên hiển thị trên màn hình chỉ được 8 màu khác nhau hay 8 mức thôi. Hình 3.21 : CRT Display Timing Example 68 .net Mỗi tín hiệu màu analog có thể là một trong 8 mức bằng 3 tín hiệu digital bằng cách dùng bộ chuyển đổi digital to analog 3 bit (DAC 3 bit). 8 mức trên mỗi tín hiệu analog kết hợp với nhau tạo nên phần tử ảnh (pixel) với 8 x 8 x 8 = 512 màu khác nhau. Tuy nhiên trong đồ án này. mỗi dòng có w pixel.www. 1024 x 768 và 1280 x 1024. Kích thước của mỗi frame được biểu diễn w x h dưới các dạng tiêu biểu gồm 640 x 480m 800 x 600. Do đó.

8 hoặc 16 bit vì thế nên nội dung của thanh ghi pixel này được dịch sau mỗi xung clock để thay thế pixel hiện tại theo thứ tự các bít có trọng số thấp đến cao.22 : 640 x 480 Mode VGA Control Timing Nguyên tắc hoạt động của VGA Generator Sơ đồ cấu trúc của bộ hiển thị hình ảnh lên VGA như trên hình vẽ dưới. có những mạch điện có trách nhiệm di chuyển dòng electron từ trái sang phải và từ trên xuống dưới dọc theo màn hình gọi là deflection circuit. Bộ hirizontal 69 . Hệ thống bên ngoài ghi giá trị pixel vào trong bộ đệm pixel (pixel buffer) (trong trường hợp này là FIFO 256 x 16). Sau đây là ví dụ VGA Display Timing với chế độ 640 x 480: Hình 3. Các pixel được lấy từ bộ đệm rồi ghi vào trong thanh ghi pixel (pixel register). Các bit này được gửi đến colormap circuit để chuyển các pixel này sang các giá trị red.net Để vẽ một frame. 2. Những mạch này yêu cầu phải có 2 tín hiệu động bộ để khởi động và dừng dòng electron tại đúng thời điểm để cho một dòng các điểm ảnh được vẽ dọc theo màn hình và mỗi dòng được điền theo cơ chế từ trên xuống dưới để tạo lên một ảnh. Hai mạch tạo xung đồng bộ (pulse generation circuit) được dùng để tạo các xung đồng bộ đứng và nằm ngang (horizontal và vertical).www. green và blue rồi gửi đến bộ DAC video bên ngoài.ngohaibac. 4. Mỗi pixel cso thể là 1.

Hình 3. thì một từ 16 bit sẽ cần được đọc sau mỗi chu kì clock. Ví dụ.23 : Sơ đồ khối cấu trúc của VGA Generator 70 . Khi dùng phép toán OR logic ta được tín hiệu blanking toàn cục. Vì thế nên hoạt động đọc được khởi tạo bất cứ khi nào tín hiệu video không trống và 2 bit thấp của bộ đếm pixel đều bằng 0. đồng thời nó cũng reset và xóa toàn bộ nội dung của pixel buffer nên bộ VGA generator luôn khởi động từ trạng thái xóa sạch hoàn toàn với mọi frame. Các tín hiệu blanking được kết hợp với các bit có trọng số thấp hơn ở bộ đếm horizontal pixel counter để xác định khi nào đọc pixel từ bộ đệm.ngohaibac. tín hiệu gate này nối với tín hiệu clock-enable của bộ vertical sync generator vì thế nên clock-enable chỉ cập nhật bộ đếm thời gian sau mỗi dòng pixel (line of pixels). Tín hiệu gate của vertical sync generator được dùng như tín hiệu báo kết thúc một frame cho các khối dữ liệu pixel bên ngoài.www. nếu mỗi pixel có độ rộng 16 bit.net sync generator có đầu ra là tín hiệu gate một chu kì trùng khớp với sườn lên của xung đồng bộ ngang ( horizontal sync pulse). Bộ tạo tín hiệu đồng bộ cũng tạo ra các tín hiệu horizontal và vertical blanking.

Với vi điều khiển này chúng ta có thể làm một bộ điều khiển dựa trên nền vi điều khiển rất hiệu quả. PicoBlaze FPC được hỗ trợ bởi một số các công cụ phát triển phù hợp bao gồm assembler và môi trường phát triển đồ họa tích hợp (IDE – integrated development environment).net Tín hiệu full signal được gửi ra nguồn dữ liệu pixel bên ngoài để báo cho biết khi nào thì dừng việc điền dữ liệu vào bộ đệm. Nó chiểm khoảng 96 FPGA slices. Virtex II và Virtex II Pro của Xilinx.1. Đơn giản là các ngoại vi của PicoBlaze có thể tự do lựa chọn cho phù hợp với các mục đích đặc biệt.6.2.6. Với bộ đệm FIFO 256. Đây gọi là cơ chế bộ đệm an toàn. PicoBlaze được nhúng vào dưới dạng một mã nguồn VHDL vì thế nó có thể nhúng vào các đời FPGA sau này và do đó project của chúng ta sẽ có tính kế thừa cao. Bình thường mỗi block RAM của FPGA có thể lưu trữ tới 1024 câu lệnh chương trình (program instructions) và các lệnh này được tự động load trong khi cấu hình FPGA. giá thiết kế và thực hiện. Picoblaze và hệ thống điều khiển trung tâm 3.ngohaibac. khi đó vi điều khiển PicoBlaze có thể hoạt động từ 44000 tới 100000 câu lệnh trên giây (MIPS – million instructions per second) tùy thuộc vào họ FPGA được dùng là loại gì và tốc độ của họ đó. chức năng và yêu cầu về giá cả của sản phẩm cuối cùng. graphical instruction set simulator và mã nguồn 71 . Nhân của vi điều khiển PicoBlaze được nhúng hoàn toàn trong FPGA và không cần một nguồn thêm nào.5% của XC3S50 FPGA và chiếm một phần rất nhỏ ở mức 0. Khái quát PicoBlaze Vi điều khiển PicoBlaze là vi điều khiển nhúng 8 bit có cấu trúc RISC được tối ưu phát triển cho các họ FPGA như Spartan 3.2.www. Vi điều khiển PicoBlaze được tối ưu về mặt hiệu suất và chi phí phát triển thấp. Được nhúng trong FPGA. Khiến cho bỏ trống 7 bit trong FIFO để điền các pixel khi các nguồn dữ liệu bên ngoài đã chót gửi dữ liệu vào trong pipe. hay xử lý dữ liệu đơn giản. hay chỉ 12.3% của XC3S5000 FPGA. vi điều khiển PicoBlaze sẽ giảm kích thước mạch. tín hiệu full lên cao khi 5 bit cao của tín hiệu FIFO level bằng 11111. 3.

 Predictable performance.www.net VHDL và khối mô phỏng.  Automatic 31 location CALL/RETURN stack. Virtex II. Các mã nguồn phù hợp với cả quá trình tổng hợp và mô phỏng và được phát triển và kiểm tra dùng công cụ 72 .  Được tối ưu cho cấu truc Spartan – 3. và Virtex II Pro FPGA của Xilinx chỉ chiếm 96 slices và 0. đã được tối ưu về việc thực thi hiệu quả và chắc chắn trong các họ Spartan-3. Hình 3.24 : Sơ đồ khối cấu trúc của PicoBlaze Vi điều khiển PicoBlaze có các đặc điểm sau:  16 thanh ghi dữ liệu chức năng chung có độ rộng 8 bit. worst-case 5 clock cycles.vhd. Và rất đơn giản là vi điều khiển PicoBlaze được hỗ trợ trong môi trường phát triển Xilinx System Generator hay ISE. Virtex-II hay Vertex-II Pro.5 tới 1 block RAM.  Khối tính toán logic (Arithmetic Logic Unit – ALU) với các cờ CARRY và ZERO. luôn luôn dùng 2 xung nhịp hệ thống cho một câu lệnh.  256 đầu vào và 256 đầu ra dễ dàng có thể mở rộng thêm. có thể đạt tới 200 MHz hoặc 100 MIPS trong Virtex – II Pro FPGA.  Một bảng RAM 64 byte. Vi điều khiển PicoBlaze được cung cấp dưới file nguồn VHDL gọi là KCPSM3.  Đáp ứng ngắt nhanh.  Lưu trữ được 1K lệnh trong chương trình có thê lâp trình được trong chip và tự động nạp khi cấu hình FPGA hay khi khởi động FPGA.ngohaibac.  Hỗ trợ mô phỏng tệp lệnh assembler.

register file. Các mã nguồn VHDL không nên bị chỉnh sửa trong bất kì hoàn cảnh nào. Khai báo component và gắn chân như sau: Kết nối với bộ nhớ ROM chương trình 73 .www.ngohaibac. Các nhà thiết kế cũng thành công khi dùng các công cụ tổng hợp logic và mô phỏng khác. … Chỉ duy nhất chức năng không nằm trong KCPSM3 là bộ nhớ chương trình. KCPSM3 Module Module KCPSM3 bao gồm ALU. scratchpad RAM.net Xilinx Synthesizs Tool (XST) cho tổng hợp logic và ModelSim cho mô phỏng.

psm) thì chúng ta có thể dùng bất cứ trình soạn thảo nào để lập trình dựa theo 31 lệnh được cung cấp.www. sơ đồ cấu trúc của vi điều khiển PicoBlaze như sau: Hình 3.25: Sơ đồ cấu trúc PicoBlaze Microcontroller Để viết mã lệnh cho chương trình (với tên mở rộng là .exe và các form được định nghĩa sẵn 74 . Sau đây là khai báo component và gán các thực thể của bộ nhớ chương trình trong FPGA: Do đó. đã định nghĩa block RAM và khởi tạo nội dung cho RAM.net Bộ nhớ ROM chương trình của PicoBlaze được dùng trong thiết kế VHDL. Từ file assembler tạo ra file VHDL.ngohaibac. Và dùng file thực thi KCPSM3. File VHDL này có thể được dùng cho cả tổng hợp logic và mô phỏng vi điều khiển.

đồng thời giao tiếp với máy tính thông qua cổng RS232 và khối điều khiển giao tiếp RS232 : UART Controller.net của ROM dưới dạng file . Vi điều khiển PicoBlaze có nhiệm vụ nhận lệnh điều khiển từ chương trình trên PC và ra các lệnh điều khiển để capture ảnh từ camera và các tín hiệu lựa chọn thuật toán và kích hoạt khối xử lý frame ảnh đã lưu trong SDRAM.v và cho vào chương trình FPGA. . Để phối hợp hoạt động của tất cả các thành phần trên. . 3.ngohaibac.www. Hai component được cung cấp miễn phí bởi Xilinx.6. có sử dụng thêm 2 component là UART Receive và UART Transmit.2. Thuật toán của chương trình 75 .v để dịch ra các file . bao gồm bộ đệm và các tín hiệu trạng thái để giao tiếp với cổng RS232.vhd.coe. chúng em sử dụng một vi xử lý nhúng có tên là PicoBlaze để điều khiển hoạt động của các khối xử lý trong FPGA. đảm bảo hệ thống hoạt động chính xác.2. Sơ đồ cấu trúc của khối xử lý trung tâm Sơ đồ cấu trúc của khối xử lý dùng PicoBlaze: Hình 3. đồng thời nhận tín hiệu done và báo về giao diện để biết thuật toán đã xử lý xong. .26 : Sơ đồ khối điều khiển trung tâm và giao tiếp UART Ngoài vi điều khiển PicoBlaze.vhd. ta phải có một hệ thống điều khiển trung tâm. Trong đồ án này.

Giao diện này có thể thay đổi tại thời điểm bảo vệ.27 : Giao diện điều khiển 76 . bắt đầu bằng chữ cái M để chọn thuật toán xử lý như M1 để lọc nhiễu.www. Thiết kế giao diện điều khiển hệ thống Giao diện của chương trình được xây dựng trên nền GUI (Graphic User Interface) của Matlab R2007a. Ví dụ: lệnh bắt đầu bằng chữ cái ‘C’ dùng để capture ảnh. Khối xử lý ngắt sẽ được kích hoạt khi có tín hiệu done từ bộ xử lý ảnh và khi đó xóa tín hiệu kích hoạt khối xử lý ảnh và gửi messenger lên PC. Giao diện của chương trình điều khiển như hình vẽ dưới. … và ra các tín hiệu điều khiển tương ứng vào các chân Algorithm Selection của khối xử lý ảnh.3. M2 để phân vùng. Hình 3. 3.net Chương trình chính luôn luôn nhận các kí tự từ giao diện người dùng và kiểm tra xem gửi lệnh với cú pháp gì.ngohaibac.

Khi đó. và định vị từng vật. Có thể lựa chọn kết nối hoặc ngắt kết nối với RS232. Phương án mô phỏng ở đây được thực hiện như sau: dùng camera chiếu vào một tấm bảng một mầu (đen) có các vật có kích thước khác nhau. Đang phát triển để thực hiện lựa chọn giữa capture một ảnh và chụp liên tục khoảng 30 hình/s. Mặc định chọn cổng LPT1. Cho phép download trực tiếp file cấu hình cho FPGA hoặc Flash qua cổng LPT. 3. … Mỗi khi kết thúc thuật toán đều có bức điện thông báo đã thực hiện thành công. Cho phép kích hoạt để capture ảnh từ camera và tự hiện lên màn hình VGA. Do chưa có tên cụ thể của từng thuật toán cụ thể nên mới chỉ đặt tên là thuật toán 1. nhờ các nút bấm ở phần LPT FPGA Programming. có hộp thoại hiển thị trạng thái của giao tiếp RS232. Từng kết quả chạy mỗi thuật toán đều hiển thị trực tiếp trên màn hình VGA. thuật toán 2. có thể phát triển thêm để lựa chọn các cổng LPT khác nữa. tốc độ 115200. Kích hoạt chip Video Decoder trên mạch phần cứng qua nút I2C để giao tiếp I2C với chip qua cổng LPT. 77 .www. Cho phép lựa chọn thuật toán thực hiện và có led hiển thị số thứ tự thuật toán tương ứng.4. dùng chương trình giao tiếp trên PC để điều khiển camera capture một ảnh rõ nét.ngohaibac.net Chức năng Chọn thông số của cổng RS232 để thiết lập giao tiếp RS232 với mạch phần cứng bên dưới. Mặc định chọn cổng COM1. Mô phỏng và kết quả Phương án mô phỏng Yêu cầu của bài toán mô phỏng: thực hiện tốt các thuật toán xử lý ảnh để đếm số vật trên một frame. sau đó tiến hành thực hiện từng thuật toán theo trình tự nhất định và xác định số vật.

 Thuật toán 4 : Làm đầy. Việc phần vùng và đánh nhãn ảnh thành công. hiển thị số đối tượng trong frame. Tuy nhiên.  Thuật toán 6 : Tính toán các đặc tính của lần lượt từng đối tượng.www.ngohaibac. 78 . nếu ảnh có những nhiễu tương đối lớn ( độ dày khoảng hơn 3 pixel ) thì cần nhiều quá trình làm mảnh liên tiếp mới xóa bỏ hoàn toàn được nhiễu. sử dụng ngưỡng vừa tính.net Trình tự thực hiện như sau:  Thuật toán 1 : Lọc ảnh bằng phép lọc Gausse. đồng thời tính ngưỡng trung bình  Thuật toán 2 : Phân ngưỡng ảnh theo thuật toán phân ngưỡng.  Thuật toán 5 : Thực hiện gán nhãn đối tượng. hiển thị các đặc tính của đối tượng cần xác định ra giao diện. khôi phục ảnh. Kết quả Kết quả mô phỏng cho thấy việc thực thi các thuật toán và thiết kế hệ thống thực hiện đúng như mong muốn.. Hoàn thành lượt mô phỏng. đồng thời hiện đối tượng đó lên.  Thuật toán 3 : Làm mảnh.

project của chúng ta chưa chiếm hết một nửa tài nguyên của hệ thống. Với khả năng xử lý như vậy.ngohaibac. cho phép tăng tốc độ xử lý lên nhiều lần so với xử lý tuần tự. Điều này là rất quan trọng đối với những hệ thống đòi hỏi tốc độ xử lý nhanh. Xa hơn nữa. chúng em nhận thấy hoàn toàn có thể mở rộng đề tài ra giải quyết các bài toán xử lý nâng cao như :  Nhận dạng : dựa trên các đặc trưng hình học của đối tượng. kích thước và thể tích của chúng. chúng em đã thực thi thành công một hệ thống thị giác máy với nhiệm vụ là tách các đối tượng trong một ảnh. ta còn có thể nhân dạng đối tượng. bằng cách tạo ra các neural như các đơn vị xử lý kết nối với nhau.www. phục vụ cho bài toán nhân dạng đồ vật hoặc chữ cái và số về sau. có thể thầy FPGA là một trong những giải pháp phù hợp nhất. Với FPGA. Nếu kết hợp các quá trình xử lý trong những thời điểm khác nhau. ta có thể giải quyết bài toán xác định đối tượng chuyển động và cả tốc độ chuyển động của nó. Do đó chúng ta hoàn toàn có thể thực thi một hệ thống với 2 camera cùng hoạt động. Thêm vào đó. Trong đồ án này. Ta cũng có thể xác định khoảng cách giữa các đối tượng trong không gian nếu kết hợp kết quả xử lý được với các phép tính quang học chính xác. ta hoàn toàn có thể xây dựng một hệ thống thị 79 . Điều này cho phép ta có thể quan sát các đối tượng trong không gian 3D. Việc nhận dạng có thể bằng mạng neural xây dựng trực tiếp trên FPGA. trong khi nếu thêm một project nữa.  Xác định đối tượng chuyển động: Đối tượng được xử lý ở đây mới chỉ là đối tượng tĩnh. chẳng hạn như những cánh tay robot gắp đồ vật đang chuyển động nhanh.  Xác định khoảng cách vật trong không gian : Mạch XST 3S 1000 có 2 cổng video. gán nhãn và xác định các đặc trưng hình học của đối tượng. ta vẫn có thể tận dụng những tài nguyên cũ. Việc giải quyết bài toán này có ý nghĩa thực tiễn rất lớn đối với các cơ cấu bám đối tượng chuyển động.net Kết luận Trong các giải pháp phần cứng cho việc xây dựng hệ thống thị giác máy tính. trong khi camera truyền ảnh liên tục về đối tượng. chúng ta có thể thiết kế hệ thống theo từng khối hoạt động song song. thậm chí xác định hình dạng.

chúng em cảm thấy đã học được rất nhiều điều. chất lượng ảnh sau tiền xử lý. trong việc trình bày luận văn. Đó là kỹ năng tự nghiên cứu trong những lĩnh vực còn hết sức mới mẻ đối với sinh viên Điều khiển tự động : đó là Xử lý ảnh số. chúng em đã chia tách công việc ra một cách khá cân bằng. cũng phải nói rằng dù đã cố gắng rất nhiều. Đây là một trong những kỹ năng quan trọng nhất cho công việc của một kĩ sư về sau Đó là kỹ năng trình bày những ý tưởng . Thị giác máy tính và công nghệ FPGA. để thực hiện những đề tài..ngohaibac. nhưng chúng em vẫn không tránh khỏi những sai sót. đảm bảo mỗi người phát huy hết sở trường của mình. Đó là kỹ năng làm việc theo nhóm : bằng cách phân công tương đối hợp lý.net giác máy giúp cho việc di chuyển của xe tự hành và các thao tác của hệ thống CNC đối với vật thể 3 chiều.. trên nền tảng những kiến thức cơ sở đã học được ở nhà trường. để thực hiện đồ án một cách tốt nhất trong khả năng có thể. hiểu biết và kiến thức của mình vào một đồ án. Nhưng chúng em vẫn luôn ý thức được rằng. Cuối cùng. USB. Đó đều là những ứng dụng rất có giá trị thực tiễn trong nhiều lĩnh vực. RS 485. những sai sót ấy cũng là một cơ hội cho chúng em rèn luyện kỹ năng của mình : kỹ năng sửa chữa những sai sót và khiếm khuyết.www.  Cải thiện các thuật toán nhằm làm tăng khả năng xử lý. Qua quá trình thực hiện đồ án này. và có khả năng thực thi nếu đi sâu nghiên cứu. trong việc xây dựng hệ thống. giúp cho thiết bị dễ dàng tích hợp vào các hệ thống điều khiển phân tán thật sự. dự 80 . nhằm truyền tải một cách đầy đủ nhất có thể những gì mình hiểu về lĩnh vực mà mình đang nghiên cứu. CAN. đặc biệt là Tự động điều khiển.  Mở rộng khả năng giao tiếp của cảm biến thị giác để phù hợp với nhiều chuẩn chứ không chỉ riêng RS232: chuẩn Ethernet.

Đó tất cả là nhờ sự theo dõi. hướng dẫn .www. cô trong hội đồng bảo vệ.net án về sau một cách hoàn chỉnh hơn.ngohaibac. phản biện tận tình và nghiêm túc của các thầy. Chúng em xin chân thành cảm ơn các thầy cô vì sự tận tụy ấy! 81 .

XESS Corporation. Vanden Bout.00. [9]. 2005. Xilinx Ltd. September 18. Dualport Module for the SDRAM Controller. XESS Corporation. [5].2.net Tài liệu tham khảo [1]. [4]. 2007. Xilinx Ltd. 2005. [11]. Xilinx Ltd. www.com. 2006. www.com.xilinx. TVP5150PBS Ultralow-Power NTSC/PAL Video Decoder. D. D. [6]. July 12. 2004. PicoBlaze 8-bit Embedded Microcontroller User Guide UG129. Pedroni. August 2007. July 12. [2]. March 9.xilinx. XSA Board SDRAM Controller.xilinx.com. [3]. [12]. [10]. System Generator for DSP Userguide Release 9.Jail . 2007. Circuit Design with VHDL. Xilinx Corporation. XESS Corporation. Vanden Bout. 2004. Chapter 7 – Implementing DDR SDRAM Controller – MIG User Guide UG086 (V2. England. VGA Generator for the XSA Boards. www. Massachusetts London. www. August. MIT Press Cambridge.xilinx.com .com.00. October 12.2.xilinx.0). Vanden Bout. Xilinx Ltd. Volnei A. 2005. 2004. May 2006. Anil K. October 14.www. November 21. Spartan-3E Starter Kit Board User Guide UG230 (v1. University of California. D. Texas Instruments Incorporated. www.0). Interfacing Spartan-3 Devices with 166 MHz or 333 Mb/s DDR SDRAM Memories. 82 . System Generator for DSP Reference Guide Release 9. [8].ngohaibac. Karthikeyan Palanisamy. Fundamentals Digital Image Processing. Texas Instruments. [7]. Xilinx Ltd.

Intergrated Operation of Image Capturing in FPGA. Process/Industrial Instruments and Controls Handbook. Chi-Jeng Chang. [18]. Trung tâm công nghệ FPT. GPU and CPU. Nashville. Tao-Yuan. Wiley-VHC. Anil K. [20]. Bill Silver . Computer Vision using Neural Network.xilinx. Bob Rinker.McMillan. [16].Meixner. 2000. Bruce Draper. Đại học Bách Khoa Thành phố Hồ Chí Minh. 2000. 2000. Parameterized Convolution Filtering in a Field Programmable Gate Array. Application for Robot Manipulator Control. 83 . Ben Cope. Walid Najjar. 1999. Cognex Corporation. [19]. Wim Böhm. [15].Jail .Gassman. Nguyễn Đức Minh. University of California. 2000. Jeff Hammes. [24]. California. Pei-Yung Hsiao. Sensors in Intelligent buildings. Xilinx Ltd. Imperial College London.www. An Introduction to Digital Image Processing. [14].00. Zen-Zi Hoang.com. Gregory K. Charlie Ross. 2000. www.ngohaibac. Giới thiệu giải pháp phần cứng cho bài toán thị giác máy trên nền Linux nhúng. System Generator for DSP Getting Started Guide Release 9. 2007. Richard G. khoa Điện-Điện tử. Implementation of 2D Convolution on FPGA. 2006. H. Chang Gung University. 2004.Considine. August. Fundamentals Digital Image Processing.net [13]. Compiling and Optimizing Image Processing Algorithms for FPGA’s. Implementation of Image Processing Algorithms on FPGA Hardware. Anthony Edward Nelson. Colorado State University. Nguyễn Đức Thành.2. [17]. Taiwan. Shoup. [23]. [21]. Bộ Môn Điều khiển tự động. McGraw-Hill. 2001. Douglas M. O. [22].

ngohaibac. Vanden Bout có rất nhiều bài viết hay. Nhóm chúng em đã được sự hỗ trợ tận tình từ phía Dave.com/: Trang web cung cấp mọi công cụ.www.com/group/xsboard-users/ : thảo luận của XESS Board group về thiết kế hệ thống nhúng dùng các board của XESS. [2]. http://tech. hướng dẫn để thực thi FPGA. http://www. 84 .xilinx. Trưởng nhóm là D.groups.net Các nguồn tham khảo trên Internet [1].yahoo.