2011-10-07 37 views
9

Giả sử chúng tôi có ma trận I có kích thước 49x49x5, tương ứng với 5 hình ảnh có kích thước 49x49 xếp chồng lên nhau theo chiều thứ ba để chúng tôi có tổng cộng 5 hình ảnh. Những hình ảnh này nên hình dung mật độ của khí trong không gian 3D, vì vậy chúng ta có thể nghĩ về từng hình ảnh như một phần cắt của căn phòng tại các vị trí khác nhau.Phân chia nhiều hình ảnh trong không gian 3D

Có cách nào để tạo một hình trong MATLAB nơi tất cả 5 hình ảnh được hiển thị là treo trong không gian 3D mà chúng "xuất phát từ" không?

Dưới đây là một hình ảnh hy vọng làm cho nó rõ ràng hơn những gì tôi sau: 5 images haning in 3D space

+0

nào mà bạn sử dụng để tạo ra hình ảnh đó? – Jacob

+2

Google Sketchup :) – Vidar

Trả lời

12

Hãy xem ví dụ sau. Nó sử dụng các chức năng ở mức độ thấp SURFACE để vẽ hình ảnh xếp chồng lên nhau:

%# create stacked images (I am simply repeating the same image 5 times) 
img = load('clown'); 
I = repmat(img.X,[1 1 5]); 
cmap = img.map; 

%# coordinates 
[X,Y] = meshgrid(1:size(I,2), 1:size(I,1)); 
Z = ones(size(I,1),size(I,2)); 

%# plot each slice as a texture-mapped surface (stacked along the Z-dimension) 
for k=1:size(I,3) 
    surface('XData',X-0.5, 'YData',Y-0.5, 'ZData',Z.*k, ... 
     'CData',I(:,:,k), 'CDataMapping','direct', ... 
     'EdgeColor','none', 'FaceColor','texturemap') 
end 
colormap(cmap) 
view(3), box on, axis tight square 
set(gca, 'YDir','reverse', 'ZLim',[0 size(I,3)+1]) 

Tôi đang sử dụng hình ảnh màu được lập chỉ mục (với bản đồ màu trực tiếp), nhưng nó có thể dễ dàng thay đổi để sử dụng hình ảnh màu xám (với bản đồ màu quy mô).

Bây giờ nếu bạn muốn sắp xếp không gian 3D như bạn đã thể hiện trong câu hỏi, chỉ cần trao đổi kích thước Y và Z (hình ảnh xếp chồng lên nhau theo chiều dọc Y thay vì kích thước Z).

Nói chung, để có nhiều quyền kiểm soát hơn đối với góc nhìn, hãy sử dụng camera manipulation functions.

screenshot_zstacked_indexed screenshot_ystacked_grayscale

+0

tôi có thể hỏi làm thế nào bạn thực hiện năm hình ảnh bằng cách tải một? những gì về ý tưởng nếu tôi có 5 hình ảnh gpeg khác nhau và tôi muốn treo chúng như trong 3d? @Amro –

+1

@MuhammadUsmanSaleem trong ví dụ trên tôi chỉ lặp lại hình ảnh 5 lần và xếp chồng lên nhau. Bạn rõ ràng có thể đọc các hình ảnh khác nhau theo cách tương tự, miễn là chúng có cùng kích thước. Ngoài ra tôi đã sử dụng hình ảnh "được lập chỉ mục", nhưng bạn có thể thay đổi hình ảnh để hiển thị hình ảnh "màu xám" (xếp chồng lên nhau trong hình mờ thứ 3) hoặc "truecolor" (xếp chồng lên nhau trong mờ thứ tư). Dưới đây là ví dụ về hình ảnh RGB: http://pastebin.com/T1shKdYF – Amro

+0

cảm ơn trả lời đẹp. Có, tôi biết bạn chỉ cần tải xây dựng trong hình ảnh trong MATLAB, sau đó tạo bản sao của hình ảnh này bằng cách định hình lại. Trên thực tế tôi có 3 hình ảnh gpeg khác nhau. Đây là những cuộc trò chuyện thời tiết trên khí quyển mà tôi muốn hiển thị dưới dạng 3d nơi z axiz sẽ có chiều cao trong bầu khí quyển? Làm thế nào Sau khi đọc những hình ảnh 3, sau đó nơi tôi làm sửa đổi trong mã yêu thương và xinh đẹp của bạn? Xin vui lòng xem hình ảnh nguyên mẫu của eykanal dưới đây. @ Amro i am fan của bạn .... Tôi đã chờ đợi từ một ngày không để nói chuyện với bạn. Cuối cùng bạn nghe thấy giọng nói của tôi ... –

3

Chức năng bạn đang tìm kiếm là patch chức năng. Bằng cách ví dụ:

x=[1 1 6]; y=[2 7 2]; z=[1 1 -1]; 

này quy định một hình tam giác (ba điểm), và tọa độ của các đỉnh là (1,2,1), (1,6,1), và (6,2,-1). Nếu bạn sẽ thêm một điểm thứ tư vào mỗi véc tơ, nó sẽ là một hình chữ nhật, với đỉnh mới tại tọa độ x, y, z mới.

Để trả lời câu hỏi được đăng của bạn trực tiếp, bạn có thể vẽ một số hình chữ nhật cho mỗi biến đơn giản bằng cách sử dụng một mảng đa chiều cho x, y, và z, trong đó mỗi cột chỉ định một đa giác khác nhau. Trên thực tế, công trình này như sau:

% plot two rectangles 
x = [1 1 1 1; 
    1 1 1 1; 
    4 4 4 4; 
    4 4 4 4;]; 

y = [1 1 1 1; 
    2 2 2 2; 
    2 2 2 2; 
    1 1 1 1;]; 

z = [1 2 3 4; 
    1 2 3 4; 
    1 2 3 4; 
    1 2 3 4;]; 

patch(x,y,z,'w'); 

Mà làm:

Four stacked rectangles

Có những lựa chọn bạn có thể sử dụng để thêm màu sắc cho các đa giác, kiểm tra các tài liệu.

+1

Có thể bạn đã hiểu lầm (và hình ảnh của tôi một mình đã gây hiểu lầm). Tôi muốn lấp đầy các bản vá lỗi đó bằng hình ảnh được lưu trữ trong ma trận. Có thể được thực hiện với các bản vá lỗi? Tôi đang xem lát() bây giờ có vẻ hứa hẹn. – Vidar

+1

@Vidar - Trên thực tế, nó có thể, nhưng ví dụ của tôi không phải là những gì bạn đang tìm kiếm sau đó. Xem trang [Thuộc tính bản vá] (http://www.mathworks.com/help/techdoc/ref/patch_props.html?), Phần CData. – eykanal

+0

@eykanal bạn sẽ hướng dẫn tôi ở trên câu trả lời của Armo xin vui lòng –

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