볼륨 데이터 시각화
이 예제에서는 MATLAB®에서 볼륨 데이터를 시각화할 수 있는 여러 가지 방법을 보여줍니다.
등가곡면(Isosurface) 표시
등가곡면은 공간의 볼륨 내에 있는 모든 점이 하나의 상수 값을 갖는 곡면입니다. isosurface
함수를 사용하여 곡면의 외부에 대한 면과 꼭짓점을 생성하고, isocaps
함수를 사용하여 볼륨의 단면에 대한 면과 꼭짓점을 생성합니다. patch
명령을 사용하여 볼륨과 볼륨의 단면을 그립니다.
load mri D D = squeeze(D); limits = [NaN NaN NaN NaN NaN 10]
limits = 1×6
NaN NaN NaN NaN NaN 10
[x, y, z, D] = subvolume(D, limits); [fo,vo] = isosurface(x,y,z,D,5); [fe,ve,ce] = isocaps(x,y,z,D,5); figure p1 = patch('Faces', fo, 'Vertices', vo); p1.FaceColor = 'red'
p1 = Patch with properties: FaceColor: [1 0 0] FaceAlpha: 1 EdgeColor: [0 0 0] LineStyle: '-' Faces: [23351x3 double] Vertices: [12406x3 double] Use GET to show all properties
p1.EdgeColor = 'none'
p1 = Patch with properties: FaceColor: [1 0 0] FaceAlpha: 1 EdgeColor: 'none' LineStyle: '-' Faces: [23351x3 double] Vertices: [12406x3 double] Use GET to show all properties
p2 = patch('Faces', fe, 'Vertices', ve, ... 'FaceVertexCData', ce)
p2 = Patch with properties: FaceColor: [0 0 0] FaceAlpha: 1 EdgeColor: [0 0 0] LineStyle: '-' Faces: [27265x3 double] Vertices: [14250x3 double] Use GET to show all properties
p2.FaceColor = 'interp'; p2.EdgeColor = 'none'; view(-40,24) daspect([1 1 0.3]) colormap(gray(100)) box on camlight(40,40) camlight(-20,-10) lighting gouraud
원뿔 플롯(Cone Plot) 생성
coneplot
명령은 속도 벡터를 볼륨의 x, y, z 점에서 원뿔로 플로팅합니다. 원뿔은 각 점에서 벡터장의 크기와 방향을 나타냅니다.
cla load wind u v w x y z [m,n,p] = size(u)
m = 35
n = 41
p = 15
[Cx, Cy, Cz] = meshgrid(1:4:m,1:4:n,1:4:p); h = coneplot(u,v,w,Cx,Cy,Cz,y,4); set(h,'EdgeColor', 'none') axis tight equal view(37,32) box on colormap(hsv) light
흐름선(Streamline) 플로팅
streamline
함수는 볼륨의 x, y, z 점에서 속도 벡터의 흐름선을 플로팅하여 3차원 벡터장의 흐름을 보여줍니다.
cla [m,n,p] = size(u); [Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p); streamline(u,v,w,Sx,Sy,Sz) axis tight equal view(37,32) box on
흐름 관(Streamtube) 플로팅
streamtube
함수는 볼륨의 x, y, z 점에서 속도 벡터의 흐름 관을 플로팅합니다. 흐름 관의 너비는 각 점에서 벡터장의 정규화된 발산에 비례합니다.
cla [~,n,p] = size(u); [Sx, Sy, Sz] = meshgrid(1,1:5:n,1:5:p); h = streamtube(u,v,w,Sx,Sy,Sz); set(h, 'FaceColor', 'cyan') set(h, 'EdgeColor', 'none') axis tight equal view(37,32) box on light
볼륨 시각화 결합
단일 플롯에서 볼륨 시각화를 결합하여 볼륨 내에서 좀 더 종합적인 속도 필드 그림을 얻을 수 있습니다.
cla spd = sqrt(u.*u + v.*v + w.*w); [fo,vo] = isosurface(x,y,z,spd,40); [fe,ve,ce] = isocaps(x,y,z,spd,40); p1 = patch('Faces', fo, 'Vertices', vo); p1.FaceColor = 'red'
p1 = Patch with properties: FaceColor: [1 0 0] FaceAlpha: 1 EdgeColor: [0 0 0] LineStyle: '-' Faces: [5340x3 double] Vertices: [2727x3 double] Use GET to show all properties
p1.EdgeColor = 'none'
p1 = Patch with properties: FaceColor: [1 0 0] FaceAlpha: 1 EdgeColor: 'none' LineStyle: '-' Faces: [5340x3 double] Vertices: [2727x3 double] Use GET to show all properties
p2 = patch('Faces', fe, 'Vertices', ve, ... 'FaceVertexCData', ce)
p2 = Patch with properties: FaceColor: [0 0 0] FaceAlpha: 1 EdgeColor: [0 0 0] LineStyle: '-' Faces: [464x3 double] Vertices: [301x3 double] Use GET to show all properties
p2.FaceColor = 'interp'
p2 = Patch with properties: FaceColor: 'interp' FaceAlpha: 1 EdgeColor: [0 0 0] LineStyle: '-' Faces: [464x3 double] Vertices: [301x3 double] Use GET to show all properties
p2.EdgeColor = 'none'
p2 = Patch with properties: FaceColor: 'interp' FaceAlpha: 1 EdgeColor: 'none' LineStyle: '-' Faces: [464x3 double] Vertices: [301x3 double] Use GET to show all properties
[fc, vc] = isosurface(x, y, z, spd, 30); [fc, vc] = reducepatch(fc, vc, 0.2); h1 = coneplot(x,y,z,u,v,w,vc(:,1),vc(:,2),vc(:,3),3); h1.FaceColor = 'cyan'; h1.EdgeColor = 'none'; [sx, sy, sz] = meshgrid(80, 20:10:50, 0:5:15); h2 = streamline(x,y,z,u,v,w,sx,sy,sz); set(h2, 'Color', [.4 1 .4]) axis tight equal view(37,32) box on light