2011-07-21 31 views
6

Tôi có một tập hợp các lát ảnh có kích thước bằng nhau là 2-D. Tôi đã sử dụng MATLAB để ngăn xếp chúng để tạo ra một dữ liệu thể tích. Mặc dù kích thước của các lát 2 chiều là 480x488 pixel, hướng mà hình ảnh được xếp chồng lên nhau không đủ rộng để hình dung âm lượng theo hướng khác nhau khi được chiếu. Tôi cần phải nội suy dọc theo các lát để tăng kích thước cho hình ảnh.Nội suy dọc theo các lát hình ảnh 2-D

Ai đó có thể vui lòng cho tôi ý tưởng hay mẹo về cách thực hiện?

Edit: Anotated dự kính hiển vi-hình ảnh

Looking at a face

General view

Con số 1 là xem trên cùng của khối lượng dự kiến.

Hình 2 là giao diện bên của khối lượng được chiếu.

Khi tôi thay đổi góc xoay và cố gắng hình dung âm lượng theo hướng khác nhau, ví dụ: side-view (hình 2), là những gì tôi thấy như trong hình 2.

Tôi muốn mở rộng khung nhìn bên bằng cách nội suy dọc theo các lát hình ảnh.

+0

Bạn đang làm việc với loại ứng dụng nào? Có liên quan đến hình ảnh y tế (ví dụ: CT) không? –

+0

Alceu, tôi đang làm việc trên các hình ảnh hiển vi. – Sequentialrant

Trả lời

3

MATLAB có chức năng interp3 có thể được sử dụng cho nội suy, giả định rằng dữ liệu được phân loại đồng đều.

Khám phá documentation.

Hy vọng điều này sẽ hữu ích.

EDIT: Chức năng MATLAB interp3 hoạt động như sau:

vi = interp3(x, y, z, v, xi, yi, zi); 

tôi cho rằng bạn "ngăn xếp" của lát xác định các mảng x, y, z, v như 3D mảng, nơi x, y là tọa độ của các điểm ảnh trong mặt phẳng, z là "chiều cao" của mỗi lát và v là các lát hình ảnh thực tế, có thể là giá trị "cường độ" cho pixel.

Nếu bạn muốn nội suy các lát hình ảnh mới ở các giá trị trung gian z bạn có thể chỉ định các cấp này trong mảng zi. Các mảng xi, yi một lần nữa sẽ đại diện cho tọa độ của các điểm ảnh trong mặt phẳng.

+0

Cảm ơn lời đề nghị, Darren.Tôi về cơ bản đang cố gắng thêm lát giữa các lát. Tôi không thể hiểu ý bạn là gì bởi dữ liệu "được phân loại đồng đều". Tôi khá mới mẻ với điều này. Bạn có thể vui lòng giúp tôi hiểu bằng cách xây dựng nó. – Sequentialrant

+1

Xem bản chỉnh sửa của tôi để biết thêm thông tin. Nếu điều này không hữu ích, có thể đăng thêm một vài chi tiết về vấn đề của bạn. Một "discretisation thống nhất" trong trường hợp này có nghĩa là dữ liệu được cấu trúc theo một lưới Descartes (như trái ngược với một triangulation rải rác ví dụ) - Tôi khá tự tin rằng vấn đề của bạn là thống nhất. –

+0

+1 như @DarrenEngwirda giải thích, lát hình ảnh 2D có vị trí lưới đồng nhất (vị trí pixel và chiều cao lát cắt). Nếu vì một lý do nào đó không phải như vậy, bạn có thể sử dụng 'griddata3' /' TriScatteredInterp' để nội suy dữ liệu phân tán ... – Amro

4

Dưới đây là một ví dụ chuyển thể từ MATLAB documentation về cách hiển thị dữ liệu thể tích (tương tự như của bạn) sử dụng isosurfaces:

%# load MRI dataset: 27 slices of 128x128 images 
load mri 
D = squeeze(D);  %# 27 2D-images 

%# view slices as countours 
contourslice(D,[],[],1:size(D,3)) 
colormap(map), view(3), axis tight 

%# apply isosurface 
figure 
%#D = smooth3(D); 
p = patch(isosurface(D,5)); 
isonormals(D, p); 
set(p, 'FaceColor',[1,.75,.65], 'EdgeColor','none') 
daspect([1 1 .5]), view(3), axis tight, axis vis3d 
camlight, lighting gouraud 

%# add isocaps 
patch(isocaps(D,5), 'FaceColor','interp', 'EdgeColor','none'); 
colormap(map) 

contourslice isosurface_isocaps

0

Tôi tạo ra một chức năng để suy cùng hình ảnh lát. Bên dưới là mã:

function res = interp_along_slices(vol, scale) 
    % Interpolation along the image slices 

    % Get the size of the volume 
     [r c p] = size(vol); 

    % Pre-allocate the array: 
    % the third dimension is scale times the p 
     vol_interp = zeros(r,c,scale*p); 

    % interpolate along the image slices 
     for inr = 1:r; 
      for jnr = 1:c; 
       xi = vol(inr,jnr,:); 
       vol_interp(inr,jnr,:) = interp(xi, scale); 
      end; 
     end; 

     res = vol_interp; 

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