본 글은 이전글에서 이어지는 내용입니다.
이전글을 읽고 오시면 더 자연스럽게 이해하실 수 있습니다.
2025.03.21 - [Programming/VTK] - [VTK] dicom 데이터(CT image)에서 뼈 영역만 남기기
[VTK] dicom 데이터(CT image)에서 뼈 영역만 남기기
CT 데이터는 3D 픽셀(=Voxel)로 이루어져 있으며, 각 Voxel에는Hounsfield Unit (HU) 값이 있습니다. Hounsfield Unit 이란? HU는 물질이 X-ray를 얼마나 흡수하느냐(=조직의 밀도)를 숫자로 나타낸 값입니다.주
binarylog.tistory.com
vtk에서는 vtkPolyDataConnectivityFilter를 이용하여 mesh의 연속성 검사를 할 수 있습니다.
이를 통해 mesh data에서 가장 큰 영역을 추출하거나 특정 위치에서 연결된 영역 추출 또는 연결된 영역별로 모두 추출하는 것이 가능합니다.
이는 노이즈 제거 및 클러스터링(clustering)에 주로 사용됩니다.
그렇다면 vtkFlyingEdges3D를 사용한 3d 볼륨 데이터에서 가장 큰 영역만 불러오기 위해서는 어떻게 하면 될까요 ?
vtkSmartPointer<vtkActor> CvtkMFCDlgEXDlg::initImageActor(CString cstrImagePath)
{
vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New();
const char* charPath = (char*)(LPCTSTR)cstrImagePath;
reader->SetDirectoryName(charPath);
reader->Update();
vtkNew<vtkFlyingEdges3D> flyingEdges3D_bone;
flyingEdges3D_bone->SetInputConnection(reader->GetOutputPort());
flyingEdges3D_bone->SetValue(0, 250);
vtkNew<vtkPolyDataConnectivityFilter> conFilter;
conFilter->SetInputConnection(flyingEdges3D_bone->GetOutputPort());
//1) 모든 영역 추출
//conFilter->SetExtractionModeToAllRegions();
//2) 가장 큰 영역 추출
conFilter->SetExtractionModeToLargestRegion();
conFilter->Update();
vtkPolyDataConnectivityFilter의 SetExtractionModeToLargestRegion()를 사용하여 mesh 데이터에서 가장 큰 영역만 추출할 수 있습니다.
결과는 다음과 같습니다.
가장 큰 영역 이외에도, 특정 seed로 연결된 영역을 추출하거나,
특정 point와 가까운 점과 연결된 영역을 추출할 수 도 있습니다.
해당 방법은 다음과 같습니다.
//3) seed로 연결된 영역 추출
conFilter->AddSeed(id);
conFilter->SetExtractionModeToCellSeededRegions();
conFilter->SetExtractionModeToPointSeededRegions();
//3) 특정 point와 가까운 점과 연결된 영역 추출
conFilter->SetClosestPoint(x,y,z);
conFilter->SetExtractionModeToClosestPointRegion();
'Programming > VTK' 카테고리의 다른 글
[VTK] dicom 데이터(CT image)에서 뼈 영역만 남기기 (MFC, vs2019) (0) | 2025.03.21 |
---|---|
[VTK] 조명 설정하기 (vtkLight)(MFC, vs2019) (0) | 2025.03.20 |
[VTK] screen 좌표를 vtk world 좌표로 변환하기 (1) | 2024.04.16 |
[VTK] VTK에서 원 그리기 (C++, MFC) (0) | 2024.04.05 |