2012-01-31 48 views
5

Tôi có ma trận 3D dữ liệu trong MATLAB, nhưng tôi muốn trích xuất một lát dữ liệu tùy ý từ ma trận đó và lưu nó dưới dạng ma trận 2D. truy cập. Tương tự như cách hàm slice() hiển thị dữ liệu được cắt lát ở bất kỳ góc nào, ngoại trừ tôi cũng muốn có thể xem và sửa đổi dữ liệu như thể nó là một mảng.Trích xuất mặt phẳng xoay tùy ý của dữ liệu từ mảng 3D thành mảng 2D

Tôi có tọa độ của trục-point của máy bay cũng như các góc quay (trong x, y và z trục), tôi cũng đã tính toán phương trình của mặt phẳng theo hình thức:

Ax + By + Cz = D 

và có thể trích xuất ma trận 3D chỉ chứa dữ liệu rơi trên mặt phẳng đó, nhưng tôi không biết cách chuyển đổi dữ liệu đó thành một mảng 2D đơn giản.

Một cách khác để làm điều đó là bằng cách nào đó xoay ma trận nguồn theo hướng ngược lại của góc của mặt phẳng, để sắp xếp mặt phẳng dữ liệu với trục XY và chỉ cần trích phần đó của ma trận , nhưng tôi không biết nếu xoay một ma trận như thế là có thể.

Tôi hy vọng điều này chưa được giải đáp ở nơi khác, tôi đã googling nó cả ngày, nhưng không có vấn đề nào dường như khớp chính xác với tôi.

Cảm ơn

+0

Bạn chỉ cần dữ liệu rơi chính xác *** trên mặt phẳng (nói chung sẽ là số lượng dữ liệu rất nhỏ) hoặc bạn có muốn nội suy dữ liệu không? – yohai

+0

Tôi muốn trả lại ô gần nhất thay vì nội suy, mặc dù nội suy sẽ được xem xét sau –

+0

Để rõ ràng bạn có ma trận với 3 phân 'A [i, j, k] = a_ijk' và bạn muốn tạo mảng 2 phân chia 'B [u, v] = b_uv' trong đó' u', 'v' là tọa độ trên mặt phẳng/lát của' i', 'j',' k' thế giới? (và tất cả các phân là số nguyên) Ngoài ra, có một số quy ước mà 'ijk' tương ứng với' u = 1' và 'v = 1' không? – ja72

Trả lời

1

Bạn có thể có một cái nhìn tại the code here. Tôi nghĩ rằng chức năng này tương tự như những gì bạn đang cố gắng giải quyết.

function extracts an arbitrary plane from a volume cho kích thước mặt phẳng, điểm trung tâm của mặt phẳng và mặt phẳng bình thường, tức là [A, B, C].Nó cũng xuất ra chỉ số thể tích và tọa độ của từng điểm ảnh trên mặt phẳng.

0

Aha! Có thể đã tự giải quyết nó.

Để tạo ra phương trình mặt phẳng tôi xoay một vector bình thường của (0,0,1) sử dụng ma trận xoay và sau đó tìm D. Nếu tôi cũng xoay các vectơ sau:

(1,0,0) //step in the x direction of our 2D array 

(0,1,0) //step in the y direction of our 2D array 

Tôi sẽ có độ dốc biểu thị số lượng tọa độ của tôi trong x, y, z phải thay đổi trước khi tôi chuyển đến cột tiếp theo trong mảng của mình hoặc đến hàng tiếp theo.

tôi sẽ nhạo báng này lên càng sớm càng tốt và đánh dấu nó như là câu trả lời nếu nó hoạt động

EDIT: Ok nhẹ thay đổi, khi tôi đang quay vectơ của tôi, tôi cũng nên xoay điểm trong không gian 3D đại diện cho xyz tọa độ của x = 0, y = 0, z = 0 (mặc dù tôi đang xoay quanh tâm của cấu trúc, vì vậy nó thực sự là -sizex/2, -sizey/2, -sizez/2, trong đó kích thước là kích thước của dữ liệu, và sau đó tôi chỉ cần thêm kích thước/2 cho mỗi tọa độ sau khi xoay để dịch nó trở lại nơi nó nên được). Bây giờ tôi có độ dốc thay đổi trong 3D khi tôi tăng tọa độ x của mảng 2D và thay đổi độ dốc khi tôi tăng toạ độ y, tôi có thể lặp qua tất cả các tọa độ x và y có thể (mảng kết quả sẽ là 50x50 đối với mảng 50x50x50, tôi không chắc chắn nó sẽ là gì đối với kích thước bất thường, mà tôi sẽ cần phải làm việc cuối cùng) trong mảng 2D của tôi và tính toán tọa độ 3D kết quả trên mặt phẳng của tôi trong dữ liệu. Giá trị góc xoay của tôi đóng vai trò là điểm bắt đầu. Hoan hô!

Chỉ cần có để làm việc ra một thử nghiệm tốt cho việc này bao gồm tất cả các góc và sau đó tôi sẽ chấp nhận điều này như một câu trả lời

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