how to divide a 3D figure in matlab in to cubes and getting the cubes's addresses

조회 수: 3 (최근 30일)
Hi,
I need to write a code to divide a 3D figure in matlab in to cubes and getting the cubes's addresses, who can help me in this regard?
Best
  댓글 수: 14
nasim mirzavand
nasim mirzavand 2019년 7월 16일
Thanks for your helps, would you mind please let me know how can I extract them , is there any kind of prewritten code for that purpose.

댓글을 달려면 로그인하십시오.

답변 (2개)

KSSV
KSSV 2019년 7월 16일
You can draw cubes by providing vertices and have index for each cube.

Walter Roberson
Walter Roberson 2019년 7월 16일
% Step 1: Open the regions of interest file
B= dicominfo('C:\Users\mij\Music\RS.1.3.6.1.4.1.2452.6.3144839235.1145246484.2165573795.1001182548.dcm');
% Step 2: Start display
figure(1);
clf;
hold on;
% Step 3: Load number of regions of interest
roi = fieldnames(B.ROIContourSequence);
nroi= size(roi,1);
roi_cell = cell(nroi, 1);
% Step 4: Loop over all regions of interest
for i=1:nroi
% Step 4.1: Read the color of region of interest i
color=(B.ROIContourSequence.(roi{i}).ROIDisplayColor)/255;
% Step 4.2: Read the number of slices for region of interest i
slices=fieldnames(B.ROIContourSequence.(roi{i}).ContourSequence);
nslices=size(slices,1);
patches_info_cell = cell(nslices, 3);
% Step 4.3: Run over all the slices
for j=1:nslices
% Step 4.3.1: Find the number of points and their coordinates in
% the current slice
npoints=B.ROIContourSequence.(roi{i}).ContourSequence.(slices{j}).NumberOfContourPoints;
points=B.ROIContourSequence.(roi{i}).ContourSequence.(slices{j}).ContourData;
% Step 4.3.2: Convert single vector into 3D vector
x=points(1:3:3*npoints);
y=points(2:3:3*npoints);
z=points(3:3:3*npoints);
% Step 4.3.3: Plot the curve
H = fill3([x',x(1)],[y',y(1)],[z',z(1)],'r');
set(H,'FaceColor',color)
axis off ;
patches_info_cell(j,:) = {length(H.Faces), H.Faces, H.Vertices};
end
roi_cell{i} = patches_cell;
end
all_roi = vertcat(roi_cell{:});
At this point, if I have written the code correctly, then all_roi will be a something-by-3 cell array of information about contours for slices. Column 1 of the cell will be a scalar indicating the number of vertices, N, in the line. Column 2 of the cell will contain a row vector of face information, and it appears likely that it will be 1 : number of vertices, but if there are duplicate points in your contours that might not hold. Column 3 of the cell will contain an N x 3 2D array of vertex locations.
In preparing the vertex information for the github function, you should unique-ify the vertex coordinates as failure to do so could prevent some of the loops from closing properly; you will need to keep track of the original order (third output of unique)
You cannot just slam all of the face information together into one face array
  1. You need to renumber from local vertex numbers to over-all vertex numbers
  2. The number of vertices might not be the same for all faces. To create a proper face array in which each row describes one face, the shorter arrays must be padded with nan. The length information I stored saves some post-processing to find that information in order to figure out how wide the final face array will have to be.

카테고리

Help CenterFile Exchange에서 Graphics Object Programming에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by