Main Content

볼륨 분할기를 사용하여 블록 형식 영상 작업하기

이 예제에서는 볼륨 분할기 앱에서 단일 분해능 블록 형식 영상을 다루는 방법을 보여줍니다.

원본 볼륨이 너무 커서 메모리에 들어가지 않는 경우 블록 형식 영상을 사용하십시오. 블록 형식 영상을 사용하면 메모리 부족 없이 볼륨을 분할할 수 있습니다.

블록 형식 영상에 볼륨 분할기 앱을 사용하려면 원본 볼륨에서 블록 형식 영상을 만든 다음, 앱에서 해당 블록 형식 영상을 열어야 합니다. 앱에서 연 후 블록 형식 영상을 다루는 방법은 볼륨을 다룰 때와 매우 유사합니다.

  • 볼륨과 마찬가지로 각 슬라이스를 개별적으로 보거나 볼륨의 3차원 표현을 조작하는 방식으로 블록 형식 영상을 탐색할 수 있습니다. 그러나 블록 형식 영상에서는 볼륨을 한 번에 한 블록씩 볼 수 있습니다. 이 앱에는 블록 형식 영상의 각 블록을 볼 때 사용할 수 있는 탐색 보조 기능이 포함되어 있습니다.

  • 볼륨과 마찬가지로 볼륨의 영역에 레이블을 그려서 블록 형식 영상를 분할할 수 있습니다. 그러나 블록 형식 영상에서는 볼륨에 한 번에 한 블록씩 레이블을 그릴 수 있습니다. 블록 형식 영상에 레이블을 지정하려면 앱의 그리기 툴을 사용하여 ROI를 만드십시오. 또한 보간을 사용하여 블록의 중간 슬라이스에 자동으로 레이블을 지정할 수 있습니다. 사용자가 각 블록을 살펴보면서 직접 해당 블록에서 찾아낸 객체의 일부를 분할합니다. 자동화된 방법을 사용하여 블록 형식 영상을 분할할 수도 있습니다. 자동화를 사용할 경우 모든 블록을 동시에 처리할 수 있습니다.

볼륨 분할기 앱에서 블록 형식 영상을 다룰 때는 사용할 레이블을 모두 만든 다음 분할을 저장하십시오. 이렇게 하는 것이 레이블을 개별적으로 추가 또는 제거하는 것보다 효율적입니다. 또한 한 블록의 처리를 마친 후 다음 블록 처리를 시작하기 전에, 처리한 블록을 파일에 저장해야 합니다. 작업을 마치면 blockedImage 객체가 개별적으로 처리된 블록 파일을 하나의 볼륨으로 결합합니다.

블록 형식 영상 만들기

메모리에 다 들어가지 않는 볼륨을 분할하려면 볼륨을 표현하는 blockedImage 객체를 만드십시오. 이 예제에서는 MAT 파일 vol_001.mat에 저장된 MRI 뇌 영상 여러 개를 볼륨으로 사용합니다. MRI 데이터는 BraTS 데이터 세트[1]의 수정된 서브셋입니다. 이 MRI 데이터에서는 분할할 종양을 측두엽에서 볼 수 있습니다.

load(fullfile(toolboxdir('images'),'imdata','BrainMRILabeled','images','vol_001.mat'));

파일을 읽어 이름이 vol인 240×240×155 볼륨을 작업 공간으로 불러옵니다.

whos vol
  Name        Size                    Bytes  Class     Attributes

  vol       240x240x155            17856000  uint16              

블록의 크기를 지정하여 볼륨에서 블록 형식 영상을 만듭니다. (메모리에 들어가지 않는 볼륨이 있는 경우 파일 이름을 blockedImage로 지정할 수 있습니다.)

bim = blockedImage(vol,'BlockSize',[120 120 120])
bim = 
  blockedImage with properties:

   Read only properties
             Source: [240x240x155 uint16]
            Adapter: [1x1 images.blocked.InMemory]
               Size: [240 240 155]
       SizeInBlocks: [2 2 2]
    ClassUnderlying: "uint16"

   Settable properties
          BlockSize: [120 120 120]

지정된 블록 크기가 주어지면 블록 형식 영상의 각 차원에 두 개의 블록이 생성됩니다.

blockedImg_diagram.png

볼륨 분할기 열기

볼륨 분할기 앱을 엽니다. MATLAB® 툴스트립에서 탭을 선택합니다. 영상 처리 및 컴퓨터 비전 섹션에서 볼륨 분할기를 선택합니다.

UsingVolSegWithBlockedImagesExample_02.png

블록 형식 영상을 볼륨 분할기로 불러오기

블록 형식 영상을 볼륨 분할기 앱으로 불러오려면 앱 툴스트립에서 볼륨 열기를 선택하십시오. 이 예제에서는 작업 공간에서 블록 형식 영상 열기를 선택합니다. 볼륨 가져오기 대화 상자에서 작업 공간에 만든 블록 형식 영상 bim을 선택하고 확인을 클릭합니다. 또는 앱을 열 때 volumeSegmenter 명령인 volumeSegmenter(bim)을 사용하여 블록 형식 영상을 지정할 수 있습니다.

UsingVolSegWithBlockedImagesExample_03.png

앱이 볼륨을 불러오고 볼륨의 내용을 표시합니다. 블록 형식 영상을 다룰 때, 앱은 한 번에 한 블록의 내용을 표시합니다. 전체 보기 탭은 전체 볼륨의 맥락에서 현재 보고 있는 블록을 나타냅니다.

UsingVolSegWithBlockedImagesExample_04.png

블록 형식 영상 탐색하기

볼륨 분할기 앱을 사용해 볼륨을 탐색하여 분할하려는 볼륨을 확인합니다. 블록 형식 영상과 관련해, 앱에는 각 블록을 탐색하는 데 도움이 되는 여러 탐색 보조 기능이 포함되어 있습니다.

현재 블록 -- 현재 블록 탭에서 블록 내용의 3차원 표현을 표시합니다. 방향 좌표축과 와이어프레임을 보기에 추가하려면 앱 툴스트립에서 3차원 보기 탭으로 이동하십시오. 다른 각도에서 블록을 보려면 마우스를 사용하여 보기를 회전하십시오.

UsingVolSegWithBlockedImagesExample_05.png

전체 보기 -- 블록 형식 영상의 다른 블록에 상대적으로 현재 블록의 위치를 표시합니다. 방향 좌표축과 와이어프레임을 보기에 추가하려면 앱 툴스트립의 3차원 보기 탭에 있는 옵션을 사용하십시오. 다른 각도에서 블록을 보려면 마우스를 사용하여 보기를 회전하십시오. 블록을 탐색하면 현재 선택한 블록, 방문했던 블록, 완료로 표시한 블록을 나타내도록 보기가 업데이트됩니다. 현재 블록은 빨간색으로 표시됩니다. 방문했던 블록 또는 처리된 블록은 노란색으로 표시됩니다. 완료로 표시한 블록은 녹색으로 나타납니다.

UsingVolSegWithBlockedImagesExample_06.png

앱 툴스트립의 3차원 보기 탭에서 볼륨 표시를 사용자 지정할 수도 있습니다. 예를 들어 복셀의 상대적인 크기를 설명하는 메타데이터가 있는 경우, 3차원 보기 탭의 공간 참조 부분에서 이를 지정할 수 있습니다. 데이터가 더 잘 보이게 하려면 3차원 보기에서 사용되는 배경색을 변경하고, 보기의 임계값과 불투명도를 수정하고, 보기에 방향 좌표축을 포함시키십시오.

블록 형식 영상 탭 -- 블록 형식 영상의 경우 앱 툴스트립에 블록 형식 영상 탭이 추가됩니다. 이 탭에는 블록 형식 영상에서 블록 간에 이동하는 데 도움이 되는 탐색 보조 기능이 포함되어 있습니다. 예를 들어 처리되지 않은 다음 블록으로 이동하려면 다음 블록을 클릭하십시오. X축, Y축, Z축을 따라 블록 좌표를 지정하여 특정 블록으로 이동할 수도 있습니다. 블록 처리가 완료되었음을 표시하려면 블록을 완료로 표시를 클릭하십시오. 블록을 완료로 표시하면 앱이 전체 볼륨의 완료 정도를 백분율로 계산합니다.

UsingVolSegWithBlockedImagesExample_07.png

슬라이스 창 -- 슬라이스 창에서 볼륨의 각 슬라이스를 표시합니다. 탭 하단의 슬라이더를 사용하여 슬라이스 간에 이동할 수 있습니다. 기본적으로 슬라이스 창은 X-Y축을 따라 볼륨의 방향을 표시하지만, 분할기 탭에서 툴스트립의 방향 섹션에 있는 버튼을 사용하여 이를 변경할 수 있습니다. 슬라이스 창에서 그리기 툴을 사용하여 ROI를 정의할 수도 있습니다. 블록 형식 영상의 경우, 슬라이스 보기는 현재 블록만 표시합니다. 분할하려는 객체가 여러 블록에 걸쳐 있을 수도 있습니다. 앱은 창 상단에 전체 슬라이스 개수 중 현재 슬라이스 개수를 표시합니다. 예를 들면 50/120과 같습니다.

UsingVolSegWithBlockedImagesExample_08.png

그리기 툴을 사용하여 블록 형식 영상의 영역에 레이블 지정하기

분할할 객체를 식별한 후, 앱 툴스트립에 있는 그리기 탭의 툴을 사용하여 객체가 표시되는 각 블록에서 해당 객체에 레이블을 지정합니다. 블록 형식 영상에는 다음과 같은 그리기 툴을 사용할 수 있습니다. 페인트 브러싱 툴, 영역 채우기 툴, 지우개 툴, 직접 그리기, 도움 받아 직접 그리기다각형 관심 영역(ROI) 형태.

볼륨과 마찬가지로 뇌에 레이블 지정하기를 시작하려면 먼저 분할에 사용할 레이블을 모두 만드십시오. 레이블 창에서 앱은 기본적으로 Label1이라는 레이블 하나를 제공합니다. 응용 사례에 대해 보다 자세한 설명이 되도록 레이블의 이름을 변경하려면 레이블을 더블 클릭하고 새 이름을 입력하십시오. 레이블에 연결된 디폴트 색을 변경하려면 레이블에 연결된 컬러 사각형을 더블 클릭하고 색 대화 상자에서 색을 선택하십시오. 슬라이스의 뇌 위에 종양이 표시되는 식으로 한 객체가 다른 객체에 중첩되어 있는 경우 큰 영역에 먼저 레이블을 지정합니다. 플러스 버튼을 클릭하여 추가 레이블을 만듭니다.

UsingVolSegWithBlockedImagesExample_09.png

슬라이스 창에서, 블록에 객체가 표시된 슬라이스로 이동한 후 그리기 툴을 사용하여 객체에 레이블을 지정합니다. 다음 그림에는 페인트 브러싱 툴이 표시되어 있지만 어떤 그리기 툴이든 사용할 수 있습니다.

UsingVolSegWithBlockedImagesExample_10.png

보간을 사용하여 객체 ROI 생성 속도 높이기

사용자는 슬라이스를 하나씩 거쳐가면서 블록 하나를 다 살펴볼 수 있으며, 객체가 표시되는 각 슬라이스에 ROI를 그릴 수 있습니다. 그러나 볼륨 분할기 앱은 여러 슬라이스에 걸쳐 객체를 분할하는 데 유용한 여러 자동화 툴을 제공합니다. 이러한 자동화 옵션은 하나의 블록 내에 있는 슬라이스만 처리합니다.

보간을 사용하여 레이블 지정 속도를 높이려면 먼저 두 개의 슬라이스에서 수동으로 해당 영역에 레이블을 지정해야 합니다. 예를 들어 한 슬라이스에 레이블을 만들고 동일한 절차를 통해 다른 슬라이스에도 그 레이블을 정의합니다. 앱은 레이블과 연결된 색을 사용하여 슬라이더에 두 개의 막대를 배치함으로써 ROI가 정의된 슬라이스를 표시합니다.

UsingVolSegWithBlockedImagesExample_11.png

해당 객체가 두 슬라이스에 정의된 상태에서 자동 보간을 클릭합니다. 앱이 그 사이에 있는 모든 슬라이스에서 자동으로 ROI를 정의합니다. 앱은 파란색 실선을 사용하여 모든 슬라이스에 ROI가 있음을 나타냅니다.

UsingVolSegWithBlockedImagesExample_12.png

또는 두 슬라이스에서 ROI를 정의한 후 수동 보간을 클릭합니다. 이 옵션을 선택하면 앱이 "수동 보간" 대화 상자를 엽니다. 보간할 두 영역 영역 1영역 2를 선택합니다. 기본적으로 대화 상자는 영역을 정의한 슬라이스에서 열립니다. 첫 번째 영역을 선택하려면 영역 1을 클릭하십시오. 슬라이더를 사용하거나 슬라이더 위의 파란색 표시자를 클릭하여 영역을 정의한 다른 슬라이스로 이동합니다. 두 번째 영역을 선택하려면 영역 2를 클릭하십시오. 두 영역을 모두 선택한 후 실행을 클릭하여 그 사이에 있는 모든 슬라이스에서 ROI를 보간합니다.

UsingVolSegWithBlockedImagesExample_13.png

자동화를 사용하여 레이블을 미세 조정하고 사용자 지정 처리 수행하기

알고리즘을 사용하여 레이블 정의를 미세 조정하고 블록 형식 영상의 나머지 처리를 자동으로 수행할 수 있습니다. 앱의 자동화 탭에는 몇 가지 슬라이스 기반 및 볼륨 기반 알고리즘이 포함되어 있습니다. 먼저, 알고리즘을 선택합니다. 예를 들어 자동화 탭 툴스트립의 알고리즘 섹션에서 볼륨 기반 알고리즘인 오츠(Otsu) 임계값을 선택합니다. 알고리즘을 선택한 후 알고리즘 파라미터를 선택하여 알고리즘과 연결되었을 수 있는 알고리즘 관련 파라미터에 대해 값을 지정합니다. 오츠 임계값 알고리즘은 파라미터를 지원하지 않으므로 이 옵션은 활성화되어 있지 않습니다. 슬라이스 기반 알고리즘의 경우, 처리하려는 슬라이스를 지정할 수 있습니다(예: 현재 슬라이스, 현재 슬라이스부터 시작까지의 슬라이스 세트, 현재 슬라이스부터 끝까지의 슬라이스 세트). 알고리즘을 선택한 후, 알고리즘 관련 파라미터가 있으면 이를 지정하고 실행할 슬라이스를 선택한 다음 실행을 클릭합니다.

UsingVolSegWithBlockedImagesExample_14.png

모든 블록을 처리하고 결과 검토하기

블록 형식 영상을 다룰 때 몇 가지 자동화 처리 옵션을 사용할 수 있습니다. 블록 형식 영상의 경우, 자동화 알고리즘은 기본적으로 현재 블록의 슬라이스에서 실행됩니다. 그러나 블록 형식 영상의 모든 블록에서 자동화 처리를 한 번에 수행하려면 모든 블록에 대해 자동화를 클릭하십시오. 이미 일부 블록을 완료로 표시했다면 완료 블록 건너뛰기가 활성화되지 않도록 유의하십시오. 블록의 병렬 처리를 활성화하려면 병렬 연산을 클릭하십시오.

처리 결과를 검토하고 각 블록을 수락 또는 거부하려면 실행을 클릭하기 전에 결과 검토를 클릭하여 이 옵션을 선택하십시오. 앱에 자동화 결과 검토 및 수락 대화 상자가 표시됩니다. 수락할 각 블록의 체크박스를 선택하고 선택한 항목 수락을 클릭하여 완료합니다.

UsingVolSegWithBlockedImagesExample_15.png

사용자 지정 자동화 알고리즘 추가하기

ROI에서 실행할 자신만의 알고리즘을 추가할 수도 있습니다. 자동화 탭에서 알고리즘 추가를 클릭합니다. 각 2차원 슬라이스(슬라이스 기반)에서 처리를 실행할지 아니면 전체 3차원 볼륨(볼륨 기반)에서 처리를 수행할지를 선택합니다.

UsingVolSegWithBlockedImagesExample_16.png

이 예제에서는 슬라이스 기반 아래에서 새로 만들기 옵션을 선택하고 함수 템플릿을 클릭하여 각 2차원 슬라이스에서 실행되는 새 함수를 만듭니다. 앱이 MATLAB 편집기에서 템플릿을 엽니다. 템플릿의 샘플 코드를 사용할 코드로 바꿉니다. 함수는 2개의 인수 즉, 개별 영상으로서의 각각의 슬라이스와 마스크 하나를 인수로 받아야 합니다. 또한 함수는 마스크 영상을 반환해야 합니다.

템플릿 편집을 마치면 파일을 저장합니다. 볼륨 분할기 앱이 자동으로 자동화 탭 툴스트립에 해당 함수에 대한 버튼을 만듭니다. 한 슬라이스에서 함수를 테스트하려면 실행을 클릭하십시오. 기본적으로 앱은 현재 슬라이스에만 함수를 적용합니다.

UsingVolSegWithBlockedImagesExample_17.png

분할 저장하기

볼륨에서 뇌 및 종양에 대한 레이블 지정을 완료하면 분할을 저장하십시오. 분할기 탭에서 레이블 저장 > 다른 이름으로 저장을 선택하여 레이블을 새로운 빈 폴더에 저장합니다. 영상 분할기가 레이블의 각 블록을 개별 H5 영상 파일로 저장합니다.

앱에서 레이블 수정을 계속하는 경우 레이블 저장 > 저장을 선택하여 기존 레이블 파일을 덮어쓸 수 있습니다. 분할을 저장한 후 선택적으로 자동 저장을 켜서 분할을 주기적으로 자동 저장할 수 있습니다.

레이블이 지정된 볼륨 보기

마스크를 보려면 bigimageshow 함수를 사용하십시오.

참고 문헌

[1] Medical Segmentation Decathlon. "Brain Tumours." Tasks. Accessed May 10, 2018. http://medicaldecathlon.com/.

BraTS 데이터 세트는 CC-BY-SA 4.0 라이선스에 따라 Medical Segmentation Decathlon에서 제공되었습니다. 모든 보증 및 진술은 부인됩니다. 자세한 내용은 라이선스를 참조하십시오. MathWorks®는 이 예제에 사용된 데이터 서브셋을 수정했습니다. 이 예제에서는 원래 데이터 세트 중 한 스캔 데이터를 MAT 파일로 저장한 MRI 데이터를 사용합니다.

참고 항목

| |

관련 항목