How can I visualise and extract 3D data without using isosurface function
3 次查看(过去 30 天)
显示 更早的评论
I have a model of a tumour that evolves over time, essentially a 4D matrix of cellc concentration c(r,t) size (m,n,p,t). I can do some nice looking things using the built in functions to visualise it and make movies of growth. However I want to be able to extract the isosurface to make some quantitative calculations, or surface area, volume and a measure of the irregularity of the isosurface, essentially a gradient function.
The data is a grid of voxels with a cell concentration c at each voxel. Say I want to look at the surface where c > x. I can extract a matrix with logical indexing by ISO = Tumour > x, which then gives me a 3D matrix. I want to visualise this and calculate the surface area. I can do volume by sum(sum(sum(ISO)))*voxelsize, but visualising the surface without isosurface is stumping me. Also calculating the gradient. I wrote a 2D code:
%%Anisotropy Measure using gradient integral
%A quantitative measure of tumour anisotropy,
%1/(2*pi*R)*Integraldxdy* absolute value of grad phi
%discretised version:
%Sigma(ijk) abs(grad c(r)) =
%sqrt((partialc/partialx)^2+(partialc/partialy)^2+(partialc/partialz))dV
%partialc/partialx = ((Ci+1,j,k - Ci-1,j,k)/2deltax)
%practice code
RR = rand(10);
dx = 1
for i = 1:8, j = 1:10
dcdxsq =((RR(i+2,j) - RR(i,j))/2).^2
end
for i=1:10, j=1:8
dcdysq=((RR(i,j+2) - RR(i,j))/2).^2
end
Aniso = sqrt(sum(sum(dcdxsq)) + sum(sum(dcdysq)))
figure
surf(RR)
str = sprintf('Random surface with Anisotropy = %f',Aniso);
title(str);
now I want to do this with the 3D data, is there a neat way to do it without counting all the interior points of the surface? Essentially it's still a 2D surface, I just need to extract it neatly.
Suggestions?
0 个评论
回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!