簡體   English   中英

從Matlab中的多個球體圖中提取橫截面

[英]Extract cross sections from a plot of multiple spheres in Matlab

我知道一個盒子中球體的位置(中心和半徑)。 我想提取橫截面。 我可以使用以下Matlab代碼繪制放置在立方體中的球體:

[X,Y,Z] = sphere;
for SpNum = 1:NumSpheres
    surf( X*Radius(SpNum)+Center(SpNum,1), Y*Radius(SpNum)+Center(SpNum,2), Z*Radius(SpNum)+Center(SpNum,3), ...
    'FaceColor','r' );
%shading interp;
hold on;
end
axis tight; daspect([1 1 1]);

在上面的代碼中,每個球體可以具有不同的半徑,並且它們不重疊(因此中心也不同)。

但是,上面的代碼不會生成橫截面。 我想提取類似於我們從X射線CT數據中得到的橫截面:Z方向上的一系列圖像。 我認為'interp2 / interp3'和'slice'函數是相關的函數,但是我不確定如何使用它們生成橫截面。 如果有人可以為我的問題提供指針或提供一些示例代碼,我將不勝感激。

- 提前致謝。

更新:

我嘗試使用meshgrid生成網格點,然后生成函數F(X,Y,Z),如下所示:

[X,Y,Z] = meshgrid(1:100,1:100,1:100);
F = zeros(size(X),'uint8');
for SpNum = 1:NumSpheres
    F( sqrt((X - Center(SpNum,1)).^2 + (Y - Center(SpNum,2)).^2 + (Z -     Center(SpNum,3)).^2) <= Radius(SpNum) ) = 1;
end
surf(F);

其次是:

z = 1;
I = interp3(X, Y, Z, X*Radius(SpNum)+Center(SpNum,1), Y*Radius(SpNum)+Center(SpNum,2), Z*Radius(SpNum)+Center(SpNum,3), z, 'spline');
figure, imshow(I);

我知道interp3是要使用的函數,因為它會插值函數F(X,Y,Z)的值,這些函數表示有界框內不同位置的球體(例如1:100、1:100、1:100) 。 特定“ z”(= 1、2、3 ... 100)處的插值應該給我100個橫截面(以二維圖像的形式)。

缺陷在於函數F本身,因為'surf'拋出一個錯誤,說F應該是一個數組-“ CData必須是一個M×N矩陣或M×N×3數組”。

誰能幫忙。

我終於想通了。 為了他人的利益,這里是代碼。

% A 3-D matrix 'F' which has its value at particular coordinate set to 255 if it belongs to any one of the spheres and 0 otherwise.
[X,Y,Z] = meshgrid(1:100,1:100,1:100);
F = zeros(size(X));
for SpNum = 1:NumSpheres
    F( sqrt((X - Center(SpNum,1)).^2 + (Y - Center(SpNum,2)).^2 + (Z - Center(SpNum,3)).^2) <= Radius(SpNum) ) = 255;        
end
% Extract cross sections from F using interp3 function along the z-axis.
I = zeros(size(X));
for z = 1:100
    I(:,:,z) = interp3(X, Y, Z, F, 1:100, (1:100)', z, 'spline');
end
implay(I,4);

您可以通過將每個球體的Center(3-D矢量)和Radius(某些任意NumSpheres)設置為一些隨機值來測試和可視化輸出。 上面的代碼將顯示一個帶有橫截面的窗口。

以前,我嘗試使用“ surf”渲染不正確的球體。 要進行渲染,您必須使用第一個代碼段。 我犯的另一個錯誤是第6個參數使用行向量而不是列向量。

希望這可以幫助。

-干杯,拉姆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM