Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 73 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
73
Dung lượng
2,77 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NÔNG LÂM THÀNH PHỐ HỒ CHÍ MINH KHĨA LUẬN TỐT NGHIỆP THIẾTKẾVÀCHẾTẠOMƠHÌNHNHẬNDẠNGCÁCVẬTTHỂ CĨ HÌNHDẠNGKHÁCNHAUSỬDỤNGCƠNGNGHỆXỬLÝẢNH Họ tên sinh viên : ĐẶNG PHƯỚC THẢO (06153027) DƯƠNG NGỌC THÁNH QUAN MINH (07153024) Ngành: CƠ ĐIỆN TỬ Niên khóa: 2007-2011 Tp.HCM, Tháng 06/2011 LỜI CẢM ƠN Lời chúng em xin chân thành cám ơn tất Qúy Thầy/ Cô trường Đại Học Nơng Lâm TP Hồ Chí Minh Qúy Thầy/ Cơ khoa khí giúp đỡ trang trang bị cho chúng em kiến thức suốt trình học tập trường người thân, bạn bè động viên chúng em trình thực Chúng em chân thành cảm ơn Thầy/ Cô môn Cơ Điện Tử dạy nhiệt tình tạo điều kiện thuận lợi thời gian thực đề tài Đặc biệt chúng em cám ơn Cô ThS NGUYỄN LÊ TƯỜNG hướng dẫn giúp đỡ chúng em suốt trình làm luận văn Chúng em bày tỏa lònng biết ơn Qúy Thầy/ Cô Hội Đồng dành thời gian quý báu để nhận xét đóng góp ý kiến để luận văn hoàn thiện Cuối chúng em xin chúc Thầy/ Cô thành công,hạnh phúc, đầy sức khỏe mặt TP Hồ Chí Minh, 06 Tháng 06 Năm 2011 Sinh viên thực ĐẶNG PHƯỚC THẢO DƯƠNG NGỌC THÁNH QUAN MINH i TÓM TẮT ĐỒ ÁN Đề tài “Thiết KếVàChếTạoMơHìnhNhậnDạngCácVậtThểCóHìnhDạngKhácNhauSửDụngCôngNghệXửLý Ảnh” chúng em tìm hiểu từ ngày nhận đồ án hồn thành sơ đến ngày 6/6/2011 Đồ án tạomơhìnhthiếtkế giao diện phần mềm xửlýảnh thông qua Webcam để nhận dạng, phân loại vậtthể theo yêu cầu Phần mềm viết ngôn ngữ C# kết hợp với thư viện mã nguồn mở OpenCV Sau đặt vật vào vị trí so với Webcam qui trình nhận dạng, phân loại vật bắt đầu thực ta xửlý số giai đoạn phần mềm Qui trình nhận dạng, phân loại vật chủ yếu dựa vào kích thước vật giới hạn chương trình xửlý Cuối vật xác định kết nhận hay loại, thông số liên quan đến vật hiển thị thơng qua giao diện máy tính ii MỤC LỤC Trang tựa Trang Lời cảm ơn ii Tóm tắt iii Mục lục iv Danh sách hình vii CHƯƠNG 1: MỞ ĐẦU 1.1 Đặt vấn đề 1.2 Ý nghĩa thực tiễn 1.3 Mục đích nghiên cứu 1.4 Giơí hạn đề tài CHƯƠNG 2: TỔNG QUAN 2.1 Tổng quan nhậndạngvậtthể 2.2 Tổng quan ứng dụngxửlýảnh 2.2.1 Xửlýảnh gì? 2.2.2 Ứng dụngxửlýảnh 2.3 Sơ lược phần mềm xửlýảnh Siemen 2.3.1 Spectation 2.3.2 Công cụ blob Spectation iii 2.4 Giới thiệu số phần mềm xửlýảnhkhác 11 2.4.1 Image Analyze 11 2.4.2 Paint Star 12 CHƯƠNG 3: NỘI DUNGVÀ PHƯƠNG PHÁP NGHIÊN CỨU 13 3.1 Chương trình xửlýảnh 13 3.1.1Nhiệm vụ chương trình 13 3.2 Một số khái niệm xửlýảnh 13 3.2.1 Ảnh điểm ảnh 13 3.2.2 Phần tử ảnh 15 3.2.3 Mức xám 15 3.2.4 Khái niệm biên 16 3.2.5 Tăng cường khôi phục ảnh 17 3.2.6 Biến đổi ảnh 17 3.2.7 Phân tích ảnh 17 3.2.8 Nhậndạngảnh 18 3.2.9 Nén ảnh 19 3.2.10 Thu nhậnảnh 20 3.2.11 Xửlý nâng cao chất lượng ảnh 21 3.3 Các phương pháp chiếu sáng công nghiệp 26 3.3.1 Chiếu sáng khuếch tán trước đối tượng 26 3.3.2 Chiếu sáng trực tiếp vào đối tượng 26 3.3.3 Chiếu sáng đồng trục 27 iv 3.3.4 Chiếu sáng theo cấu trúc 27 3.3.5 Chiếu sáng phía sau 28 3.4 Sơ lược Webcam 28 3.5 Khái quát thư viện OpenCV 29 3.6 Tính tốn thơng số hình học vậtthể 31 3.6.1 Hình tròn 31 3.6.2 Hình vng 31 3.6.3 Hình tam giác 31 3.6.4 Hình chữ nhật 32 3.6.5 Hình bình hành 32 3.6.6 Hình thoi 32 3.6.7 Hìnhkhác 32 CHƯƠNG 4: KẾT QUẢ VÀ THẢO LUẬN 33 4.1 Thiếtkếmơhình hệ thống 33 4.1.1 Sơ đồ khối 33 4.1.2 Mơhình vẽ Autocad 34 4.2 Giao diện phần mềm 37 4.2.1 Giao diện phần mềm 37 4.2.2 Trình đơn 38 4.2.3 Hiển thị video 38 4.2.4 Hiển thị xửlý 38 4.2.5 Thanh kết 39 v 4.2.6 Biểu đồ cường độ sáng 39 4.2.7 Bảng kết 39 4.3 Lưu đồ giải thuật phần mềm 40 4.4 So sánh kết tính thực tế với kết tính phần mềm 43 4.4.1 Xửlý với hình tròn 43 4.4.2 Xửlý với hình vng 46 4.4.3 Xửlý với hình tam giác 49 4.4.4 Xửlý với hình 52 4.5 Bảng khảo nghiệm kết so sánh kích thước thực với phần mềm……… 54 CHƯƠNG 5: KẾT LUẬN VÀ ĐỀ NGHỊ 55 5.1 Kết đạt 55 5.2 Đề nghị 55 Tài liệu tham khảo 56 Phục lục 57 vi DANH SÁCH CÁCHÌNH Chương Hình 2.1 Sơ đồ khối trình xửlýảnhHình 2.2 Robot đánh bóng bàn TOPIO Hình 2.3 Robot SWAT Hình 2.4 Giao diện phần mềm Spectation .8 Hình 2.5 Camera VS724 Siemen Hình 2.6 Hình phân loại sản phẩm dựa vào vị trí Spectation 10 Hình 2.7 Hình phân loại sản phẩm dựa vào độ tròn Spectation 11 Chương Hình 3.1 Phương pháp chiếu sáng khuếch tán trước đối tượng 26 Hình 3.2 Phương pháp chiếu sáng trực tiếp vào đối tượng 26 Hình 3.3 Phương pháp chiếu sang đồng trục 27 Hình 3.4 Phương pháp chiếu sáng theo cấu trúc 27 Hình 3.5 Phương pháp chiếu sáng phí sau 28 Hình 3.6 Webcam .28 Hình 3.7 Nhậndạng khuôn mặt OpenCV 30 Chương Hình 4.1 Sơ đồ khối 33 Hình 4.2 Hình chiếu 34 Hình 4.3 Hình chiếu đứng 35 Hình 4.4 Hình chiếu cạnh 35 Hình 4.5 Mơhình thực tế 36 Hình 4.6 Giao diện phần mềm 37 Hình 4.7 Bảng kết 39 vii Hình 4.8 Lưu đồ giải thuật phần trước sửdụngcông cụ 40 Hình 4.9 Lưu đồ giải thuật phần sửdụng Generation 41 Hình 4.10 Lưu đồ giải thuật phần sửdụng Selector 42 Hình 4.11 Bảng giới hạn thơng số hình tròn 43 Hình 4.12 Ảnh kết vật tròn mẫu 44 Hình 4.13 Ảnh kết vật tròn so sánh .45 Hình 4.14 Bảng giới hạn thơng số hình vng 46 Hình 4.15 Ảnh kết hình vng mẫu 47 Hình 4.16 Ảnh kết hình vng so sánh 48 Hình 4.17 Bảng giới hạn thơng số hình tam giác .49 Hình 4.18 Ảnh kết hình tam giác mẫu .50 Hình 4.19 Ảnh kết hình tam giác so sánh 51 Hình 4.20 Ảnh kết vật mẫu 52 Hình 4.21 Ảnh kết vật so sánh 53 Hình 4.22 Bảng khảo nghiệm .54 viii Chương MỞ ĐẦU 1.1 Đặt vấn đề Trong năm gần với phát triển khoa học kỹ thuật đại ứng dụng nhiều thành tựu vào qui trình sản xuất cơng nghiệp để nâng cao suất hay tránh lỗi sai sót theo điều kiện tiêu chuẩn Với lại giai đoạn qui trình sản xuất bị hạn chế phụ thuộc vào sức người nên suất lao động thấp sản phẩm bị lỗi nhiều đưa thị trường tiêu thụ Một ứng dụng nhằm hạn chế nhược điểm cơngnghệsửlýảnh vào công đoạn: kiểm tra, xử lý, phân loại, hay nhậndạngvậtthể xem đạt yệu cầu chưa Trong xu phát triển côngnghệ thông tin mạnh mẽ, với xu phát triển hệ thống hoạt động sở nhậndạngxửlýảnhẢnh nhiều thông tin màu sắc, hình dáng, kích thước…Với cơng cụ xửlýảnh cho khả nhận biết xác vật dựa đặt tính bên ngồi vật Cũng lý gởi ý, giúp đỡ cô ThS.Nguyễn Lê Tường anh Huỳnh Cao Vân chúng em tìm hiểu nghiên cứu chọn đề tài “Thiết kếchếtạomôhìnhnhậndạngvậtthểcóhìnhdạngkhácsửdụngcôngnghệxửlý ảnh” với mong muốn thông qua đề tài bổ sung thêm kiến thức phục vụ cho hoạt động sản xuất hiệu 1 4.4.3.1 Tam giác mẫu Hình 4.18: Ảnh kết hình tam giác mẫu 50 4.4.3.2 Vật so sánh Hình 4.19: Ảnh kết hình tam giác so sánh 51 4.4.4 Xửlý với hình Tương tự ta chọn thông số perimeter ( pixel) khoảng từ: 1190-1220 (pixel) bảng kết thị : vậtnhận ( pass) vật ngồi khoảng loại( fail) 1mm=3.779 pixel 4.4.4.1 Vật mẫu Hình 4.20: Ảnh kết vật mẫu 52 4.4.4.2 Vật so sánh Hình 4.21: Ảnh kết vật so sánh 53 4.5 Bảng khảo nghiệm độ xác phần mềm so với kích thước thực vậtthể Tên Hình tròn Hình vng Hình tam giác Kết Diện tích Chu vi Chiều rộng hình chữ nhật nhỏ (mm) Chiều cao hình chữ nhật nhỏ (mm) quảt ính (mm) (mm) Phần mềm 1129.55 114.43 37.84 37.84 Thực 1255.99 125.66 40 40 Spectation 1213.3 119.2 39.8 39.2 Phần mềm 1447.04 125.65 37.9 38.7 Thực 1598.90 132 40 40 Spectation 1490.9 128.9 38.4 39.3 Phần mềm 705.50 122.78 34.8 42.07 Thực 699.93 127 32 36 Spectation 583.9 125.17 30.14 34.48 Phần mềm 2381.86 319.93 59.54 59.27 Thực 2593.35 334.2 51.43 51.74 2453.06 331.3 70.91 71.44 Tế Tế Tế Hìnhkhác Tế Spectation Hình 4.22: Bảng khảo nghiệm 54 Biểu đồ so sánh kết tính thực tế với phần mềm Nhận xét kết Từ kết thực nghiệm ta thấy số tính thực tế so với phần mềm tương đối gần chấp nhận 55 CHƯƠNG KẾT LUẬN VÀ ĐỀ NGHỊ 5.1 Kết đạt Sau khoảng thời gian giao làm đồ án chúng em cố gắng hoàn thành nhiệm vụ tương đối thành công theo yêu cầu ban đầu đặt thu số kết sau: Đã nghiên cứu lý thuyết xửlýảnhdùng webcam Đã chếtạomơhình phân loại nhậndạngvật Đã thiếtkế phần mềm giao diện xửlýảnh Đã khảo nghiệm mơhình với vật thực tế 5.2 Đề nghị Thiếtkế băng truyền cho vậtthểdùng động bước timer để xác định vị trí vậtthể cho q trình nhậndạng webcam xác Thay Webcam Camera để độ xác cao trình xửlý Phần mềm bổ sung tìm hiểu kỹ ứng dụng nhiều lĩnh vực có liên quan đến sản xuất công nghiệp, tham khảo cho nghành học phụ trợ 56 TÀI LIỆU THAM KHẢO [1] Phương Lan, Hoàng Đức Hải, Từng Bước Học Lập Trình Visual C++.net, Nhà Xuất Bản Lao Động Xã Hội, TP.HCM, 2006 [2]www.siemens.com/machine-vision hay www.siemens.com/automation/service [3] Đỗ Năng Tồn, Phạm Việt Bình, Giáo Trình Mơn Học XửLý Ảnh, Nhà Xuất Bản Đại học Thái Nguyên, Thái Nguyên, 2007 [4] CodeProject, Image to Characters Convert using Intensity, 15 Dec 2009 URL http://www.codeproject.com/KB/recipes/Image2CharsConverter.aspx [5] CodeProject, Image Processing for Dummis with C# and GDI+ Part 1-Per Pixel Filters, 21 Dec 2009.URL plus/csharpgraphicfilters11.aspx [6] Các nguồn khác từ Internet ……………… 57 http://www.codeproject.com/KB/GDI- PHỤ LỤC Mã nguồn 1.2 Những đoạn code chương trình 1.2.1 Đoạn code load ảnh private void loadToolStripMenuItem_Click(object sender, EventArgs e) { openFileDialog1.CheckFileExists = true; openFileDialog1.CheckPathExists = true; openFileDialog1.Title = "Load Image"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { try { // hien thi anh tren nen metaDraw1 string fileName = openFileDialog1.FileName; metaDraw1.LoadPicture(fileName, BTIS.MetaDraw.PictureSource.Picture); // load anh de xuly Sourceimage=highgui.CvLoadImage(fileName,highgui.CV_LOAD_IM AGE_COLOR); } catch { 58 MessageBox.Show("Error opening image", "Load Image", MessageBoxButtons.OK, MessageBoxIcon.Error); } 1.2.2 Đoạn code cắt ảnh chuyển ảnh sang xám if ((x != 0) && (y != 0) && (cutwidth != 0) && (cutheigh != 0)) { cutimage = cxcore.CvCreateImage(new cutheigh), sourceimage.depth, sourceimage.nChannels); CvSize(cutwidth, cutgrayimage = cxcore.CvCreateImage(new CvSize(cutwidth, cutheigh), sourceimage.depth, 1); cxcore.CvSetImageROI(ref sourceimage, new CvRect(x, y, cutwidth, cutheigh)); cxcore.CvCopy(ref sourceimage, ref cutimage); cxcore.CvResetImageROI(ref sourceimage); cv.CvCvtColor(ref cvtypes.CV_BGR2GRAY); cutimage, ref cutgrayimage, } 1.2.3 Đoạn code tìm vùng liên thơng tính tốn thơng số hình học khối ảnh if ((x != 0) && (y != 0) && (cutwidth != 0) && (cutheigh != 0)) { cutimage = cxcore.CvCreateImage(new cutheigh), sourceimage.depth, sourceimage.nChannels); CvSize(cutwidth, cutgrayimage = cxcore.CvCreateImage(new CvSize(cutwidth, cutheigh), sourceimage.depth, 1); cxcore.CvSetImageROI(ref sourceimage, new CvRect(x, y, cutwidth, cutheigh)); cxcore.CvCopy(ref sourceimage, ref cutimage); cxcore.CvResetImageROI(ref sourceimage); 59 cv.CvCvtColor(ref cvtypes.CV_BGR2GRAY); cutgrayimage1 cutgrayimage.widthStep]; cutimage, = new ref cutgrayimage, byte[cutgrayimage.height cutgrayimage1 = cutgrayimage.ImageDataUChar; // VE HISTOGRAM histogram = new float[256]; for (int i = 0; i < 256; i++) for (int j = 0; j < cutgrayimage1.Length; j++) if (cutgrayimage1[j] == i) histogram[i] += 1; maxs = 0; //gmaxs = 0; for (int z = 0; z < histogram.Length; z++) { maxs = System.Math.Max(histogram[z], maxs); //if (System.Math.Abs(fg[z] - fgmaxs) < 0.5) //gmaxs = z; } histogram1.Clear(); tChart1.Axes.Left.Maximum = maxs; for (int k = 0; k < 256; k++) { histogram1.Add(k, histogram[k]); //form3.histogram1.Add(k, histogram[k]); } 60 * bwimage = cxcore.CvCreateImage(cxcore.CvGetSize(ref cutgrayimage), 8, 1); cv.CvThreshold(ref cutgrayimage, ref bwimage, nguong, 255, cv.CV_THRESH_BINARY); //metaDraw1.RemoveObject(BTIS.MetaDraw.ObjHandle.Current); highgui.CvSaveImage("temp1.bmp", ref bwimage); metaDraw1.LoadPicture("temp1.bmp", BTIS.MetaDraw.PictureSource.PictureClip); Point pt = new Point(x, y); metaDraw1.MoveObjects(pt, BTIS.MetaDraw.MoveFlags.Set); } ///////////////////////////// //bwimage cutgrayimage), 8, 1); = cxcore.CvCreateImage(cxcore.CvGetSize(ref //cv.CvThreshold(ref cutgrayimage, ref bwimage, nguong, 255, cv.CV_THRESH_BINARY); bwimage1 = new Byte[bwimage.height * bwimage.widthStep]; bwimage2 = new Byte[bwimage.height, bwimage.widthStep]; bwimage1 = bwimage.ImageDataUChar; for (int i = 0; i < bwimage.height; i++) for (int j = 0; j < bwimage.widthStep; j++) bwimage2[i, j] = bwimage1[bwimage.widthStep * i + j]; connectedComponentLabeling = ConnectedComponent.ConnectedComponentLabeling(bwimage2); connectedComponentLabeling.Apply(bwimage2); lien thong Tuc la tim so vatthe 61 new //Tim vung objectCount = connectedComponentLabeling.ObjectCount; ///////////////////////////////////////////////////////////// dt = new double[objectCount]; cvv = new double[objectCount]; dotron = new double[objectCount]; xpos = new double[objectCount]; ypos = new double[objectCount]; angle = new double[objectCount]; widthhcnnn = new double[objectCount]; heighhcnnn = new double[objectCount]; bk = new double[objectCount]; cdotb = new double[objectCount]; abc = new byte[objectCount][]; abc2 = new byte[objectCount][,]; // code tinh dac trinh for (int i = 0; i < objectCount; i++) { CvRect rect; IplImage anhgan cxcore.CvCreateImage(cxcore.CvGetSize(ref cutgrayimage), 8, 3); = //IplImage anhgan1 cxcore.CvCreateImage(cxcore.CvGetSize(ref cutgrayimage), 8, 3); = IplImage anhdactrung1 cxcore.CvCreateImage(cxcore.CvGetSize(ref cutgrayimage), 8, 1); = abc2[i] = new Byte[bwimage.height, bwimage.widthStep]; abc[i] = new Byte[bwimage.height * bwimage.widthStep]; 62 abc2[i] = connectedComponentLabeling.ObjectArrays[i]; for (int j = 0; j < bwimage.height; j++) for (int k = 0; k < bwimage.widthStep; k++) abc[i][bwimage.widthStep * j + k] = abc2[i][j, k]; //dac trung1 dt //dac trung cuong sang trung binh //double cdtb; for (int l = 0; l < bwimage.imageSize; l++) if (abc[i][l] != 0) { dt[i] = dt[i] + 1; cdotb[i] += cutgrayimage1[l]; abc[i][l] = 255; } cdotb[i] = cdotb[i] / dt[i]; anhdactrung1.ImageDataUChar = abc[i]; cv.CvCvtColor(ref cvtypes.CV_GRAY2RGB); anhdactrung1, ref //highgui.CvNamedWindow(i.ToString()); //highgui.CvShowImage(i.ToString(), ref anhgan); //dac trung2 hinh chu nhat nho nhat rect = cv.CvBoundingRect(ref anhdactrung1, 1); widthhcnnn[i] = rect.width; heighhcnnn[i] = rect.height; 63 anhgan, cv.CvCanny(ref anhdactrung1, ref anhdactrung1, 0, 0, 3); //highgui.CvNamedWindow(i.ToString()); //highgui.CvShowImage(i.ToString(), ref anhdactrung1); //dac trung3 chu vi byte[] a = new byte[anhdactrung1.widthStep anhdactrung1.height]; a = anhdactrung1.ImageDataUChar; for (int m = 0; m < a.Length; m++) if (a[m] != 0) cvv[i] = cvv[i] + 1; // dac trung tron compactness dotron[i] = (float)(4 * Math.PI * dt[i]) / (cvv[i] * cvv[i]); ///////////////////////////////////////////////// } 64 * ... ảnh thông minh phần mềm xử lý ảnh để thực việc kiểm tra tương tự Quá trình xử lý ảnh xem q trình thao tác ảnh đầu vào nhằm cho kết mong muốn Kết đầu trình xử lý ảnh ảnh “tốt hơn” kết luận : Ảnh