[討論] 3D點層轉成座標(有暴力解,求加速)已回收
問題是這樣的:現在有個3D圖形,它是用一層一層的剖面圖來表示的
例如在3x3x3空間裡的一顆中空小球長這樣:
A= cat(3, [0 0 0; 0 1 0; 0 0 0],[0 1 0; 1 0 1; 0 1 0],[0 0 0; 0 1 0; 0 0 0]);
也就是它第一層 0 0 0 第二層 0 1 0 第三層 0 0 0
0 1 0 1 0 1 0 1 0
0 0 0 0 1 0 0 0 0
而我要將它轉成一般的座標點表示,即
B =
1 2 2
2 1 2
2 2 1
2 2 3
2 3 2
3 2 2
(x,y,z)
現在我用最直覺的方式...三層for迴圈開下去跑(如下)....
想當然,在大圖的狀況下跑的非~常~慢
請問有沒有聰明一點的方法來改進這個笨方法? 或者其實有函數在做這件事?
[h w z] = size(A);
num = size(find(A),1);
B = zeros(num,3,'uint16');
num = 1;
for i = 1:h
for j = 1:w
for k = 1:z
if(A(i,j,k) == 1)
B(num,:) = [i j k];
num = num+1;
end
end
end
end
另外如果這個3D圖形只有"一層" (Z方向上一次只有一點為1)能不能再進一步加速?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.164.236
推
06/19 13:47, , 1F
06/19 13:47, 1F
→
06/19 13:47, , 2F
06/19 13:47, 2F
→
06/19 14:19, , 3F
06/19 14:19, 3F
→
06/19 20:23, , 4F
06/19 20:23, 4F