我想要生成一個二進制掩碼,其中所有體素的內部都有一個,對於卷之外的所有體素都有零。體積由圍繞一組三維座標的凸包定義(< 100;某些座標位於體積內)。將凸包轉換爲二進制掩碼
我可以使用CONVHULLN獲得凸包,但是如何將其轉換爲二進制掩碼?
如果沒有好的方法去通過凸包,你有任何其他想法如何創建二進制掩碼?
我想要生成一個二進制掩碼,其中所有體素的內部都有一個,對於卷之外的所有體素都有零。體積由圍繞一組三維座標的凸包定義(< 100;某些座標位於體積內)。將凸包轉換爲二進制掩碼
我可以使用CONVHULLN獲得凸包,但是如何將其轉換爲二進制掩碼?
如果沒有好的方法去通過凸包,你有任何其他想法如何創建二進制掩碼?
您可以使用DelaunayTri class和pointLocation 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(真),用於三維點集的凸包內的網格點。
現在已經晚了這裏,所以只是一個非常粗略的建議:
我認爲這會很慢,而且有更好的解決方案,如果有人進入我的夢想,我會在明天再次發帖。
這是一個掃描轉換問題。看看3D Scan-Conversion Algorithms for Voxel-Based Graphics的第8部分。
你想要的算法是實體算法,並且稍微簡單一點,因爲你是一個凸多面體的體素化,其面是三角形的 - 每個「體素」運行由兩個三角形界定。
你的意思是體素,而不是像素,對不對? – brainjam 2010-05-04 23:27:57
當然可以。 – Jonas 2010-05-05 04:12:00