Phương pháp tối thiểu trung bình bình phương [4] ước lượng các thông số bằng cách giảm thiểu phi tuyến:
min med
𝑖 𝑟2𝑖 (1)
Ước lượng phải mạng lại giá trị nhỏ nhất cho các trung bình phần dư bình phương tính toán cho toàn bộ dữ liệu. Phương pháp này rất phù hợp với giá trị nhiễu do địa hình xấu. Thuật toán LMEDS không thể giảm trọng số bình phương nhỏ nhất do không thể viết ra một công thức đơn giản cho việc ước lượng LMedS. Nó phải
được giải quyết bằng cách tìm kiếm trong không gian của các ướng ước lượng có thể được tạo ra từ dữ liệu. Ngay cả khi không gian này quá lớn, thì chỉ một tập con của nó được chọn ngẫu nhiên các dữ liệu có thể được phân tích.
Thuật toán được mô tả như sau: Cho n điểm : {mi = [xi, yi]T}.
1. Công nghệ Monte Carlo được sử dụng để vẽ m mẫu ngẫu nhiên của p điểm khác nhau.
2. Đối với mỗi mẫu con, được đánh chỉ số bởi J, chúng ta sử dụng bất kỳ kỹ thuật nào để tính toán cá thông số hình nón PJ.
3. Với mỗi PJ, chúng ta cần xác định trung bình của các số dư bình phương, ký hiệu là MJ, đối với toàn bộ các điểm:
MJ = med
𝑖=1,…,𝑛𝑟2𝑖(pJ,mj). (2)
Ở đây ta có một số lựa chọn cho 𝑟2𝑖(pJ,mj), phần dư của điểm I với xác suất PJ. Tùy thuộc vào đòi hỏi độ chính các xác, yêu cầu tính toán, … ta có thể sử dụng khoảng cách đại số, khoảng các ở clit, hoặc khoảng cách trọng số gradient.
4. Ta giữ lại ước lượng PJ mà MJ là tối thiểu nhỏ nhất trong m điểm MJ. Câu hỏi đưa ra là làm sao để xác định được m? Một mẫu con là tốt nếu nó chứa p điểm dữ liệu tốt. Giả sử toàn ε tỷ lệ mẫu dữ liệu chứa nhiễu , xác suất có ít nhật một trong các mẫu con m là tốt được cho bởi:
P = 1 – [1 – (1- ε)p]m. (3)
Với P ~ 1, ta có thể xác định được m qua các giá trị của p và ε:
𝑚 = log [1−(1−𝜀)log (1−𝑃)𝑝] (4)
Ở trong việc thực hiện trên, ta giả định ε = 40% và yêu cầu P = 0.99, thì m = 57. Lưu ý rằng thuật toán có thể được tăng nhanh đáng kể bằng các phương tiện tính toán song song, vì vậy việc sử lý đối với từng mẫu của nó có thề được thực hiện một cách độc lập.
Hiệu quả của thuật toán LMedS sẽ rất thấp nếu có sự xuất hiện của nhiễu Gaussian. Hiệu quả của phương pháp này được định nghĩa là tỷ số giữa phương sai thấp nhất có thể đạt được cho các thông sô ước lượng và phương sai thực tế được cung cấp bởi các phương pháp nhất định. Để bù vào cho sự thiếu hụt này, ta tiếp tục thực hiện một thủ tục bình phương nhỏ nhất trọng số. Ước lượng độ lệch tiêu chuẩn được cho bởi:
σ = 1.4826 [1 + 5/(n - p)]√𝑀 𝐽, (5) Với MJ là trung bình nhỏ nhất.
Hằng số 1.4826 là hệ số để đạt được hiệu quả tương tự như một bình phương nhỏ nhất với sự có mặt của nhiễu Gaussian.
5/(n-p) để bù lại hiệu quả của một tập dữ liệu nhỏ.
Dựa trên giá trị σ, chúng ta có thể gán một trọng số cho mỗi giá trị tương ứng:
𝑤 𝑖 = { 1, 𝑛ế𝑢 𝑟2𝑖 ≤ (2.5𝜎) 2
0, (6)
Với ri là phần còn lại của i điểm với nón p. Tương ứng với wi = 0 là các điểm bên ngoài và không nên tiếp tục dưa vào. Nón p là ước lượng cuối cùng bởi việc giải quyết vấn để bình phương nhỏ nhất trọng số:
min
𝑝 = ∑ 𝑤𝑖 𝑖 𝑟2𝑖 (7)
Sử dụng một trong những kỹ thuật được mô tả trên, chúng ta sẽ có phương pháp mạnh để ước lượng nón bởi vì các giá trị ngoại lai được xác định và loại bỏ bởi phương pháp LMedS.
Như đã đề cập ở trên, tính hiệu quả của phương pháp LMedS có thể đạt được bằng cách áp dụng kỹ thuật Monte-Carlo. Tuy nhiên, năm điểm của một mẫu con thậm chí có thể được tạo ra rất gần nhau. Trong tình huống như vậy nên tránh bởi vì ước lượng conic từ các điểm đó rất không ổn định và kết quả gần như là không hữu dụng. Việc đó gây ra sự lãng phí thời gian đánh giá một mẫu con. Để đạt được sự ổn
định cao hơn và hiệu quả hơn, ta cần phát triển một phương pháp lựa chọn ngẫu nhiên dựa trên công nghệ bucking, với phương thực hoạt động như sau: Trước tiên ta tính toán giá trị min và max của các tọa độ điểm trong ảnh đầu tiên. Vùng này được chia đều vào trong một thùng bxb ô (xem hình 3.2, với b=8). Để mỗi nhóm được đính kèm một tập các điểm. Các thùng mà không có các điểm gắn vào phù hợp sẽ bị loại. Để tạo ra một mẫu 5 điểm, trước tiên ta cần chọn ngẫu nhiên 5 thùng, và sau đó chọn ra ngẫu nhiên một điểm trong mỗi thùng được chọn.
Hình 3.2: Ví dụ về công nghệ thùng điểm
Vấn đề là cần bao nhiêu mẫu con? Ta giả định điểm xấu được phân bố đều trong không gian, và nếu mỗi thùng có cùng số điểm và lựa chọn ngẫu nhiên là thống nhất thì công thức (P = 1 – [1 – (1- ε)p]m) vẫn giữ. Tuy nhiên, số lượng các điểm trong một thùng có thể khác nhau từ các thùng khác. Kết quả là, một điểm thuộc 1 thùng có ít điểm hơn xác suất điểm được chọn. Do đó một thùng có nhiều điểm có xác suất cao hơn sẽ được chọn hơn so với thùng chỉ có một vài điểm, để mỗi điểm gần như có cùng một xác suất được lựa chọn.
Ta có thể hình dung bởi thủ tục sau:
Nếu ta có l thùng, ta chia [0 1] vào trong khoảng l với độ rộng của khoảng thứ i là ni/i ni, với ni là số điểm gắn với thùng thứ i (Hình 3.3). Trong thủ tục lựa chọn
thùng, một số, được tạo ra ngẫu nhiên trong đoạn [0 1], rơi vào khoảng thứ I nghĩa là thùng thứ I được lựa chọn.
Hình 3.3: Bản đồ thùng và ước lượng khoảng
Kỹ thuật này sử dụng để khớp giữa hai ảnh chưa được hiệu chỉnh. Ý tưởng của phương pháp này là sử dụng các kỹ thuật cổ điển (phương pháp tương quan và suy giảm) để tìm một tập phù hợp ban đầu và sau đó sử dụng phương pháp Least Median of Squares (LMedS) để loại bỏ các điểm lỗi trong tập này. Hình học epipolar sau đó có thể được ước lượng một các chính xác sử dụng một chuẩn hình ảnh có ý nghĩa.
CHƯƠNG 4 - XÂY DỰNG VÀ CÀI ĐẶT THỬ NGHIỆM 4.1. Các mô hình phân vùng
4.1.1. Phân vùng theo mô hình phẳng
Trong mô hình này sẽ thực hiện tách các đám mây điểm ảnh có cấu trúc phẳng, sau đó tách ra đám mây điểm ảnh có tổng số điểm lớn nhất, bằng giải thuật RANSAC. Tạo cấu trúc đám mây điểm ảnh, đưa vào các giá trị tương ứng và hiển thị nôi dung trên màn hình. Ở đây có thêm một số giá khoảng lệch trong các dữ liệu bằng các thiết lập các giá trị z khác 0.
// Đưa thông tin vào dữ liệu đám mây điểm ảnh cloud->width = 15;
cloud->height = 1;
cloud->points.resize (cloud->width * cloud->height); // Tạo dữ liệu
for (size_t i = 0; i < cloud->points.size (); ++i) {
cloud->points[i].x = 1024 * rand () / (RAND_MAX + 1.0f); cloud->points[i].y = 1024 * rand () / (RAND_MAX + 1.0f); cloud->points[i].z = 1.0; } // Đặt các khoảng lệch cloud->points[0].z = 2.0; cloud->points[3].z = -2.0; cloud->points[6].z = 4.0;
Bảng 4.1: Bảng mô tả đầu vào thuật toán phân vùng mô hình phẳng
Tạo đối tượng SACSegmentation và xây dựng mô hình và phương pháp. Tại đây cũng chỉ ra “ngưỡng khoảng cách”, là giá trị xác định một điểm gần như được coi như là một điểm nhô. Trong chương trình này sử dụng phương pháp RANSAC (pcl::SAC_RANSAC) bởi sử đợn giản của phương pháp này.
pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients); pcl::PointIndices::Ptr inliers (new pcl::PointIndices);
// Tạo đối tượng phân vùng
pcl::SACSegmentation<pcl::PointXYZ> seg; // Tùy chọn seg.setOptimizeCoefficients (true); // Thực hiện phân vùng seg.setModelType (pcl::SACMODEL_PLANE); seg.setMethodType (pcl::SAC_RANSAC); seg.setDistanceThreshold (0.01); seg.setInputCloud (cloud);
seg.segment (*inliers, *coefficients);
Bảng 4.2: Bảng mô tả thuật toán phân vùng mô hình phẳng
Hiển thị các nội dùng của tập nhô, cùng với các tham số mặt phẳng được ước lượng (trong mẫu ax + by + cz = 0).
std::cerr << "Model coefficients: " << coefficients->values[0] << " " << coefficients->values[1] << " "
<< coefficients->values[2] << " " << coefficients->values[3] << std::endl;
Bảng 4.3: Bảng mô tả kết quả thuật toán phân vùng mô hình phẳng
Kết quả chương trình có dạng:
Point cloud data: 15 points 0.352222 -0.151883 2 -0.106395 -0.397406 1 -0.473106 0.292602 1 -0.731898 0.667105 -2 0.441304 -0.734766 1 0.854581 -0.0361733 1
-0.4607 -0.277468 4 -0.916762 0.183749 1 0.968809 0.512055 1 -0.998983 -0.463871 1 0.691785 0.716053 1 0.525135 -0.523004 1 0.439387 0.56706 1 0.905417 -0.579787 1 0.898706 -0.504929 1
[pcl::SACSegmentation::initSAC] Setting the maximum number of iterations to 50 Model coefficients: 0 0 1 -1 Model inliers: 12 1 -0.106395 -0.397406 1 2 -0.473106 0.292602 1 4 0.441304 -0.734766 1 5 0.854581 -0.0361733 1 7 -0.916762 0.183749 1 8 0.968809 0.512055 1 9 -0.998983 -0.463871 1 10 0.691785 0.716053 1 11 0.525135 -0.523004 1 12 0.439387 0.56706 1 13 0.905417 -0.579787 1 14 0.898706 -0.504929 1
Kết quả hiển thị của việc xử lý phân vùng:
Hình 4.1: Kết quả xử lý phân vùng theo mô hình phẳng
Các trục tọa độ được biểu diễn như là màu đỏ (x), màu xanh lá cây (y), và màu xanh da trời (z). Các điểm được thể hiện bằng màu đỏ như là các giá trị ngoại lai, và màu xanh lá cây là điểm nhô của mô hình mặt phẳng được tìm thấy.
4.1.2. Phân vùng theo mô hình trụ
Chương trình thực hiên phân vùng đối tượng cho mô hình trụ, được áp dùng cho tập số liệu đầu vào như sau:
Các điểm dữ liệu xa hơn 1,5 mét được lọc.
Bề mặt tại mỗi điểm đã được ước lượng
Một mô hình phẳng (mô tả các bảng trong bộ dữ liệu) được phân vùng và lưu vào đĩa.
Mô hình trụ (mô tả các cốc trong bộ dữ liệu) được phân vùng và lưu vào đĩa. Chương trình sử dụng một bộ ước lượng RANSAC để có được các hệ số trụ, và áp đặt một ngưỡng khoảng cách từ mỗi điểm nhô đến mô hình (≤ 5cm). Ngoài ra
chương trình thiết lập các tuyến bề mặt ảnh hưởng đến trọng số 0,1 và giới hạn bán kính của mô hình trụ nhỏ hơn 10 cm.
Kết quả chương trình:
PointCloud has: 307200 data points.
PointCloud after filtering has: 139897 data points.
[pcl::SACSegmentationFromNormals::initSACModel] Using a model of type: SACMODEL_NORMAL_PLANE
[pcl::SACSegmentationFromNormals::initSACModel] Setting normal distance weight to 0.100000
[pcl::SACSegmentationFromNormals::initSAC] Using a method of type: SAC_RANSAC with a model threshold of 0.030000
[pcl::SACSegmentationFromNormals::initSAC] Setting the maximum number of iterations to 100
Plane coefficients: header: seq: 0 stamp: 0.000000000 frame_id: values[] values[0]: -0.0161854 values[1]: 0.837724 values[2]: 0.545855 values[3]: -0.528787
PointCloud representing the planar component: 117410 data points.
[pcl::SACSegmentationFromNormals::initSACModel] Using a model of type: SACMODEL_CYLINDER
[pcl::SACSegmentationFromNormals::initSACModel] Setting radius limits to 0.000000/0.100000
[pcl::SACSegmentationFromNormals::initSACModel] Setting normal distance weight to 0.100000
[pcl::SACSegmentationFromNormals::initSAC] Using a method of type: SAC_RANSAC with a model threshold of 0.050000
[pcl::SampleConsensusModelCylinder::optimizeModelCoefficients] LM solver finished with exit code 2, having a residual norm of 0.322616.
Initial solution: 0.0452105 0.0924601 0.790215 0.20495 -0.721649 -0.661225 0.0422902
Final solution: 0.0452105 0.0924601 0.790215 0.20495 -0.721649 -0.661225 0.0396354
Cylinder coefficients: header: seq: 0 stamp: 0.000000000 frame_id: values[] values[0]: 0.0452105 values[1]: 0.0924601 values[2]: 0.790215 values[3]: 0.20495 values[4]: -0.721649 values[5]: -0.661225 values[6]: 0.0396354
PointCloud representing the cylindrical component: 8625 data points.
Bảng 4.4: Bảng kết quả thuật toán phân vùng mô hình trụ
4.1.3. Phân vùng theo mô hình phát triển lân cận
Thuật toán phát triển vùng được thực hiện trong lớp pcl::RegionGrowing. Mục đích của thuật toán là hợp nhất các điểm có đủ gần về các rằng buộc độ mịn. Qua đó đầu ra của thuật toán này là tập hợp các phần vùng là một tập các điểm được coi là một phần của bề mặt cùng độ mịn. Thuật toán này dựa vào vệc so sánh các góc giữa pháp tuyến điểm.
Nguyên lý của thuật toán.
Trước tiên, thuật toán sẽ sắp xếp các điểm theo giá trị độ cong của chúng. Nó cần được thực hiện bởi vì vùng bắt đầu phát triển từ các điểm có giá trị độ cong tối thiểu. Lý do cho điều này là cá điểm có độ cong nhỏ nhất nằm trong khu vực bằng phẳng (tăng trưởng trong khu vực bằng phẳng cho phép đểm giảm tổng số vùng).
Do đó ta có các đám mấy được sắp xếp. Cho đến khi những điểm không được đánh nhãn trong các đám mây, thuật toán nhặt các điểm với giá trị độ cong nhỏ nhất và bắt đầu sự phát triểm của vùng. Quá trình này xảy ra như sau:
Điểm được nhặt được thêm vào tập được gọi là hạt giống.
Với tất cả các thuật toán tìm điểm giống các điểm lân cận.
o Mỗi điểm lân cần được kiểm thử với góc giữa điểm bình thường và các điểm hạt giống hiện tại của nó. Nếu góc thấp hơn giá trị ngưỡng thì điểm hiện tại được thêm vào khu vực hiện tại.
o Sau đó mọi điểm lân cận được kiểm thử cho giá trị độ cong. Nếu độ cong nhỏ hơn giá trị ngưỡng thì điểm này sẽ được thêm vào hạt giống. o Hạt giống hiện tại đươc lấy ra từ các điểm hạt.
Nếu tập các hạt trở nên trống thì có nghĩa là thuật toán đã phát triển vùng và quá trình này được lặp lại từ đầu.
Việc thực hiện tìm những điểm giả được mô tả bằng thuật toán dưới đây:
Thông tin đầu vào:
Point cloud =
Point normals =
Points curvatures =
Neighbour finding function
Curvature threshold
Khởi tạo:
Region list
Available points list
Thuật toán:
While is not empty do
o Current region
o Current seeds
o Point with minimum curvature in
o o o
o for to size ( ) do
Find nearest neighbours of current seed point
for to size ( ) do
Current neighbour point
If contains and then If then end if end if end for o end for
end while
Return
Bảng 4.5: Bảng mô tả thuật toán phát triển lân cận
Hình ảnh mô tả
Hình 4.2: Kết quả phân vùng ảnh theo phương pháp region growin
Trên hình ảnh này ta có thể thấy rằng màu sắc của đám mây có nhiều điểm mày đỏ. Điều này có nghĩa là những điểm này thuộc về nhóm bị từ chối bởi chúng cho có quá ít các điểm.
4.1.4. Phân vùng dựa trên Min-cut
Mô hình phân vùng đối tượng dựa trên Min-cut được thực hiện trong lớp pcl::MinCutSegmentation. Thuật toán này tạo ra một phân vùng nhị phân của các
thuật toán được phân chia trong đám mây với 2 tập: các điểm lân cận và điểm nền tảng (điểm thuộc về đối tượng và điểm không thuộc).
Chương trình được mô tả như sau:
1. Các thuật toán đám mây điểm ảnh xây dựng đồ thị chứa tất cả các điểm đơn của đám mây như là một tập các đỉnh và nhiều hơn 2 đỉnh được gọi là nguồn và đáy. Mỗi đỉnh của đồ thị tương ứng với các điểm được kết nối với nguồn và đáy với các cạnh. Với mỗi đỉnh (trừ nguồn và đáy) có các cạnh kết nối các điểm tương ứng với các điểm láng giềng gần nhất.
2. Thuật toán gán các trọng số cho mỗi cạnh. Có 3 loại trọng số khác nhau: o Trước tiên nó gán trọng số cho tất cả các cạnh giữa các điểm trong đám
mây. Trong số này được gọi là giá trị mịn và được tính theo công thức:
Với là khoảng cách giữa các điểm. Các điểm ở xa và có xác xuất hơn các cạnh sẽ được loại bỏ.
o Bước tiếp theo của thuật toán là đặt giá trị dữ liệu. Nó bao gồm các lỗi lân cận và điểm nền. Lân cận là trọng số cho các cạnh của chúng mà kết nối đến các điểm đám mây với đỉnh nguồn và có giá trị được định nghĩa là hằng số. Điểm nền được gán cho các cạnh mà kết nối đến các điểm với đỉnh đáy và được tính theo công thức:
Với distanceToCenter là khoảng cách đến trung tâm dự kiến của đối
tượng trong mặt phẳng ngang:
Bán kính trong công thức là tham số đầu vào cho thuật toán và có thế được tạm coi như là phạm vi từ bên ngoài trung tâm đối tượng của của các điểm thuộc về lân cận (bán kính ngang của các đối tượng).
Hình 4.3: Mô tả phân vùng ảnh theo phương pháp min-cut
3. Sau tất cả các bước trên thì việc tìm kiếm cắt tối thiểu được thực hiện. Dựa