Nối một tập hợp các điểm với nhau bằng một chuyển động cứng nhắc


8

Tôi không thực sự chắc chắn làm thế nào để giải thích vấn đề này rõ ràng, vì vậy xin vui lòng chịu đựng với tôi. Tôi có một cơ sở gồm 3 vectơ đơn vị trực giao và một vị trí, một ma trận biến đổi 4 x 4 tiêu chuẩn trong đồ họa máy tính.

Ngoài ra tôi có một vài điểm (độ lệch) trong không gian mà tôi biến đổi thành không gian thế giới. Các điểm sau đó bị nhiễu loạn một chút và bây giờ tôi muốn tìm cơ sở mới gần nhất để đại diện cho các điểm nhiễu loạn.

Nó không chính xác như tìm kiếm các thành phần nguyên tắc, bởi vì tôi muốn nó tôn trọng sự bù đắp ban đầu. Nếu điều đó hợp lý. Giống như lò xo từ mỗi điểm mới đến vị trí bắt đầu tương ứng của họ. Tôi nghĩ rằng câu trả lời nằm trong việc giải quyết một vấn đề bình phương nhỏ nhất, nhưng tôi nhìn vào đó bây giờ đầu tôi đau.

Ai đó có thể giải thích nó đơn giản cho tôi. Tôi thích một giải pháp dạng đóng, nhưng một giải pháp lặp cũng sẽ ổn thôi. Cảm ơn rất nhiều


Thông tin chi tiết về vấn đề của bạn cần phải được nêu. Rõ ràng bạn có một biến đổi cứng nhắc ("3 vectơ đơn vị trực giao và một vị trí") bao gồm một phép biến đổi trực giao và một bản dịch. Có lẽ bạn đang hỏi làm thế nào để sửa đổi phép biến đổi trực giao, để cố định phần dịch, sao cho các điểm mới bị nhiễu được xấp xỉ tốt nhất (bằng cách áp dụng phép biến đổi cứng nhắc đã điều chỉnh cho các điểm ban đầu). Đánh vần chi tiết: đặt tên cho các phép biến đổi, bản dịch, các điểm. Quan trọng nhất là nêu tiêu chí nào (bình phương nhỏ nhất?) Xác định sự phù hợp nhất.
hardmath

Vâng xin lỗi, tôi không chắc về một số thuật ngữ và cách tốt nhất để mô tả nó. Trên thực tế, tôi cũng muốn sửa đổi vị trí. Cơ sở trực giao + vị trí là một biến đổi affine phải không? Vì vậy, tôi có một phép biến đổi affine, A, biến đổi một số lượng nhỏ các điểm và tôi muốn tìm A 'để phép biến đổi' theo sau 'các điểm tốt nhất có thể sau khi chúng bị nhiễu loạn. Tôi hy vọng điều đó rõ ràng hơn.
DaleyPaley

1
Đây là một vấn đề "cổ điển" với tên "cổ điển", vấn đề Procrustes trực giao , ứng dụng yêu thích của tôi về SVD (phân tách giá trị số ít).
hardmath

1
Vâng, cho tôi một chút để suy nghĩ về việc viết nó lên một cách độc đáo.
hardmath

1
Tôi biết rằng điều này là khoảng 2 năm quá muộn, nhưng tôi có một số mã trên Github sử dụng SVD để giải quyết loại vấn đề này. Có lẽ nó sẽ được sử dụng cho bạn? Đây là liên kết
Nhà phát triển Paul

Câu trả lời:


14

Inge Söderkvist (2009) có một bài viết hay về giải quyết vấn đề chuyển động cơ thể cứng nhắc bằng cách phân tách giá trị số ít (SVD).

Giả sử chúng ta đang trao 3D điểm rằng sau khi vị trí nhiễu loạn mất { y 1 , ... , y n } tương ứng. Chúng tôi tìm kiếm một "chuyển động" cứng nhắc, tức là xoay R và dịch d kết hợp, áp dụng cho các điểm x i để giảm thiểu tổng bình phương của "lỗi":{x1,,xn}{y1,,yn}Rdxi

i=1n||Rxi+dyi||2

Hãy nghĩ đến những điểm như cột, và quay R như một 3 × 3 ma trận trực giao. Nói một cách chính xác, chúng tôi yêu cầu det ( R ) = 1 vì khi chuyển động liên tục, một vòng quay sẽ bảo toàn "hướng" của các điểm, tức là sẽ không liên quan đến việc phản xạ chúng.xTôi,yTôiR3×3phát hiện(R)= =1

Bước đầu tiên là trừ đi các phương tiện tương ứng từ các điểm x i , y i , có tác dụng "loại bỏ" (hiện tại) bản dịch chưa biết . Đó là, vấn đề trở thành:x¯,y¯xTôi,yTôid

tối thiểuRSÔi(3)||RMột-B||F

nơi và . Ở đây biểu thị nhóm ma trận xoay trực giao đặc biệt trong 3D, chúng ta được phép chọn từ và định mức ma trận ở đây biểu thị định mức Frobenius , tức là căn bậc hai của tổng bình phương của các mục ma trận (như Euclide định mức, nhưng trên các mục ma trận).Một= =[x1-x¯,Giáo dục,xn-x¯]S O ( 3 ) R FB= =[y1-y¯,Giáo dục,yn-y¯]SÔi(3)RF

Bây giờ đều là ma trận . Giảm thiểu ở trên là một vấn đề Procrustes trực giao chỉ cho phép ma trận xoay. Giải pháp được đưa ra bằng cách lấy phân tách giá trị số ít của ma trận "hiệp phương sai" :3 × n R C = B A TMột,B3×nRC= =BMộtT

C= =BạnSVT

Trong đó là ma trận trực giao và là ma trận đường chéo của các giá trị số ít . Các gói đại số tuyến tính số như Matlab và Octave sẽ tính toán SVD cho bạn.S = diag ( σ 1 , σ 2 , σ 3 ) σ 1σ 2σ 30Bạn,VS= =(σ1,σ2,σ3)σ1σ2σ30

Khi chúng ta có SVD, xác định trong đó dấu hiệu trong yếu tố giữa được chọn để tạo . Thông thường, một ứng dụng trong thế giới thực sẽ có det ( R ) = 1 det ( U V T ) = 1R= =Bạn(1,1,±1)VTphát hiện(R)= =1phát hiện(BạnVT)= =1 , và do đó, dấu hiệu được chọn sẽ là dương. Nếu không, điều đó có nghĩa là trực giao tốt nhất (bảo toàn khoảng cách) phù hợp với các điểm mới liên quan đến sự phản chiếu và nó gợi ý kiểm tra dữ liệu cho các lỗi.

Cuối cùng, chúng tôi xác định bản dịchd= =y¯-Rx¯ . Làm xong!

Biến thể của các vấn đề Procrustes trực giao trong đó chỉ cho phép quay cũng là chủ đề của một bài viết Wikipedia khác về thuật toán Kabsch . Ký hiệu trong các bài viết Wikipedia khác với chúng ta nhân với ở bên phải, thay vì (như ở đây) ở bên trái.R


1
Tuyệt diệu! Cảm ơn bạn rất nhiều vì đã dành thời gian để viết nó lên. Thực sự rất hữu ích.
DaleyPaley

Có cách nào tiêu chuẩn để giải quyết phiên bản "có trọng số" của vấn đề này không, trong đó các tạp âm ở các điểm khác nhau có phương sai khác nhau?
nibot

@nibot: Hãy xem luận án của T. Vikland (2006) , trong đó trình bày một số bài trình bày và xuất bản về vấn đề Procrustes trực giao có trọng số (WOPP): "Giải pháp cho WOPP không thể được tính toán dễ dàng như đối với OPP. , một WOPP có thể có một số cực tiểu cục bộ. "
hardmath 18/03/17

Có một cách viết tương tự và hữu ích khác về cách tiếp cận SVD từ ETHZ: igl.ethz.ch/projects/ARAP/svd_rot.pdf
Linuxios
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.