Nghiên cứu thuật toán ước lượng khoảng cách từ camera đến vật thể và xác định kích thước thực vật thể Nghiên cứu thuật toán ước lượng khoảng cách từ camera đến vật thể và xác định kích thước thực vật thể luận văn tốt nghiệp thạc sĩ
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI TÊN ĐỀ TÀI: NGHIÊN CỨU THUẬT TOÁN ƯỚC LƯỢNG KHOẢNG CÁCH TỪ HỆ CAMERA ĐẾN VẬT THỂ VÀ XÁC ĐỊNH KÍCH THƯỚC THỰC VẬT THỂ Chuyên ngành: Kỹ thuật viễn thông LUẬN VĂN THẠC SĨ KỸ THUẬT Học viên: Nguyễn Xuân Khôi Người hướng dẫn: TS Nguyễn Hữu Phát HÀ NỘI - 2017 MỤC LỤC MỞ ĐẦU Chương 1: NGUYÊN TẮC HOẠT ĐỘNG CHUNG CỦA CÁC MÁY QUÉT 3D .3 1.1 Định nghĩa phân loại 1.1.1 Định nghĩa 1.1.2 Phân loại 1.2 Ứng dụng máy quét 3D 1.3 Đặt vấn đề 10 1.4 Cấu trúc hệ thống 11 CHƯƠNG 2: CÁC VẤN ĐỀ VÀ KỸ THUẬT CƠ BẢN TRONG XỬ LÝ ẢNH 12 2.1 Các vấn đề xử lý ảnh 12 2.2 Kĩ thuật mặt nạ 14 2.2.1 Khái niệm mặt nạ 14 2.2.2 Kỹ thuật nhân chập 14 2.3 Các kỹ thuật lọc nhiễu 15 2.3.1 Khái quát nhiễu ảnh 15 2.3.2 Các phương pháp lọc nhiễu 17 2.4 Các kĩ thuật dò cạnh 18 2.4.1 Khái quát dò cạnh 18 2.4.2 Các phương pháp dò cạnh 18 2.5 Các kĩ thuật dị góc 23 2.5.1 Tổng quan kĩ thuật dò góc 23 2.5.2 Các kĩ thuật dị góc thường sử dụng 23 2.6 Kiến thức sử dụng luận văn…………………………… … 27 CHƯƠNG 3: HỆ STEREO CAMERA VÀ THUẬT TOÁN 28 3.1 Hệ camera thu nhận ảnh 28 3.2 Tổng quan thuật toán đề xuất 28 3.4 Phân đoạn ảnh 30 3.4.1 Phương pháp phân tích màu sắc 30 3.4.2 Phương pháp phân đoạn ảnh dựa mặt phẳng kết tủa màu r-g 32 i 3.5 Thuật tốn ước lượng vị trí tâm cà chua chín 34 3.5.1 Gắn nhãn, lọc kích thước, xác định đường biên vùng ứng viên 34 3.5.2 Định vị vị trí cà chua chín sử dụng phương pháp biến đổi Hough Circle 34 3.5.3 Định vị vị trí cà chua chín sử dụng phương pháp phân tích hình dáng 35 3.6 Ước lượng khoảng cách từ hệ camera quan sát đến vị trí tâm cà chua chín 36 3.6.1 Hiệu chỉnh camera (camera calibration) 36 3.6.2 Ước lượng khoảng cách từ hệ camera đến tâm cà chua chín 38 CHƯƠNG 4: KẾT QUẢ VÀ THẢO LUẬN 42 4.1 Kết thảo luận 42 4.2 Hướng phát triển 46 Tài liệu tham khảo 48 Phụ lục 49 ii DANH SÁCH HÌNH ẢNH Hình 1.1: Ngun tắc hoạt động máy quét 3D sử dụng công nghệ Time-of-flight Hình 1.2: Ngun lí ngun lí qt điểm Hình 1.3: Cấu trúc hệ quét sử dụng công nghệ ánh sáng cấu trúc Hình 1.4: Mẫu ảnh chiếu lên vật thể 3D Hình 1.5: Máy quét 3D sử dụng ánh sáng cấu trúc hãng DAVID Hình 1.6: Ngun lí hoạt động máy quét sử dụng công nghệ stereoscopy Hình 1.7: Hình ảnh thực tế hệ stereo vision Hình 1.8: Ứng dụng máy quét 3D Hình 2.1: Phương pháp dùng mặt nạ để tìm đường biên theo chiều dọc 14 Hình 2.2: Nhiễu phụ thuộc vào liệu 15 Hình 2.3: Nhiễu Gaussian trước sau xử lí 16 Hình 2.4: Nhiễu muối tiêu trước sau xử lí 16 Hình 2.5: Kết trích xuất cạnh sử dụng phương pháp dị cạnh Robert Cross 19 Hình 2.6: Kết trích xuất cạnh sử dụng phương pháp dị cạnh Sobel 20 Hình 2.7: Kết trích xuất cạnh sử dụng phương pháp dị cạnh Canny 22 Hình 3.1: Sơ đồ trình thực thuật toán đề xuất dựa [3] 29 Hình 3.2: Sơ đồ trình thực thuật toán đề xuất dựa [3] 30 Hình 3.3: Kết nhận diện cà chua 32 Hình 3.4: Sơ đồ nguyên lý sử dụng để ước lượng khoảng cách từ hệ camera đến vật thể 37 Hình 3.5: Ảnh so sánh kế trước sau hiệu chỉnh camera 38 Hình 4.1: Hình ảnh thực tế cà chua thu từ camera 43 Hình 4.2: Ảnh chụp chuyển sang miền ảnh xám 43 Hình 4.3: Ảnh sau áp dụng lọc miền đỏ vàng 43 Hình 4.4: Tâm cà chua biên 44 iii DANH MỤC BẢNG Bảng 1: Thống kê kết nhận dạng ba phương pháp tập liệu 41 Bảng Ước lượng khoảng cách xác định kích thước thực vật cản (Kích thước thực tế vật cản 3.3cm 42 Bảng Ước lượng khoảng cách xác định kích thước thực vật cản (Kích thước thực tế vật cản 3.3cm)………………………………………………… 45 Bảng 4: So sánh kết thực nghiệm đo trước sau calibrate……… 46 iv LỜI NĨI ĐẦU Hiện nay, cơng nghệ qt 3D nhận nhiều quan tâm nhà nghiên cứu cơng ty ứng dụng quy trình tạo mẫu ngược vào sản xuất Các ứng dụng công nghệ quét 3D ứng dụng nhiều lĩnh vực qt mẫu đúc, tạo hình khí, phục hình nha khoa,v.v Trong nơng nghiệp, tự động hóa dần áp dụng để thay vai trò người nông dân việc thu hoạch nông sản Phương pháp đo không tiếp xúc sử dụng công nghệ xử lí ảnh xác định vị trí tương đối nông sản so với robot, giúp cho việc thu hoạch trở nên dễ dàng Trên cở sở học mơn xử lí hình ảnh, tơi thiết kế hệ camera xây dựng thuật tốn để xác định vị trí vật thể đến hệ camera, đưa khoảng cách vật đến hệ kích thước vật thể, cụ thể cà chua Thiết lập hệ đo lường 3D sử dụng camera, hình ảnh thu xử lí phần mềm viết ngôn ngữ C# để đưa kết Thuật tốn địi hỏi xác tính tin cậy cao cần áp dụng nhuần nhuyễn kiến thực học xử lí ảnh, đồng thời tìm tịi sáng tạo để có giải pháp tối ưu Do kiến thức hạn hẹp thời gian thực không nhiều nên đề tài tơi cịn nhiều hạn chế Mặc dù phần thiết kế tính tốn chi tiết mạch, thơng số đơi cịn mang tính lý thuyết, chưa thực tế Tơi mong đóng góp sửa chữa để đề tài mang tính khả thi Tôi xin chân thành cảm ơn thầy Nguyễn Hữu Phát hướng dẫn chúng tơi hồn thành luận văn v Lời cam đoan Tôi xin cam đoan kết nghiên cứu luận văn riêng tơi chưa cơng bố cơng trình nghiên cứu Hà nội, ngày tháng năm Học viên (Ký ghi rõ họ tên) vi MỞ ĐẦU Tính cấp thiết đề tài Xử lí ảnh ngành khoa học mẻ so với nhiều ngành khác tốc độ phát triển nhanh, khả ứng dụng vô to lớn Các ứng dụng bật xử lí ảnh nhận dạng vân tay, nhận dạng khuôn mặt, phục chế ảnh, dựng ảnh 3D, giám sát thực thể đem lại nhiều lợi ích to lớn nhiều lĩnh vực khác từ giải trí, học tập, lao động, quân sự, v.v… Trong vài ứng dụng tự động hóa, việc sử dụng thước đo kích thước khoảng cách vật thể không khả thi đặc điểm mơi trường làm việc Thay vào đó, ta ứng dụng cơng nghệ xử lí ảnh để phân tích tính tốn đưa giá trị khoảng cách kích thước vật thể Thay phải dùng phương pháp đo đạc truyền thống, ta ứng dụng cơng nghệ xử lí ảnh vào việc đo lường khơng tiếp xúc Từ suy nghĩ đó, tơi định nghiên cứu xây dựng thuật tốn xử lí ảnh mang tính thực tiễn cao Thuật tốn sử dụng hình ảnh thu từ camera, phân tích tính tốn để đưa giá trị khoảng cách kích thước vật thể ứng dụng môi trường đặc biệt mà áp dụng phương pháp đo lường có tiếp xúc truyền thống Đó lý tơi chọn nghiên cứu thực đề tài: “Nghiên cứu thuật toán ước lượng khoảng cách từ hệ camera đến vật thể xác định kích thước vật thể”, đối tượng sử dụng nghiên cứu để xác định độ xác thuật tốn cà chua chín Mục tiêu nghiên cứu Mục tiêu đề tài nhằm đưa thuật tốn để xác định vị trí tương đối kích thước vật thể đến hệ camera Thiết lập hệ đo lường 3D sử dụng camera, hình ảnh thu xử lí phần mềm viết ngôn ngữ C# để đưa kết Thuật tốn địi hỏi xác tính tin cậy cao cần áp dụng nhuần nhuyễn kiến thực học xử lí ảnh, đồng thời tìm tịi sáng tạo để có giải pháp tối ưu Đối tượng phạm vi nghiên cứu - Nghiên cứu lý thuyết xử lí ảnh - Nghiên cứu kỹ thuật lập trình xử lí ảnh thư viện EmguCV - Nghiên cứu kỹ thuật chuyển đổi hệ màu thông dụng - Nghiên cứu kỹ thuật lọc nhiễu dò cạnh, dò góc - Đề tài thuộc hình thức nghiên cứu ứng dụng Phương pháp nghiên cứu - Thu thập phân tích tài liệu thơng tin liên quan đến đề tài - Phân tích lựa chọn hệ thống chương trình ứng dụng - Triển khai xây dựng chương trình ứng dụng - Kiểm tra, thử nghiệm đánh giá kết Bố cục đề tài Bố cục luận văn kết cấu thành chương: Chương 1: Nguyên tắc hoạt động chung máy quét 3D Chương 2: Các vấn đề kỹ thuật xử lí ảnh Chương 3: Thiết kế hệ stereo vision thuật toán Chương 4: Kết thực nghiệm thảo luận Trong chương một, giới thiệu nguyên tắc hoạt động chung thiết bị đo 3D xử dụng cơng nghệ xử lí ảnh đưa cấu trúc hệ thiết bị xử dụng Trong chương hai, giới thiệu công nghệ xử lí ảnh máy tính kỹ thuật xử lí ảnh Cịn chương 3, chương trọng tâm nêu giải pháp trình xây dựng ứng dụng đo lường khoảng cách kích thước vật thể sử dụng hệ camera dựa vào lý thuyết nghiên cứu hai chương đầu Chương bốn đưa kết qua thực nghiệm thu kết luận Tổng quan tài liệu nghiên cứu Tài liệu phục vụ cho việc nghiên cứu đề tài bao gồm tài liệu “Xử lí ảnh” Đại Học Bách Khoa Hà Nội tài liệu chuyên sâu xử lý ảnh “Xử lí ảnh số video số” tác giả Nguyễn Kim Sách hay “Xử lý ảnh máy tính” tác giả Ngơ Diên Tập Ngồi cịn có tài liệu tiếng Anh cung cấp nhiều kiến thức ví dụ hữu ích cho q trình thực đề tài tơi nhứ “Fundamentals of computer vision” tác giả Mubarak Shak hay “Computer vision and image processing” tác giả Umbaugh Chương NGUYÊN TẮC HOẠT ĐỘNG CHUNG CỦA CÁC MÁY QUÉT 3D Trong chương này, giới thiệu phân biệt máy quét 3D dựa thành phần hệ thống Cùng với đó, phân tích ưu nhược điểm hệ thống để tìm hệ đo lường phù hợp với yêu cầu toán 1.1 Định nghĩa phân loại 1.1.1 Định nghĩa Máy quét 3D thiết bị dùng để phân tích vật thể mơi trường, có khả thu thập liệu kích thước màu sắc mẫu vật Dữ liệu thu sử dụng để xây dựng mơ hình 3D Hiện nay, công nghệ quét 3D sử dụng để tạo hình 3D vật thể đa dạng, phương pháp có ưu nhược điểm riêng Dự liệu quét 3D thu có nhiều ứng dụng thực tế Những thiết bị sử dụng rộng rãi ngành sản xuất giải trí cơng nghiệp Một vài ứng dụng phổ biến công nghệ như: thiết kế công nghiệp, thiết kế ngược, sản xuất mẫu, kiểm thử chi tiết công nghiệp khảo cổ học 1.1.2 Phân loại Các công nghệ quét 3D sử dụng tùy vào hình dáng mẫu vật cần quét, môi trường hoạt động chất lượng mẫu 3D Ta chia cơng nghệ qt thành hai loại lớn không tiếp xúc chủ động không tiếp xúc bị động Thiết bị đo chủ động phát sóng siêu âm ánh sáng xác định phản xạ khả xuyên sóng để xác định vật thể mơi trường, khí đo, thiết bị đo bị động phân tích tín hiệu phản xạ từ vật thể cụ thể ánh sáng Phương pháp đo bị động thường có giá thành rẻ khơng có u cầu phức tạp phần cứng - Máy quét 3D sử dụng công nghệ Time-of-flight sử dụng tia laze để xác định vật thể Thiết bị bao gồm đầu dò laze sử dụng cơng nghệ time-of-flight Đầu dị đo khoảng cách từ thiết bị đến điểm cần dựa độ lệch pha ánh sáng Dựa vào độ lệch pha tia phát tia phản xạ, khoảng cách } } // processing image get from cam private void Cam2Processing(object sender, EventArgs arg) { try { //original_image = new Image("C:\\Users\\MyPC\\Desktop\\tao1.jpg"); Console.WriteLine("Load success"); OrgImg_2 = Cam_2.QueryFrame().ToImage(); pictureBox3.Image = OrgImg_2.Bitmap; //(OrgImg_2); } catch(Exception ex) { MessageBox.Show("Cam2Processing"); } } private void abc2(Image Image_abc_2) { try { Result_2 = new Image(Image_abc_2.Width, Image_abc_2.Height); r_2 = new Matrix(Image_abc_2.Rows, Image_abc_2.Cols, 1); g_2 = new Matrix(Image_abc_2.Rows, Image_abc_2.Cols, 1); b_2 = new Matrix(Image_abc_2.Rows, Image_abc_2.Cols, 1); for (int row_2 = 0; row_2 < r_2.Rows; row_2++) { for (int col_2 = 0; col_2 < r_2.Cols; col_2++) 59 { double sum_2 = Image_abc_2[row_2, col_2].Blue + Image_abc_2[row_2, col_2].Green + Image_abc_2[row_2, col_2].Red; r_2[row_2, col_2] = Image_abc_2[row_2, col_2].Red / sum_2; g_2[row_2, col_2] = Image_abc_2[row_2, col_2].Green / sum_2; b_2[row_2, col_2] = Image_abc_2[row_2, col_2].Green / sum_2; } } R_avg_2 = Cal_mean(r_2); G_avg_2 = Cal_mean(g_2); B_avg_2 = Cal_mean(b_2); Console.WriteLine("R_avg_2: " + R_avg_2); if ((R_avg_2 + G_avg_2 + B_avg_2) > 0) { r_avg_2 = R_avg_2 / (R_avg_2 + G_avg_2 + B_avg_2); g_avg_2 = G_avg_2 / (R_avg_2 + G_avg_2 + B_avg_2); j_2 = new Matrix(Image_abc_2.Rows, Image_abc_2.Cols, 1); s_2 = new Matrix(Image_abc_2.Rows, Image_abc_2.Cols, 1); temp_result_2 = new Matrix(Image_abc_2.Rows, Image_abc_2.Cols); for (int row_2 = 0; row_2 < r_2.Rows; row_2++) { for (int col_2 = 0; col_2 < r_2.Cols; col_2++) { j_2[row_2, col_2] = Math.Atan((r_2[row_2, col_2] - r_avg_2) / (g_2[row_2, col_2] - g_avg_2)); s_2[row_2, col_2] = Math.Sqrt(Math.Pow((r_2[row_2, col_2] - r_avg_2), 2) + Math.Pow((g_2[row_2, col_2] - g_avg_2), 2)); /* j_value = 85; s_min = 0.154398; 60 s_max = 0.745356; w = 65; */ if ((s_min < s_2[row_2, col_2]) && (s_2[row_2, col_2] < s_max) && j_2[row_2, col_2] < 0) { Result_2.Data[row_2, col_2, 0] = 255; Result_2.Data[row_2, col_2, 1] = 255; Result_2.Data[row_2, col_2, 2] = 255; } //&& ((j_value-w/2)j[row,col]) result.Data[row, col, 1] = 125; } } // result.Save("C:\\Users\\MyPC\\Desktop\\tao1_result.jpg"); Console.WriteLine("Center 2: " + r_2.Rows / + " " + r_2.Cols / 2); Console.WriteLine("j center: " + j_2[(int)(r_2.Rows / 2), (int)(r_2.Cols / 2)] + " s center: " + s_2[(int)(r_2.Rows / 2), (int)(r_2.Cols / 2)]); pictureBox4.Image = Result_2.ToBitmap(); gray_original_image_2 = Result_2.Convert(); // original_image.Convert(); temp_circles_2 = CvInvoke.HoughCircles(Image_abc_2, Emgu.CV.CvEnum.HoughType.Gradient, 1.75, 30, 100, 50, 35, 70); CvInvoke.Imshow("IMG2_Gray", Img_2.Convert()); Console.WriteLine("temp_circle_2: " + temp_circles_2.Count()); if (temp_circles_2.Count() != 0) { CircleF temp_0 = temp_circles_2[0]; for (int i = 1; i < temp_circles_2.Count(); i++) { CircleF temp_1 = temp_circles_2[i]; 61 if (temp_1.Radius > temp_0.Radius) temp_0 = temp_1; } qua_2 = temp_0; Image_abc_2.Draw(temp_0, new Bgr(255, 100, 200), 2); // Image_abc_2.Save("C:\\Users\\MyPC\\Desktop\\Result\\2.jpg"); Console.WriteLine("2 save"); Console.WriteLine(temp_0.Center); } pictureBox3.Image = Image_abc_2.ToBitmap(); pictureBox4.Image = gray_original_image_2.ToBitmap(); Console.WriteLine(s_min + " < s2 < " + s_max); Console.WriteLine((j_value - w / 2) + " < j2