2010-05-04 52 views
3

我想要生成一個二進制掩碼,其中所有體素的內部都有一個,對於卷之外的所有體素都有零。體積由圍繞一組三維座標的凸包定義(< 100;某些座標位於體積內)。將凸包轉換爲二進制掩碼

我可以使用CONVHULLN獲得凸包,但是如何將其轉換爲二進制掩碼?

如果沒有好的方法去通過凸包,你有任何其他想法如何創建二進制掩碼?

+0

你的意思是體素,而不是像素,對不對? – brainjam 2010-05-04 23:27:57

+0

當然可以。 – Jonas 2010-05-05 04:12:00

回答

7

您可以使用DelaunayTri classpointLocation method來解決此問題。下面是一個例子:

pointMatrix = rand(20,3);  %# A set of 20 random 3-D points 
dt = DelaunayTri(pointMatrix); %# Create a Delaunay triangulation 
[X,Y,Z] = meshgrid(0:0.01:1); %# Create a mesh of coordinates for your volume 
simplexIndex = pointLocation(dt,X(:),Y(:),Z(:)); %# Find index of simplex that 
                %# each point is inside 
mask = ~isnan(simplexIndex); %# Points outside the convex hull have a 
           %# simplex index of NaN 
mask = reshape(mask,size(X)); %# Reshape the mask to 101-by-101-by-101 

上面示例創建一個邏輯掩模的101-通過-101-通過-101目跨越(在每個維度0到1)的單位體積,具有1(真),用於三維點集的凸包內的網格點。

2

現在已經晚了這裏,所以只是一個非常粗略的建議:

  1. 有了點從凸殼構造一個德勞內鑲嵌。
  2. 使用DelaunayTri類的pointLocation方法測試像素數組中的每個點。

我認爲這會很慢,而且有更好的解決方案,如果有人進入我的夢想,我會在明天再次發帖。