Đồ án TRÍCH CHỌN mặt PHẲNG đất TRONG môi TRƯỜNG đám mây điểm 3d , Đồ án TRÍCH CHỌN mặt PHẲNG đất TRONG môi TRƯỜNG đám mây điểm 3d , Đồ án TRÍCH CHỌN mặt PHẲNG đất TRONG môi TRƯỜNG đám mây điểm 3d , Đồ án TRÍCH CHỌN mặt PHẲNG đất TRONG môi TRƯỜNG đám mây điểm 3d
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Đề tài: TRÍCH CHỌN MẶT PHẲNG ĐẤT TRONG MƠI TRƯỜNG ĐÁM MÂY ĐIỂM 3D Hà Nội, 5-2018 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THÔNG ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC Đề tài: TRÍCH CHỌN MẶT PHẲNG ĐẤT TRONG MÔI TRƯỜNG ĐÁM MÂY ĐIỂM 3D Hà Nội, 5-2018 Đánh giá đồ án tốt nghiệp (Dùng cho giảng viên hướng dẫn) Giảng viên đánh giá: Họ tên Sinh viên: MSSV:………………… Tên đồ án: ………………………………………………………………………………… Chọn mức điểm phù hợp cho sinh viên trình bày theo tiêu chí đây: Rất (1); Kém (2); Đạt (3); Giỏi (4); Xuất sắc (5) Nhận xét thêm Thầy/Cô (giảng viên hướng dẫn nhận xét thái độ tinh thần làm việc sinh viên) Ngày: / /201 Người nhận xét (Ký ghi rõ họ tên) Đánh giá đồ án tốt nghiệp (Dùng cho cán phản biện) Giảng viên đánh giá: Họ tên Sinh viên: MSSV:………………… Tên đồ án: ………………………………………………………………………………… Chọn mức điểm phù hợp cho sinh viên trình bày theo tiêu chí đây: Rất (1); Kém (2); Đạt (3); Giỏi (4); Xuất sắc (5) Có kết hợp lý thuyết thực hành (20) Nêu rõ tính cấp thiết quan trọng đề tài, vấn đề giả thuyết (bao gồm mục đích tính phù hợp) phạm vi ứng dụng đồ án Cập nhật kết nghiên cứu gần (trong nước/quốc tế) Nêu rõ chi tiết phương pháp nghiên cứu/giải vấn đề 4 Có kết mơ phỏng/thưc nghiệm trình bày rõ ràng kết đạt Có khả phân tích đánh giá kết (15) Kế hoạch làm việc rõ ràng bao gồm mục tiêu phương pháp thực dựa kết nghiên cứu lý thuyết cách có hệ thống Kết trình bày cách logic dễ hiểu, tất kết phân tích đánh giá thỏa đáng Trong phần kết luận, tác giả rõ khác biệt (nếu có) kết đạt mục tiêu ban đầu đề đồng thời cung cấp lập luận để đề xuất hướng giải thực tương lai Kỹ viết (10) Đồ án trình bày mẫu quy định với cấu trúc chương logic đẹp mắt (bảng biểu, hình ảnh rõ ràng, có tiêu đề, đánh số thứ tự giải thích hay đề cập đến đồ án, có lề, dấu cách sau dấu chấm, dấu phẩy v.v), có mở đầu chương kết luận chương, có liệt kê tài liệu tham khảo có trích dẫn quy định Kỹ viết xuất sắc (cấu trúc câu chuẩn, văn phong khoa học, lập luận logic có sở, từ vựng sử dụng phù hợp v.v.) Thành tựu nghiên cứu khoa học (5) (chọn trường hợp) Có báo khoa học đăng chấp nhận đăng/đạt giải SVNC khoa học giải cấp Viện trở lên/các giải thưởng khoa 10a học (quốc tế/trong nước) từ giải trở lên/ Có đăng ký phát minh sáng chế Được báo cáo hội đồng cấp Viện hội nghị sinh viên nghiên cứu khoa học không đạt giải từ giải trở 10b lên/Đạt giải khuyến khích kỳ thi quốc gia quốc tế khác chuyên ngành TI contest 10c Không có thành tích nghiên cứu khoa học Điểm tổng /50 Điểm tổng quy đổi thang 10 Nhận xét thêm Thầy/Cô Ngày: / /201 Người nhận xét (Ký ghi rõ họ tên) LỜI NÓI ĐẦU Luận văn thực với mục đích tìm hiểu ứng dụng cơng nghệ thị giác máy tính, đặc biệt thị giác ba chiều, công nghiên cứu phát triển khoa học, ứng dụng đời sống thực tiễn Trước tiên, xin cảm ơn thầy PGS.TS Th.S gợi mở, quan tâm, giúp đỡ hoàn thiện luận văn suốt thời gian thực đề tài tốt nghiệp Với đồng thuận nhóm nghiê cứu, tác giả tham khảo cơng trình nghiên cứu thầy hướng dẫn toán phát vật thể xử lý ảnh chiều sâu Bên cạnh đó, xin gởi lời cảm ơn đến tất thầy cô trực tiếp giảng dạy suốt khóa học; người bạn quan tâm, chia sẻ kiến thức, kinh nghiệm giúp đỡ vật chất trình học tập thực đồ án Cũng xin chân thành cảm ơn quan tâm hỗ trợ, tạo điều kiện hết lòng động viên tinh thần lẫn vật chất thành viên gia đình suốt thời gian qua Sau cùng, xin gởi lời chúc sức khỏe, hạnh phúc đến q thầy cơ, gia đình bạn bè TĨM TẮT Với phát triển cơng nghệ đại kỷ 21 ngày vượt bậc, nhu cầu đặt ngày thiết yếu nghiên cứu phát minh phương pháp thu thập xử lý thơng tin giới bên ngồi máy tính Một lĩnh vực đầu Thị giác máy tính, thị giác giác quant hu thập thông tin cách trực quan sống động Hơn nữa, Thị giác máy tính mở nhiều ứng dụng khoa học thực tế cho phép máy tính phục vụ đời sống người từ nhiều hướng khác Thị giác máy tính ban đầu sử dụng liệu đầu vào hình ảnh 2D, phối hợp với kỹ thuật xử lý hình ảnh số, ứng dụng thị giác 2D đem lại thành tựu cơng nghệ mang tính tảng lĩnh vực thị giác máy tính Đi lên bậc cao ứng dụng áp dụng hình ảnh 3D (point cloud, mesh-based,…) Ban đầu ứng dụng không đáng kể, thiết bị camera 3D cịn đắt tiền, từ có xuất thiết bị Kinect rẻ tiền phát triển Microsoft, có thúc tiến phát triển kỹ thuật, thuật tốn xử lý liệu cấu trúc 3D với mục đính biến đổi liệu khối thành thông tin thị giác hữu ích Mục đích luận văn tìm hiểu khám phá kỹ thuật ứng dụng thị giác 3D thông qua ứng dụng trích chọn vật thể (object segmentation), cụ thể dạng mặt phẳng (mặt đất) Hệ thống Kinect tận dụng để thu thập thông tin chân thực, phần mềm lập trình ngôn ngữ C++ tảng Point Cloud Library (PCL) để áp dụng chức xử lý tập đám mây điểm Kết thu cho phép hiển thị vật thể (mặt đất) cần trích chọn, đồng thời đánh giá cách so sánh thuật tốn trích chọn khác để có nhìn trực quan tính thực tế ứng dụng thị giác 3D ABSTRACT With the ever-growing pace of 21th century of scientific and technological advancements, so too are demands for more effective applications of said technologies, as well as their sophistications, to better serve the more and more complex everyday lives One primary demand of such nature is the demand to better acquire and utilize information of real world by computers, in which Computer Vision is a pioneering field of study, due to fascinating level of realism and usefulness inherent in visionary information Computer Vision’s foremost source of information was in the form of 2D images, and combined with Digital Image Processing, has laid solid foundation for all researches and achievements in the field Later, 3D data was introduced, but not fully studied upon, because data retrieval devices such as 3D cameras were expensive and a rare commodity Since the development of cheap Kinect system by Microsoft, however, studies and applications of 3D visionary data has received much more attention than before The purpose of this thesis is to learn and explore the techniques and viability of 3D visionary data for applications, starting with its most basic feature: object recognition (segmentation), ground plane in particular The author utilizes in useful feature of Kinect to capture and store 3D data, then designs in C++ language program using 3D processing tools provided by Point Cloud Library (PCL) for ground plane segmentation The results show visual recognition of ground plane, as well as comparison between segmenting algorithms, for a better understanding of 3D computer vision’s applicability MỤC LỤC LỜI NÓI ĐẦU TÓM TẮT .2 ABSTRACT Chương Tổng quan xử lý liệu hình ảnh 3D 1.1 Vấn đề trích chọn (segmentation) 1.2 Các phương pháp trích chọn kinh điển .10 1.2.1 Phương pháp trích chọn viền (edge-based) 10 1.2.2 Phương pháp phát triển vùng (region growing) 11 1.2.3 Phương pháp khớp mơ hình (model fitting) 12 1.2.4 Phương pháp lai (hybrid) 14 1.2.5 Phương pháp học máy tính (machine learning) 14 Mục tiêu thực luận văn 15 Chương Giới thiệu hệ thống thu thập ảnh 3D 16 2.1 Giới thiệu chung hệ thống Kinect 16 2.2 Môi trường hoạt động hệ thống Kinect 17 2.2.1 Chỉ số kỹ thuật 17 2.2.2 Không gian tọa độ Kinect 18 2.2.3 Hệ thống phần mềm 19 2.2.4 Vài nét đám mây điểm có cấu trúc khơng có cấu trúc 22 Chương Trích chọn mặt phẳng đất liệu Kinect 24 3.1 Ý tưởng hệ thống .24 3.2 Thuật tốn trích chọn sử dụng hệ thống 25 3.2.1 Thuật toán đề xuất .25 3.2.2 Thuật toán RANSAC 32 3.2.3 Thuật toán Random Hough Transform 33 3.3 Bố trí phần cứng .35 3.4 Xây dựng phần mềm 35 Chương Kết quả, đánh giá thảo luận .40 4.1 Đánh giá kết đạt 40 4.2 Kết nhận xét 41 4.2.1 Kết thứ 42 4.2.2 Kết thứ hai 44 4.2.3 Kết thứ ba 46 4.3 Đánh giá hệ thống 47 4.3.1 Ưu điểm .47 4.3.2 Nhược điểm .48 4.4 Kết luận 49 Tài liệu tham khảo .51 Các trang web tham khảo 53 Đối chiếu thuật ngữ Việt Anh .53 Phụ lục 54 [6] M A Fischler, R C Bolles, Random Sample Consensus: A Paradigm for Model Fitting with Applications to Image Analysis and Automated Cartography Communications of the ACM, Vol 24(6)(381-395), 1981 [7] Ballard, D H Generalizing the Hough transform to detect arbitrary shapes Pattern Recognition, Vol 13(2) (183-194), 1991 [8] Chen, D., Zhang, L., Mathiopoulos, P T., & Huang, X A methodology for automated segmentation and reconstruction of urban 3-D buildings from ALS point clouds IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing, Vol 7(10) (4199-4217), 2014 [9] Dorit Borrmann, Jan Elseberg, Kai Lingemann, Andreas Nüchter The 3D Hough Transform for Plane Detection in Point Clouds: A Review and a new Accumulator Design 3D Research, 2011 [10] Vieira, M., & Shimada, K Surface mesh segmentation and smooth surface extraction through region growing Computer aided geometric design, Vol 22(8) (771-792), 2005 [11] Lavoué, G., Dupont, F and Baskurt, A., A new CAD mesh segmentation method, based on curvature tensor analysis Computer-Aided Design, Vol 37(10) (975-987), 2005 [12] MacQueen, J et al., Some methods for classification and analysis of multivariate observations Proc 5th Berkeley symposium on mathematical statistics and probability, 1967 [13] Ng, R T and Han, J Efficient and effective clustering methods for spatial data mining Proc 20th Int Conference on Very Large Databases, 1994 [14] Inge Söderkvist, Per-Åke Wedin On Condition Numbers and Algorithms for Determining a Rigid Body Movement BIT, 34:424–436, 1994 [15] Lei Xu, Erkki Oja Random Hough Transform Encyclopedia of Artificial Intelligence (3 Volumes)(1343-1350), 2008 [16] Lin Li, Fan Yang, Haihong Zhu, Dalin Li, You Li, Lei Tang An Improved RANSAC for 3D Point Cloud Plane Segmentation Based on Normal Distribution Transformation Cells Wuhan University, 2017 46 Các trang web tham khảo [1] https://en.wikipedia.org/wiki/Random_sample_consensus, truy cập lần cuối ngày 2/6/2018 [2] https://pointclouds.org/, truy cập lần cuối ngày 1/6/2018 [3] https://msdn.microsoft.com/en-us/library/jj131033.aspx, truy cập lần cuối ngày 8/5/2018 [4] https://github.com/OpenNI/OpenNI, truy cập lần cuối ngày 15/4/2018 [5] https://www.researchgate.net, truy cập lần cuối ngày 1/6/2018 Đối chiếu thuật ngữ Việt Anh Segmentation Model fitting Region growing Seed point Outlier Inlier Point cloud Trích chọn Khớp mơ hình Phát triển vùng Điểm hạt Điểm nằm ngồi (mơ hình) Điểm nằm (mơ hình) Đám mây điểm 47 Phụ lục Code xây dựng thuật toán đề xuất: std::vector GroundMask(pcl::PointCloud::Ptr cloud, int K, std::vector is_plane) { pcl::KdTreeFLANN kdtree; size_t size = cloud->size(); kdtree.setInputCloud(cloud); std::vector angle[2];//Contain YZ and XZ angle of normal of K-point std::vector pointIdxNKNSearch(K); std::vector neighborPoint(K); std::vector pointNKNSquaredDistance(K); double dis_thres = HEIGHT; std::vector Dis; std::vector Dis2; double step = STEP; double smallThres = 35*RADIEN_STEP; //Lower than this, and angleXZ = double bigThres = 27 * RADIEN_STEP; // (assuming device tilts down no more than 27 degree) double flatX = 5*RADIEN_STEP;//Phi difference no greater than degree, and gradX is equal double flatY = 5*RADIEN_STEP;//Theta difference no greater than degree, and gradY is equal //Create vectors of angle maps of corresponding indices for (int i = 0; i < size; i++) { 48 Eigen::MatrixXf A;//Prepare matrix for SVD solving std::vector entries; entries.clear(); PointT searchPoint = cloud->points[i]; if (searchPoint.y > 0) continue; if (kdtree.nearestKSearch(searchPoint, K, pointIdxNKNSearch, pointNKNSquaredDistance) > 0) { float centroid_x = 0, centroid_y = 0, centroid_z = 0; for (size_t j = 0; j < K; j++) { //Finding centroid for the set of K points centroid_x += (float)cloud->points[pointIdxNKNSearch[j]].x / K; centroid_y += (float)cloud->points[pointIdxNKNSearch[j]].y / K; centroid_z += (float)cloud->points[pointIdxNKNSearch[j]].z / K; neighborPoint[j].push_back(pointIdxNKNSearch[j]);// neighbor points' point-cloud indices } size_t p = 0; while (p < K){ entries.push_back(cloud->points[pointIdxNKNSearch[p]].x centroid_x); entries.push_back(cloud->points[pointIdxNKNSearch[p]].y centroid_y); entries.push_back(cloud->points[pointIdxNKNSearch[p]].z centroid_z); p++; } A = Eigen::MatrixXf::Map(&entries[0], 3, K);//A = (neighborPointcentroid) Eigen::JacobiSVD svd(A, Eigen::ComputeFullU); Eigen::MatrixXf U = svd.matrixU();//Left-singular value of A //Normal for best fitting plane is the last column of U //Only contains info for points with y 0) dis_thres = *std::min_element(Dis2.begin(), Dis2.end()) + step*maxima.back(); else dis_thres = *std::max_element(Dis2.begin(),Dis2.end()); std::vector status; std::vector isplane;//Contains point-cloud indices of floor points status.reserve(size); isplane.reserve(size); while (status.size() 0) continue; //Make sure neighbor point is in range (equal in Dis, Phi and Theta) std::vector::iterator it = std::find(neighborPoint[0].begin(), neighborPoint[0].end(), neighborPoint[j][i]); if (it == neighborPoint[0].end()) continue; int p = (int)std::distance(neighborPoint[0].begin(),it); if (inRange(angle[0][p], angle[0][i], flatX) && inRange(angle[1] [p], angle[1][i], flatY)) { queu.push_back(neighborPoint[j][i]); status[neighborPoint[j][i]] = 1; } } if (!queu.empty()) i= std::distance(neighborPoint[0].begin(),std::find(neighborPoint[0].begin(), neighborPoint[0].end(), queu.back())); } while (!temp.empty()) { if(std::find(isplane.begin(), isplane.end(), temp.back()) == isplane.end()) isplane.push_back(temp.back()); temp.pop_back(); } i = tmp; } status.clear(); for (size_t i = 0; i < size; i++) { status.push_back(false); } int count2 = 0;//Num of points in cloud for (size_t i = 0; i < cloud->size(); i++) {//Search in set of point with y Thres) break; iter ; } //If loop pass iter if (iter