Mô hình xe thông minh

MỤC LỤC PHẦN A: LÝ THUYẾT TỔNG QUAN Trang 9 CHƯƠNG I: THUẬT TOÁN TÁCH BIÊN VÀ NHẬN DẠNG MÀU .10 1. Giới thiệu về các bộ tách biên .10 1.1. Cơ sở của việc tách biên .10 1.2. Bộ tách biên Sobel 12 1.3. Bộ tách biên Canny .14 1.4. Bộ tách biên Prewitt 16 1.5. Bộ tách biên Roberts .17 1.6. Bộ tách biên Laplace của hàm Gauss 17 2. Phương pháp nhận dạng màu .18 2.1 Mô hình màu RGB . 18 2.2 Mô hình màu CMY . .19 2.3 Mô hình màu CYMK .19 2.4 Mô hình màu HSV .20 2.5 Các kỹ thuật tái hiện ảnh 20 CHƯƠNG II: TÌM HIỂU CHUNG VỀ PHẦN MỀM MATLAB 22 1. Tạo giao diện người dùng nhờ công cụ GUIDE của MATLAB 22 2. Toolbox bắt ảnh 25 2.1. Nhiệm vụ của Toolbox .25 2.2. Các bước thu thập ảnh cơ bản của Toolbox .25 3. Toolbox xử lý ảnh .28 3.1. Các loại ảnh trong MATLAB .28 3.1.1. Ảnh chỉ số .29 3.1.2. Ảnh biểu diễn theo độ sáng 29 3.1.3. Ảnh nhị phân 30 3.1.4. Ảnh RGB 30 3.2. Các hàm xử lý ảnh cơ bản trong MATLAB .31 3.2.1. Đổi màu và loại ảnh .31 3.2.2. Xử lý hình học 32 3.2.3. Lọc nhiễu 32 3.2.4. Phân tích ảnh 32 3.2.5. Biến đổi ảnh 32 CHƯƠNG III: SƠ LƯỢC CƠ CHẾ HOẠT ĐỘNG CỦA MÔ HÌNH XE THÔNG MINH 33 1. Sơ đồ tổng quát .33 2. Cơ chế hoạt động 33 CHƯƠNG IV: SƠ ĐỒ NGUYÊN LÝ VÀ NGUYÊN LÝ HOẠT ĐỘNG CỦA MẠCH .34 1. Sơ đồ nguyên lý .34 2. Nguyên lý hoạt động 34 PHẦN B: PHẦN MỀM ĐIỀU KHIỂN MÔ HÌNH XE THÔNG MINH 36 1. Lưu đồ giải thuật 37 2. Qúa trình xử lý ảnh 38 2.1. Xử lý video giao tiếp qua Webcam chụp lại ảnh trên mô hình .38 2.2. Chuyển ảnh màu dạng RGB thành ảnh mức xám .39 2.3. Tách biên và loại bỏ các thành phần nhiễu .40 2.4. Làm phẳng nhị phân và lấp đầy các lỗ trống 41 2.5. Xác định trọng tâm, biên, tính khoảng cách 41 2.6. Xác định màu của đèn giao thông .42 2.7. Cửa sổ giao diện 43 PHẦN C: KẾT LUẬN .44 PHẦN D: PHỤ LỤC 46 1. Code của Callback .47 2. Chương trình giao tiếp với vi xử lý .55 3. Tài liệu tham khảo .56

doc57 trang | Chia sẻ: lvcdongnoi | Lượt xem: 5356 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Mô hình xe thông minh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TÓM TẮT NỘI DUNG ĐỒ ÁN NỘI DUNG Ø Dùng Matlab nhận dạng trạng thái đèn giao thông là màu gì. Để nhận biết được màu sắc của đèn giao thông cần trải qua 2 bước: Bước 1: Tách biên dạng hình tròn của đèn giao thông. Bước 2: Nhận dạng màu sắc của đèn giao thông trong biên hình tròn đó. Ø Từ Matlab xuất tín hiệu ra Vi Xử Lý (thông qua cổng COM) để điều khiển xe. KẾT QUẢ ĐẠT ĐƯỢC ü Tìm hiểu về các bộ tách biên và sử dụng bộ tách biên Sobel để tách được biên của đèn giao thông. ü Nhận dạng được màu sắc của đèn giao thông (xanh, đỏ). ü Xuất được tín hiệu từ Matlab ra cổng COM để điều khiển Vi Xử Lý rồi từ Vi Xử Lý điều khiển xe (đèn xanh xe chạy, đèn đỏ xe dừng). HẠN CHẾ Xe chạy được khoảng cách không xa chỉ khoảng 4m. NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Ngày……tháng……năm…….. Giáo viên hướng dẫn Ký tên NHẬN XÉT CỦA HỘI ĐỒNG GIÁM KHẢO Ngày……tháng……năm…….. Hội đồng Ký tên LỜI CẢM ƠN Chúng em xin chân thành cảm ơn tất cả các thầy cô trường Đại Học Công Nghiệp TP Hồ Chí Minh đã dạy dỗ, chỉ bảo chúng em trong suốt thời gian qua. Chúng em xin chân thành cảm ơn thầy Trần Văn Trinh đã tận tình hướng dẫn chúng em trong thời gian làm Đồ Án 2B. Chúng tôi xin cảm ơn tất cả bạn bè đã giúp đỡ và cùng chúng tôi nghiên cứu học tập. Nhóm sinh viên thực hiện: Lê Văn Hoan Nguyễn Thành Luân MỤC LỤC PHẦN A: LÝ THUYẾT TỔNG QUAN..................Trang 9 CHƯƠNG I: THUẬT TOÁN TÁCH BIÊN VÀ NHẬN DẠNG MÀU ..................……………………………………………...10 Giới thiệu về các bộ tách biên …………………………………….10 1.1. Cơ sở của việc tách biên………………………………………….10 1.2. Bộ tách biên Sobel………………………………………………..12 1.3. Bộ tách biên Canny……………………………………………….14 1.4. Bộ tách biên Prewitt………………………………………………16 1.5. Bộ tách biên Roberts……………………………………………...17 1.6. Bộ tách biên Laplace của hàm Gauss……………………………..17 Phương pháp nhận dạng màu…………………………………….18 2.1 Mô hình màu RGB………………………………….……………..18 2.2 Mô hình màu CMY…….………………………………………….19 2.3 Mô hình màu CYMK……………………………………………...19 2.4 Mô hình màu HSV………………………………………………...20 2.5 Các kỹ thuật tái hiện ảnh………………………………………......20 CHƯƠNG II: TÌM HIỂU CHUNG VỀ PHẦN MỀM MATLAB……………………………………………………................22 1. Tạo giao diện người dùng nhờ công cụ GUIDE của MATLAB………………………………………………………………..22 2. Toolbox bắt ảnh…………………………………………..................25 2.1. Nhiệm vụ của Toolbox…………………………………………...25 2.2. Các bước thu thập ảnh cơ bản của Toolbox………………….......25 3. Toolbox xử lý ảnh…………………………………………………...28 3.1. Các loại ảnh trong MATLAB…………………………………….28 3.1.1. Ảnh chỉ số………………………………………………….29 3.1.2. Ảnh biểu diễn theo độ sáng………………………………..29 3.1.3. Ảnh nhị phân………………………………………………30 3.1.4. Ảnh RGB…………………………………………………..30 3.2. Các hàm xử lý ảnh cơ bản trong MATLAB……………………...31 3.2.1. Đổi màu và loại ảnh……………………………………….31 3.2.2. Xử lý hình học……………………………………………..32 3.2.3. Lọc nhiễu…………………………………………………..32 3.2.4. Phân tích ảnh………………………………………………32 3.2.5. Biến đổi ảnh………………………………………………..32 CHƯƠNG III: SƠ LƯỢC CƠ CHẾ HOẠT ĐỘNG CỦA MÔ HÌNH XE THÔNG MINH………………............................33 1. Sơ đồ tổng quát……………………………………………………...33 2. Cơ chế hoạt động……………………………………………………33 CHƯƠNG IV: SƠ ĐỒ NGUYÊN LÝ VÀ NGUYÊN LÝ HOẠT ĐỘNG CỦA MẠCH……………………………………...34 1. Sơ đồ nguyên lý……………………………………………………...34 2. Nguyên lý hoạt động………………………………………………..34 PHẦN B: PHẦN MỀM ĐIỀU KHIỂN MÔ HÌNH XE THÔNG MINH…………………………………………..36 1. Lưu đồ giải thuật………………………………………………..37 2. Qúa trình xử lý ảnh…………………………………………………38 2.1. Xử lý video giao tiếp qua Webcam chụp lại ảnh trên mô hình…...38 2.2. Chuyển ảnh màu dạng RGB thành ảnh mức xám………………...39 2.3. Tách biên và loại bỏ các thành phần nhiễu……………………….40 2.4. Làm phẳng nhị phân và lấp đầy các lỗ trống……………………..41 2.5. Xác định trọng tâm, biên, tính khoảng cách………………………41 2.6. Xác định màu của đèn giao thông………………………………...42 2.7. Cửa sổ giao diện…………………………………………………..43 PHẦN C: KẾT LUẬN…………………………………….....44 PHẦN D: PHỤ LỤC…………………………………………46 Code của Callback………………………………………………….47 Chương trình giao tiếp với vi xử lý……………………………….55 Tài liệu tham khảo………………………………………………….56 LỜI MỞ ĐẦU Hiện nay đất nước ta đang chuyển mình theo sự phát triển chung của thế giới bằng việc Việt Nam đã gia nhập tổ chức kinh tế thế giới WTO. Đây là một bước ngoặt quan trọng nhằm thúc đẩy nền kinh tế nước ta phát triển sánh vai với các cường quốc năm châu.Với tốc độ phát triển như hiện nay chúng ta không chỉ cần một lượng lao động khổng lồ mà còn đòi hỏi có trình độ, chất lượng tay nghề, kỹ thuật lao động và thiết bị sản xuất. Mức độ phát triển của khoa học kỹ thuật ngày càng cao thì vấn đề tự động hoá ngày càng được chú trọng. Những năm gần đây MATLAB và các Toolbox kèm theo đã trở thành công cụ không thể thiếu của các cán bộ nghiên cứu giảng dạy, sinh viên đại học, cao học và nghiên cứu sinh thuộc các ngành khoa học kỹ thuật nước ta. Điều này có được là do MATLAB cung cấp một công cụ tính toán và lập trình bậc cao dễ sử dụng hiệu quả và thân thiện với người dùng. MATLAB cung cấp cho người sử dụng các phương thức để thực hiện các mô phỏng trên máy tính, ngoài ra MATLAB còn có thể giao tiếp với Vi Xử Lý, PLC,…cùng với các thiết bị phần cứng để thực hiện các ứng dụng vào thực tế. Vì vậy trong phạm vi hiểu biết của mình, chúng em đã tìm hiểu và thực hiện đề tài “Mô hình xe thông minh”. Đây là sự kết hợp giữa MATLAB và Vi Xử Lý để điều khiển xe không người lái (xe thông minh). Trong quá trình thực hiện Đồ Án 2B cùng với sự nỗ lực của bản thân và áp dụng những kiến thức được trang bị ở trường, chúng em đã có nhiều cố gắng để thực hiện tốt Đồ Án. Tuy nhiên do kiến thức và khả năng còn có hạn nên khó tránh khỏi những thiếu sót. Chúng em rất mong nhận được sự thông cảm và đóng góp ý kiến của các thầy cô trong hội đồng giám khảo để Đồ Án của chúng em được hoàn chỉnh hơn. Xin chân thành cảm ơn. TP. Hồ Chí Minh, ngày 03 tháng 11 năm 2010 Nhóm sinh viên thực hiện: Lê Văn Hoan Nguyễn Thành Luân CHƯƠNG I THUẬT TOÁN TÁCH BIÊN VÀ NHẬN DẠNG MÀU 1. GIỚI THIỆU VỀ CÁC BỘ TÁCH BIÊN 1.1. Cơ sở của việc tách biên Biên là tập hợp những pixel (nằm trên đường biên giới giữa 2 vùng) liên kết với nhau. Một biên lý tưởng có các thuộc tính của mô hình ở hình 1.1. Hình 1.1: Mô hình biên lý tưởng Tuy nhiên trong thực tế các yếu tố như là chất lượng của hệ thống thu nhận hình ảnh, tốc độ lấy mẫu, điều kiện chiếu sáng của mỗi bức ảnh,… ảnh hưởng đến chất lượng của hình ảnh. Vì vậy kết quả là biên giống với một đoạn dốc được thể hiện trong hình 1.2. Hình 1.2: Mô hình biên trong thực tế Vì vậy chúng ta không bao giờ có một đường biên mảnh (có độ dày một pixel). Thay vào đó, một điểm biên bây giờ là một điểm bất kì chứa trong đoạn dốc và biên là tập hợp những điểm liên thông. Độ dày của đường biên được xác định bởi chiều dài của đoạn dốc, khi biên biến đổi từ đầu đến cuối mức xám. độ dày của biên Hình 1.3: Mô hình miêu tả độ dày của biên Hình 1.4 cho thấy đạo hàm bậc 1 của biên Hình 1.4: Mô hình miêu tả đạo hàm bậc 1 của biên Từ hình vẽ ta thấy đạo hàm bậc 1 có giá trị 1 tại nơi biên được tách và giá trị 0 tại nơi biên không được tách. Vì vậy độ lớn của đạo hàm bậc 1 có thể được sử dụng để phát hiện ra dấu hiệu của một biên tại một điểm trong hình (nghĩa là xác định điểm đó có nằm trên dốc không). 1.2. Bộ tách biên Sobel Bộ tách biên Sobel sử dụng mặt lạ Sobel để tính các đạo hàm bậc nhất Gx và Gy , nói cách khác đạo hàm tại điểm tâm trong một lân cận được tính theo bộ tách Sobel Khi đó vị trí (x,y) là pixel biên nếu g ³ T, trong đó T là một ngưỡng được chỉ định. Ví dụ: bw = edge (f, ‘sobel’, 10); % T = 10 imshow(bw); Để tính Gx và Gy ta dựa vào mặt lạ Sobel Cú pháp của bộ tách biên Sobel [g, t] = edge (f, ‘sobel’, T, dir) Trong đó: f là ảnh đầu vào. g là ảnh logic chứa giá trị 1 tại những nơi biên được tách và chứa giá trị 0 tại những nơi biên không được tách. T =t là ngưỡng được chỉ định (T=10, 20,….). dir là hướng cần tách biên: ‘ngang’, ‘dọc’ hoặc ‘chéo’. Ví dụ: Ảnh chúng ta cần tách biên là một ma trận có dạng: 1 1 1 A = 0 1 1 1 1 0 Ta tính được: |Gx1| = |3 – 4| = 1; |Gy1| = |3 – 2| = 1 Mặt lạ Sobel: |Gx2| = 2; |Gy2| = 12 Khi đó Gx = Max (Gx1, Gx2) Gy = Max (Gy1, Gy2) => g = (22 + 122)1/2 = (148) 1/2 1.3. Bộ tách biên Canny Bộ tách biên Canny có các đặc tính cơ bản: tìm biên bằng cách tìm các cực đại địa phương của gradient f(x,y). Gradient được tính toán dùng đạo hàm của bộ lọc Gauss. Phương pháp dùng hai ngưỡng để tách biên mạnh và yếu, gộp các biên yếu ở ngõ ra chỉ khi chúng được kết nối với các biên mạnh. Do đó phương pháp này thích hợp để tách các biên yếu thực sự. Hình 1.5: Ảnh đã được tách biên Có thể tóm tắt phương pháp tách biên bằng bộ tách biên Canny như sau: ¨ Ảnh được làm trơn bằng cách sử dụng một bộ lọc Gauss với độ lệch chuẩn s để làm giảm nhiễu. Xét hàm Gauss: Trong đó s là độ lệch chuẩn Hàm làm trơn này khi chập với một ảnh sẽ làm mờ ảnh, độ mờ được xác định bởi s. ¨ Tách biên là phương pháp gián đoạn các giá trị cường độ. Sự gián đoạn được tính bằng cách sử dụng đạo hàm bậc nhất. Đạo hàm bậc nhất lựa chọn trong xử lý ảnh là gradient (độ dốc). Gradient của hàm 2-D f(x,y) được định nghĩa dưới dạng vector Biên độ của vector này: Đặc tính cơ bản của vector gradient là các điểm của nó là những hướng có tỷ lệ thay đổi hàm f tại toạ độ (x,y) lớn nhất. Góc xảy ra tỷ lệ thay đổi lớn nhất là: ¨ Điểm biên được xác định tăng lên đến các đỉnh trong gradient biên độ ảnh. Sau thuật toán tìm đỉnh của các đỉnh này và đặt giá trị 0 vào tất cả các pixel không nằm trên đỉnh. Các pixel đỉnh được đặt bằng hai ngưỡng T1 và T2. Các pixel đỉnh lớn hơn T2 được gọi là các pixel biên “mạnh”. Các pixel đỉnh nằm giữa T1 và T2 được gọi là các pixel biên “yếu”. ¨ Cuối cùng thuật toán thực hiện biên kết nối bằng cách kết hợp các pixel “yếu” với các pixel mạnh. Cú pháp của bộ tách biên Canny là: [g, t] = edge (f, ‘canny’, T, sigma) Trong đó: f là ảnh đưa vào để tách biên T là một vector, T = [T1 T2] sigma là độ lệch chuẩn có giá trị mặc định là 1 g là ảnh sau khi tách biên 1.4. Bộ tách biên Prewitt Bộ tách biên Prewitt sử dụng mặt nạ Prewitt như hình bên dưới xấp xỉ phương pháp số theo đạo hàm bậc nhất Gx, Gy. Cú pháp gọi hàm: [g, t] = edge (f, ‘prewitt’, T, dir) Tham số này đồng nhất với tham số Sobel. Bộ tách Prewitt đơn giản hơn so với bộ tách biên Sobel nhưng nó dễ sinh ra nhiễu hơn so với bộ tách biên Sobel. Việc tính toán các giá trị hoàn toàn giống với bộ tách biên Sobel. 1.5. Bộ tách biên Roberts Bộ tách biên Roberts sử dụng mặt nạ Roberts như hình bên dưới xấp xỉ phương pháp số theo đạo hàm bậc nhất Gx, Gy. Cú pháp gọi hàm: [g, t] = edge (f, ‘roberts’, T, dir) Tham số này đồng nhất với tham số Sobel. Bộ tách Roberts là một trong những bộ tách biên xưa nhất trong xử lý ảnh số và cũng là bộ tách biên đơn giản nhất. 1.6. Bộ tách biên Laplace của hàm Gauss (LoG) Xét hàm Gauss Trong đó: và σ là độ lệch chuẩn. Đây là một hàm trơn khi nó chập với một ảnh nó sẽ làm mờ ảnh. Độ mờ được xác định bởi giá trị của σ. Toán tử Laplace của hàm này (đạo hàm bậc hai theo r). Với những lý do rõ ràng, hàm này gọi là toán tử Laplace của hàm Gauss (LoG). Vì đạo hàm bậc hai là toán tử tuyến tính chập với một hàm ảnh giống như chập với hàm trơn và sau đó tính kết quả của toán tử Laplace. Đây là chìa khoá khái niệm cơ bản của bộ tách LoG. Chúng ta chập ảnh bằng biết nó có hai tác động: làm mịn (giảm nhiễu) và nó tính toán toán tử Laplace, làm cong một biên ảnh kép, định vị các biên sau đó tìm các điểm giao zero giữa các biên kép. Cú pháp tổng quát là: [g , t ] = edge(f, ‘log’, T, sigma) Trong đó: sigma là độ lệch chuẩn, giá trị mặc định của sigma là 2, các tham số còn lại giống phần trước. Những biên không lớn hơn T ta bỏ qua. Nếu T không được cho hoặc rỗng, edge chọn giá trị một cách tự động. 2. PHƯƠNG PHÁP NHẬN DẠNG MÀU Là phương pháp diễn giải các đặc tính và tác động của màu trong ngữ cảnh nhất định. Không có mô hình màu nào là đầy đủ cho mọi khía cạnh của màu, người ta sử dụng các mô hình màu khác nhau để mô tả các tính chất được nhận biết khác nhau của màu. Thí dụ: + Mô hình màu RGB: ánh sáng Red, Green và Blue ứng dụng cho màn hình, TV. + Mô hình HSV: Nhận thức của con người. + Mô hình CYK: Máy in. 2.1. Mô hình màu RGB - Mọi màu được biểu diễn bởi không gian màu RGB đều là sự pha trộn của 3 thành phần màu cơ bản (Red, Green, Blue). - Mô hình màu RGB được biểu diễn bởi khối lập phương với các trục R, G, B. Nhận xét • Mô hình này không thể biểu diễn mọi màu trong phổ nhìn thấy • Đủ cho các ứng dụng máy tính • Màn hình máy tính và TV sử dụng mô hình này • Được sử dụng rộng rãi nhất • Đơn giản Xám hóa ảnh màu RGB: Màu = aR + bG + cB Thông thường người ta sử dụng công thức màu = 0.299R + 0.587G + 0.114B 2.2. Mô hình màu CMY - Gồm 3 thành phần màu cơ bản cyan, magenta, yellow. Là bù màu của không gian GRB. Mối quan hệ giữa 2 không gian: màu ban đầu + màu bổ túc => trắng R + C => W Y + B => W M + B => W Phương pháp pha trộn màu trong cuộc sống 2.3. Mô hình màu CMYK Là sự mở rộng mô hình màu CMK bằng cách thêm vào thành phần màu Black (K). Bởi vì với thành phần màu Black tinh khiết sẽ cho ta độ tương phản cao hơn. Mối quan hệ CMY và CMYK K = min(C, M, Y) C = C - K M = M - K Y = Y - K 2.4. Mô hình màu HSV • Thay vì chọn các phần tử RGB để có màu mong muốn, người ta chọn các tham số màu: Hue, Saturation và Value (HSV). • Mô hình HSV suy diễn từ mô hình RGB: hãy quan sát hình hộp RGB theo đường chéo từ White đến Black (gốc) -> ta có hình lục giác, sử dụng làm đỉnh hình nón HSV. • Hue: Bước sóng gốc của ánh sáng. Trong mô hình Hue được biểu diễn bằng góc từ 00 đến 3600 • Value: Cường độ hay độ chói ánh sáng. Value có giá trị [0, 1], V=0 -> màu đen. Đỉnh lục giác có cường độ màu cực đại. • Saturation: Thước đo độ tinh khiết ánh sáng gốc. S trong khoảng [0, 1]. Biểu diễn tỷ lệ độ tinh khiết của màu sẽ chọn với độ tinh khiết cực đại. Nhận xét Mô hình HSV trực giác hơn mô hình RGB. Bắt đầu từ Hue (H cho trước và V=1, S=1). thay đổi S: Bổ sung hay bớt trắng, thay đổi V: Bổ sung hay bớt đen cho đến khi có màu mong muốn. 2.5. Các kỹ thuật tái hiện ảnh - Kỹ thuật tái hiện ảnh được dùng khi ta cần hiển thị lại ảnh trên một số thiết bị vật lý không có khả năng hiện lại hết các mức xám có thật của ảnh số: màn hình đơn sắc, máy in, máy vẽ. * Kỹ thuật phân ngưỡng (Thresholding) Kỹ thuật này đặt ngưỡng để hiển thị các tông màu liên tục. Giá trị của ngưỡng sẽ quyết định điểm có được hiển thị hay không, và hiển thị như thế nào.  Tái hiện 2 màu: dùng cho ảnh 256 mức xám, bản chất của phương pháp này là ngưỡng dựa vào lược đồ xám. Ngưỡng chọn ở đây là 127. Cho ảnh số S(M,N), khi đó  Tái hiện 4 màu: Với qui định cách hiện 4 màu như sau: * Kỹ thuật Dithering Kỹ thuật này sử dụng một ma trận mẫu gọi là ma trận Dither. - Mỗi phần tử của ảnh gốc sẽ được so sánh với phần tử tương ứng của ma trận Dither. Nếu lớn hơn, phần tử ở đầu ra sẽ sáng và ngược lại. - Ma trận Dither cấp 2n sẽ được tính như sau: CHƯƠNG II TÌM HIỂU VỀ PHẦN MỀM MATLAB TẠO GIAO DIỆN NGƯỜI DÙNG NHỜ CÔNG CỤ GUIDE CỦA MATLAB Giao diện người dùng (graphical user interface GUI) cho phép thực hiện các lệnh MATLAB thông qua các menu, nút nhấn,… tương tự như các ngôn ngữ Visual Basic, Delphi. Lập trình GUI được thực hiện nhờ công cụ GUIDE (GUI Development Environnment) hoặc bằng cách soạn thảo một file m. Từ >> gõ guide, cửa sổ GUIDE Quick Start xuất hiện: Có thể chọn các mẫu giao diện thiết kế sẵn hay nhấn OK để chọn GUI trống. Sau đây là cửa sổ biên soạn GUI: Vùng bên trái chứa danh sách thành phần của đối tượng, vùng có ô lưới là vùng hiển thị - nơi đặt các component, bấm chuột trái vào component muốn tạo, sau đó đưa chuột ra vùng layout nơi muốn đặt component, bấm chuột trái dùng kỹ thuật kéo chuột để chọn kích thước component. Các component mà GUI cho phép là: * Axes: vẽ hệ trục. * Check box: là hộp kiểm tra cho phép đưa vào các chọn lựa khi bấm chuột vào đó. * Edit Text: là hộp văn bản đưa chuỗi ký tự vào đó. * Frame: khung bao một vùng cửa sổ hình. * List box: gồm một văn bản các mục để chọn lựa. * Pop-up menu: menu sổ xuống trình bày một bảng các chọn lựa khi nhấp chuột vào đó. * Push button (nút nhấn): phát sinh một hành động nào đó khi nhấp chuột. * Radio button: tương tự như Check box nhưng chỉ chọn một. * Slider (con trượt): dùng để đưa giá trị vào trong một tầm giới hạn. * Static Text: dòng văn bản dùng để đặt nhãn, tiêu đề, hướng dẫn. * Toggle button (nút bật): giống push button nhưng có hiển thị trạng thái thay đổi mỗi khi nhấn. * Popup Menu: tạo menu. Bấm kép chuột vào component trong vùng layout để soạn tính chất của component, ví dụ bấm kép chuột vào Push button sẽ hiện ra cửa sổ Property Inspector như sau: Cửa sổ Property Inspector có rất nhiều thuộc tính, sau đây là các thuộc tính cơ bản nhất: · Tag: Tên mà ta gắn cho component, ví dụ pushbutton-start. · BackgroundColor: Màu nền của component. · ForegroundColor: Màu chữ trên component. · FontName, FontAngle, FontSize, FontWeight: Các đặc tính của font chữ trên component. · String: Văn bản hiển thị trên component. Trong trường hợp muốn sử dụng font tiếng Việt ví dụ như VNI-Times ta có thể chọn FontName phù hợp, nhưng thường không thể đánh trực tiếp ký tự có dấu, ta có thể soạn văn bản tiếng Việt trong Word sau đó copy và paste vào string trong Property Inspector, lúc đó các ký tự tiếng Việt sẽ hiện ra không đúng trên layout editor nhưng khi chạy chương trình thì sẽ hiển thị đúng. · Enable: Cho phép component hoạt động hay không. · Visible: Hiển thị component hay không. Quan trọng nhất đối với các component là callback tức là các hàm con mà file m sẽ gọi khi tác động vào component, ví dụ khi bấm chuột vào pushbutton, togglebutton, di chuyển con trượt của slider hay khi viết văn bản vào EditText rồi bấm Enter. Soạn thảo các callback: ở cửa sổ soạn thảo layout editor nhấp chuột phải vào component muốn soạn thảo sau đó chọn View Callbacks -> callback ta sẽ vào màn hình soạn thảo callback cho component đó (Lưu ý rằng các dòng lệnh sẽ được viết sau dòng “function tên component_Callback (hobject, eventdata, handles)”) Sau khi soạn thảo hoàn tất và lưu, MATLAB sẽ lưu hai file có cùng tên nhưng khác nhau về phần mở rộng: File có phần mở rộng .fig chứa nội dung của giao diện. File có phần mở rộng .m chứa những đoạn mã liên quan đến giao diện. TOOLBOX BẮT ẢNH (Image Acquisition Toolbox) 2.1. Nhiệm vụ của Toolbox Image Acquisition Toolbox là tập hợp các hàm của MATLAB có nhiệm vụ thu thập hình ảnh số từ các thiết bị thu hình. Cụ thể là: v Thu thập hình ảnh từ các thiết bị thu hình khác nhau, từ loại chuyên dụng đến loại rẻ tiền như Webcam (giao tiếp USB). v Trình chiếu (preview) luồng dữ liệu video từ thiết bị thu hình. v Trích hình ảnh từ luồng dữ liệu video. v Thiết lập các callback cho các sự kiện khác nhau. v Chuyển dữ liệu hình ảnh vào không gian workspace của MATLAB để xử lý ảnh tiếp theo. 2.2. Các bước thu thập hình ảnh cơ bản với Toolbox Bước 1: Gắn thiết bị thu hình vào máy tính và cài đặt driver điều khiển Ø Gắn thiết bị thu hình vào máy tính. Ø Cài đặt driver (trình điều khiển) cho thiết bị (được cho bởi nhà sản xuất). Ø Xem thử hình ảnh video hiện trên máy tính thông qua phần mềm của nhà sản xuất. Ø Khởi động MATLAB Bước 2: Chỉ định thông tin phần cứng: Ø Ta cần chỉ định cho MATLAB biết phần cứng nào dùng để lấy dữ liệu (vì có thể có nhiều camera kết nối với PC). Gõ lệnh imaqhwinfo để biết tên các loại thiết bị có thể dùng. Tên Loại thiết bị ‘coreco’ Thiết bị của công ty coreco ‘DCAM’ Các thiết bị dùng chuẩn IEEE 1394 ‘dt’ Các thiết bị của Data Translation ‘Matrox’ Các thiết bị của hãng Matrox ‘winvideo’ Các thiết bị dùng chuẩn Windows Driver Model (WDM) hoặc Video for Windows (VFW). Bao gồm các loại USB WEBCAM và camera IEEE 1394 Chỉ định thiết bị: Tuỳ vào loại thiết bị (adaptor name), mỗi thiết bị cùng loại gắn vào PC được đánh số ID, thiết bị thứ nhất có deviceID = 1, thiết bị thứ hai có deviceID = 2,… Để liệt kê xem loại winvideo có bao nhiêu thiết bị gắn vào máy, ta cũng dùng lệnh imaqhwinfor với đối số là winvideo >>imaqhwinfo(‘winvideo’) ans = AdaptorD11Name: [1x81 char] AdaptorD11Version: ‘2.1 (R2007a)’ AdaptorName: ‘winvideo’ DeviceIDs: { [1] } DeviceInfo: [1x1 struct] Có một thiết bị với DeviceID là 1. Ta có thể tìm hiểu thêm thông tin về thiết bị này. >>imaqhwinfo(‘winvideo’,1) ans= DefaultFormat: ‘RGB24_320x240’ DeviceFileSupported: 0 DeviceName: ‘USB PC Camera-168’ DeviceID: 1 ObjectConstructor: [1x25 char] SupportedFormats: {1x14 cell} Đây là Webcam đã gắn vào máy để làm đề tài này. Bước 3: Tạo đối tượng đại diện cho luồng dữ liệu video Để tạo luồng dữ liệu video ta dùng lệnh videoinput. Ví dụ: >>vid = videoinput(‘winvideo’,1) Summary of Video Input Object Using ‘USB PC Camera-168’. Acquisition Source(s): input1 is available. Acquisition Parameters: ‘input1’ is the current selected source. 10 frames per trigger using the selected source. ‘RGB24_320x240’ video data to be logged upon START. Grabbing first of every 1 frame(s). Log data to ‘memory’ on trigger. Trigger Parameters: 1 ‘immediate’ trigger(s) on START. Status: Waiting for START. 0 frames acquired since starting. 0 frames available for GETDATA. Bước 4: Hiển thị luồng video trên màn hình để xem thử Để xem trước luồng dữ liệu video ta dùng lệnh preview. Ví dụ: preview(vid) Màn hình lúc này hiện lên cửa sổ video của đối tượng vid Để kết thúc xem ta dùng lệnh stoppreview hoặc để đóng cửa sổ preview ta dùng lệnh closepreview(vid). Bước 5: Lấy một khung ảnh và lưu thành file đồ hoạ. Để lấy một ảnh vào xử lý ta dùng lệnh getsnapshot. Để lưu ảnh thành file đồ hoạ ta dùng lệnh imwrite. Ví dụ: hinh = getsnapshot (vid); imwrite (hinh, ‘d.jpg’); Bước 6: Làm sạch bộ nhớ Sau khi lấy dữ liệu hình ảnh ta có thể giải phóng bớt bộ nhớ bằng các lệnh sau: delete(vid) clear close(gcf) TOOLBOX XỬ LÝ ẢNH (Image Processing Toolbox) Có nhiều loại file ảnh như: * BMP (Microsofl Windows Bitmap) * HDF (Hierarchical Data Format) * ICO (Windows Icon Resources) * JPG, JPEG (Joint Photographic Experts Group) * PCX (Paintbrush) * PNG (Portable Network Graphics) * TIFF (Tagged Image File Format) * XWD (X Window Dump) Sau đây liệt kê một số hàm đọc và lưu ảnh: Hàm Mục đích axis Vẽ trục image, imshow Hiển thị ảnh imagesc Sắp xếp dữ liệu và hiển thị imread Đọc ảnh từ file đồ hoạ immovie Tạo phim từ nhiều loạt nhiều khuôn hình imwrite Cất ảnh vào file đồ hoạ imfinfo Lấy thông tin ảnh từ file ind2rgb Đổi ảnh có chỉ số sang ảnh RGB 3.1. Các loại ảnh trong MATLAB MATLAB coi ảnh như một ma trận hai chiều, mỗi phần tử là một phần tử hình pixel, do đó ta có thể xử lý hình như đối với ma trận, các phần tử ma trận có thể là double (64 bit), uint 16 (16 bit), uint 8 (8 bit). Có các loại ảnh trong MATLAB như sau: 3.1.1. Ảnh chỉ số Ảnh được biểu diễn bởi hai ma trận, một ma trận dữ liệu ảnh X và một ma trận màu (còn gọi là bản đồ màu). Ma trận có thể là kiểu uint8, uint16 hoặc double. Ma trận màu là một ma trận kích thước m x 3 gồm các thành phần thuộc kiểu double có giá trị trong khoảng [0 1]. Mỗi hàng của ma trận xác định thành phần red, green, blue của một màu trong tổng số m màu được sử dụng trong ảnh. Gía trị của một phần tử trong ma trận dữ liệu ảnh cho biết màu của điểm ảnh đó nằm ở hàng nào trong ma trận màu. Nếu ma trận dữ liệu thuộc kiểu double, giá trị 1 sẽ tương ứng với hàng thứ 1 trong bảng màu, giá trị hai tương ứng với màu ở hàng thứ hai,…Nếu ma trận dữ liệu thuộc kiểu uint8 hoặc uint16, giá trị 0 tương ứng với hàng 1, giá tri 1 tương ứng với hàng 2,…Riêng với kiểu uint16, MATLAB không hỗ trợ đủ các phép toán so với kiểu uint8 nên khi cần xử lý ta cần chuyển sang kiểu dữ liệu uint8 hoặc double bằng các hàm imapprox hoặc im2double. Hình 2.1: Biểu diễn ảnh bằng phương pháp chỉ số 3.1.2. Ảnh biểu diễn theo độ sáng Mỗi ảnh được biểu diễn bởi một ma trận hai chiều, trong đó giá trị của mỗi phần tử chop biết độ sáng (hay mức xám) của điểm ảnh đó. Ma trận này có thể thuộc một trong các kiểu uint8, uint16, hoặc double. Trong đó giá trị nhỏ nhất (0) tương ứng với maùi đen còn giá trị lớn nhất (255 hoặc 65535, hoặc 1 tuỳ kiểu dữ liệu là uint8, uint16, hay double) ứng với màu trắng. Như vậy, ảnh biểu diễn theo kiểu này còn gọi là ảnh “trắng đen” hoặc ảnh gray scale. Hình 2.2: Biểu diễn ảnh theo độ sáng 3.1.3. Ảnh nhị phân Ảnh nhị phân cũng được biểu diễn bởi ma trận hai chiều nhưng thuộc kiểu logical có nghĩa là mỗi điểm ảnh chỉ có thể nhận một trong hai giá trị 0 (đen) hoặc 1 (trắng). Hình 2.3: Ảnh nhị phân 3.1.4. Ảnh RGB Ảnh RGB còn gọi là ảnh “truecolor” do tính trung thực của nó. Ảnh này được biểu diễn bởi một ma trận ba chiều kích thước m x n x 3, với m x n là kích thước ảnh theo pixels. Ma trận này định nghĩa các thành phần màu red, green, blue cho mỗi điểm ảnh, các phần tử của nó có thể thuộc kiểu uint8, uint16, hoặc double. Ví dụ, điểm ảnh ở vị trí (10,5) sẽ có ba thành phần màu được xác định bởi các giá trị (10,5,1), (10,5,2) và (10,5,3). Các file ảnh hiện nay thường sử dụng 8 bit cho một thành phần màu, nghĩa là mất 24 bit cho mỗi điểm ảnh (khoảng 16 triệu màu). Hình 2.4: Biểu diễn ảnh RGB Các hàm xử lý ảnh cơ bản trong MATLAB Đôi khi ảnh bị mờ, không nét, bị nhiễu cần phải xử lý hoặc cần phải tách một chi tiết nào đó ra khỏi ảnh. Sau đây là một số hàm xử lý ảnh cho phép thực hiện các công việc này một cách dễ dàng. Chú ý là các hàm này chỉ thực hiện độc lập, còn muốn thực hiện thời gian thực cần phải dùng các ngôn ngữ lập trình như VB, Delphi, ta cũng có thể biến đổi các hàm xử lý ảnh .m ra hàm .c để giảm bớt thời gian lập trình, còn có một cách để xử lý thời gian thực là lập trình xử lý trong MATLAB, sau đó dùng Toolbox Com Builder biến chương trình thành COM Object rồi ghép vào các ngôn ngữ lập trình. Đổi màu và loại ảnh ¨ rgb2gray: đổi ảnh màu RGB ra ảnh cường độ xám. ¨ gray2ind: đổi ảnh trắng đen (gray scale) thành ảnh indexed. ¨ im2bw: đổi sang ảnh nhị phân. Xử lý hình học ³ imcrop(A), imcrop(A.rec): xén ảnh A theo hình chữ nhật định bởi con chuột hay bởi thông số kèm theo trong hàm. ³ imresize (A, m, mothod): thay đổi kích thước ảnh A theo tỉ lệ m và theo phương pháp nội suy method. ³ imrotate (A, angle, method): quay ảnh A một góc angle và dùng phương pháp nội suy method. 3.2.3. Lọc nhiễu Các hàm lọc nhiễu dùng để tăng chất lượng ảnh. Có các phương pháp lọc tuyến tính, lọc trung vị và lọc thích nghi. P Lọc tuyến tính: pixel ảnh biến đổi là tổ hợp tuyến tính các pixel lân cận của pixel gốc, các hàm thường dùng là conv2 (tích chập), concn, filter2. P Lọc trung vị: là loại lọc phi tuyến, gồm các hàm medfilt2, ordfilt2. P Lọc thích nghi: wiener2. 3.2.4. Phân tích ảnh ç imhist (X, map): vẽ histogram của ảnh chỉ số X theo bảng màu. Cường độ ảnh từ 0 (đen) đến 255 (trắng) được chia thành n khoảng, histogram là đồ thị cho biết số pixel có cường độ nằm trong khoảng tương ứng. ç histeq: cân bằng histogram ảnh cường độ để tăng độ tương phản. ç edge: tách biên ảnh dùng các thuật toán Sobel, Prewitt, Canny, Laplace,… qtdecomp, qtgeblk, qtsetblk: các lệnh dùng trong phân vùng ảnh quadtree. 3.2.5. Biến đổi ảnh ¹ fft2: biến đổi Fourier hai chiều nhanh ¹ ifft2: biến đổi ngược hai chiều nhanh ¹ dct2: biến đổi cosin rời rạc hai chiều ¹ idct2: biến đổi ngược cosin rời rạc CHƯƠNG III SƠ LƯỢC CƠ CHẾ HOẠT ĐỘNG CỦA MÔ HÌNH XE THÔNG MINH 1. SƠ ĐỒ TỔNG QUÁT S Đ Input Ảnh màu Kiểm tra đối tượng có phải là hình tròn? Tách biên Lấy thông tin 3 lớp màu Xác định xem đó là màu gì Đưa tín hiệu đến VXL thông qua cổng COM Output Từ VXL xuất tín hiệu ra điều khiển xe B.1 B.2 B.3 B.4 2. CƠ CHẾ HOẠT ĐỘNG Ảnh được đưa vào để xử lý là ảnh màu của đèn giao thông, ảnh này có được là do Webcam chụp hình đèn giao thông và đưa vào máy tính. Matlab sẽ phân tích và xử lý bằng các hàm của chương trình này. Kết quả sau khi xử lý sẽ tách lấy biên hình tròn và nhận dạng được màu sắc của đèn giao thông đó là màu gì (xanh hay đỏ), công cụ GUI của Matlab dùng để xây dựng giao diện mô phỏng, cuối cùng là xuất tín hiệu ra Vi Xử Lý thông qua cổng COM. Chương trình của Vi Xử Lý sẽ thu nhận tín hiệu đó và điều khiển xe (chạy hoặc dừng). CHƯƠNG IV SƠ ĐỒ NGUYÊN LÝ VÀ NGUYÊN LÝ HOẠT ĐỘNG CỦA MẠCH 1. SƠ ĐỒ NGUYÊN LÝ Hình 4.1: Sơ đồ nguyên lý của mô hình xe thông minh 2. NGUYÊN LÝ HOẠT ĐỘNG Webcam chụp liên tiếp trạng thái của đèn giao thông, nếu đèn giao thông không thay đổi màu sắc thì trạng thái của xe cũng không thay đổi (đang chạy thì chạy tiếp, đang dừng thì tiếp tục dừng). Khi Webcam chụp được đèn đỏ, trạng thái đèn đỏ này được đưa vào làm cơ sở dữ liệu cho MATLAB xử lý rồi xuất tín hiệu cho Vi Xử Lý tiếp tục xử lý thông qua cổng COM, chương trình của Vi Xử Lý sẽ xử lý tín hiệu nhận được rồi xuất mức 1 ra để cho xe đừng. Trong trường hợp Webcam chụp được đèn xanh cũng tương tự, trạng thái đèn xanh đuợc đưa vào làm cơ sở dữ liệu cho MATLAB xử lý rồi xuất tín hiệu cho Vi Xử Lý tiếp tục xử lý thông qua cổng COM, chương trình của Vi Xử Lý sẽ xử lý tín hiệu nhận được rồi xuất mức 0 để cho xe chạy. PHẦN MỀM ĐIỀU KHIỂN MÔ HÌNH XE THÔNG MINH LƯU ĐỒ GIẢI THUẬT Xét trạng thái đèn giao thông Begin Gọi chương trình xử lý Xuất tín hiệu ra điều khiển xe QUÁ TRÌNH XỬ LÝ ẢNH 2.1. Xử lý video giao tiếp qua Webcam vid=videoinput('winvideo',1); hinh=getsnapshot(vid); imwrite(hinh,'d.jpg'); delete(vid); a=imread('d.jpg'); subplot(1,2,2); imshow(a); Ảnh gốc của đèn giao thông 2.2. Chuyển ảnh màu dạng RGB thành ảnh mức xám a=imread('d.jpg'); b=rgb2gray(a); %chuyen thanh anh muc xam c=medfilt2(b); %loc nhieu bang bo loc trung binh d=imadjust(c); % hieu chinh do tuong phan subplot(1,2,2); imshow(d); Ảnh mức xám 2.3. Tách biên và loại bỏ các thành phần nhiễu bw=edge(d,'sobel'); % tach bien imshow(bw); bw = bwareaopen(bw,30); %tach bien theo thong so dat truoc Ảnh đã được tách biên 2.4. Làm phẳng nhị phân và lấp đầy các lỗ trống se = strel('disk',2); bw = imclose(bw,se); bw = imfill(bw,'holes'); imshow(bw); Ảnh đã được lấp đầy các lỗ trống 2.5. Xác định trọng tâm, biên, tính khoảng cách L = bwlabel(bw); s = regionprops(L, 'centroid'); dt = regionprops(L, 'area'); cv = regionprops(L, 'perimeter'); dim = size(s); BW_filled = imfill(bw,'holes'); boundaries = bwboundaries(BW_filled); %xac dinh bien hold on; for k=1:dim(1) b= boundaries{k}; dim = size(b); for i=1:dim(1) khoangcach{k}(1,i) = sqrt ( ( b(i,2) - s(k).Centroid(1) )^2 + ( b(i,1) - s(k).Centroid(2) )^2 ); end a=max(khoangcach{k}); b=min(khoangcach{k}); end 2.6. Xác định màu của đèn giao thông dolech=a-b if dolech < 20 c=imread('d.jpg'); d=imresize(c,[8 8]); % Thay doi kich thuoc anh thao don vi pixcel d1=d(:,:,1); %ma tran mau do d1=reshape(d1',8*8,1); %giam kich thuoc anh de de xu ly d11=sum(d1); d2=d(:,:,2); %ma tran mau xanh duong d2=reshape(d2',8*8,1); d22=sum(d2); d3=d(:,:,3); % ma tran mau xanh la cay d3=reshape(d3',8*8,1); d33=sum(d3); if d11>d22 && d11>d33 disp('mau do'); set(handles.text1,'string','den do'); z=1; else if d22>d11 && d22>d33 disp('mau xanh'); set(handles.text1,'string',' den xanh'); z=2; end end subplot(1,2,2); imshow(c); end 2.7. Cửa sổ giao diện KẾT LUẬN 1. KẾT QUẢ Sau thời gian thực hiện Đồ Án 2B, cùng với sự hướng dẫn tận tình của thầy Trần Văn Trinh, chúng em đã hoàn thành đúng theo thời gian quy định. Để thực hiện được yêu cầu của đề tài, chúng em đã nghiên cứu, tìm hiểu những vấn đề về Matlab, vi xử lý, sự giao tiếp giữa Matlab và vi xử lý,…và những vấn đề khác liên quan đến đề tài. Đối với phần thiết kế và thi công, chúng em đã thực hiện những bước như sau: Lập sơ đồ khối toàn mạch. Thiết kế sơ đồ nguyên lý. Lập lưu đồ giải thuật. Viết chương trình. Làm mạch in, lắp ráp và kiểm tra. 2. HẠN CHẾ Chưa cho phép nhận diện đèn vàng để điều khiển xe chạy chậm. 3. PHƯƠNG HƯỚNG PHÁT TRIỂN Để đề tài này tăng thêm hiệu quả sử dụng cần thiết kế một mô hình xe thông minh có quy mô lớn hơn, chạy ổn định hơn, đạt được những tiêu chuẩn cao hơn. Đó là những yêu cầu mà chúng em chưa có điều kiện thực hiện được, mong rằng những yêu cầu đó sẽ được thực hiện trong thời gian không xa để tạo ra một sản phẩm có chất lượng tốt hơn. Sau cùng, một lần nữa chúng em xin chân thành cảm ơn thầy Trần Văn Trinh cùng các thầy cô trong khoa Công Nghệ Điện Tử đã tận tình hướng dẫn và dẫn dắt chúng em trong suốt thời gian học tập vừa qua. Xin chân thành cảm ơn các bạn cùng lớp đã đóng góp những ý kiến quý báu để đề tài này hoàn thành tốt đẹp. CODE CỦA CALLBACK function varargout = HINH(varargin) % HINH M-file for HINH.fig % HINH, by itself, creates a new HINH or raises the existing % singleton*. % H = HINH returns the handle to a new HINH or the handle to % the existing singleton*. % HINH('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in HINH.M with the given input arguments. % % HINH('Property','Value',...) creates a new HINH or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before HINH_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to HINH_OpeningFcn via varargin. % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help HINH % Last Modified by GUIDE v2.5 25-Oct-2009 20:14:31 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @HINH_OpeningFcn, ... 'gui_OutputFcn', @HINH_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before HINH is made visible. function HINH_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to HINH (see VARARGIN) % Choose default command line output for HINH handles.output = hObject; % Update handles structure guidata(hObject, handles); global z; global com; global ketnoi; ketnoi=0; % UIWAIT makes HINH wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = HINH_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes on button press in CHUP_HINH. function CHUP_HINH_Callback(hObject, eventdata, handles) % hObject handle to CHUP_HINH (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) vid=videoinput('winvideo',1); hinh=getsnapshot(vid); imwrite(hinh,'d.jpg'); delete(vid); a=imread('d.jpg'); subplot(3,3,6); imshow(a); % --- Executes on button press in TACH_BIEN. function TACH_BIEN_Callback(hObject, eventdata, handles) % hObject handle to TACH_BIEN (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) a=imread('d.jpg'); f = imcrop(a, [75 30 190 180]); T=0; [VG_S,A_S,PPG_S]=colorgrad(f,'sobel',T); title(''); hold on; [VG_P,A_P,PPG_P]=colorgrad(f,'prewitt',T); subplot(3,3,5); imshow(VG_P); title('Anh tach bien'); hold on; % --- Executes on button press in HIEN_THI. function HIEN_THI_Callback(hObject, eventdata, handles) % hObject handle to HIEN_THI (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global z; a=imread('d.jpg'); a=rgb2gray(a); bw=edge(a,'sobel'); imshow(bw); bw = bwareaopen(bw,30); se = strel('disk',2); bw = imclose(bw,se); bw = imfill(bw,'holes'); imshow(bw); L = bwlabel(bw); s = regionprops(L, 'centroid'); dt = regionprops(L, 'area'); cv = regionprops(L, 'perimeter'); dim = size(s); BW_filled = imfill(bw,'holes'); boundaries = bwboundaries(BW_filled); hold on; for k=1:dim(1) b= boundaries{k}; dim = size(b); for i=1:dim(1) khoangcach{k}(1,i) = sqrt ( ( b(i,2) - s(k).Centroid(1) )^2 + sqrt( b(i,1) - s(k).Centroid(2) )^2 ); end a=max(khoangcach{k}); b=min(khoangcach{k}); end dolech=a-b if dolech < 20 c=imread('d.jpg'); d=imresize(c,[8 8]); d1=d(:,:,1); d1=reshape(d1',8*8,1); d11=sum(d1); d2=d(:,:,2); d2=reshape(d2',8*8,1); d22=sum(d2); d3=d(:,:,3); d3=reshape(d3',8*8,1); d33=sum(d3); if d11>d22 && d11>d33 disp('mau do'); set(handles.text4,'string','den do'); z=1; else if d22>d11 && d22>d33 disp('mau xanh'); set(handles.text4,'string',' den xanh'); z=2; end end subplot(3,3,4); imshow(c); end % --- Executes on button press in GIAO_TIEP. function GIAO_TIEP_Callback(hObject, eventdata, handles) % hObject handle to GIAO_TIEP (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global com ketnoi z; if ketnoi==0 com=serial('COM1'); set(com,'baudrate',1200); com.DataBits=8; com.Parity= 'none'; com.StopBit=1; com.BytesAvailableFcnCount=1; com.Terminator='LF'; com.ReadAsyncMode='continuous'; com.BytesAvailableFcnMode= 'Byte'; %com.BytesAvailableFcn=@TU_DONG Callback; fopen(com); ketnoi=1; if z==1 fwrite(com,1); elseif z==2 fwrite(com,0); end end % --- Executes on button press in NGAT_GIAO_TIEP. function NGAT_GIAO_TIEP_Callback(hObject, eventdata, handles) % hObject handle to NGAT_GIAO_TIEP (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global com ketnoi; if ketnoi==1 ketnoi=0; fclose(com); delete(com); clear com; end % --- Executes on button press in TU_DONG. function TU_DONG_Callback(hObject, eventdata, handles) % hObject handle to TU_DONG (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global com; n=1; while n<20 n=n+1; vid=videoinput('winvideo',1); hinh=getsnapshot(vid); imwrite(hinh,'d.jpg');pause(1); delete(vid); a=imread('d.jpg'); subplot(3,3,6); imshow(a); a=imread('d.jpg'); f= imcrop(a, [75 30 190 180]); T=0; [VG_S,A_S,PPG_S]=colorgrad(f,'sobel',T); title(''); hold on; [VG_P,A_P,PPG_P]=colorgrad(f,'prewitt',T); subplot(3,3,5); imshow(VG_P); title('Anh tach bien'); hold on; a=imread('d.jpg'); a=rgb2gray(a); bw=edge(a,'sobel'); imshow(bw); bw = bwareaopen(bw,30); se = strel('disk',2); bw = imclose(bw,se); bw = imfill(bw,'holes'); imshow(bw); L = bwlabel(bw); s = regionprops(L, 'centroid'); dt = regionprops(L, 'area'); cv = regionprops(L, 'perimeter'); dim = size(s); BW_filled = imfill(bw,'holes'); boundaries = bwboundaries(BW_filled); %imshow(bw); hold on; for k=1:dim(1) b= boundaries{k}; dim = size(b); for i=1:dim(1) khoangcach{k}(1,i) = sqrt ( ( b(i,2) - s(k).Centroid(1) )^2 + ( b(i,1) - s(k).Centroid(2) )^2 ); end a=max(khoangcach{k}); b=min(khoangcach{k}); end dolech=a-b if dolech < 20 %& dolech < 25 % f=1 %end %if f==1 c=imread('d.jpg'); d=imresize(c,[8 8]); d1=d(:,:,1); d1=reshape(d1',8*8,1); d11=sum(d1); d2=d(:,:,2); d2=reshape(d2',8*8,1); d22=sum(d2); d3=d(:,:,3); d3=reshape(d3',8*8,1); d33=sum(d3); if d11>d22 && d11>d33 disp('mau do'); set(handles.text4,'string','den do'); z=1; else if d22>d11 && d22>d33 disp('mau xanh'); set(handles.text4,'string',' den xanh'); z=2; end end subplot(3,3,4); imshow(c); end com=serial('COM1'); set(com,'baudrate',1200); com.DataBits=8; com.Parity= 'none'; com.StopBit=1; fopen(com); if z==1 fwrite(com,1); elseif z==2 fwrite(com,0); end fclose(com); delete(com); clear com; end 2. CHƯƠNG TRÌNH GIAO TIẾP VỚI VI XỬ LÝ ;*************************************************** ;CHUONG TRINH DIEU KHIEN THU PHAT DU LIEU DANG NOI TIEP. ;*************************************************** ;KET NOI: LED -> P1, RXD -> TXD, KEY0 -> INT0 (ACT = 0) ;*************************************************** $MOD51 ORG 00H MAIN: MOV TMOD,#20H MOV TH1,#-3 MOV TL1,#-3 MOV SCON,#50H SETB TR1 MOV P0,#04h MOV A,#0 BEGIN: ACALL RXD_DATA MOV P0,A SJMP BEGIN RXD_DATA: JNB RI,$ CLR RI MOV A,SBUF RET END ;*************************************************** 3. TÀI LIỆU THAM KHẢO 1. Nguyễn Đức Thành, “MATLAB và ứng dụng trong điều khiển”, NXB Đại Học Quốc Gia TPHCM. 2. Phạm Quang Trí, “Giáo trình Vi Xử Lý”, Đại Học Công Nghiệp TPHCM. 3. Phạm Hồng Liên, Đặng Ngọc Khoa, Trần Thanh Phương, “MATLAB và ứng dụng trong viễn thông”, NXB Đại Học Quốc Gia TPHCM. 3. www.google.com 4. www.alldatasheets.com

Các file đính kèm theo tài liệu này:

  • docMô Hình Xe Thông Minh.doc