2014-10-29 21 views
7

Tôi đang sử dụng RANSAC làm phương pháp hồi quy mạnh mẽ của mình. Tôi tìm thấy một hộp công cụ gọn gàng here thực hiện RANSAC bởi Marco Zuliani. Tôi thấy rằng có những ví dụ cho một dòng và một mặt phẳng nhưng nếu có nhiều biến độc lập như trong hồi quy đa biến. Có anyway để sửa đổi mã để xử lý này?RANSAC đa biến hồi quy

Những gì tôi đã thử cho đến nay là sửa đổi mã 3D để xử lý các thứ nguyên N. Khi tôi làm điều này, tôi nhận được tất cả các điểm như là nội tuyến và tôi biết rằng có lẽ là không chính xác. Điều này là quá phù hợp với dữ liệu. Dưới đây là những sửa đổi tôi mệt mỏi để thực hiện.

Đối test_RANSAC_plane.m Tôi chỉ cần thêm nhiều hàng để X

Đối estimate_plane.m:

function [Theta, k] = estimate_plane(X, s) 
    % cardinality of the MSS 
    k = size(X,1); 

    if (nargin == 0) || isempty(X) 
     Theta = []; 
     return; 
    end; 

    if (nargin == 2) && ~isempty(s) 
     X = X(:, s); 
    end; 

    % check if we have enough points 
    N = size(X, 2); 
    if (N < k) 
     error('estimate_plane:inputError', ... 
      'At least k points are required'); 
    end; 

    A = []; 
    for i=1:k 
     A = [A transpose(X(i, :))]; 
    end 
    A = [A ones(N, 1)]; 
    [U S V] = svd(A); 
    Theta = V(:, k+1); 

    return; 

Đối error_plane.m:

function [E T_noise_squared d] = error_plane(Theta, X, sigma, P_inlier) 
    % compute the squared error 
    E = []; 
    k = size(X,1); 
    den = 0; 

    if ~isempty(Theta) && ~isempty(X) 
     for i=1:k 
      den = den + Theta(i)^2; 
     end 

     sum = Theta(1)*X(1,:); 
     for j=2:k 
      sum = sum + Theta(j)*X(j,:); 
     end 
     sum = sum + Theta(j+1); 
     E = (sum).^2/den;     
    end; 

    % compute the error threshold 
    if (nargout > 1) 
     if (P_inlier == 0) 
      T_noise_squared = sigma; 
     else 
      d = k; 
      % compute the inverse probability 
      T_noise_squared = sigma^2 * chi2inv_LUT(P_inlier, d); 
     end; 
    end; 
    return; 
+0

thấy http://www.csd.uwo.ca/~yuri/Abstracts/ijcv10_pearl-abs.shtml – Shai

+0

Một ví dụ cho thấy một tình huống ba chiều, điều gì sẽ xảy ra nếu bạn chỉ đơn giản là cố gắng tăng số lượng kích thước? Ngoài ra, hãy chia sẻ những gì bạn đã thử nói chung cho đến nay. –

+0

Tôi đã cập nhật câu hỏi để bao gồm mã cho đến nay. –

Trả lời

Các vấn đề liên quan