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 cơ khí

Chương này trình bày tổng quan về phương pháp đo biên dạng bề mặt 3D sử

dụng ánh sáng cấu trúc với phương pháp PSGC, làm rõ các ưu nhược điểm của phương

pháp khi đo các chi tiết cơ khí. Các yếu tố ảnh hưởng đến độ chính xác hệ thống cũng

được đề cập đến nhằm phân tích các vấn đề đã được giải quyết và các vấn đề còn tồn

tại. Khảo sát các yếu tố ảnh hưởng đến độ chính xác của phương pháp này như: thông

số hình học của hệ thống, đặc tính bề mặt, vật liệu của chi tiết đo, phương pháp xử lý

dữ liệu 3D, thông số kĩ thuật của thiết bị. Khảo sát tình hình nghiên cứu trong và ngoài

nước, đặc biệt tập trung hai yếu tố ảnh hưởng đến độ chính xác là độ chính xác hiệu

chuẩn và đặc tính phản xạ bề mặt chi tiết đo. Thông qua việc trình bày tình hình nghiên

cứu, phần kết luận chương 1 tổng quát hóa về các vấn đề được trình bày và đề xuất

phương án nghiên cứu

pdf 193 trang dienloan 7780
Bạn đang xem 20 trang mẫu của tài liệu "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 cơ khí", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: 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 cơ khí

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 cơ khí
 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 cơ khí 
Mã số: 9520103 
LUẬN ÁN TIẾN SĨ KỸ THUẬT CƠ KHÍ 
NGƯỜI HƯỚNG DẪN KHOA HỌC: 
1. PGS. TS. Nguyễn Văn Vinh 
2. TS. Phạm Xuân Khải 
Hà Nội – 2018 
LỜI CAM ĐOAN 
Tôi xin cam đoan tất cả những nội dung trong 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 cơ khí” là công trình nghiên cứu 
của riêng tôi, thực hiện dưới sự hướng dẫn của tập thể cán bộ hướng dẫn. Các số liệu, kết quả trong 
luận án là trung thực, trích dẫn đầy đủ và chưa từng được ai công bố trong bất kỳ công trình nào 
khác. 
TM. Tập thể hướng dẫn 
Hà nội, ngày tháng năm 2018 
 Tác giả luận án 
 LỜI CẢM ƠN 
Trong quá trình học tập, nghiên cứu và hoàn thành luận án, tôi đã nhận được rất nhiều 
sự giúp đỡ, góp ý, động viên và chia sẻ của mọi người. Lời đầu tiên tôi xin được 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, chỉ bảo cho tôi những ý kiến vô cùng quý báu và tạo 
điều kiện thuận lợi cho tôi về mặt chuyên môn trong suốt quá trình học tập và thực hiện luận 
án. 
Tôi xin trân trọng cảm ơn các thầy cô trong Bộ môn Cơ khí chính xác & 
Quang học – Trường Đại học Bách khoa Hà Nội đã đóng góp cho tôi những ý kiến bổ ích 
cũng như tạo điều kiện thuận lợi về thời gian cho tôi trong suốt quá 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 mọi điều kiện 
tốt nhất về cơ sở vật chất thí nghiệm, nhiệt tình giúp đỡ tôi trong quá 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 nhất đến gia đình, bố mẹ, chồng và các con 
gái, anh chị em, bạn bè đã động viên, giúp đỡ, chia sẻ những khó khăn trong suốt quá trình 
nghiên cứu và hoàn thành luận án này. 
 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 
1. Lý do lựa chọn đề tài luận án ......................................................................................... 1 
2. Mục đích, đối tượng và phạm vi nghiên cứu của luận án .............................................. 3 
3. Ý nghĩa khoa học và thực tiễn của luận án ..................................................................... 3 
4. Phương pháp nghiên cứu ................................................................................................ 4 
5. Kết cấu của luận án ........................................................................................................ 4 
6. Các kết quả mới .............................................................................................................. 5 
Chương 1 TỔNG QUAN VỀ ĐO LƯỜNG CHI TIẾT CƠ KHÍ SỬ DỤNG ÁNH SÁNG 
CẤU TRÚC ........................................................................................................................... 6 
1.1 Phương pháp đo sử dụng ánh sáng cấu trúc ................................................................. 6 
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 độ chính xác khi đo chi tiết cơ khí .................................. 20 
1.3.1 Độ chính xác hiệu chuẩn hệ thống. ..................................................................... 23 
1.3.2 Ảnh hưởng của phản xạ bề mặt đến độ chính xác khi đo chi tiết cơ 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 của phản xạ bề mặt ............................. 37 
1.3.3 Đánh giá độ chính xác hệ thống PSGC ............................................................... 41 
1.4 Kết luận chương 1 ...................................................................................................... 48 
1.5 Hướng nghiên cứu của luận án .................................................................................. 48 
Chương 2 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 độ chính xác hiệu chuẩn ô vuông bàn cờ ................................................... 53 
2.2.1 Lựa chọn kích thước ô vuông bàn cờ tối ưu ........................................................ 58 
2.2.2 Ảnh hưởng của 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 độ chính xác hiệu chuẩn ô vuông bàn cờ .................................... 72 
2.4.1 Ảnh hưởng của kích thước ô vuông bàn cờ ......................................................... 72 
2.4.2 Khảo sát ảnh hưởng của góc bảng hiệu chuẩn .................................................... 77 
2.4.3 Ảnh hưởng của ánh sáng môi trường đến độ chính xác hiệu chuẩn .................... 82 
2.5 Kết luận chương 2 .................................................................................................. 86 
Chương 3 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 của CCD máy ảnh ................................. 87 
3.2 Phương pháp ghép đám mây điểm với các 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 quả 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 các 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 3 .................................................................................................... 117 
Chương 4 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á độ chính 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á độ chính xác theo mặt phẳng chuẩn ................................................... 125 
4.2 Khảo sát độ chính xác hệ thống ............................................................................... 126 
4.2.1 Đo biên dạng bề mặt của 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 độ chính xác theo mặt phẳng chuẩn ................................................... 131 
4.3 Đo các chi tiết máy và khuôn cơ khí. ................................................................... 131 
4.4 Kết luận chương 4 .................................................................................................... 134 
KẾT LUẬN CHUNG CỦA LUẬN ÁN ............................................................................ 135 
HƯỚNG NGHIÊN CỨU TIẾP THEO ............................................................................. 136 
TÀI LIỆU THAM KHẢO ................................................................................................. 137 
DANH MỤC CÁC CÔNG TRÌNH ĐÃ CÔNG BỐ CỦA LUẬN ÁN ............................. 143 
PHỤ LỤC .............................................................................................................................. 1 
 DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT
Danh mục các chữ viết tắt 
Viết tắt Tên tiếng Anh Nghĩa tiếng Việt 
2D 2 Dimension Không gian 2 chiều 
3D 3 Dimension Không gian 3 chiều 
CNC Computer numerical control Điều khiển số bằng máy tính 
CMM Coordinate measuring machine Máy đo tọa độ 
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 khi 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 trên nhiễu 
BRDF 
Bidirectional reflectance 
distribution function 
chức năng phân bố phản xạ hai 
chiều khác nhau 
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 nhất 
RANSAC RANdom SAmple Consensus 
Phương pháp đồng nhất mẫu 
ngẫu nhiên. 
SVD Singular value decomposition 
STD Standar deviation Độ lệch chuẩn 
 Danh mục cá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 
Gk - Gray code value Giá trị mã Gray 
w( ; , , )w w wO x y z - World-coordinate system Hệ tọa độ hệ thống 
( ; , , )c c c cO x y z - Camera-coordinate system Hệ tọa độ máy ảnh 
( ; , , )p p p pO x y z - Projector coordinate system Hệ tọa độ máy chiếu 
 (O; u, v) - 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 
t mm Translation vector Véc-tơ tịnh tiến 
Pc m Pixel size Kích thước điểm ảnh 
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 
Cu Cv m CCD size 
Kích thước thực cảm biến CCD 
máy ảnh 
,c cu vf f Điểm ảnh 
Tiêu cự máy ảnh theo hai trục u, v 
của cảm biến ảnh 
,p pu vf f Điểm ảnh 
Tiêu cự máy chiếu theo hai trục u, 
v của 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 
 0 0,
c cu v - 
Tọa độ điểm gốc (giao điểm trục 
quang và mặt phảng ảnh) 
,u vT T Điểm ảnh 
Chu kỳ vân chiếu theo phương 
ngang và phương dọc 
nTu, nTv - 
Số chu kỳ vân Gray theo phương 
ngang và phương dọc 
wh 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 khẩu độ ống kính 
N f D= - The number f Số f 
f mm Focal langth Tiêu cự thấu kính 
 Độ ( ) Góc giữa trục quang của máy ảnh 
và máy chiếu 
0R - Reference plane Mặt phẳng tham chiếu 
S mm Checker size Kích thước ô vuông bàn cờ 
B B mm Checkboard size Kích thước bảng hiệu chuẩn 
 Độ ( ) Góc mở của máy chiếu theo 
phương ngang 
 Độ ( ) Góc mở của máy chiếu theo 
phương dọc 
O O b = mm Base line 
Đường cơ sở (Khoảng cách giữa 
quang tâm của máy ảnh và máy 
chiếu) 
L mm 
Khoảng cách từ đường cơ sở đến 
mặt phẳng tham chiếu R0 
( , )cI u v Mức xám 
Cường độ ánh sáng thu được từ 
máy ảnh 
( , )pI u v Mức xám 
Cường độ ánh sáng chiếu từ máy 
chiếu 
mI Mức xám 
Cường độ ánh sáng môi trường 
xung quanh 
AR - Hệ số phản xạ bề mặt tại điểm A 
 tc ms Exposure time Thời gian phơi sáng của máy ảnh 
tp ms Wait time Thời gan trễ của máy chiếu 
 - Độ nhạy của máy ảnh 
nI - Nhiễu của máy ảnh 
c µm Circle of confusion Kích thước vòng tán xạ 
n - Số điểm ảnh trong đám mây điểm 
Si - Các vùng mức xám 
l - 
Thứ tự mức xám trên thang độ xám 
từ 0 đến 255 mức 
Ik Mức xám Giá trị mức xám thứ k 
p(Si ) % 
Tỉ lệ tổng số điểm ảnh có cùng 
mức xám trong vùng Si 
 - threso Ngưỡng sai số cho phép 
k - Số lần lặp 
m - Inlier Số điểm trong tập 
p % 
The probability of a 
successful detection 
Xác xuất thành công của thuật toán 
 DANH MỤC CÁC BẢNG 
Bảng 1.1 Tính chất của vật liệu màu sắc đặc trưng với các hệ số phản xạ bề mặt ......... 33 
Bảng 1.2 Các loại tiêu chuẩn đo ..................................................................................... 42 
Bảng 2.1 Kết quả hiệu chuẩn trong hai trường hợp (a) và (b) ........................................ 82 
Bảng 4.1 Dữ liệu đo chiều cao bậc ở các vị trí cắt khác nhau .................................... 1289 
Bảng 4.2 Kết quả đo chi tiết bậc131 
Bảng 4.3 Dữ liệu đo phù hợp mặt phẳng ở các vị trí và hướng khác nhau ................... 131 
 DANH MỤC HÌNH ẢNH VÀ ĐỒ THỊ 
Hình 1.1 Sơ đồ khối hệ thống đo bằng ánh sáng cấu trúc ........................................ ... ); 
Y = reshape(Y,1,[]); 
Z = sin(X).*cos(Y); % Tao du lieu ma tran 
D = [X; Y; Z]; %chuyen đoi cac gia tri(a.u.): 
T = [Tx; Ty; Tz]; % Vec to tinh tien 
Rx = [1 0 0; % Ma tran quay (rad.): 
 0 cos(rx) -sin(rx); 
 0 sin(rx) cos(rx)]; 
Ry = [cos(ry) 0 sin(ry); 
 0 1 0; 
 -sin(ry) 0 cos(ry)]; 
Rz = [cos(rz) -sin(rz) 0; 
 sin(rz) cos(rz) 0; 
 0 0 1]; 
R = Rx*Ry*Rz; % Chuyen đoi du lieu ma tran 
M = R * D + repmat(T, 1, n); % them mo hinh và du lieu 
rng(2912673); 
M = M + 0.01*randn(3,n); 
D = D + 0.01*randn(3,n); 
%% Chay thuan toan ICP (standard settings) 
[Ricp Ticp ER t] = icp(M, D, n); 
Dicp = Ricp * D + repmat(Ticp, 1, n); 
. 
%% Chay thuan toan ICP (fast kDtree matching and extrapolation) 
function [TR, TT, ER, t] = icp(q,p,varargin) 
 [Ricp Ticp ER t] = icp(M, D, 15, 'Matching', 'kDtree', 'Extrapolation', true); 
% Chuyen doi du lieu ma tran su dung ket qua ICP 
Dicp = Ricp * D + repmat(Ticp, 1, n); 
figure; 
subplot(2,2,1); 
plot3(M(1,:),M(2,:),M(3,:),'bo',D(1,:),D(2,:),D(3,:),'r.'); 
axis equal; 
28 
xlabel('x'); ylabel('y'); zlabel('z'); 
title('Red: z=sin(x)*cos(y), blue: transformed point cloud'); 
.. 
%% Chay thuan toan ICP (partial data) 
Mp = M(:,Y>=0); 
b = (abs(X(Y>=0)) == 2) | (Y(Y>=0) == min(Y(Y>=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 
 [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 trong 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); 
29 
N = p_mark*transpose(q_mark); % taking points of q in matched order 
function [R,T] = eq_lmaPoint(q,p) 
Rx = @(a)[1 0 0; 
 0 cos(a) -sin(a); 
 0 sin(a) cos(a)]; 
Ry = @(b)[cos(b) 0 sin(b); 
 0 1 0; 
 -sin(b) 0 cos(b)]; 
Rz = @(g)[cos(g) -sin(g) 0; 
 sin(g) cos(g) 0; 
 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)); % Chon tri rieng nho nhat 
 n(:,i) = V(:,idx); % Tro ve tri rieng tuong ung 
end 
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); 
4. 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) 
 { 
30 
 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; 
 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 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); 
31 
 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 <= maxIndex + 1)) 
 { 
 return indices; 
 } 
 vtkstd::set S; 
 while (S.size() < numIndices) 
 { 
 S.insert(vtkMath::Random(0, maxIndex)); 
 } 
 for (std::set::iterator iter = S.begin(); iter != S.end(); iter++) 
 { 
 indices.push_back(*iter); 
 } 
 return indices; 
} 
void ExtractPoints(vtkPoints* points, vtkstd::vector indices, vtkPoints* 
output) 
{ 
 for (unsigned int i = 0; i < indices.size(); i++) 
 { 
 double p[3]; 
 points->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); 
32 
 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]; 
 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 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; 
} 
33 
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]; 
 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 << dis << std::endl; 
 if (dis InlierThreshold) 
 inlierIndices.push_back(i); 
 } 
 return inlierIndices; 
} 
namespace my_line 
 std::vector UniqueRandomIndices(const uint maxIndex, const uint 
numIndices) 
 { 
 std::vector indices; 
 temp_1 = rand() % (maxIndex + 1); 
 if ((temp_1 + 10 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); 
34 
 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 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) 
 { 
 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); 
}; 
5. Tóm lược chương trình phù hợp mặt cầu 
#include "stdafx.h" 
#include "vtkCellArray.h" 
using namespace my_sphere; 
35 
myRANSACSphere::myRANSACSphere(void) 
{ 
 this->InlierThreshold = 1.0; 
 this->MaxIterations = 1000; 
 this->NumPointsToFit = 4; 
 this->GoodEnough = 1.0; 
} 
myRANSACSphere::~myRANSACSphere(void) 
{ 
void myRANSACSphere::setInlierThreshold(double mInlierThreshold) 
{ 
 this->InlierThreshold = mInlierThreshold; 
} 
void myRANSACSphere::setMaxIterations(unsigned int mMaxIterations) 
{ 
 this->MaxIterations = mMaxIterations; 
} 
void myRANSACSphere::setGoodEnough(double mGoodEnough) 
{ 
 this->GoodEnough = mGoodEnough; 
} 
double myRANSACSphere::getInlierThreshold() 
 for (unsigned int iter = 0; iter MaxIterations; iter++) 
 //find the best sphere through these random points 
 vtkSmartPointer sphere = vtkSmartPointer::New(); 
 BestFitSphere(points, sphere); 
 } 
 } //end RANSAC loop 
 double c[3], r; 
 this->BestSphere->GetCenter(c); 
 r = this->BestSphere->GetRadius(); 
 for (unsigned int i = 0; i < 3; i++) 
 { 
.. 
 vtkstd::set S; 
 while (S.size() < numIndices) 
 for (std::set::iterator iter = S.begin(); iter != S.end(); iter++) 
 } 
 double p1[3], p2[3], p3[3], p4[3]; 
 double radius; 
 points->GetPoint(0, p1); 
 points->GetPoint(1, p2); 
 points->GetPoint(2, p3); 
 points->GetPoint(3, p4); 
 A[0][0] = 2 * (p1[0] - p2[0]); 
 A[0][1] = 2 * (p1[1] - p2[1]); 
 A[0][2] = 2 * (p1[2] - p2[2]); 
 A[0][3] = pow(p1[0], 2) + pow(p1[1], 2) + pow(p1[2], 2) - pow(p2[0], 2) - 
pow(p2[1], 2) - pow(p2[2], 2); 
 A[1][0] = 2 * (p1[0] - p3[0]); 
36 
 A[1][1] = 2 * (p1[1] - p3[1]); 
 A[1][2] = 2 * (p1[2] - p3[2]); 
 A[1][3] = pow(p1[0], 2) + pow(p1[1], 2) + pow(p1[2], 2) - pow(p3[0], 2) - 
pow(p3[1], 2) - pow(p3[2], 2); 
 A[2][0] = 2 * (p1[0] - p4[0]); 
 A[2][1] = 2 * (p1[1] - p4[1]); 
 A[2][2] = 2 * (p1[2] - p4[2]); 
 A[2][3] = pow(p1[0], 2) + pow(p1[1], 2) + pow(p1[2], 2) - pow(p4[0], 2) - 
pow(p4[1], 2) - pow(p4[2], 2); 
 // Giai hpt bang Gauss 
 void CopySphere(vtkSphere* sphere, vtkSphere* output) 
 double c[3]; 
 sphere->GetCenter(c); 
 double r; 
 r = sphere->GetRadius(); 
 output->SetCenter(c); 
 output->SetRadius(r); 
 double CalcDist(double *point, vtkSphere *sphere) 
 { //Get center and radius 
 double center[3]; 
 double radius = sphere->GetRadius(); 
 double distance; 
 sphere->GetCenter(center); 
 distance = radius - sqrt(pow(point[0] - center[0], 2) + pow(point[1] - 
center[1], 2) + pow(point[2] - center[2], 2)); 
 return abs(distance); 

File đính kèm:

  • pdfluan_an_nghien_cuu_su_dung_phuong_phap_anh_sang_cau_truc_de.pdf
  • pdfBia Quyen tom tat.pdf
  • pdfthong tin dua len mang AV.pdf
  • pdftomtatluanan.pdf