I want to draw voxels in 3d space (I have them stored in a 3d matrix). i used patch to do this (or voxel function from file exchange, draws every face of each voxel). here is my code
function PlotVoxelinput() clear all; clc; %PlotVoxelInput Summary of this function goes here
% Detailed explanation goes here
voxel_init_loc=[0,0,0]; voxel_loc=voxel_init_loc; voxel_size=[1,1,1]; file='Other inputs/nucleon.raw'; %file='Lev input/Model 128/bone_model_3061.raw';
fileID=fopen(file); [A, count] = fread(fileID); m_hight=nthroot(count,3); m_width=nthroot(count,3); m_depth=nthroot(count,3); %set figure parameters
xlim([0 m_hight]); ylim([0 m_width]); zlim([0 m_depth]); view(45,45); daspect([1 1 1]) %get 3d data
VoxelMat= multibandread(file,[m_hight,m_width,m_depth],'uint8',0,'bip','ieee-le'); for i=1:m_hight for j=1:m_width for k=1:m_depth if VoxelMat(i,j,k)==1 voxel(voxel_loc,voxel_size,'b',1) end voxel_loc=[voxel_loc(1),voxel_loc(2),voxel_loc(3)+1]; end voxel_loc=[voxel_loc(1),voxel_loc(2)+1,voxel_init_loc(3)]; end voxel_loc=[voxel_loc(1)+1,voxel_init_loc(2),voxel_init_loc(3)]; end fclose(fileID); end
here is voxel function from file exchange
function voxel(i,d,c,alpha); %VOXEL function to draw a 3-D voxel in a 3-D plot
%
%Usage
% voxel(start,size,color,alpha);
% % will draw a voxel at 'start' of size 'size' of color 'color' and
% transparency alpha (1 for opaque, 0 for transparent)
% Default size is 1
% Default color is blue
% Default alpha value is 1
% % start is a three element vector [x,y,z]
% size the a three element vector [dx,dy,dz]
% color is a character string to specify color
% (type 'help plot' to see list of valid colors)
%
% % voxel([2 3 4],[1 2 3],'r',0.7);
% axis([0 10 0 10 0 10]);
% % Suresh Joel Apr 15,2003
% Updated Feb 25, 2004
switch(nargin), case 0 disp('Too few arguements for voxel'); return; case 1 l=1; %default length of side of voxel is 1
c='b'; %default color of voxel is blue
case 2, c='b'; case 3, alpha=1; case 4, %do nothing
otherwise disp('Too many arguements for voxel'); end; x=[i(1)+[0 0 0 0 d(1) d(1) d(1) d(1)]; ... i(2)+[0 0 d(2) d(2) 0 0 d(2) d(2)]; ... i(3)+[0 d(3) 0 d(3) 0 d(3) 0 d(3)]]'; for n=1:3, if n==3, x=sortrows(x,[n,1]); else x=sortrows(x,[n n+1]); end; temp=x(3,:); x(3,:)=x(4,:); x(4,:)=temp; h=patch(x(1:4,1),x(1:4,2),x(1:4,3),c); set(h,'FaceAlpha',alpha); temp=x(7,:); x(7,:)=x(8,:); x(8,:)=temp; h=patch(x(5:8,1),x(5:8,2),x(5:8,3),c); set(h,'FaceAlpha',alpha); end;
The problem is that matlab crashes if i try to plot a 128X128X128 voxel file (only 2Mb). when i say crashes i mean its simply stuck. nothing happens and it seems most of my computer resources are trying to plot this I am pretty sure its not my pc thats the problem (i7, 8Gb RAM, bench results: 0.2806 0.2195 0.1979 0.2687 0.6053 0.6086). anyone know how can i plot these voxels?
Best Answer