Nghiên cứu sử dụng phương pháp ánh sáng cấu trúc để nâng cao chất lượng đo chi tiết cơ khí

195 19 0
Nghiên cứu sử dụng phương pháp ánh sáng cấu trúc để nâng cao chất lượng đo chi tiết cơ khí

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI NGUYỄN THỊ KIM CÚC NGHIÊN CỨU SỬ DỤNG PHƯƠNG PHÁP ÁNH SÁNG CẤU TRÚC ĐỂ NÂNG CAO CHẤT LƯỢNG ĐO CHI TIẾT CƠ KHÍ LUẬN ÁN TIẾN SĨ KỸ THUẬT CƠ KHÍ Hà nội - 2018 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI NGUYỄN THỊ KIM CÚC NGHIÊN CỨU SỬ DỤNG PHƯƠNG PHÁP ÁNH SÁNG CẤU TRÚC ĐỂ NÂNG CAO CHẤT LƯỢNG ĐO CHI TIẾT CƠ KHÍ Ngành: Kỹ thuật khí Mã số: 9520103 LUẬN ÁN TIẾN SĨ KỸ THUẬT CƠ KHÍ NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS TS Nguyễn Văn Vinh TS Phạm Xuân Khải Hà Nội – 2018 LỜI CAM ĐOAN Tôi xin cam đoan tất nội dung luận án “Nghiên cứu sử dụng phương pháp ánh sáng cấu trúc để nâng cao chất lượng đo chi tiết khí” cơng trình nghiên cứu riêng tôi, thực hướng dẫn tập thể cán hướng dẫn Các số liệu, kết luận án trung thực, trích dẫn đầy đủ chưa công bố cơng trình khác Hà nội, ngày 18 tháng 01 năm 2019 TM Tập thể hướng dẫn PGS TS Nguyễn Văn Vinh Tác giả luận án Nguyễn Thị Kim Cúc LỜI CẢM ƠN Trong trình học tập, nghiên cứu hồn thành luận án, tơi nhận nhiều giúp đỡ, góp ý, động viên chia sẻ người Lời tơi xin bày tỏ lịng biết ơn tới Ban Giám hiệu, Phịng Đào tạo, Viện Cơ khí, Bộ mơn Cơ Khí Chính Xác & Quang học – Trường Đại học Bách khoa Hà Nội Tôi đặc biệt cảm ơn PGS.TS Nguyễn Văn Vinh, PGS.TS Nguyễn Thị Phương Mai, TS Phạm Xuân Khải hướng dẫn, bảo cho ý kiến vô quý báu tạo điều kiện thuận lợi cho mặt chuyên môn suốt trình học tập thực luận án Tôi xin trân trọng cảm ơn thầy cô Bộ mơn Cơ khí xác & Quang học – Trường Đại học Bách khoa Hà Nội đóng góp cho tơi ý kiến bổ ích tạo điều kiện thuận lợi thời gian cho suốt q trình làm luận án Tơi xin chân thành cảm ơn Phịng thí nghiệm Quang - Cơ Điện Tử 307 C4-5 Bộ mơn Cơ Khí Chính Xác & Quang học – Trường Đại học Bách khoa Hà Nội tạo điều kiện tốt sở vật chất thí nghiệm, nhiệt tình giúp đỡ tơi q trình làm luận án Cuối cùng, tơi xin gửi lời cảm ơn sâu sắc đến gia đình, bố mẹ, chồng gái, anh chị em, bạn bè động viên, giúp đỡ, chia sẻ khó khăn suốt q trình nghiên cứu hồn thành luận án Tác giả luận án Nguyễn Thị Kim Cúc MỤC LỤC LỜI CAM ĐOAN i DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT v DANH MỤC CÁC BẢNG xi DANH MỤC HÌNH ẢNH VÀ ĐỒ THỊ xii MỞ ĐẦU 1 Lý lựa chọn đề tài luận án Mục đích, đối tượng phạm vi nghiên cứu luận án 3 Ý nghĩa khoa học thực tiễn luận án Phương pháp nghiên cứu Kết cấu luận án Các kết Chương TỔNG QUAN VỀ ĐO LƯỜNG CHI TIẾT CƠ KHÍ SỬ DỤNG ÁNH SÁNG CẤU TRÚC 1.1 Phương pháp đo sử dụng ánh sáng cấu trúc 1.2 Phương pháp đo sử dụng ánh sáng mã dịch pha kết hợp Gray 11 1.2.1 Phương pháp dịch pha 11 1.2.2 Phương pháp mã Gray 13 1.2.3 Phương pháp dịch pha kết hợp Gray 14 1.3 Các yếu tố ảnh hưởng đến độ xác đo chi tiết khí 20 1.3.1 Độ xác hiệu chuẩn hệ thống 23 1.3.2 Ảnh hưởng phản xạ bề mặt đến độ xác đo chi tiết khí 31 1.3.2.1 Mơ hình phản xạ bề mặt 31 1.3.2.2 Các nghiên cứu làm giảm ảnh hưởng phản xạ bề mặt 37 1.3.3 Đánh giá độ xác hệ thống PSGC 41 1.4 Kết luận chương 48 1.5 Hướng nghiên cứu luận án 48 Chương NÂNG CAO ĐỘ CHÍNH XÁC HIỆU CHUẨN SỬ DỤNG PHƯƠNG PHÁP ĐO PSGC 49 2.1 Cơ sở phương pháp đo sử dụng dịch pha kết hợp mã Gray (PSGC) 49 2.2 Nâng cao độ xác hiệu chuẩn ô vuông bàn cờ 53 2.2.1 Lựa chọn kích thước vng bàn cờ tối ưu 58 2.2.2 Ảnh hưởng góc bảng hiệu chuẩn 59 2.2.3 Chuyển đổi từ pha sang tọa độ thực 59 2.2.4 Xác định giới hạn vùng đo (w  h  d) 62 2.3 Xây dựng hệ thống thiết bị thực nghiệm 66 2.4 Khảo sát nâng cao độ xác hiệu chuẩn vng bàn cờ 72 2.4.1 Ảnh hưởng kích thước vng bàn cờ 72 2.4.2 Khảo sát ảnh hưởng góc bảng hiệu chuẩn 77 2.4.3 Ảnh hưởng ánh sáng môi trường đến độ xác hiệu chuẩn 82 2.5 Kết luận chương 86 Chương PHƯƠNG PHÁP GIẢM ẢNH HƯỞNG CỦA PHẢN XẠ BỀ MẶT 87 3.1 Các thông số ảnh hưởng đến độ bão hòa CCD máy ảnh 87 3.2 Phương pháp ghép đám mây điểm với thời gian phơi sáng phù hợp 91 3.3 Phương pháp ghép đám mây điểm bù vùng phản xạ 96 3.4 Khảo sát đánh giá hiệu giảm ảnh hưởng phản xạ bề mặt 100 3.4.1 Khảo sát ghép đám mây điểm với thời gian phơi sáng phù hợp 103 3.4.1.1 Khảo sát với mẫu khuôn nhôm 103 3.4.1.2 Khảo sát với mẫu nhôm bậc M1 108 3.4.2 Khảo sát ghép đám mây điểm bù vùng phản xạ lớn 113 3.4.2.1 Khảo sát với chi tiết nhôm bề mặt phức tạp 113 3.4.2.2 Khảo sát với chi tiết nhôm bề mặt bậc 115 3.5 Kết luận chương 117 Chương XÂY DỰNG QUY TRÌNH ĐÁNH GIÁ ĐỘ CHÍNH XÁC HỆ THỐNG ĐO PSGC 118 4.1 Xây dựng tiêu chuẩn đánh giá độ xác 118 4.1.1 Xây dựng thuật toán cho chuẩn đo kiểu A1 118 4.1.2 Xây dựng thuật toán xác định chuẩn kiểu E1 122 4.1.3 Đánh giá độ xác theo mặt phẳng chuẩn 125 4.2 Khảo sát độ xác hệ thống 126 4.2.1 Đo biên dạng bề mặt mẫu bước chuẩn 126 4.2.2 Đo biên dạng mặt cầu 130 4.2.3 Khảo sát độ xác theo mặt phẳng chuẩn 131 4.3 Đo chi tiết máy khuôn khí 131 4.4 Kết luận chương 135 KẾT LUẬN CHUNG CỦA LUẬN ÁN 136 HƯỚNG NGHIÊN CỨU TIẾP THEO 137 TÀI LIỆU THAM KHẢO 138 DANH MỤC CÁC CƠNG TRÌNH ĐÃ CƠNG BỐ CỦA LUẬN ÁN 144 PHỤ LỤC DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT Danh mục chữ viết tắt Viết tắt Tên tiếng Anh Nghĩa tiếng Việt 2D Dimension Không gian chiều 3D Dimension Không gian chiều CNC Computer numerical control Điều khiển số máy tính CMM Coordinate measuring machine Máy đo tọa độ CCD Charge Coupled Device Cảm biến máy ảnh DMD Digital micromirror device Thiết bị vi gương kỹ thuật số DLP Digital light processing Xử lí ánh sáng kỹ thuật số LCD Liquid crystal display Màn hình tinh thể lỏng PSGC Phase shift combined with Gray code Phương pháp đo sử dụng ánh sáng cấu trúc dịch pha kết hợp mã Gray DOF Depth of field Độ sâu trường ảnh HDR High dynamic range Dải tương phản động mở rộng RP Reference phase Bản đồ pha mặt phẳng chiếu OP Object phase Bản đồ pha có vật DFP Digital fringe projection Chiếu vân kỹ thuật số SNR Signal-to-Noise ratio Tỉ số tín hiệu nhiễu BRDF Bidirectional reflectance distribution function chức phân bố phản xạ hai chiều khác MIGL Maximum input graylevel Mức xám đầu vào tối đa ICP Iterative Closest Points Các điểm lặp gần RANSAC RANdom SAmple Consensus Phương pháp đồng mẫu ngẫu nhiên SVD Singular value decomposition STD Standar deviation Độ lệch chuẩn Danh mục ký hiệu Ký hiệu Đơn vị Tên tiếng Anh Nghĩa tiếng Việt t rad Unwrapped phase or absolute phase Pha tuyệt đối w rad Wrapped phase Pha tương đối kG - Gray code value Giá trị mã Gray (O w ; x w , y w , z w ) - World-coordinate system Hệ tọa độ hệ thống (Oc ; xc , y c , z c ) - Camera-coordinate system Hệ tọa độ máy ảnh (O p ; x p , y p , z p ) - Projector coordinate system Hệ tọa độ máy chiếu - Image-coordinate system Tọa độ mặt phẳng ảnh sc - Camera scale ratio Hệ số tỉ lệ máy ảnh sp - Projector scale ratio Hệ số tỉ lệ máy chiếu R - Rotation matrix Ma trận quay r t mm Translation vector Véc-tơ tịnh tiến Pc m Pixel size Kích thước điểm ảnh (O; u, v) Np Mp Điểm ảnh Projector resolution Độ phân giải máy chiếu Nc Mc Điểm ảnh Camera resolution Độ phân giải máy ảnh Kích thước thực cảm biến CCD máy ảnh Cu Cv m f uc , f vc Điểm ảnh Tiêu cự máy ảnh theo hai trục u, v cảm biến ảnh f up , f v p Điểm ảnh Tiêu cự máy chiếu theo hai trục u, v cảm biến ảnh A Điểm ảnh Ma trận nội thông số k1, k2, k3 - Radial distortion coefficients Các hệ số méo hướng tâm p1, p2, p3 - Tangential distortion coefficients Các hệ số méo tiếp tuyến CCD size Tọa độ điểm gốc (giao điểm trục quang mặt phảng ảnh) u0c , v0c - Tu , Tv Điểm ảnh nTu, nTv - h w  d mm Height  Width  Depth Kích thước vùng đo theo chiều cao  rộng  sâu D mm Aperture diameter Đường kính độ ống kính N= f D - The number f Số f f mm Focal langth Tiêu cự thấu kính  Độ ( ) R0 - S Chu kỳ vân chiếu theo phương ngang phương dọc Số chu kỳ vân Gray theo phương ngang phương dọc Góc trục quang máy ảnh máy chiếu Reference plane Mặt phẳng tham chiếu mm Checker size Kích thước vng bàn cờ BB mm Checkboard size Kích thước bảng hiệu chuẩn  Độ ( ) Góc mở máy chiếu theo phương ngang  Độ ( ) Góc mở máy chiếu theo phương dọc OO = b mm L mm Khoảng cách từ đường sở đến mặt phẳng tham chiếu R0 I c (u, v) Mức xám Cường độ ánh sáng thu từ máy ảnh I p (u, v) Mức xám Cường độ ánh sáng chiếu từ máy chiếu Im Mức xám Cường độ ánh sáng môi trường xung quanh RA - Base line Đường sở (Khoảng cách quang tâm máy ảnh máy chiếu) Hệ số phản xạ bề mặt điểm A tc ms Exposure time Thời gian phơi sáng máy ảnh ms Wait time Thời gan trễ máy chiếu  - Độ nhạy máy ảnh In - Nhiễu máy ảnh c µm n - Số điểm ảnh đám mây điểm Si - Các vùng mức xám l - Thứ tự mức xám thang độ xám từ đến 255 mức Ik Mức xám p(Si ) %  - k - m - Inlier Số điểm tập p % The probability of a successful detection Xác xuất thành cơng thuật tốn Circle of confusion Kích thước vòng tán xạ Giá trị mức xám thứ k Tỉ lệ tổng số điểm ảnh có mức xám vùng Si threso Ngưỡng sai số cho phép Số lần lặp int scale_factor_y = 1; int out_cols = 1280 / scale_factor_x; int out_rows = 960 / scale_factor_y; pointcloud.clear(); pointcloud.init_points(out_rows, out_cols); ………………………………………… cv::Mat Rt = calib.R.t(); for (int h = 0; h=0))) | (Y(Y>=0) == max(Y(Y>=0))); bound = find(b); Dp = D(:,X>=0); [Ricp Ticp ER t] = icp(Mp, Dp, 50, 'EdgeRejection', true, 'Boundary', bound, 'Matching', 'kDtree'); Dicp = Ricp * Dp + repmat(Ticp, 1, size(Dp,2)); if arg.Extrapolation % khoi tao cac vec to truyen doi (quaternion ; translation vec.) qq = [ones(1,arg.iter+1);zeros(6,arg.iter+1)]; % Phan bo cac vector de thay doi huong va goc dq = zeros(7,arg.iter+1); theta = zeros(1,arg.iter+1); end t(1) = toc; % Tro lai vong lap chinh for k=1:arg.iter % Thuc hien ghep switch arg.Matching case 'bruteForce' [match mindist] = match_bruteForce(q,pt); case 'Delaunay' [match mindist] = match_Delaunay(q,pt,DT); case 'kDtree' [match mindist] = match_kDtree(q,pt,kdOBJ); end weights = arg.Weight(match); ` % Xac dinh vector weight 25 [R,T] = eq_point(q(:,q_idx),pt(:,p_idx), weights(p_idx)); case 'plane' weights = arg.Weight(match); [R,T] = eq_plane(q(:,q_idx),pt(:,p_idx),arg.Normals(:,q_idx),weights(p_idx)); case 'lmaPoint' [R,T] = eq_lmaPoint(q(:,q_idx),pt(:,p_idx)); end TR(:,:,k+1) = R*TR(:,:,k); % Add to the total transformation TT(:,:,k+1) = R*TT(:,:,k)+T; pt = TR(:,:,k+1) * p + repmat(TT(:,:,k+1), 1, Np); % Apply last transformation ER(k+1) = rms_error(q(:,q_idx), pt(:,p_idx)); % Root mean of objective function ……………………………………………………………………… mindist = sqrt(mindist); function [R,T] = eq_point(q,p,weights) m = size(p,2); n = size(q,2); % tim vector tam weights = weights / sum(weights); % find data centroid and deviations from centroid q_bar = q * transpose(weights); q_mark = q - repmat(q_bar, 1, n); % Apply weights q_mark = q_mark * repmat(weights, 3, 1);% find data centroid and deviations from centroid p_bar = p * transpose(weights); p_mark = p - repmat(p_bar, 1, m); % Apply weights %p_mark = p_mark * repmat(weights, 3, 1); N = p_mark*transpose(q_mark); % taking points of q in matched order function [R,T] = eq_lmaPoint(q,p) Rx = @(a)[1 0; cos(a) -sin(a); sin(a) cos(a)]; Ry = @(b)[cos(b) sin(b); 0; -sin(b) cos(b)]; Rz = @(g)[cos(g) -sin(g) 0; sin(g) cos(g) 0; 0 1]; Rot = @(x)Rx(x(1))*Ry(x(2))*Rz(x(3)); myfun = @(x,xdata)Rot(x(1:3))*xdata+repmat(x(4:6),1,length(xdata)); options = optimset('Algorithm', 'levenberg-marquardt'); function R = quat2rmat(quaternion) q0(1,1,:) = quaternion(1,:); qx(1,1,:) = quaternion(2,:); qy(1,1,:) = quaternion(3,:); qz(1,1,:) = quaternion(4,:); R = [q0.^2+qx.^2-qy.^2-qz.^2 2*qx.*qy-2*q0.*qz 2*qx.*qz+2*q0.*qy; 2*qx.*qy+2*q0.*qz q0.^2-qx.^2+qy.^2-qz.^2 2*qy.*qz-2*q0.*qx; 2*qx.*qz-2*q0.*qy 2*qy.*qz+2*q0.*qx q0.^2-qx.^2-qy.^2+qz.^2]; P = (x - repmat(p_bar,1,k)) * transpose(x - repmat(p_bar,1,k)); % [~, idx] = min(diag(D)); n(:,i) = V(:,idx); end % Chon tri rieng nho nhat % Tro ve tri rieng tuong ung 26 function [neighborIds neighborDistances] = k_nearest_neighbors(dataMatrix, queryMatrix, k) numDataPoints = size(dataMatrix,2); numQueryPoints = size(queryMatrix,2); neighborIds = zeros(k,numQueryPoints); neighborDistances = zeros(k,numQueryPoints); D = size(dataMatrix, 1); % Kich thuoc cua cac diem …………………………………………………………… pts = double(pts); %Calculating freeboundary points: TR = TriRep(poly, pts(1,:)', pts(2,:)', pts(3,:)'); FF = freeBoundary(TR);%Output bound = FF(:,1); Tóm lược chương trình phù hợp mặt phẳng myRANSACLinear.cpp #include "myRANSACLinear.h" using namespace my_line; bestLine.SetOrigin_1(point); bestLine.SetOrigin_2(point); } void CopyLine(myLine &line, myLine &output) { double *o_1, *o_2, *n; o_1 = line.GetOrigin_1(); o_2 = line.GetOrigin_2(); n = line.GetNormal(); output.SetNormal(n); output.SetOrigin_1(o_1); output.SetOrigin_2(o_2); } double CalcDist(cv::Point point, myLine &line) { double *n, *o; double dis, A, B, C; n = line.GetNormal(); o = line.GetOrigin_1(); A = n[0] / 10; B = n[1] / 10; C = -n[0] / 10 * o[0] / 10 - n[1] / 10 * o[1] / 10; dis = (abs(A*point.x / 10 + B*point.y / 10 + C)) / (sqrt(pow(A, 2) + pow(B, 2))); return dis; myRANSACPlane.cpp #include "vtkStreamingDemandDrivenPipeline.h" #include "vtkPolyData.h" #include "vtksys\stl\set" #include "MyRANSACPlane.h" myRANSACPlane::myRANSACPlane(void) { this->InlierThreshold = 1.0; this->MaxIterations = 1000; 27 this->NumPointsToFit = 3; this->GoodEnough = 1.0; return this->GoodEnough; void myRANSACPlane::getPlane(vtkSmartPointer inputPoints, double *normal, double *origin) //track best model this->BestPlane = vtkSmartPointer::New(); //truck number of inliers of best model unsigned int maxInliers = 0; for (unsigned int iter = 0; iter < this->MaxIterations; iter++) { //pick NumPointsToFit random indices vtkstd::vector randomIndices = UniqueRandomIndices(inputPoints->GetNumberOfPoints(), NumPointsToFit); vtkSmartPointer points = vtkSmartPointer::New(); ExtractPoints(inputPoints, randomIndices, points); //find the best plane through these random points vtkSmartPointer plane = vtkSmartPointer::New(); BestFitPlane(points, plane); vtkstd::vector inlierIndices = this>DetermineInliers(inputPoints, plane); if (inlierIndices.size() > maxInliers) { maxInliers = inlierIndices.size(); CopyPlane(plane, this->BestPlane); } if (inlierIndices.size() > inputPoints->GetNumberOfPoints()*this>GoodEnough) //if GoodEnough % of the points fit the model, we can stop the search break; } //end RANSAC loop double n[3], o[3]; this->BestPlane->GetNormal(n); this->BestPlane->GetOrigin(o); if (!(numIndices GetPoint(indices[i], p); output->InsertNextPoint(p[0], p[1], p[2]); } double **a = create_matrix(3, 3); a[0][0] = 0; a[0][1] = 0; a[0][2] = 0; a[1][0] = 0; a[1][1] = 0; a[1][2] = 0; a[2][0] = 0; a[2][1] = 0; a[2][2] = 0; for (int pointId = 0; pointId < NumPoints; pointId++) { double x[3]; double xp[3]; points->GetPoint(pointId, x); xp[0] = x[0] - Center[0]; xp[1] = x[1] - Center[1]; xp[2] = x[2] - Center[2]; for (int i = 0; i < 3; i++) { a[0][i] += xp[0] * xp[i]; a[1][i] += xp[1] * xp[i]; a[2][i] += xp[2] * xp[i]; for (int i = 0; i < 3; i++) //divide by N-1 { a[0][i] /= dNumPoints - 1; a[1][i] /= dNumPoints - 1; a[2][i] /= dNumPoints - 1; } // Extract eigenvectors from covariance matrix double **eigvec = create_matrix(3, 3); double eigval[3]; vtkMath::Jacobi(a, eigval, eigvec); //cleanup free_matrix(eigvec); free_matrix(a); //Set the plane origin to the center of mass BestPlane->SetOrigin(Center[0], Center[1], Center[2]); } void CopyPlane(vtkPlane* plane, vtkPlane* output) { double n[3]; plane->GetNormal(n); double o[3]; 29 plane->GetOrigin(o); output->SetNormal(n); output->SetOrigin(o); } void CenterOfMass(vtkPoints* points, double* center) { center[0] = 0.0; center[1] = 0.0; center[2] = 0.0; for (vtkIdType i = 0; i < points->GetNumberOfPoints(); i++) { double point[3]; points->GetPoint(i, point); center[0] += point[0]; center[1] += point[1]; center[2] += point[2]; double numberOfPoints = static_cast(points->GetNumberOfPoints()); center[0] = center[0] / numberOfPoints; center[1] = center[1] / numberOfPoints; center[2] = center[2] / numberOfPoints; } char* filename, vtkSmartPointer &PointClouds) { VTK_CREATE(vtkPLYReader, reader); reader->SetFileName(filename); reader->Update(); PointClouds = reader->GetOutput(); } void myReadData::ReadOBJFile(const char* filename, vtkSmartPointer &PointClouds) { VTK_CREATE(vtkOBJReader, reader); reader->SetFileName(filename); reader->Update(); PointClouds = reader->GetOutput(); } #include "myRANSACLinear.h" using namespace my_line; myRANSACLinear::myRANSACLinear() void myRANSACLinear::setGoodEnough(double mGoodEnough) double *o_1, *o_2, *n; o_1 = BestLine.GetOrigin_1(); o_2 = BestLine.GetOrigin_2(); n = BestLine.GetNormal(); for (int i = 0; i < 2; i++) { origin_1[i] = o_1[i]; 30 origin_2[i] = o_2[i]; normal[i] = n[i]; std::vector inlierIndices; for (uint i = 0; i < (uint)points.size(); i++) { dis = CalcDist(points[i], line); //std::cout 0)) temp_2 = rand() % ((temp_1 + 10 - (temp_1 - 10) + 1) + temp_1 - 10); else if (temp_1 + 10 > maxIndex) temp_2 = rand() % ((maxIndex - (temp_1 - 10) + 1) + temp_1 - 10); else if (temp_1 - 10 < 0) temp_2 = rand() % (temp_1 + 10 + 1); S.insert(temp_1); S.insert(temp_2); for (std::set::iterator iter = S.begin(); iter != S.end(); iter++) { indices.push_back(*iter); } return indices colors->SetNumberOfComponents(3); colors->SetName("Colors"); VTK_CREATE(vtkPolyDataMapper, mapper); mapper->SetInputConnection(polydata->GetProducerPort()); mapper->Update(); VTK_CREATE(vtkActor, actor); actor->SetMapper(mapper); actor->GetProperty()->SetPointSize(point_size); for (int i = 0; i < (int)polydata->GetNumberOfPoints(); i++) {//double pt[3]; double rColor = color[0], gColor = color[1], bColor = color[2]; //polydata->GetPoint(i, pt); colors->InsertNextTuple3(rColor * 255, gColor * 255, bColor * 255); } polydata->GetPointData()->SetScalars(colors); if (clear_window) 31 { renDisplay->RemoveAllViewProps(); } renDisplay->AddActor(actor); public: myPCLProcessing(); ~myPCLProcessing(); void FittingPlane(vtkSmartPointer points, double double *origin, double &average_err); void Calc_standard_deviation(vtkPoints *points, double *normal, double *origin, double average_err, double &standard_deviation); void FittingSphere(vtkSmartPointer points, double InlierThreshold, double MaxIterations, double* center, double *radius); void Calc_average_err(vtkSmartPointer points, double *center, double radius, double &average_err); void Calc_standard_deviation(vtkPoints *points, double *center, double radius, double average_err, double &standard_deviation); }; Mã nguồn chương trình dịch pha kết hợp Gray code • Cature (Chiếu thu ảnh) #include "structured_light.hpp" #include #include #include generate(patternForScan); //cout generate(patterns); VideoCapture cap(0);//CAP_PVAPI if (!cap.isOpened()) cout txtHwin->Text); int threshold = int::Parse(this->txtThreshold->Text); image_names.resize(number_pattern); ……………………………………………………………… calib.clear(); std::cout

Ngày đăng: 27/02/2021, 11:11

Từ khóa liên quan

Mục lục

  • MỤC LỤC

  • MỞ ĐẦU

  • Chương 1

  • Chương 2

  • Chương 3

  • Chương 4

  • KẾT LUẬN

  • TÀI LIỆU THAM KHẢO

  • PHỤ LỤC

Tài liệu cùng người dùng

Tài liệu liên quan