Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 105 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
105
Dung lượng
4,07 MB
Nội dung
LUẬN VĂN TH.S Nghiêncứu phƣơng pháphiệuchỉnhmáyquétbiêndạng3Dánhsángcấutrúc Bản thảo Cập nhật ngày 22/06/2016 Nguyễn Đức Dƣơng duong.mda@gmail.com BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Nguyễn Đức Dƣơng NGHIÊNCỨU PHƢƠNG PHÁPHIỆUCHỈNHMÁYQUÉTBIÊNDẠNG3DBẰNGÁNHSÁNGCẤUTRÚC Chuyên ngành: Chế tạo máy LUẬN VĂN THẠC SỸ KHOA HỌC CHẾ TẠO MÁY Ngƣời hƣớng dẫn khoa học: TS Nguyễn Văn Vinh Hà Nội 2013 MỤC LỤC LỜI CAM ĐOAN iii DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT iv DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ v MỞ ĐẦU viii CHƢƠNG Phƣơng pháp đo biêndạng3Dánhsángcấutrúc 1.1 Các phƣơng pháp đo biêndạng3D 1.1.1 Phƣơng pháp dùng đầu dò .3 1.1.2 Phƣơng pháp chụp ảnh 1.1.3 Phƣơng pháp dùng ánhsángcấutrúc 1.2 Nguyên lý thiết bị đo biêndạng3Dánhsángcấutrúc 1.2.1 Nguyên lý hoạt động máyquétbiêndạng3Dánhsángcấutrúc .8 1.2.2 Mô hình máy đo 17 1.2.3 Một số thiết bị đo biêndạng3Dánhsángcấutrúc 20 1.3 Hiệuchỉnh thiết bị 23 1.3.1 Hiệuchỉnh camera .23 1.3.2 Hiệuchỉnh hệ thống 26 1.4 Nội dung luận án 28 CHƢƠNG Nguyên lý tạo ảnh camera 30 2.1 Cấu tạo camera 30 2.1.1 Hệ quang camera 30 2.1.2 Cảm biến hình ảnh .39 2.2 Mô hình toán học tạo ảnh camera 40 2.2.1 Biến đổi hình học chiều affine 40 i 2.2.2 Mô hình camera lỗ nhỏ 45 2.2.3 Hiệuchỉnh camera dùng phẳng ô vuông bàn cờ 50 2.2.4 Hiệuchỉnh hệ thống gồm hai camera 54 CHƢƠNG Xây dựng mô hình thực nghiệm hiệuchỉnh camera 56 3.1 Thông số camera 56 3.2 Chuẩn mẫu ô vuông bàn cờ 59 3.3 Phần mềm hiệuchỉnh 61 CHƢƠNG Kết thực nghiệm 62 4.1 Điều kiện thực nghiệm 62 4.2 Các bƣớc tiến hành 63 4.3 Kết 73 4.4 Kết luận 75 TÀI LIỆU THAM KHẢO 77 PHỤ LỤC 79 ii LỜI CAM ĐOAN Tôi xin cam đoan luận văn với đề tài “Nghiên cứuphươngpháphiệuchỉnhmáyquétbiêndạng3Dánhsángcấu trúc” công trình nghiêncứu riêng chƣa đƣợc công bố công trình khác Các số liệu nêu luận văn trung thực Hà Nội, ngày tháng 09 năm 2013 Tác giả luận văn Nguyễn iii Đức Dƣơng DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT Các ký hiệu viết tắt Ký hiệu Ý nghĩa 𝜙(𝑥, 𝑦) Pha ánhsáng điểm tọa độ (x,y) (𝑥̌, 𝑦̌) Tọa độ mặt phẳng ảnh thực tế có méo ảnh M Ma trận nội tham số E Ma trận ngoại tham số fx, fy Tiêu cự theo hai trục u v cảm biếnảnh u0, v0 Tọa độ điểm α Hệ số xiên cảm biếnảnh R Ma trận xoay máyảnh t Ma trận chuyển vị máyảnh Các thuật ngữ viết tắt Tiếng Việt Tiếng Anh Chiều sâu nét ảnh Depth of Focus (DOF) Không gian chiều Dimensions (3D) Không gian chiều Dimensions (2D) Chíp vi gƣơng Digital Micro-Mirror Device (DMD) Cảm biến hình ảnh Charge-coupled device (CCD) Độ phân giải Resolution (RES) Máyảnh lỗ nhỏ Pinhole Camera Biến đổi hình học chiều Affine Transformation Vòng tròn mờ Circle of Confusion (CoC) Kỹ thuật tách bỏ pha mang Phase Unwrapping Pha mang Wrapped Phase Hệ thống ánhsángcấutrúc Structured Light Trƣờng nhìn Field Of View (FOV) iv DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ Hình vẽ Hình 1.1: Các hệ máy đo Hình 1.2: Hình bên trái dùng phƣơng pháp đo tiếp xúc, hai hình lại dùng phƣơng pháp đo tiếp xúc Hình 1.3: Phƣơng pháp xác định chiều sâu đối tƣợng phƣơng pháp chụp ảnh Hình 1.4: Ứng dụng phƣơng pháp tam giác lƣợng trong đo lƣờng, từ trái qua phải gồm nguyên lý đo theo điểm, nguyên lý đo theo đƣờng nguyên lý đo vùng Hình 1.5: Máyquét FaroArm kết cấu tay máy bậc tự hãng Faro quét phƣơng pháp đƣờng Hình 1.6: Thiết bị đo Hình 1.7:Sơ đồ thiết bị đo bƣớc xây dựng biêndạng bề mặt vật thể Hình 1.8: Nguyên lý giao thoa (a)-(b) vân giao thoa hai nguồn sáng điểm kết hợp (c)-(d) vân giao thoa hai nguồn sáng phẳng kết hợp 10 Hình 1.9: Kết mô hình dựng 3D phƣơng pháp gỡ pha tích phân đƣờng 13 Hình 1.10: Mô hình 3D dựng thuật toán gỡ pha dùng hai bƣớc sóng .15 Hình 1.11: Công cụ dựng mô hình 3D Theo thứ tự từ trái sang: Ảnh 2D, mô hình 3D chƣa hoàn chỉnh, ảnh 2D đánh dấu vùng cần xử lý, mô hình 3D sau sửa 16 Hình 1.12: Mô hình máy đo thực tế 17 Hình 1.13: Mô hình tính z(x,y) 18 Hình 1.14: Thuật toán đo 20 v Hình 1.15: Sơ đồ phƣơng pháp đo chung cho loại máy đo quétbiêndạng chiều dùng ánhsángcấutrúc 22 Hình 1.16: Ô vuông bàn cờ theo phƣơng pháphiệuchỉnh Tsai .24 Hình 1.17: Hiệuchỉnh camera dùng vật thể 1D .25 Hình 1.18: Hệ tọa độ gốc 27 Hình 1.19: Quy ƣớc hệ tọa độ gốc ảnh CCD DMD .27 Hình 1.20: Mô hình hệ thống phát thu ánhsángcấutrúc 28 Hình 2.1: Ảnh méo ảnh (a) có méo ảnh (b) 32 Hình 2.2:Độ sâu trƣờng 33 Hình 2.3: Sơ đồ tính toán DOF 34 Hình 2.4: Cấu tạo cảm biếnảnh CCD 39 Hình 2.5: Phần tử điểm ảnh không lý tƣởng 40 Hình 2.6:Nguyên lý tạo ảnhmáyảnh lỗ nhỏ .46 Hình 2.7:Nguyên lý phép chiếu phối cảnh .47 Hình 2.8:Nguyên lý chiếu phối cảnh dùng để tính toán 48 Hình 2.9:Quy ƣớc hệ tọa độ .50 Hình 2.10:Trƣờng hợp hiệuchỉnh camera 54 Hình 3.1: Tính trƣờng nhìn ống kính 59 Hình 3.2:Kích thƣớc ô vuông bàn cờ .60 Hình 3.3: Giao diện 61 Hình 4.1: Mô hình hiệuchỉnh camera 62 Hình 4.2:Bộ ảnh dùng để hiệuchỉnh camera 64 Hình 4.3:Xác định vùng làm việc ô vuông bàn cờ 66 Hình 4.4:Vùng tính toán ô vuông bàn cờ 67 Hình 4.5:Kết sau tìm tọa độ góc ô vuông 68 Hình 4.6: Sai số so sánh tọa độ thực tọa độ lý thuyết 70 vi Hình 4.7: Bộ ảnh chụp đối tƣợng 74 Hình 4.8: Chƣơng trình xử lý ảnh 75 Hình 4.9: Bề mặt 3D đối tƣợng 75 Bảng biểu, đồ thị Đồ thị 3.1: Sai số trƣớc tối ƣu 71 Đồ thị 3.2: Sai số sau tối ƣu 72 vii MỞ ĐẦU Ngày nay, giới phƣơng pháp đo không tiếp xúc ngày trở nên phổ biến, đƣợc ứng dụng mặt đời sống xã hội sản xuất công nghiệp nhƣ nhận dạng vật thể dây chuyền kiểm tra, kiểm tra khống chế kích thƣớc gia công, mô xây dựng bề mặt ngành chế tạo mẫu nhanh,… Trong ngành ứng dụng, phƣơng pháp đo không tiếp xúc phát huy ƣu điểm tốc độ đo nhanh, xác, không tác động vật lý tới đối tƣợng đo vậy, xu chung phƣơng pháp đo không tiếp xúc dần thay cho máy đo cổ điển Máy đo quétbiêndạng3D vật thể ánhsángcấutrúcdạng phƣơng pháp đo đƣợc nghiêncứu phát triển hãng chế tạo máy đo tiếng giới Tại Việt Nam, máyquét3D đƣợc sử dụng số khu công nghiệp phục vụ sản xuất nhƣ công ty Honda, viện nghiêncứu khí….và có tiềm lớn để ứng dụng phục vụ nghiêncứu chế tạo, sản xuất tƣơng lai, nhiên giá thành thiết bị cao Do đó, việc nghiêncứu sơ kế thừa kết nghiêncứu áp dụng kĩ thuật nhằm chế tạo thiết bị điều kiện Việt Nam cho phép ứng dụng nhiều vào sản xuất tăng hiểu biết để sử dụng xác hiệu loại thiết bị Trong luận văn này, tập trung nghiêncứu xây dựng phƣơng pháphiệuchỉnh mô hình máy đo đƣợc xây dựng Phòng Thí nghiệm Quang điện tử thuộc môn Cơ khí xác Quang học (Trƣờng ĐH Bách Khoa Hà Nội) nhằm nâng cao độ xác trình mô phỏng, xây dựng mô hình vật thể chiều từ tập đám mây điểm quétánhsángcấutrúc Nội dung luận văn chia làm phần gồm: CHƢƠNG Giới thiệu chung nguyên lý phƣơng pháp đo không tiếp xúc ánhsángcấutrúc viii 11 12 13 14 15 Rc_ext = [ 0.460741 0.865824 0.195106 0.823519 -0.335078 -0.457755 -0.330959 0.371580 -0.867407 ] Tc_ext = [ -34.034306 -91.456236 396.269966 ] Rc_ext = [ -0.050548 0.978517 0.199875 0.990510 0.023508 0.135413 0.127805 0.204823 -0.970419 ] Tc_ext = [ -71.730221 -39.114116 395.470534 ] Rc_ext = [ 0.494353 0.844489 0.206042 0.844311 -0.522862 0.117277 0.206771 0.115988 -0.971490 ] Tc_ext = [ -77.218238 -2.297794 397.555399 ] Rc_ext = [ 0.667980 0.713651 0.210962 0.690300 -0.700102 0.182599 0.278007 0.023655 -0.960288 ] Tc_ext = [ -46.956412 -12.507331 404.390957 ] Rc_ext = [ -0.067380 0.975560 0.209146 0.987663 0.035519 0.152514 0.141358 0.216842 -0.965918 ] Tc_ext = [ -35.638203 -42.341038 400.743810 ] Rc_ext = [ -0.405542 0.888677 0.213985 0.912213 0.378527 0.156799 0.058344 0.258788 -0.964170 ] Trong Tc_ext ma trận chuyển vị, Rc_ext ma trận xoay 80 Mã chƣơng trình hiệu chuẩn máy đo chạy MATLAB calib_gui.m cell_list = {}; fig_number = 1; title_figure = 'Camera Calibration Toolbox - Select mode of operation:'; cell_list{1,1} = {'Standard (all the images are stored in memory)','calib_gui_normal;'}; cell_list{2,1} = {'Memory efficient (the images are loaded one by one)','calib_gui_no_read;'}; cell_list{3,1} = {'Exit',['disp(''Bye To run again, type calib_gui.''); close(' num2str(fig_number) ');']}; show_window(cell_list,fig_number,title_figure,290,18,0,'clean' ,12); click_calib.m var2fix = 'dX_default'; fixvariable; var2fix = 'dY_default'; fixvariable; var2fix = 'map'; fixvariable; if ~exist('n_ima'), data_calib; end; check_active_images; if ~exist(['I_' num2str(ind_active(1))]), ima_read_calib; if isempty(ind_read), disp('Cannot extract corners without images'); return; end; end; 81 fprintf(1,'\nExtraction of the grid corners on the images\n'); if (exist('map')~=1), map = gray(256); end; if exist('dX'), dX_default = dX; end; if exist('dY'), dY_default = dY; end; if exist('n_sq_x'), n_sq_x_default = n_sq_x; end; if exist('n_sq_y'), n_sq_y_default = n_sq_y; end; if ~exist('dX_default')|~exist('dY_default'); dX_default = 30; dY_default = 30; dX_default = 100; dY_default = 100; end; if ~exist('n_sq_x_default')|~exist('n_sq_y_default'), n_sq_x_default = 10; n_sq_y_default = 10; end; if ~exist('wintx_default')|~exist('winty_default'), wintx_default = max(round(nx/128),round(ny/96)); winty_default = wintx_default; clear wintx winty end; if ~exist('wintx') | ~exist('winty'), clear_windows; % Clear all the initiate) 82 window sizes (to re- end; if ~exist('dont_ask'), dont_ask = 0; end; if ~dont_ask, ima_numbers = input('Number(s) of image(s) to process ([] = all images) = '); else ima_numbers = []; end; if isempty(ima_numbers), ima_proc = 1:n_ima; else ima_proc = ima_numbers; end; % Useful option to add images: kk_first = ima_proc(1); %input('Start ([]=1=first): '); image number if exist(['wintx_' num2str(kk_first)]), eval(['wintxkk = wintx_' num2str(kk_first) ';']); if isempty(wintxkk) | isnan(wintxkk), disp('Window size for corner finder (wintx and winty):'); wintx = input(['wintx ([] = ' num2str(wintx_default) ') = ']); if isempty(wintx), wintx = wintx_default; end; wintx = round(wintx); winty = input(['winty ([] = ' num2str(winty_default) ') = ']); if isempty(winty), winty = winty_default; end; winty = round(winty); fprintf(1,'Window %dx%d\n',2*wintx+1,2*winty+1); size end; else 83 = disp('Window size for corner finder (wintx and winty):'); wintx = input(['wintx ([] = ' num2str(wintx_default) ') = ']); if isempty(wintx), wintx = wintx_default; end; wintx = round(wintx); winty = input(['winty ([] = ' num2str(winty_default) ') = ']); if isempty(winty), winty = winty_default; end; winty = round(winty); fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1); end; if ~dont_ask, fprintf(1,'Do you want to use the automatic square counting mechanism (0=[]=default)\n'); manual_squares = input(' or you always want to enter the number of squares manually (1,other)? '); if isempty(manual_squares), manual_squares = 0; else manual_squares = ~~manual_squares; end; else manual_squares = 0; end; for kk = ima_proc, if exist(['I_' num2str(kk)]), click_ima_calib; active_images(kk) = 1; else eval(['dX_' num2str(kk) ' = NaN;']); eval(['dY_' num2str(kk) ' = NaN;']); eval(['wintx_' num2str(kk) ' = NaN;']); eval(['winty_' num2str(kk) ' = NaN;']); eval(['x_' num2str(kk) ' = NaN*ones(2,1);']); eval(['X_' num2str(kk) ' = NaN*ones(3,1);']); eval(['n_sq_x_' num2str(kk) ' = NaN;']); eval(['n_sq_y_' num2str(kk) ' = NaN;']); end; end; 84 check_active_images; % Fix potential non-existing variables: for kk = 1:n_ima, if ~exist(['x_' num2str(kk)]), eval(['dX_' num2str(kk) ' = NaN;']); eval(['dY_' num2str(kk) ' = NaN;']); eval(['x_' num2str(kk) ' = NaN*ones(2,1);']); eval(['X_' num2str(kk) ' = NaN*ones(3,1);']); eval(['n_sq_x_' num2str(kk) ' = NaN;']); eval(['n_sq_y_' num2str(kk) ' = NaN;']); end; if ~exist(['wintx_' num2str(kk)]), num2str(kk)]) | ~exist(['winty_' eval(['wintx_' num2str(kk) ' = NaN;']); eval(['winty_' num2str(kk) ' = NaN;']); end; end; string_save = winty n_ima format_image dY_default dX 'save calib_data active_images ind_active wintx type_numbering N_slots first_num image_numbers calib_name Hcal Wcal nx ny map dX_default dY wintx_default winty_default'; for kk = 1:n_ima, string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' n_sq_x_' num2str(kk) ' n_sq_y_' num2str(kk) ' wintx_' num2str(kk) ' winty_' num2str(kk) ' dX_' num2str(kk) ' dY_' num2str(kk)]; end; eval(string_save); disp('done'); return; go_calib_optim; go_calib_optim.m 85 if ~exist('n_ima'), data_calib; % Load the images click_calib; % Extract the corners end; check_active_images; check_extracted_images; check_active_images; desactivated_images = []; recompute_extrinsic = (length(ind_active) < 100); if ~exist('rosette_calibration', 'var') rosette_calibration = 0; end; if (rosette_calibration) est_dist = ones(5,1); end; go_calib_optim_iter; if ~isempty(desactivated_images), param_list_save = param_list; fprintf(1,'\nNew optimization including the images that have been deactivated during the previous optimization.\n'); active_images(desactivated_images) = ones(1,length(desactivated_images)); desactivated_images = []; go_calib_optim_iter; if ~isempty(desactivated_images), fprintf(1,['List of images left desactivated: ' num2str(desactivated_images) '\n' ] ); end; param_list = [param_list_save(:,1:end-1) param_list]; end; analyse_error.m if ~exist('n_ima')|~exist('fc'), fprintf(1,'No calibration data available.\n'); return; end; check_active_images; if n_ima ~=0, 86 if ~exist(['ex_' num2str(ind_active(1)) ]), fprintf(1,'Need to calibrate before analysing reprojection error Maybe need to load Calib_Results.mat file.\n'); return; end; end; no_grid = 0; colors = 'brgkcm'; figure(5); for kk = 1:n_ima, if exist(['y_' num2str(kk)]), if active_images(kk) & eval(['~isnan(y_' num2str(kk) '(1,1))']), if ~no_grid, eval(['XX_kk = X_' num2str(kk) ';']); N_kk = size(XX_kk,2); if ~exist(['n_sq_x_' num2str(kk)]), no_grid = 1; end; if ~no_grid, eval(['n_sq_x = n_sq_x_' num2str(kk) eval(['n_sq_y = n_sq_y_' num2str(kk) ';']); ';']); if (N_kk ~= ((n_sq_x+1)*(n_sq_y+1))), no_grid = 1; end; end; end; eval(['plot(ex_' num2str(kk) '(1,:),ex_' num2str(kk) '(2,:),''' colors(rem(kk-1,6)+1) '+'');']); hold on; end; end; end; hold off; axis('equal'); if 1, %~no_grid, 87 title('Reprojection error (in pixel) button'); else title('Reprojection error (in pixel)'); end; xlabel('x'); ylabel('y'); To exit: right set(5,'color',[1 1]); set(5,'Name','error','NumberTitle','off'); if n_ima == 0, text(.5,.5,'No image data available','fontsize',24,'horizontalalignment' ,'center'); else err_std = std(ex')'; fprintf(1,'Pixel error: active images)\n\n',err_std); err = [ %3.5f %3.5f] (all b = 1; while b==1, [xp,yp,b] = ginput4(1); if b==1, ddd = (ex(1,:)-xp).^2 + (ex(2,:)-yp).^2; [mind,indmin] = min(ddd); done = 0; kk_ima = 1; while (~done)&(kk_ima1, I = I(:,:,2); end; fprintf(1,'\nExtraction of the grid corners on the image\n'); disp('Window size for corner finder (wintx and winty):'); wintx = input('wintx ([] = 5) = '); if isempty(wintx), wintx = 5; end; wintx = round(wintx); winty = input('winty ([] = 5) = '); if isempty(winty), winty = 5; end; 91 winty = round(winty); fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1); [x_ext,X_ext,n_sq_x,n_sq_y,ind_orig,ind_x,ind_y] extract_grid(I,wintx,winty,fc,cc,kc); = [omc_ext,Tc_ext,Rc_ext,H_ext] compute_extrinsic(x_ext,X_ext,fc,cc,kc,alpha_c); = [x_reproj] project_points2(X_ext,omc_ext,Tc_ext,fc,cc,kc,alpha_c); = err_reproj = x_ext - x_reproj; err_std2 = std(err_reproj')'; Basis = [X_ext(:,[ind_orig ind_x ind_orig ind_y ind_orig ])]; VX = Basis(:,2) - Basis(:,1); VY = Basis(:,4) - Basis(:,1); nX = norm(VX); nY = norm(VY); VZ = min(nX,nY) * cross(VX/nX,VY/nY); Basis = [Basis VZ]; [x_basis] project_points2(Basis,omc_ext,Tc_ext,fc,cc,kc,alpha_c); dxpos = (x_basis(:,2) + x_basis(:,1))/2; dypos = (x_basis(:,4) + x_basis(:,3))/2; dzpos = (x_basis(:,6) + x_basis(:,5))/2; figure(2); image(I); colormap(gray(256)); hold on; plot(x_ext(1,:)+1,x_ext(2,:)+1,'r+'); plot(x_reproj(1,:)+1,x_reproj(2,:)+1,'yo'); h = text(x_ext(1,ind_orig)-25,x_ext(2,ind_orig)-25,'O'); set(h,'Color','g','FontSize',14); 92 = h2 = text(dxpos(1)+1,dxpos(2)-30,'X'); set(h2,'Color','g','FontSize',14); h3 = text(dypos(1)-30,dypos(2)+1,'Y'); set(h3,'Color','g','FontSize',14); h4 = text(dzpos(1)-10,dzpos(2)-20,'Z'); set(h4,'Color','g','FontSize',14); plot(x_basis(1,:)+1,x_basis(2,:)+1,'g-','linewidth',2); title('Image points (+) and reprojected grid points (o)'); hold off; fprintf(1,'\n\nExtrinsic parameters:\n\n'); fprintf(1,'Translation vector: Tc_ext = [ %3.6f \t %3.6f ]\n',Tc_ext); fprintf(1,'Rotation vector: omc_ext = [ %3.6f \t %3.6f ]\n',omc_ext); fprintf(1,'Rotation matrix: Rc_ext = [ %3.6f \t %3.6f\n',Rc_ext(1,:)'); fprintf(1,' %3.6f \t %3.6f\n',Rc_ext(2,:)'); fprintf(1,' %3.6f \t %3.6f ]\n',Rc_ext(3,:)'); fprintf(1,'Pixel error: err = [ %3.5f ]\n\n',err_std2); return; % Stores the results: kk = 1; % Stores location of grid wrt camera: eval(['omc_' num2str(kk) ' = omc_ext;']); eval(['Tc_' num2str(kk) ' = Tc_ext;']); % Stores the projected points: eval(['y_' num2str(kk) ' = x_reproj;']); eval(['X_' num2str(kk) ' = X_ext;']); eval(['x_' num2str(kk) ' = x_ext;']); % Organize the points in a grid: eval(['n_sq_x_' num2str(kk) ' = n_sq_x;']); 93 %3.6f \t %3.6f \t %3.6f \t %3.6f \t %3.6f \t \t %3.5f eval(['n_sq_y_' num2str(kk) ' = n_sq_y;']); 94 ... Nguyên lý hoạt động máy quét biên dạng 3D ánh sáng cấu trúc .8 1.2.2 Mô hình máy đo 17 1.2.3 Một số thiết bị đo biên dạng 3D ánh sáng cấu trúc 20 1.3 Hiệu chỉnh thiết bị ... xây dựng biên dạng bề mặt vật thể 1.2 Nguyên lý thiết bị đo biên dạng 3D ánh sáng cấu trúc 1.2.1 Nguyên lý hoạt động máy quét biên dạng 3D ánh sáng cấu trúc a Cơ sở lý thuyết phƣơng pháp giao... LỜI CAM ĐOAN Tôi xin cam đoan luận văn với đề tài Nghiên cứu phương pháp hiệu chỉnh máy quét biên dạng 3D ánh sáng cấu trúc” công trình nghiên cứu riêng chƣa đƣợc công bố công trình khác Các số