2011-07-21 31 views
6

我有一組相同大小的2-D圖像切片。我用MATLAB來堆疊它們來創建體積數據。雖然二維切片的大小爲480x488像素,但圖像堆疊的方向不夠寬,無法在投影時以不同方向顯示體積。我需要沿切片進行插值以增加可視化的大小。沿2-D圖像切片插值

有人可以給我一個想法或提示如何做到這一點?

編輯:Anotated投影顯微鏡圖像

Looking at a face

General view

該圖1是投影體積的頂視圖。

圖2是投影體積的側視圖。

當我改變旋轉角度並嘗試以不同方向顯示音量時,側視圖(圖2),我看到如圖2所示。

我想通過沿圖像切片進行插值來擴展側視圖。

+0

您在處理什麼樣的應用程序?它與醫學影像(例如CT)有關嗎? –

+0

Alceu,我正在研究顯微圖像。 – Sequentialrant

回答

3

MATLAB有一個函數interp3,可以用於插值,假設數據是均勻分離的。

查看documentation

希望這會有所幫助。

編輯:MATLAB功能interp3工作原理如下:

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

我假設你的切片的「堆棧」定義陣列x, y, z, v3D陣列,其中x, y是在平面上的像素的座標, z是每個切片的「高度」,而v是實際圖像切片,可能是像素的「強度」值。

如果您想插入新圖像切片的中間值z值,您可以在zi陣列中指定這些級別。陣列xi, yi將再次表示平面中像素的座標。

+0

謝謝你的建議,Darren。我基本上試圖在切片之間添加切片。我無法理解「統一離散」數據的含義。我對此很新穎。你能幫我理解一下嗎? – Sequentialrant

+1

查看我的編輯瞭解更多信息。如果這沒有幫助,可能會發布有關您的問題的更多細節。在這種情況下,「統一的離散化」意味着數據的結構是根據笛卡爾網格(例如相對於分散的三角網格) - 我相當確信您的問題是統一的。 –

+0

+1,正如@DarrenEngwirda所解釋的那樣,2D圖像切片具有均勻的網格位置(像素位置和切片高度)。如果出於某種原因,您可以使用'griddata3' /'TriScatteredInterp'來插入散佈的數據... – Amro

4

下面是使用isosurfacesMATLAB documentation上如何可視化體積數據(類似於你的)一個適於例如:

%# 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

我創建一個函數來沿着圖像切片內插。以下是代碼:

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