我一直在研究modyfing dicom圖像,所以我可以在以後3D打印它們。問題在於,一旦我修改了單個切片以將它們轉換爲.stl文件,我正在使用的軟件(Osirix)會提示請求獲取大量數據的錯誤。如果我在MAtlab中首先嚐試渲染.stl而不進行修改,則不會收到錯誤消息。如何從2D圖像創建3D表面?
我需要一個用於Matlab的代碼示例,它可以將2d圖像堆疊到3d表面中,以便稍後將其導入到.stl文件。誰能幫我?
我一直在研究modyfing dicom圖像,所以我可以在以後3D打印它們。問題在於,一旦我修改了單個切片以將它們轉換爲.stl文件,我正在使用的軟件(Osirix)會提示請求獲取大量數據的錯誤。如果我在MAtlab中首先嚐試渲染.stl而不進行修改,則不會收到錯誤消息。如何從2D圖像創建3D表面?
我需要一個用於Matlab的代碼示例,它可以將2d圖像堆疊到3d表面中,以便稍後將其導入到.stl文件。誰能幫我?
一種方法可能是將二維圖像疊加到三維圖像立方體中。
溶液1 以下解決方案是基於在以下假設: 1)所有二維圖像的大小是相同的:n1
由n2
2)你知道圖像的數量(片) :n3
3),該圖像是uint8
你可以事先創建一個3D立方體:
allImgs = uint8(zeros(n1, n2, n3));
然後以填充第一切片與aSlice
圖像,執行:
allImgs(:, :, 1) = aSlice;
對於第二個,這樣做:
allImgs(:, :, 2) = anotherSlice;
等等。
如果你有一個函數(如getMeASlice()
)是可以獲得切片適合你,你可以有效地從調用此for循環,並填寫起來:
for k = 1:n3
allImgs(:, :, k) = getMeASlice(your_params);
end
解決方案2. 你可以串連切片隨你走。說你讀片:
aSlice = imread('cameraman.tif');
,然後你以後你的代碼讀取另一片並希望將它疊加到現有的,你可以這樣做:
aSlice = cat(3, aSlice, imread('anotherimage.jpg'));
其串接新在第三維中切片。只要你需要,你可以繼續這樣做。
但是,請注意以下幾點。與預先分配變量並添加事物(填充)這種變量相比,連接速度非常慢。舉例來說,如果你比較以下兩個腳本,第二個是要慢得多:
n1=256; n2=256; n3=200;
allImgs = uint8(zeros(n1, n2, n3));
aSlice = imread('cameraman.tif');
tic;
for k=1:n3
allImgs(:,:,1)=aSlice;
end
fprintf(['Total time is: ' num2str(toc) '\n']);
tic;
allImgs=aSlice;
for k=2:n3
allImgs=cat(3, allImgs, aSlice);
end
fprintf(['Total time is: ' num2str(toc) '\n']);
給出我的電腦下面:
Total time is: 0.0085632
Total time is: 0.89103
讓我知道,如果這有助於與否。