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 video thì
Trang 1LỜI NÓI ĐẦU
Trong những năm gần đây, trên thế giới nghiên cứu ứng dụng công nghệ xử
lý và nhận dạng ảnh đang là hướng nghiên cứu tập trung của rất nhiều nhà khoa học trong các lĩnh vực 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 video thì một khái niệm nữa về xử lý ảnh nữa ra đời đó là: Thị giác máy - Computer vision.Có thể nói xử lý ảnh số và thị giác máy đã được phát triển và trở thành một lĩnh vực khoa học Xử lý ảnh số không chỉnâng cao chất lượng của ảnh mà còn phân tích và lý giải tìm ra giải thuật để ứng dụng vào thực tiễn Thị giác máy bao gồm lý thuyết và các kỹ thuật liên quan nhằmmụ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 Việc kết hợp giữa thị giác máy với các kỹ thuật khác như công nghệ thông tin, truyền thông, điện tử, điều khiển tự động, cơ khí… cho chúng ta rất nhiều ứng dụng trong đời sống hàng ngày cũng như trong khoa học, an ninh, y học, quân sự… 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à
Trong thời gian qua dưới sự hướng dẫn tận tình của Cô HÀ THỊ KIM DUYÊN em đã dành thời gian nghiên cứu về xử lý ảnh và nhận dạng ảnh hay nói đúng hơn là thuật toán xử lý ảnh bám đối tượng – Tracking Những nội dung mà em nghiên cứu được ở đây bao gồm:
• Nghiên cứu tổng quan về xử lý ảnh số và hệ bám đối tượng
• Tìm hiểu và nghiên cứu về thư viện mã nguồn mở OpenCV trên nền C
• Nghiên cứu và xây dựng thuật toán bám ảnh di động tối ưu dựa trên thư viện mã nguồn mở OpenCV của Intel
• Xây dựng được một hệ thống camera di động (phần cứng lẫn phần mềm) bám theo mục tiêu di dộng ứng dụng thuật toán bám ảnh Camshitf
• Đánh giá được kết quả đạt được trong thời gian nghiên cứu
Trang 2Để hoàn thành đồ án này đúng tiến độ và có chất lượng, em xin gửi lời cảm ơn chân thành nhất tới Cô Th.s HÀ THỊ KIM DUYÊN là người trực tiếp hướng dẫn em làm đồ án này Đồng thời em cũng xin gửi lời cảm ơn sâu sắc tới các anh, các bác phòng Quang – điện tử, Viện vật lý – Viện khoa học công nghệ Việt Nam đã tạo điều kiện tối đa giúp đỡ em về mặt thiết bị và dụng cụ thí nghiệm phục vụ quá trình làm đồ án.
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
Em xin chân thành cảm ơn!
Hà nội ngày 28 tháng 5 năm 2011Sinh viên thực hiện
Hà Tiến Thanh
Trang 31.1.1 Trong lĩnh vực quân sự
Các hệ thống tích hợp quang hồng ngoại có khả năng tự động điều khiển dàn hỏa lực (pháo, tên lửa) được lắp đặt cho các trận địa cao xạ, trên xe tăng, tàu chiến, máy bay, tên lửa hoặc vệ tinh (Hình 1.1) Chúng được thay thế và hỗ trợ các dàn rada dễ bị nhiễu trong việc tự động phát hiện, cảnh giới, bám bắt mục tiêu Đặc biệt
có những loại lắp trên máy bay có khả năng điều khiển hỏa lực đánh phá hàng chục mục tiêu một lúc Ngoài ra còn phải kể đến các đầu tự dẫn tên lửa và đạn thông minh
1.1.2 Trong an ninh, phòng chống tội phạm, bảo vệ pháp luật
Các hệ thống camera nhận dạng khuôn mặt vân tay tự động cũng như phát hiện, theo dõi, cảnh báo các âm mưu và hoạt động khủng bố Các xe robốt tự hành
có gắn các camera cũng được ứng dụng trong các môi trường độc hại, dò phá bom mìn (Hình 1.1)
Trang 41.1.4 Trong công nghiệp, giao thông, xây dựng
Hệ thống quang điện tử đóng vai trò của các thị giác máy (machine vision) có khả năng tự động đo đạc kiểm tra chất lượng sản phẩm trong các dây truyền sản xuất: phân loại hạt ngũ cốc, cà phê; tìm lỗi lắp ráp linh kiện các bản vi mạch và khuyết tật các mối hàn và động cơ Các hệ thống quang điện tử cũng được ứng dụng ngày càng nhiều trong giao thông như đo tốc độ, tự động kiểm soát điều khiển
và phân luồng giao thông (Hình 1.2)
1.1.5 Trong nghiên cứu y sinh dược học
Các kính hiển vi có khả năng tự động nhận dạng và đo đếm các tế bào với độchính xác cao Các kính hiển vi có hệ thống dẫn đường laser cho phép thực hiện những phẫu thuật rất phức tạp như mổ u não, nơi mà một sự không chính xác cỡ μmcũng gây tổn hại đến các dây thần kinh chằng chịt xung quanh
1.1.6 Trong công nghiệp giải trí truyền hình
Các hệ thống tích hợp có thể điều khiển các camera kích thước và khối lượng lớn dễdàng tự động bám theo các đối tượng chuyển động nhanh như bóng đang bay, đua xe
Trang 5
Hình 1.1: Một số hệ thống tích hợp quang-điện tử và ảnh nhiệt trong
quân sự và chiến đấu
Hình 1.3: Hệ thống camera điện tử ứng dụng trong nghiên cứu thời tiết và
trong công nghiệp Hình 1.2: Một số hệ thống tích hợp camera giám sát trên tàu viễn thám và
trong công nghiệp và công nghệ vũ trụ
Trang 61.2 Giới thiệu chung về Robot
Rô bốt (robot) hay người máy là một loại máy có thể thực hiện công việc một cách tự động hoặc được điều khiển gián tiếp qua máy tính
Rô bốt là một tác nhân cơ khí, nhân tạo, thường là một hệ thống cơ khí-điện tửkết hợp hoàn hảo.Với sự xuất hiện và chuyển động của mình, rô bốt gây cho con người cảm giác là nó cũng có những giác quan như con người Từ “rô bốt” (người máy) thường được hiểu với hai nghĩa đó là 1 cơ cấu cơ khí chính xác và phần mềm
tự hoạt động.Về lĩnh vực người máy thì Nhật Bản đang đi đầu về lĩnh vực này
Ngày nay, Rô bốt đang là tâm điểm của một cuộc cách mạng lớn sau Internet
Rô bốt ngày càng được sử dụng rộng rãi trong công nghiệp, y tế, giáo dục và đào tạo, giải trí và an ninh quốc phòng, thám hiểm không gian
Rô bốt là sản phẩm công nghệ có độ phức tạp cao chứa hàm lượng tri thức vô cùng phong phú về tất cả cac lĩnh vực của khoa học và công nghệ
Ngày nay người ta vẫn còn tranh cãi về vấn đề “Một loại máy đủ những tiêu chuẩn gì để được coi là một rô bốt???” Một cách gần chính xác, rô bốt phải có một vài (không nhất thiết phải đầy đủ) đặc điểm sau đây:
1 Không phải tự nhiên, tức là do con người chế tạo ra
2 Có khả năng nhận biết môi trường xung quanh
3 Có thể tương tác với các vật thể trong môi trường
4 Có sự thông minh và có khả năng đưa ra các lựa chọn dựa trên môi trường
và có thể hoạt động theo 1 chu trình đã được lập trình sẵn
5 Có khả năng điều khiển bằng các lệnh để có thể thay đổi tùy theo yêu cầucủa người sử dụng
6 Có thể di chuyển quay tịnh tiến một chiều hay nhiều chiều
7 Có sự khéo léo trong vận động
Trang 71.3 Giới thiệu tổng quan về hệ thống rô bốt camera bám đối tượng (Tracking mobile robot)
Hệ thống rô bốt hoạt động bằng các cảm biến như cảm biến màu sắc, hồng ngoại, cảm biến dò đường, siêu âm giờ đây đã dần dần được phát triển và tích hợp thêm “thị giác”.Với sự phát triển của khoa học công nghệ, việc tích hợp trên rô bốt
hệ thống camera thông minh ứng dụng công nghệ xử lý ảnh là rất cần thiết phục vụcho công nghiệp, quốc phòng và xã hội
Hệ thống thị giác có thể phân thành 2 lớp, theo như cấu trúc của hệ, đó là hệ
có camera gắn cố định và hệ có camera gắn trên tay máy (eye-in-hand) Trong hệcamera cố định, camera được gắn cố định so với hệ trục tọa độ thực, thu thập ảnhcủa cả mục tiêu và cả môi trường Mục tiêu của hệ camera cố định này là cung cấp tín hiệu điều khiển sao cho tay máy đặt được vị trí mong muốn Mục đích của cấu trúc eye-in-hand là điều khiển tay máy sao cho ảnh của mục tiêu di động hoặc cốđịnh được duy trì ở vị trí mong muốn trên mặt phẳng ảnh thu được
CameraMáy tính
Robot
Tín hiệu điều khiển
Hình 1.4: Cấu trúc hệ camera cố định điều khiển và giám sát cánh tay rô bốt
Trang 8Các nghiên cứu của môi trường động bị bỏ khá xa so với môi trường tĩnh do ảnh hưởng khá lớn của tốc độ tinh toán cũng như độ chinh xác của việc phân tích ảnh Do vậy có nhiều thuật toán để cải thiện tốc độ xử lý ảnh và cải thiện can nhiễu trong quá trình thu thập dữ liệu từ camera.
Một khó khăn và thách thức của thị giác máy là việc phân loại đối tượng một
rô bốt có thể phải đối mặt với nhiều đối tượng khác nhau, trong khi chỉ một đối tượng được quan tâm còn các đối tượng khác thì không Để nhận biết được vị trí của mục tiêu trong môi trường động, các đặc trưng của mục tiêu là rất quan trọng Các điểm lỗ, các góc cạnh, các đặc điểm điển hình có thể dễ dàng tính toán xử lý ởmôi trường tĩnh, nhưng trong môi trường động thì rất khó vì chi phí về thời gian là rất lớn, ảnh hưởng của tốc độ làm cho việc xử lý ảnh tách lấy đặc trưng của đối tượng là rất khó
Bài toán bám mục tiêu di động với quỹ đạo không biết trước yêu cầu phải giữđược đối tượng ở một vị trí nhất định trên mặt phẳng ảnh Thuật toán CamShift trong OpenCV được sử dụng để tính toán tọa độ trọng tâm của đối tượng trên mặt phẳng ảnh
Một số hệ thống tracking rô bốt thực tế đã được triển khai:
Hình 1.5: Cấu trúc hệ Camera rô bốt eye-in-hand
camera
Robot eye-in-hand Vật thể cần giám sát
Trang 9Ngày nay việc xây dựng một hệ thống rô bốt thông minh và có khả năng thay thế con người làm việc trong các điều kiện khắc nghiệt và nguy hiểm là rất cần
Hình 1.6: PAN robot và Robot Pops (nguồn: www.mobilerobot.org)
Hình 1.7: Robot Talon và Robot MARRS (nguồn Internet)
Hình 1.8: Robot thám hiểm sao hỏa và Robot MIDbo
Trang 10thiết, đơn cử như việc làm việc trong các hầm mỏ các nhà máy hạt nhân và các vùng nguy hiểm bom mìn…thì khi ấy các rô bốt như thế này hoàn toàn hữu dụng và là lựa chọn tối ưu
Với mục tiêu hướng tới xây dựng một hệ thống rô bốt camera thông minh có thể phục vụ trong công tác dò mìn cứu trợ cứu nạn, và có khả năng do thám, tôicũng đã tìm hiểu và đi vào nghiên cứu chế tạo một hệ tracking thông minh có khảnăng tự hành và bám mục tiêu di động dựa trên công nghệ xử lý ảnh có giao tiếp và kiểm soát, lưu trữ thông tin bằng máy tính
Có thể hệ thống lại rằng, một hệ thống bám đối tượng bao gồm:
Mục đích của hệ thống bám video, ảnh tự động là duy trì một đường ngắm viết tắt là LOS (Line Of Sight) giữa cảm biến – mục tiêu một cách ổn định và hoàn toàn
Đế và cảm biến ảnh
Bộ xử lý Mục tiêu
LOS
Hình 1.9: Cảm biến ảnh, gimbal và bộ vi xử lý
Hình 1.10: Tổng quan về một hệ thống bám
Trang 11tự động trong khi tồn tại cả chuyển động tương đối của mục tiêu và chuyển động của đế gắn cảm biến làm nhiễu loạn tới dữ liệu cảm biến hình ảnh Mục tiêu thường được định vị ban đầu, bởi hoặc là người điều khiển hoặc là hệ thống nhận dạng mục tiêu tự động Sau đó hệ thống bám sẽ khóa chặt mục tiêu và duy trì LOS tự động.
Hệ thống bám ảnh tự động thường có 3 bộ phận chính (hình 1.8): (1) bộ cảmbiến hình ảnh (camera chẳng hạn), (2) bộ chấp hành thường là các trục khớp quay (gimbal) có gắn động cơ hoặc khí nén, và (3) bộ vi xử lý.Một vòng điều khiển phản hồi,được gọi là vòng bám, liên tục hiệu chỉnh bộ chấp hành để giữ mục tiêu vào tâm
của trường nhìn viết tắt là FOV (Field Of View) của bộ cảm biến Bộ vi xử lý sẽ
khép kín vòng này bằng cách tính toán độ lệch để điều khiển cơ cấu chấp hành Các thành phần hoạt động theo thứ tự: (1) bộ vi xử lý định vị tín hiệu mục tiêu trong các dòng hình ảnh từ bộ cảm biến, (2) bộ vi xử lý ước lượng trạng thái mục tiêu và tạo
ra các lệnh điều khiển cơ cấu chấp hành trên cơ sở các thông tin trạng thái, (3) lệnh điều khiển được áp dụng vào LOS cảm biến, (4) bộ cảm biến tạo ra một vòng video mới, và (5) quá trình được lặp lại
Cảm biến hình ảnh, có thể là các camera hoặc các cảm biến hình ảnh khác như: cảm biến ảnh CCD (Charge Couple Device) là loại cảm biến sử dụng một lưới hình chữ nhật của các điểm (site) thu thập điện tử phủ trên một đế silic mỏng để ghi lại năng lượng ánh sáng đến mỗi điểm trong chúng Mỗi một điểm được tạo thành bằng cách cấy một lớp SiO2 trên đế và sau lắng đọng một cấu trúc dẫn lên trên Khi photon ánh sáng đập vào silic, thì cặp điện tử lỗ trống sẽ được tạo ra và các điện tửmang điện tích âm (electron) sẽ được bật ra ở cổng tương ứng Với mỗi ánh sáng có bước sóng khác nhau thì các điện tích bật ra tương ứng cũng sẽ khác nhau.các dòng điện tử này đi qua bộ biến đổi để lấy ra được mức điện áp quy định tương ứng với mỗi màu sắc Và tập hợp những tín hiệu điện này sẽ được xử lý để khôi phục lại hình ảnh của đối tượng thông qua thiết bị chuyên dụng chuyển đổi
Trang 12Có thể nói rằng, khối cảm biến hình ảnh có thể sử dụng các cảm biến màu sắc hoặc camera, tuy nhiên có thể khẳng định rằng, khối này có ảnh hưởng rất lớn đếnchất lượng và tốc độ của một hệ bám ảnh Vì tốc độ thu thập dữ liệu để gửi về bộ vi
xử lý rất quan trọng, nó ảnh hưởng đến việc tính toán của bộ vi xử lý để nhanh chóng đưa ra luật điều khiển cho cơ cấu chấp hành.Camera tốc độ và chất lượng càng cao thì hệ bám sẽ hoạt động với xác suất chính xác cao
Ngày nay với sự phát triển của khoa học công nghệ thì cảm biến hình ảnh cũng được hiện đại hóa và cải thiện được tốc độ cũng như chất lượng hình ảnh, điển hình là các hệ thống camera tích hợp, hồng ngoại, lade, không dây…
Với yêu cầu mục đích của đồ án thì khối cảm biến hình ảnh của tôi sử dụng ởđây là hệ thống camera không dây tích hợp hồng ngoại quan sát ban đêm Vì camera là lựa chọn tối ưu trong việc xây dựng một hệ thống triển khai thực nghiệm, trong khi các cảm biến hình ảnh khác chỉ dùng trong một mục đích nghiên cứu nhất định, tốc độ không cao và khó sử dụng và khó tiếp cận Ngược lại camera thì hoàn toàn đáp ứng đủ yêu cầu để xây dựng một hệ thống bám ảnh thực nghiệm và dễ tiếp cận
Hình 1.11: Cảm biến CCD
Trang 13Về hệ cơ cấu chấp hành thì có thể sử dụng là khí nén hoặc động cơ để điềukhiển Tuy nhiên tùy vào mục đích sử dụng và yêu cầu riêng của hệ thống ta có thể
sử dụng cơ cấu chấp hành nào để phù hợp nhất Ở đây ta có thể sử dụng hệ thống đếxoay dùng động cơ điều khiển và kiểm soát góc độ và tốc độ quay Các hệ trên thịtrường hiện nay như các hệ PTS, HN (đế xoay camera) tuy nhiên các hệ này thường
là các động cơ xoay chiều điều khiển cho nên việc điều khiển tốc độ và kiểm soát góc quay cũng gặp nhiều khó khăn
Trong hệ thống của tôi sử dụng hoàn toàn là động cơ 1 chiều có gắn encoder
để kiểm soát tốc độ và góc quay, được điều khiển bằng phương pháp điều xung PWM, nên hoàn toàn phù hợp với yêu cầu của hệ thống
Hình 1.12: Camera quan sát tích hợp
Hình 1.13: Đế xoay PST, HN để gắn camera quan sát
Trang 14Việc lựa chọn động cơ 1 chiều DC (Direct Current) là một lựa chọn tối ưu và
có tính cơ động cao nhỏ gọn, có thể di chuyển đến mọi vị trí vì có khả năng dùng acqui và pin lưu trữ, phù hợp với nhiều điều kiện khác nhau, phù hợp với nhiều địa hình có thể triển khai thực tế
Về bộ vi xử lý, có thể là các vi mạch xử lý chuyên dụng DSP (Digital signal processing) hay các mạch vi điều khiển hoạc là máy vi tính PC (Personal computer) Ngoài nhiệm vụ thu thập dữ liệu, chúng có nhiệm vụ xử lý các dữ liệu này bằng các chương trình được nhúng trong bộ xử lý hoặc chạy trên các PC Một vi điều khiển (microcontroller) là một máy tính trên một chip (Computer-on–a–chip, single-chip-computer) Thường thì các vi điều khiển này được gọi là các bộ điều khiển nhúng (embedded controller) vì chúng và các mạch điện tử hổ trợ thường được thiết kế lắp đặt (nhúng) ngay bên trong thiết bị điều khiển Một số loại mạch nhúng thường gặp như: Psoc, PC 104, FPGA, SBC (Single board computer), CMUCAM1 2 3, DSP và các máy tính nhúng.(hình 1.13)
Các mạch nhúng trên đều có ưu điểm là nhỏ gọn, có thể can thiệp và cấu trúc của chúng có nghĩa là có thể trực tiếp lập trình trên nó, tuy nhiên chúng có nhượcđiểm là khó sử dụng, phức tạp và mang tính chuyên ngành cao, không phổ biến và
có dung lượng bộ nhớ nhỏ chỉ có thể xử lý và ít có khả năng lưu trữ thông tin hình
Hình 1.14: Các mạch nhúng ( SBC use PSoC, FPGA, CMUCAM,
DSP, máy tính công nghiệp PC104)
Trang 15ảnh hoặc video khi cần thiết (nếu muốn lưu trữ phải dùng thêm thiết bị ngoại vi nên khá phức tạp).
Một trong những thiết bị vừa có thể lập trình và vừa có thể xử lý tín hiệu đồng thời có khả năng lưu trữ thông tin lớn đó là máy tính cá nhân PC Máy PC ra đời nhằm phục vụ những yêu cầu của người sử dụng, sử dụng đơn giản, phổ biến đáp ứng được những yêu cầu của hệ thống Hiện nay máy tính cá nhân cũng đã được thiết kế nhỏ gọn với đầy đủ chức năng Do vậy trong khuôn khổ đề tài này tôi đã lựachọn máy tính laptop để xử lý và có thể lưu trữ được thông tin hình ảnh và video,
âm thanh.Giúp người điều khiển có thể quan sát trực tiếp mục tiêu và khi cần thiết
sẽ can thiệp trực tiếp vào quá trình điều khiển Như vậy việc lựa chọn máy tính laptop là phù hợp với yêu cầu đề tài
Như vậy, mục tiêu của đề tài là xây dựng được một hệ thống bám ảnh di động bao gồm một hệ tích hợp rô bốt điều khiển camera thông minh thu thập dữ liệu gửi
về trung tâm lưu trữ và điều khiển từ xa thông qua hệ thống máy tính Rôbốt và camera có thể hoàn toàn hoạt động tự động bám ảnh, vật thể hoặc có thể can thiệp điều khiển bởi người sử dụng, phục vụ cho công tác nghiên cứu, công tác cứu hộ,
dò phá bom mìn, phục vụ nhiều mục đích trong cuộc sống
Trang 16Chương 2: TỔNG QUAN VỀ THƯ VIỆN MÃ NGUỒN
MỞ OPENCV TRÊN NỀN C
2.1 Thư viện OpenCV
2.1.1 OpenCV là gì?
OpenCV viết tắt của Open Source Computer Vision Library Nó có chứa hon
500 hàm sử dụng thị giác máy, và được phát triển bởi tập đoàn Intel OpenCV là
một thư viện mã nguồn mở (open source) tham khảo tại: http://www.sourceforge.net
Thư viện được viết bằng ngôn ngữ C và C++ có thể chạy trên các hệ điều hành như Linux, Window và Max OS X OpenCV được thiết kế để nâng cao hiệu suất tính toán và nhấn mạnh đến hệ thống thời gian thực Một điều tuyệt vời của OpenCV là nó đưa ra một hệ thống đơn giản, dễ sử dụng giúp mọi người nhanh chóng xây dựng các ứng dụng trong thị giác máy, kể cả các hệ thống kiểm tra trong nhà máy, bức ảnh trong các lĩnh vực y học, bảo mật, rô bốt học… Nó chứa các lạp trình xử lý ảnh rất đơn giản, kể cả khi thực thi các hàm bậc cao như dò tìm khuôn mặt, theo dõi khuôn mặt, nhận dạng khuôn mặt, lọc Kalman
Kể từ khi được giới thiệu và sử dụng vào tháng 1 năm 1999, OpenCV đã được
sử dụng trong rất nhiều ứng dụng, các sản phẩm và các nghiên cứu Ví dụ như trong lĩnh vực hàng không vũ trụ, bản đồ web trực tuyến, sử dụng giảm nhiễu trong y học, phân tích đối tượng, an ninh, hệ thống dò tìm và cảnh báo, quản lý hê thống sản xuất, xử lý camera, ứng dụng trong quân sự, hàng không không người lái, trên mặt đắt và trên tàu ngầm Ngoài ra nó còn sử dụng trong nhận dạng âm thanh OpenCV
là một chìa khóa quan trọng trong các rô bốt sử dụng thị giác máy như Stanford hay Asimo của Nhật Bản Quá trình phát triển của OpenCV được thể hiện ở hình 2.1:
Trang 17Trên thế giới còn một số thư viện như Emugu CV nhưng phát triển trên nền C# OpenCV được phát triển trên nền C và C++ thì sẽ dễ dàng cho những người mới tiếp cận hơn Emugu CV.
2.1.2 Vì sao lựa chọn OpenCV?
Thị trường thị giác máy đang ngày càng mở rộng và lên tục phát triển Thư viện tiêu chuẩn sẽ tạo ra các ứng dụng mới và các giải pháp xử lý dễ dàng hơn Đặc biệt tối ưu khi sử dụng cấu trúc Intel Tạo ra các mẫu ứng dụng bằng các thư viện được cập nhật thường xuyên và thực hiện các thuật toán nặng như dò tìm khuôn mặt Có rất nhiều công nghệ hiện đại và các công ty lớn sử dụng thư viện OpenCV trong ứng dụng của mình như : Intel, Microsoft, IBM, Siemens, Google… và các trung tâm nghiên cứu như: Stanford, MIT, Cambridge, INRIA…
Hơn 14000 thành viên trên forum OpenCVyahoogroup.com với trung bình một ngày có đến 10-20 thông điệp comment trao đổi hàng ngày
Điều đó khẳng định rằng OpenCV thực sự đã góp phần vô cùng lớn trong lĩnh vực thị giác máy
Hình 2.1: Quá trình phát triển của OpenCV
Trang 182.1.3 Cấu trúc và nội dung OpenCV như thế nào?
Để hiểu OpenCV làm việc như thế nào chúng ta bắt đầu từ sự phân chia cấutrúc và nội dung của OpenCV ở 5 phần Cấu trúc của openCV được chia làm 5 phần chính, 4 trong số đó được chỉ ra trong hình 2.2
CXCOREchứa các định nghĩa kiểu dữ liệu cơ sở Ví dụ, các cấu trúc dữ liệu
cho ảnh, điểm và hình chữ nhật được định nghĩa trong cxtypes.h CXCORE cũng
chứa đại số tuyến tính và phương pháp thống kê, chức năng duy trì và điều khiển chuỗi Một số ít, các chức năng đồ họa để vẽ trên ảnh cũng được đặt ở đây
CV chứa các thuật toán về xử lý ảnh và định kích cỡ camera Các chức năng
hình họa máy tính cũng được đặt ở đây
CVAUX được mô tả trong tài liệu của OpenCV như chứa các mã cũ và thứ nghiệm Tuy nhiên, các giao diện đơn cho sự nhận diện ảnh ở trong module này Code sau này chúng được chuyên dụng cho nhận diện mặt và chúng được ứng dụng rộng rãi cho mục đích đó
HIGHGUI và CVCAM được đặt trong cùng thư mục là “otherlibs”.
Trang 19HIGHGUI chứa các giao diện vào ra cơ bản, nó cũng chứa các khả năng cửa
- Truy xuất ảnh và phim: đọc ảnh số từ camera, từ file, ghi ảnh và phim
- Cấu trúc dữ liệu ảnh số và các dữ liệu hỗ trợ cần thiết: ma trận, vector,
chuỗi, xâu và cây
- Xử lí ảnh căn bản: các bộ lọc có sẵn, tìm chi tiết cạnh, góc, chỉnh đổi màu,
phóng to thu nhỏ, và hiệu chỉnh histograms
- Xử lí cấu trúc: tìm viền, nhận chuyển động, thay đổi trong không gian 3D, đối chiếu bản mẫu, xấp xỉ các đơn vị hình học cơ sở - mặt phẳng, đa giác, ellipse, đường thẳng
- Phân tích dữ liệu ảnh: nhận dạng thực thể, theo dõi các chi tiết và phân tích
chuyển động
- Tạo giao diện đơn giản: hiển thị ảnh, thao tác bàn phím, chuột, thanh trượt
để chỉnh thông số (nếu cần thiết các bạn có thể tự tạo thêm các phím điều khiển thông qua thao tác chuột, hoặc tích hợp thêm các thư viện về giao diện như wxWidgets)
- Chức năng vẽ, chú thích lên ảnh.
Trang 202.2 Thư viện OpenCV và môi trường làm việc Microsoft visual studio 2008 2.2.1 Cài đặt OpenCV phiên bản 2.1 dành cho VC++ 2008
Trước hết vào trang web: http://sourceforge.net/projects/opencvlibrary/ download
OpenCV 2.1 phiên bản dành cho VC++ 2008 trên nền window
Tiến hành cài đặt:
Click Next:
Hình 2.3: Setup OpenCV 2.1
Hình 2.4: Chọn I Agree
Trang 21Click I Agree để tiếp tục:
Chọn Add OpenCV to the system PATH for all users, để chạy trên tất cả quyền
Admin lẫn users, sau đó click Next chọn mặc định và tiếp tục cho đến khi cài đặt xong finish
Sau khi cài đặt ta tiến hành copy tất cả các file trong thư mục bin, include
và lib của OpenCV cho vào thư mục bin, include và lib của VC++2008 để sử
dụng thư viện OpenCV
Hình 2.5: Chon Add OpenCV to the system PATH
Hình 2.6: Click Finish để kết thúc
Trang 23Sau đó chọn Next và Finish, như vậy ta đã thiết lập được một dự án bây giờ ta
có thể thiết kế và lập trình theo ý muốn
Sau đây là kết quả của một của một chương trình nhận diện khuôn mặt được
sử dụng thư viện mã nguồn mở của OpenCV và đếm số người trong bức ảnh
Hình 2.8: Chọn thiết kế Dialog based và môi
trường làm việc của dự án
Trang 24Hình 2.9: Kết quả thử nghiệm của lập trình nhận diện khuôn
mặt
Trang 25Chương trình nhận diện khuôn mặt và đếm số người trong một bức ảnh dùng
thư viện: "haarcascade_profileface.xml”.
// Create a string that contains the exact cascade name
const char* cascade_name =
"C:/OpenCV2.1/data/haarcascades/haarcascade_frontalface_alt2.xml"; /* "haarcascade_profileface.xml";*/
// Function prototype for detecting and drawing an object from an image void detect_and_draw( IplImage* image );
int dem=0;
// Main function, defines the entry point for the program.
int main( int argc, char** argv )
{
// Create a sample image
IplImage *img = cvLoadImage("D:\\IMG_8036.jpg");
// Call the function to detect and draw the face positions
std::cout << "co tat ca"<<dem << " nguoi//";
// Destroy the window previously created with filename: "result"
cvDestroyWindow("result");
//MessageBox(dem);
// return 0 to indicate successfull execution of the program
Trang 26return 0;
}
// Function to detect and draw any faces that is present in an image
void detect_and_draw( IplImage* img)
{
// Create memory for calculations
static CvMemStorage* storage = 0;
// Create a new Haar classifier
static CvHaarClassifierCascade* cascade = 0;
int scale = 1;
// Create a new image based on the input image
IplImage* temp = cvCreateImage(
cvSize(img->width/scale,img->height/scale), 8, 3 );
// Create two points to represent the face locations
CvPoint pt1, pt2;
int i;
// Load the HaarClassifierCascade
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
// Check whether the cascade has loaded successfully Else report and error and quit
Trang 27// There can be more than one face in an image So create a growable sequence of faces.
// Detect the objects and store them in the sequence
CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
cvSize(40, 40) );
// Loop the number of faces found.
for( i = 0; i < (faces ? faces->total : 0); i++ )
{
// Create a new rectangle for drawing the face
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
// Find the dimensions of the face,and scale it if necessary
// Show the image in the window named "result"
cvShowImage( "result", img );
// Release the temp image created.
cvReleaseImage( &temp );
}
Trang 28Chương 3: XÂY DỰNG THUẬT TOÁN XỬ LÝ ẢNH
BÁM ĐỐI TƯỢNG TỐI ƯU (TRACKING)
3.1 Giải thuật chung về hệ thống bám (Tracking camera robot)
Dựa vào lưu đồ thuật toán ta có thể hình dung về một hệ thống bám tổng quan nhất để có thể xây dựng được một thuật toán điều khiển tối ưu phù hợp vói hệ thống, đáp ứng đủ các yêu cầu đặt ra của bài toán Sau bước khởi tạo ban đầu mục tiêu sẽ được đưa vào hệ cảm biến hình ảnh để chụp ảnh, sau đó được lấy mẫu tín hiệu từ không gian màu RGB đến không gian màu HSV Mọi màu sắc tự nhiên đều được tổ hợp từ 3 màu cơ bản: đỏ R (red), xanh lục G (green) và xanh dương B (blue) Để tiêu chuẩn hóa việc đo màu sắc trên thế giới, dựa vào kết quả thực nghiệm người ta đã qui định 3 màu cơ bản này tương ứng với các bước sóng 700nm
Giao tiếpRS232,RF
Điều kiệndừngKhởi tạo
Dừng
Hình 3.1: Lưu đồ thuật toán bám đối tượng
Trang 29đối với (R), bước sóng 546,8 nm đối với (G) và 435,8 nm đối với (B) Ba màu cơ bản này là để tạo ra các màu khác với tỷ lệ pha trộn tương ứng VD: vàng = đỏ+xanh lục (tham khảo thêm tại: http://vi.wikipedia.org/wiki/ ) Để cảm nhận màu sắc thì có 3 thuộc tính chủ yếu:
Sắc màu (Brightness), còn gọi là độ chói.
Sắc lượng (Hue), còn gọi là sắc thái màu.
Độ bão hòa màu (Saturation)
Có thể chuyển đổi từ không gian màu RGB sang không gian màu HSV và ngược lại, chính nhờ sự chuyển đổi này mà chúng ta có thể lập trình lấy mẫu tín hiệu thu được từ camera Và có thể nói trong OpenCV có hàm cvCvtColor() chuyên dụng để thực hiện nhiệm vụ này
Histogram chính là quá trình mô tả đối tượng, thông tin hình ảnh và video dưới dạng biểu đồ (Histogram) để dễ quan sát Histogram có thể sử dụng để chỉ ra
sự khác nhau giữa các đối tượng và chỉ ra xác suất phân bố màu sắc Thực hiện quá trình tạo Histogram liên tiếp và quan sát nếu thấy Histogram nào gần giống với Histogram của đối tượng nhất thì sẽ được chọn, đây cũng chính là một trong những yếu tố cần thiết trong thuật toán bám ảnh của công nghệ xử lý ảnh nói chung và thư viện OpenCV nói riêng
Hình 3.2: Không gian màu RGB và không gian màu HSV
Trang 30
Lọc nhiễu nhằm mục đích loại bỏ can nhiễu để lấy ra được tín hiệu chính xác cần lấy mẫu Có thể nói rằng nhiễu phát sinh trong quá trình xử lý ảnh là rất lớn do vậy cần phải loại bỏ nhiễu bằng các bộ lọc như Kalman hay bộ lọc g-h hay g-h-k…
Từ những yếu tố trên thuật toán bám của hệ là như sau: phải có thể lấy mẫu và chuyển đổi được giữa các không gian màu RGB và HSV và ngược lại, phải tạo ra Histogram để so sánh đưa ra luật điều khiển, và quan trọng phải xác định được đặc tính của ảnh.Tính toán được trọng tâm và hướng của vật thể có kết hợp các bộ lọc nhằm loại bỏ nhiễu vào hệ thống
Hình 3.3: Histogram của hai lần lấy mẫu
Hình 3.3: Kết quả trước khi lọc và sau khi lọc
Trang 313.2 Thuật toán Camshift trong tối ưu hóa hệ bám đối tượng
Trong xử lý ảnh việc đi nghiên cứu thuật toán bám đối tượng là rất quan trọng, một số thuật toán thường gặp đó là: thuật toán KLT, phương pháp Correlation-base template matching, thuật toán Meanshift, thuật toán Camshift
Thuật toán KLT viết tắt của tên hai nhà nghiên cứu Lucas and Kanade và Tomasi kết hợp với Birchfield vào năm 1991 đã cho ra đời thuật toán xử lý bám các đặc tính của ảnh, được thực thi bằng ngôn ngữ C và được gọi là thuật toán bám KLT (KLT tracker) Thuật toán KLT dùng toán học tính toán ra các đặc tính sau đó cũng dùng toán học để tính ra xác suất xuất hiện của các đặc tính đó trong lần di chuyển tiếp theo Nó có nhược điểm là rất phức tạp và lập trình tốn bộ nhớ của chương trình, tỷ lệ trượt cao vì khó chọn ra đặc tính của đối tượng và chỉ phù hợp với 1 đối tượng được lập trình từ trước, khi bám đối tượng khác thì phải lập trình và lấy lại đặc tính cho đối tượng mới
Phương pháp Correlation-base template matching là phương pháp so sánh với một ảnh hoặc thư viện mẫu có sẵn (template), do vậy phải dùng toàn bộ ảnh của đối tượng chứ không phải dùng một số điểm ảnh như các thuật toán khác, đồng thời không dùng các thông tin chuyển động, tính toán nhiều hơn nên khối lượng chương trình rất lớn
Thuật toán Meanshift được phát triển từ phương pháp Gauss dùng ước lượng đối tượng trên một cửa sổ ảnh cố định, chia ảnh của đối tượng thành các ma trận điểm ảnh (pixel) sau đó thực hiện ước lượng các điểm ảnh này bằng phương pháp Gauss, sau đó tính trung bình các pixel đó trên khung ảnh cố định của đối tượng,quá trình lặp lại cho đến khi hội tụ có thể tham khảo thêm tại trang web sau để hiểu thêm về phương pháp Gauss:
to-mean-shift-algorithm/)
Cuối cùng là thuật toán Camshift, Camshift viết gọn của “Continuously Adaptive Meanshift” là cơ sở của thuật toán theo dõi khuôn mặt trong OpenCV Nó bao gồm thuật toán cơ sở Meanshift với thích ứng các bước thay đổi kích cỡ của
Trang 32vùng Nhân là một hàm step đơn giản nằm trong một bản đồ vỏ xác suất probability) Vỏ xác suất của mỗi điểm ảnh được tính toán dựa trên màu sắc bằng cách sử dụng một phương pháp gọi là Histogram backprojection Màu sắc được đưa
(skin-ra như sắc thái màu (Hue) từ mô hình HSV Trong thuật toán Camshift, một bức ảnh về xác suất phân bố màu của bức ảnh trong chuỗi video được tạo ra Đầu tiên
nó tạo ra một mẫu mô tả Hue sử dụng một biểu đồ màu sắc (color Histogram) và sửdụng không gian màu Hue Saturation Value (HSV) được tham chiếu từ không gian màu tiêu chuẩn RGB Vì phân bố màu sắc của bức ảnh trong video thay đổi theo thời gian, nên thuật toán Camshift được sửa đổi để dễ dàng thích ứng với sự thay đổi phân bố xác suất màu sắc của mục tiêu nó theo dõi Trong OpenCV thuật toán Camshift được điều chỉnh từ thuật toán Meanshift Nó được tính toán như sau:
Bước 1: Chọn vị trí ban đầu của Search Window
Bước 2: Dùng thuật toán Meanshift (lặp một hoặc nhiều lần) lưu ra một vùng gọi là moment thứ 0
Bước 3: Đặt kích cỡ của cửa sổ tìm kiếm bằng một hàm của moment thứ 0 tìm được trong bước 2
Bước 4: Lặp lại bước 2 và bước 3 cho đến khi hội tụ
Với những ưu điểm của thuật toán Camshift trong việc xử lý ảnh bám đối tượng và nhận diện ảnh, kết hợp với ngôn ngữ C tôi đã lựa chọn và xây dựng riêng cho đề tài của mình một thuật toán tối ưu trong việc xử lý ảnh bám đối tượng Thuật toán Camshift đã được cụ thể hóa bằng lưu đồ hình 3.4 Đầu tiên là một Histogram được tạo ra, Histogram này chứa các thuộc tinh liên quan đến màu sắc và tiếp theo tâm và kích cỡ của mục tiêu được tinh toán để theo dõi mục tiêu khi hình dạng và kích cỡ của nó thay đổi Tính xác suất phân bố mục tiêu căn cứ và Histogram nhận được Dịch chuyển đến vị trí mới với mỗi khung hình vừa nhận được từ video Camshift sẽ dịch chuyển đến vị trí mà nó ước lượng trên đối tượng nó mà nó tập trung nhiều điểm sáng nhất trong bức ảnh xác suất nó tìm vị trí mới bắt đầu từ vị trí trước đó và tính toán giá trị trọng tâm vừa tìm được OpenCV sử dụng hàm cvCamshift() để thực hiện chuyển dịch này Việc tính toán trọng tâm dựa vào thuật toán Meanshift
Trang 33Histogram
Xác suấtphân bốmàu
Camshift
Reset vùng tính toán
Đặt tâm search window
Hình 3.4: Lưu đồ thuật toán Camshift
Hình 3.5: Kết quả của việc thực hiện hàm Camshift trong việc
tính tọa độ của mục tiêu
Trang 34Chương 4: XÂY DỰNG, THI CÔNG PHẦN CỨNG
VÀ LẬP TRÌNH PHẦN MỀM CHO HỆ THỐNG BÁM
ĐỐI TƯỢNG4.1 Tổng quan về các linh kiện xây dựng phần cứng
Việc chọn lựa các linh kiện để xây dựng mạch phần cứng là rất quan trọng sau khi đã xây dựng xong thuật toán xử lý tối ưu Trong hệ thống này ngoài bộ vi xử lý chung là máy tính laptop còn có một khối giao tiếp để thực hiện bắt tay giữa camera, cơ cấu chấp hành và máy tính Để đáp ứng đủ yêu cầu về khả năng điều khiển cơ cấu chấp hành và vừa có khả năng xử lý, chống nhiễu tốt tôi quyết định chọn và sử dụng vi điều khiển AVR, ATmega128 vì nó có đầy đủ tính năng và có khả năng chống nhiễu tốt Để sử dụng điều khiển các cơ cấu chấp hành và kiểm soát tốc độ và góc quay tôi đã sử dụng một số linh kiện chuyên dụng điều khiển cầu động cơ đó là dòng MC của Freescale và DVR của Texas Intrument Với mục đích xây dụng một kit vi điều khiển đa năng có thể vừa thực hiện nhiệm vụ điều khiển cơ cấu chấp hành vừa có khả năng thực hiện nhiệm vụ xử lý tín hiệu từ các cảm biến trong công nghiệp như PIR, IR của Sharp, cảm biến gia tốc và độ nghiêng ADXL hay MMA7455… và có thể giao tiếp RS232 hoặc giao tiếp không dây RF để phục
vụ quá trình truyền và xử lý tín hiệu
Giới thiệu về vi điều khiển ATmega128
Atmega 128 là một bộ vi xử lý CMOS điện áp thấp dựa trên nền kiến trúc AVR RISC nâng cao Bằng cách thi hành các lệnh một cách mạnh mẽ trong mộtchu kì đồng hồ duy nhất, Atmega128 có thể cho phép tốc độ đạt được là 1 MPIS trên 1 MHz từ đó giúp người thiết kế hệ thống có khả năng tối ưu hóa điện năng sửdụng so với tốc độ xử lý
4.1.1 Những Tính Năng Chính Của ATmega128:
Trang 35• 160 thanh ghi vào ra mở rộng
• 32 thanh ghi đa mục đích
• 6 kênh PWM có thể lập trình thay đổi độ phân giải từ 2 tới 16 bit
• Bộ so sánh tương tự có thể lựa chọn ngõ vào
• Hai khối USART lập trình được
• Khối truyền nhận nối tiếp SPI
• Khối giao tiếp nối tiếp 2 dây TWI
Trang 364.1.2 Cấu trúc của ATmega128
4.1.3 Cổng và ra
Cổng vào ra là một trong số các phương tiện để vi điều khiển giao tiếp với cácthiết bị ngoại vi ATmega128 có cả thảy 7 cổng ( port ) vào ra 8 bit là : PortA, PortB, PortC, PortD, PortE, PortF, PortG, tương ứng với 56 đường vào ra Các cổng vào ra của AVR là cổng vào ra hai chiều có thể định hướng, tức có thể chọn hướng của cổng là hướng vào (input ) hay hướng ra (output ) Tất các các cổng vào ra của AVR điều có tính năng Đọc – Chỉnh sửa – Ghi ( Read – Modify – write ) khi sửdụng chúng như là các cổng vào ra số thông thường Điều này có nghĩa là khi ta thay đổi hướng của một chân nào đó thì nó không làm ảnh hưởng tới hướng của các chân khác Tất cả các chân của các cổng (port ) điều có điện trở kéo lên ( pull-up ) riêng, ta có thể cho phép hay không cho phép điện trở kéo lên này hoạt động Điện
Hình 4.2: Sơ đồ cấu trúc của ATmega128
Trang 37trở kéo lên là một điện trở được dùng khi thiết kế các mạch điện tử logic Nó có một đầu được nối với nguồn điện áp dương (thường là Vcc hoặc Vdd) và đầu còn lại được nối với tín hiệu lối vào/ra của một mạch logic chức năng Điện trở kéo lên có thể được lắp đặt tại các lối vào của các khối mạch logic để thiết lập mức logic lối vào của khối mạch khi không có thiết bị ngoài nối với lối vào Điện trở kéo lên cũng có thể được lắp đặt tại các giao diện giữa hai khối mạch logic không cùng loại logic, đặc biệt là khi hai khối mạch này được cấp nguồn khác nhau Ngoài ra, điệntrở kéo lên còn được lắp đặt tại lối ra của khối mạch khi lối ra không thể nối nguồn
để tạo dòng, ví dụ các linh kiện logic TTL có cực góp hở Đối với họ logic lưỡng cực với nguồn nuôi 5 Vdc thì giá trị của điện trở kéo lên thường nằm trong khoảng
1000 đến 5000 Ohm, tùy theo yêu cầu cấp dòng trên toàngiải hoạt động của mạch Với lôgíc CMOS và lôgíc MOS chúng ta có thể sử dụng các điện trở có giá trị lớnhơn nhiều, thường từ vài ngàn đến một triệu Ohm do dòng rò rỉ cần thiết ở lối vào là rất nhỏ Trong việc thiết kế các vi mạch ứng dụng, nếu một IC có ngõ ra loại cực thu để hở giao tiếp với nhiều IC khác thì giá trị của điện trở kéo lên sẽ tương đối nhỏ (khoảng vài trăm Ohm) Bởi vì lúc này hệ số fanout lớn dẫn đến dòng ngõ ra của IC phải lớn để đủ cung cấp cho các ngõ vào của các IC khác, nếu không vi mạch sẽ hoạt động chập chờn hoặc có thể không hoạt động
Khi khảo sát các cổng như là các cổng vào ra số thông thường thì tính chất của các cổng ( PortA, PortB,…PortG ) là tương tự nhau, nên ta chỉ cần khảo sát một cổng nào đó trong số 7 cổng của vi điều khiển là đủ Mỗi một cổng vào ra của vi điều khiển được liên kết với 3 thanh ghi : PORTx, DDRx, PINx ( ở đây x là để thay thế cho A, B,…G ) Ba thanh ghi này sẽ được phối hợp với nhau để điều khiển hoạt động của cổng, chẳn hạn thiết lập cổng thành lối vào có sử dụng điện trở pull-up, v.v Sau đây là diễn tả cụ thể vai trò của 3 thanh ghi trên
Thanh Ghi DDRx
Đây là thanh ghi 8 bit ( có thể đọc ghi ) có chức năng điều khiển hướng của cổng (là lối ra hay lối vào ) Khi một bit của thanh ghi này được set lên 1 thì chân tương ứng với nó được cấu hình thành ngõ ra Ngược lại, nếu bit của thanh ghi DDRx là 0 thì chân tương ứng với nó được thiết lập thành ngõ vào Lấy ví dụ: Khi
ta set tất cả 8 bit của thanh ghi DDRA đều là 1, thì 8 chân tương ứng của portA là
Trang 38PA1, PA2, … PA7 ( tương ứng với các chân số 50, 49, …44 của vi điều khiển ) được thiết lập thành ngõ ra.
Thanh Ghi PORTx.
PORTx là thanh ghi 8 bit có thể đọc ghi Đây là thanh ghi dữ liệu của PORTx, Nếu thanh ghi DDRx thiết lập cổng là lối ra, khi đó giá trị của thanh ghi PORTx cũng là giá trị của các chân tương ứng của PORTx, nói cách khác, khi ta ghi một giá trị logic lên 1 bit của thanh ghi này thì chân tương ứng với bit đó cũng có cùng mức logic Khi thanh ghi DDRx thiết lập cổng thành lối vào thì thanh ghi PORTx đóng vai trò như một thanh ghi điều khiển cổng Cụ thề , nếu một bit của thanh ghi này được ghi thành 1 thì điện trở treo ( pull-up resistor ) ở chân tương ứng với nó sẽđược kích hoạt, ngược lại nếu bit được ghi thành 0 thì điện trở treo ở chân tương ứng sẽ không được kích hoạt, cổng ở trạng thái cao trở ( Hi-Z )
Thanh Ghi PINx.
PINx không phải là một thanh ghi thực sự, đây là địa chỉ trong bộ nhớ I/O kết nối trực tiếp tới các chân của cổng Khi ta đọc PORTx tức ta đọc dữ liệu được chốt trong PORTx, còn khi đọc PINx thì giá trị logic hiện thời ở chân của cổng tương ứng được đọc Vì thế đối với thanh ghi PINx ta chỉ có thể đọc mà không thể ghi Hình 4.5 thể hiện các các thiết lập cách hoạt có thể có của cổng
Hình 4.3: Thanh ghi DDRx
Hình 4.4: Thanh ghi PORTA
Trang 394.1.4 Các bộ định thời, cấu trúc ngắt, module PWM, USART/UART và các ngoại vi khác
ATmega128 có 4 bộ định thời , bộ định thời 1 và 3 là bộ định thời 16 bit, bộ
định thời 0 và 2 là bộ định thời 8 bit (Timer/Couter0 và Timer/Couter2 với 2