Main Content

비등방성 복셀 간격을 갖는 3차원 영상 볼륨에서 단층 탐색하기

이 예제에서는 비등방성 3차원 MRI 볼륨의 단층을 표시하는 방법을 보여줍니다. 비등방성 영상 볼륨에서는 복셀(볼륨 픽셀) 사이의 간격이 공간 차원마다 다릅니다. 예를 들어 1×1×1 복셀이 세계 좌표에서 1×1×2mm 영역에 매핑되는 경우 복셀 간격은 비등방성입니다. 기본적으로 Image Processing Toolbox™ 함수는 영상을 복셀 단위로 표시하고 간격이 세계 좌표에서 균일하다고 가정합니다. 그 결과 비등방성 볼륨이 왜곡되어 보일 수 있습니다.

이 예제에서는 각 차원에서의 단층을 왜곡 없이 표시하기 위해 두 가지 방법을 적용합니다.

  • 표시 설정 적용하기 — 표시 함수에 이름-값 인수를 설정하여 기본 영상은 수정하지 않으면서 표시를 사용자 지정합니다.

  • 영상 데이터 변환하기 — 기본 영상 데이터를 표시하기 전에 이 데이터에 리샘플링 및 기하 변환을 적용합니다.

Medical Imaging Toolbox™는 Image Processing Toolbox™의 기능을 확장하여 복셀, 세계 좌표 및 해부학적 좌표축 간의 공간 참조를 자동으로 관리합니다. 자세한 내용은 Choose Approach for Medical Image Visualization (Medical Imaging Toolbox) 항목을 참조하십시오.

MRI 데이터 불러오기

숫자형 배열 D와 회색조 컬러맵 map이 포함된 MRI 데이터 세트를 불러옵니다. 이 숫자형 배열에는 MRI 영상 데이터가 포함되어 있습니다. 복셀 간격이 비등방성으로, 세계 좌표에서 횡측 단층이 관상면 좌표축과 시상면 좌표축에서의 단층보다 2.5배 더 두껍습니다. 컬러맵을 사용하여 볼륨을 대비가 두드러지게 표시할 수 있습니다. squeeze 함수를 사용하여 한원소 차원을 제거합니다.

load mri
DTransverse = squeeze(D);

표시 설정 적용하기

이 섹션에서는 표시 함수의 이름-값 인수를 사용하여 MRI 볼륨을 왜곡 없이 표시합니다. 이러한 이름-값 인수는 표시의 종횡비만 업데이트하고 기본 영상 데이터는 수정하지 않습니다. 보간을 사용하여 데이터의 원시 명암 값을 수정하지 않으려는 경우 표시만 조정하는 것이 좋습니다. 이 방법은 볼륨을 표시할 때마다 이름-값 인수를 설정해야 한다는 제약이 있습니다. 또한 일부 함수(예: montage)에는 비등방성 볼륨을 스케일링하는 인수가 없습니다.

직교 단층 표시하기

orthosliceViewer 객체를 사용하여 직교 단층 평면을 표시합니다. 세 번째 차원에 스케일링 인자 2.5를 적용하려면 ScaleFactors 이름-값 인수를 지정합니다. 각 단층 뷰에는 볼륨을 탐색하는 데 사용할 수 있는 십자 기호가 포함되어 있습니다. 단층을 탐색하려면, 십자 기호 좌표축 위에 커서를 올려서 커서가 십자형 화살표 Fleur shape로 바뀌면 클릭하여 새 위치로 끕니다. 그러면 나머지 단층 뷰가 자동으로 업데이트됩니다.

figure
orthosliceViewer(DTransverse,ScaleFactors=[1 1 2.5]);

Orthoslice viewer window showing slices scaled using the ScaleFactors name-value argument

단층 스택 표시하기

sliceViewer 객체를 사용하여 스크롤 가능한 단층 스택을 표시합니다. 기본적으로 sliceViewer는 세 번째 차원을 따라 단층을 표시합니다. 이 예제에서는 첫 번째, 두 번째 차원의 복셀 간격이 동일하므로 2차원 단층이 왜곡되어 보이지 않습니다.

sliceViewer(DTransverse,Parent=figure);
title("Transverse Slices")

Slice viewer window showing axial slices scaled using the ScaleFactors name-value argument

SliceDirectionScaleFactors 이름-값 인수를 사용하여 각각 단층 방향을 변경하고 스케일링 인자를 적용합니다. 단층 방향을 "X"로 지정하고 세 번째 차원에 대해 스케일링 인자 2.5를 지정해서 시상면 단층 스택을 표시합니다.

sliceViewer(DTransverse,SliceDirection="X",ScaleFactors=[1 1 2.5],Parent=figure);
title("Sagittal Slices")

Slice viewer window showing sagittal slices scaled using the ScaleFactors name-value argument

단층을 3차원 객체로 표시하기

SlicePlanes 렌더링 스타일을 지정하여 volshow 함수를 사용해서 단층을 3차원으로 표시합니다. 비등방성 복셀을 왜곡 없이 표시하기 위해, Transformation 이름-값 인수를 세 번째 차원에서 인자 2.5로 볼륨을 스케일링하는 affinetform3d 객체로 지정합니다. 단층을 클릭하고 끌어서 해당 축을 따라 단층 사이를 탐색합니다. 볼륨을 원하는 방향으로 회전하려면 Figure 창의 빈 공간을 클릭해서 끕니다. 이 뷰를 특정 단층 평면에 맞추려면 뷰어의 왼쪽 아래 코너에 있는 축 표시자에서 X, Y 또는 Z 레이블을 클릭합니다.

sx = 1;
sy = 1;
sz = 2.5;
A = [sx 0 0 0; 0 sy 0 0; 0 0 sz 0; 0 0 0 1];
tform = affinetform3d(A);

vol = volshow(DTransverse,renderingStyle="SlicePlanes",Transformation=tform);

Figure contains an object of type images.ui.graphics3d.viewer3d.

또한 시네마틱 렌더링 스타일을 사용하면 볼륨을 고급 조명을 갖춘 3차원 객체로도 볼 수 있습니다.

vol.RenderingStyle = "CinematicRendering";

Figure contains an object of type images.ui.graphics3d.viewer3d.

볼륨 뷰어를 사용하여 단층 및 3차원 볼륨 탐색하기

볼륨 뷰어 앱을 사용하여 대화형 방식으로 영상 볼륨을 탐색합니다. volumeViewer 함수를 사용하여 앱을 실행합니다. 비등방성 복셀을 올바르게 표시하려면 ScaleFactors 이름-값 인수를 지정합니다.

volumeViewer(DTransverse,ScaleFactors=[1 1 2.5])

Volume Viewer app window showing the scaled MRI slices and 3-D volume

앱에서 스케일링 인자를 지정할 수도 있습니다. 앱 툴스트립의 3차원 보기 탭에 있는 공간 참조에서 각 축의 스케일링 인자 값을 입력합니다. 값을 입력하면 값 왼쪽에 있는 옵션이 자동으로 차원 지정으로 변경됩니다.

Manually specify scale factors in the Volume Viewer app

영상 데이터 변환하기

이 섹션에서는 영상 볼륨을 표시하기 전에 먼저 리샘플링과 기하 변환을 사용해서 영상 볼륨을 수정합니다. 리샘플링은 비등방성 복셀 그리드를 스케일링 왜곡 없이 영상을 표시하는 등방성 그리드로 보간합니다. 또한 볼륨을 회전하거나 다른 기하 변환을 적용하여 원하는 표시 규칙에 맞게 볼륨의 방향을 맞출 수 있습니다. 이 방법의 이점은 볼륨을 표시할 때마다 이름-값 인수를 지정할 필요가 없다는 것입니다. 또한 이름-값 인수로 디폴트 스케일링이나 단층 방향을 변경할 수 없는 함수(예: montage)에도 이 방법을 이용할 수 있습니다.

볼륨을 등방성 복셀 간격으로 리샘플링하기

imresize3 함수를 사용하여 원래 볼륨을 등방성 복셀 그리드로 리샘플링합니다. 스케일링 인자 2.5를 사용하여 등방성 볼륨의 목표 단층 개수를 계산합니다.

numSlices = round(2.5*size(DTransverse,3));
DTransverseIsotropic = imresize3(DTransverse,[128 128 numSlices]);

리샘플링된 볼륨을 스케일링 인자를 적용하지 않고 표시 함수를 사용하여 정확하게 표시할 수 있습니다. ScaleFactors 이름-값 인수 없이 orthoSliceViewer를 사용하여 리샘플링된 볼륨을 표시합니다.

figure
orthosliceViewer(DTransverseIsotropic);

Orthoslice Viewer window showing resampled volume

방향이 조정된 단층의 몽타주 표시하기

montage 함수는 세 번째 차원을 따라 영상 볼륨을 단층 스택으로 표시합니다. 이 섹션에서는 각 해부학적 평면을 원하는 방향에서 세 차원 모두를 따라 단층을 표시하도록 영상 데이터를 수정하는 방법을 보여줍니다.

리샘플링된 횡측 볼륨의 단층을 표시합니다. 컬러맵 map을 적용하여 영상을 대비가 두드러지게 표시합니다.

figure
montage(DTransverseIsotropic,map)
title("Transverse Slices")

Figure contains an axes object. The axes object with title Transverse Slices contains an object of type image.

볼륨을 시상면 단층 스택으로 보기 위해, DTransverseIsotropic의 차원을 다시 정렬합니다.

DSagittal = permute(DTransverseIsotropic,[1 3 2]);

시상면 단층의 원하는 방향에 맞춰 볼륨을 회전합니다. 두부 상단부가 영상의 위쪽에 있고 두부 전면부가 영상의 왼쪽에 있도록 합니다.

DSagittalRotated = imrotate3(DSagittal,90,[0 0 1],"cubic");

시상면 단층을 몽타주 형태로 표시합니다. 컬러맵을 포함시켜서 표시 범위를 설정합니다. Indices 이름-값 인수를 사용하여 단층 20~100을 표시해서 빈 단층을 제외합니다.

figure
montage(DSagittalRotated,map,Indices=20:100)
title("Sagittal Slices")

Figure contains an axes object. The axes object with title Sagittal Slices contains an object of type image.

볼륨을 관상면 단층 스택으로 보기 위해 DTransverseIsotropic의 차원을 다시 정렬합니다.

DCoronal = permute(DTransverseIsotropic,[2 3 1]);

관상면 단층의 원하는 방향에 맞춰 볼륨을 회전합니다. 두부 상단부가 영상의 위쪽에 있고 두부 좌측이 영상의 왼쪽에 있도록 합니다.

DCoronalRotated = imrotate3(DCoronal,90,[0 0 1],"cubic");

관상면 단층을 몽타주 형태로 표시합니다. 컬러맵을 포함시켜서 표시 범위를 설정합니다. Indices 이름-값 인수를 사용하여 단층 17~127을 표시해서 빈 단층을 제외합니다.

figure
montage(DCoronalRotated,map,Indices=17:127)
title("Coronal Slices")

Figure contains an axes object. The axes object with title Coronal Slices contains an object of type image.

참고 항목

| (Medical Imaging Toolbox) | | | | |

관련 항목