2009-10-21 10 views
11

Giả sử bạn có một tập hợp các điểm có tọa độ trên hệ tọa độ Descartes.Cách ánh xạ một điểm trên lưới bị biến dạng

an unwarped grid

Bạn muốn âm mưu một điểm khác, và bạn biết tọa độ của nó trong cùng một hệ thống Cartesian phối hợp.

Tuy nhiên, cốt truyện bạn đang vẽ bị méo từ bản gốc. Hãy tưởng tượng lấy máy bay ban đầu, in nó trên một tấm cao su, và kéo dài nó ở một số nơi và véo nó ở những nơi khác, một cách không đối xứng (không chồng chéo hoặc bất cứ điều gì phức tạp).

a warped grid (source)

Bạn biết tọa độ kéo dài và không được căng sẵn của từng thiết lập của bạn điểm, nhưng không phải là chức năng căng cơ bản. Bạn biết tọa độ chưa được tìm thấy của một điểm mới.

Làm cách nào bạn có thể ước tính vị trí vẽ điểm mới trong tọa độ kéo dài dựa trên vị trí kéo dài của các điểm lân cận? Nó không cần phải chính xác, vì bạn không thể xác định hàm kéo dài thực tế từ một tập các điểm được remapped trừ khi bạn có thêm thông tin.

từ khóa có thể khác: biến dạng méo lưới lưới mặt phẳng tọa độ unwarp

+0

1 cho đồ họa giải thích những gì bạn đang cố gắng để làm – I82Much

+0

Tôi đã đánh cắp chúng bằng và vuông;) – endolith

+0

1 - nổi phrased – Jacob

Trả lời

5

Ok, vì vậy điều này có vẻ như cong vênh ảnh. Đây là những gì bạn nên làm:

  1. Tạo một Delaunay triangulation lưới unwarped bạn và sử dụng kiến ​​thức của bạn của sự tương ứng giữa lưới bong và unwarped để tạo ra các tam giác cho lưới điện bị biến dạng. Bây giờ bạn đã biết hình tam giác tương ứng trong mỗi hình ảnh và vì không có chồng chéo, bạn sẽ có thể thực hiện bước tiếp theo mà không gặp nhiều khó khăn.

  2. Bây giờ, để tìm thấy những điểm tương ứng A, trong hình ảnh bị biến dạng:

    1. Tìm tam giác A dối trá và sử dụng việc chuyển đổi giữa các trianble trong lưới unwarped và lưới bong để tìm ra vị trí mới.

này được giải thích một cách chi tiết rõ ràng here.

Phương thức khác (phức tạp hơn) là Thin Plate Spline (cũng được giải thích trong các trang trình bày ở trên).

+0

Phương pháp này là nhất như những gì tôi đã hình dung. – endolith

+1

Không có sự tương tác một-một giữa các tam giác Delauay của các điểm lưới chưa được bọc và bọc. Trên thực tế đã có lưới thông thường không có tam giác Delaunay duy nhất và thậm chí nếu nó có, biến dạng có thể tạo ra các cạnh cho các cạnh nhất định. –

+1

Có một sự tương ứng một-một từ khi OP biết điều này trước. Vì sự tương ứng này đã được biết, và không có sự chồng chéo trong quá trình cong vênh (theo OP) thì bất kỳ triangulation Delaunay nào trên lưới không được phép có thể được sử dụng cho lưới bị biến dạng và do đó có thể tìm thấy tam giác tương ứng. – Jacob

0

Rất nhiều tùy thuộc vào số điểm hiện có của bạn. Nếu bạn chỉ có một, không thực sự nhiều bạn có thể làm với nó - bạn có thể bù đắp điểm thứ hai bởi cùng một số tiền trong cùng một hướng, nhưng bạn không có đủ dữ liệu để thực sự làm tốt hơn thế.

Nếu bạn có một số lượng hợp lý các điểm hiện có, bạn có thể làm một bề mặt phù hợp thông qua các điểm đó và sử dụng để xác định vị trí thích hợp của điểm mới. Với N điểm, bạn luôn có thể hoàn toàn phù hợp với đa thức N theo thứ tự, nhưng bạn hiếm khi muốn làm điều đó - thay vào đó, bạn thường đoán rằng hàm kéo dài là một hàm bậc thấp (ví dụ như bậc hai hoặc khối) và phù hợp một bề mặt cho các điểm trên cơ sở đó. Sau đó bạn đặt điểm mới của bạn dựa trên chức năng cho bề mặt được trang bị của bạn.

2

Tôi hiểu rằng bạn có sự tương ứng một-một giữa các điểm lưới được bao bọc và không bị khóa. Và tôi cho rằng sự biến dạng không quá khắc nghiệt đến mức bạn có thể có các đường lưới giao nhau (giống như hình ảnh bạn hiển thị). Chiến lược chính xác là những gì Jacob gợi ý: Triangulate hai lưới sao cho có một sự tương ứng một-một giữa các tam giác, xác định vị trí điểm được vẽ trong tam giác và sau đó sử dụng các tọa độ barycentric trong tam giác tương ứng để tính toán vị trí điểm mới.

preprocess

  1. Tạo Delaunay triangulation của các điểm của lưới bọc, chúng ta hãy gọi nó WT.
  2. Đối với mỗi tam giác trong WT thêm hình tam giác giữa các đỉnh tương ứng trong lưới chưa được mở. Điều này cho một triangulation UWT của các điểm chưa được mở.

Bản đồ một điểm p vào lưới bọc

  1. Tìm tam giác T(p1,p2,p3) trong UWT chứa p.
  2. Tính barycentric coordinates(b1,b2,b3) của p trong T(p1,p2,p3)
  3. Hãy Tw(q1,q2,q3) là tam giác trong WT tương ứng với T(p1,p2,p3). Vị trí mới là
    b1 * q1 + b2 * q2 + b3 * q3.

Bình luận Điều này cho phép một hàm biến dạng như một linear spline. Đối với hành vi mượt mà người ta có thể sử dụng cùng một tam giác nhưng làm xấp xỉ bậc cao hơn mà sẽ dẫn đến một tính toán phức tạp hơn một chút thay vì các tọa độ barycentric.

+0

Tôi thích rằng bạn bao gồm các chi tiết ở đây thay vì chỉ liên kết với một tài liệu dài bên ngoài, nhưng điều này nếu không có vẻ giống với câu trả lời của Jacob, đó là lần đầu tiên. – endolith

+0

Các chi tiết mà Jacob bỏ qua và tôi đưa ra trong các ý kiến ​​tạo ra một sự khác biệt đáng kể nếu người ta bắt đầu thực hiện các phương pháp như vậy ... nhưng tôi biết rằng trên lần đầu tiên đọc nó có vẻ khá giống nhau. Tôi quyết định viết một câu trả lời riêng bởi vì mô tả của ông khá khó hiểu và tôi không thể cải thiện giải pháp của ông ấy (tôi không có đủ danh tiếng) –

2

Các câu trả lời khác rất tuyệt. Điều duy nhất tôi muốn thêm là bạn có thể muốn xem Free form deformation như một cách mô tả các biến dạng.

Nếu điều đó hữu ích, thì có thể phù hợp với lưới biến dạng/mạng lưới cho các cặp đã biết của bạn và sau đó bạn có phương pháp biến dạng nhanh các điểm tương lai.