2016-01-13 79 views
2

我目前必須從一堆2D切片(MATLAB中的二維矩陣,它們表示二維灰度圖像)創建一個球體。我使用下面的代碼創建了一堆切片。爲了創建球體,我已經重複創建了大小增加到100的圓的切片,然後減小了大小。所有這些切片都添加到3D矩陣中。我需要從一堆2D切片創建一個3D球體

Circle = ones(200,400,400); 

for i = 1:100 
    [rr cc] = meshgrid(1:400); 
    C = sqrt((rr-200).^2+(cc-200).^2)<=i; 
    for j = 1:400 
     for k = 1:400 
      Circle(i,j,k) = C(j,k); 
     end 
    end 
end 

index = 100; 

for i = 1:100 
    [rr cc] = meshgrid(1:400); 
    C = sqrt((rr-200).^2+(cc-200).^2)<=index; 
    for j = 1:400 
     for k = 1:400 
      Circle(i+100,j,k) = C(j,k); 
     end 
    end 
    index = index - 1; 
end 

viewer3d(Circle); 

viewer3d是第三部分庫,它可以幫助您查看片的3D圖像棧的3D對象。一旦我想象出這個「假定」的球體,我意識到它是一個菱形的頂部而不是球體。

因此,我不知道如何改變圓的大小,直到y平面中的球體的中心點,然後用相同的算法減小它。

謝謝你的回答,請不要猶豫,讓我澄清這個問題中的任何事情。

+0

我從除去不相干[\ [切片\]](http://stackoverflow.com/tags/slice/info)標籤的題。請在發佈之前閱讀標籤描述,以確保標籤意味着您認爲它的含義:)此外,您可以使用'for i = 100:-1:1'創建遞歸循環,更一般地看一下什麼'100:-1:1'是。 –

+0

@AndrasDeak我忘記了'for i = 100:-1:1'!謝謝你提醒我!我在談論標籤描述的粗略意義上的切片,而是一個科學切片。然而標籤去除是合理的! –

+0

對不起,如果我誤解了,歡迎您重新提出您的問題:)這也是我留下評論的原因:您可以判斷其正確性。 –

回答

3

可替換地,直接地創建一個球體,在不使用循環:

Circle = zeros(200,400,400); 

[x,y,z]=meshgrid(1:size(Circle,1),1:size(Circle,2),1:size(Circle,3)); 

radius=??; %// e.g. radius=100; 
%//this sphere is centered in the middle of the image 
Circle(sqrt((x-size(Circle,1)/2).^2+(y-size(Circle,2)/2).^2.. 
    +(z-size(Circle,2)/2).^2)<radius)=1; 
1

是的,沿着Z軸的半徑不是線性的,而是隨着cos/sin函數而變化的。使用this representation

http://www.derivations.org/sphere.png

你的半徑爲 「半徑= R罪(西塔)」,與 「西塔= ARCCOS(R/Z)」。所以「r」是你的球體的半徑,「z」是你想要畫的水平/切片。不要忘記,「z」從 - 「r」到「r」。我已經測試過這些公式,並且它對於圖像堆棧(切片)可以正常工作。

+4

這不是一個好的答案。完全不清楚OP如何應用您的筆記。不要忘記,如果OP擁有堅定的數學背景(必須使你的筆記變得清晰),他首先不會有這個問題。在目前的形式中,你的回答應該是一個評論。 –

+1

@AndrasDeak哈哈,我覺得我的數學技能不符合您的期望! –

+0

@SharanDuggirala我並不是故意要冒犯你:)相反,我爲了你而將這段評論留給了FiReTiTi,我可能沒有發現它對你有用。 –