본문 바로가기

Programming/VTK

(5)
[VTK] 3d 데이터에서 가장 큰 영역만 추출하기 (MFC, vs2019) 본 글은 이전글에서 이어지는 내용입니다.이전글을 읽고 오시면 더 자연스럽게 이해하실 수 있습니다. 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의 연속성 검사를 할 수 있습니다.  이..
[VTK] dicom 데이터(CT image)에서 뼈 영역만 남기기 (MFC, vs2019) CT 데이터는 3D 픽셀(=Voxel)로 이루어져 있으며, 각 Voxel에는Hounsfield Unit (HU) 값이 있습니다.   Hounsfield Unit 이란? HU는 물질이 X-ray를 얼마나 흡수하느냐(=조직의 밀도)를 숫자로 나타낸 값입니다.주로 사람의 몸에 대한 X-ray 영상을 취득할 때, 각 조직(tissue)의 밀도(density)를 표현하는 단위로 사용됩니다.X-ray가 많이 흡수될수록 (즉, density가 높을수록) HU값이 크고, 적게 흡수될수록 (즉, density가 낮을수록) HU값이 작습니다. 조직 HU공기Air약 -1000 HU폐 영역Lung area약 -500 HU지방 조직Fats약 -100 ~ -50 HU물Water0 HU근육Muscle약 50 ~ 100 HU뼈(해면..
[VTK] 조명 설정하기 (vtkLight)(MFC, vs2019) 실제 공간에 조명이 없다면 아무것도 보이지 않을 것입니다. 사람도 태양광, 가로등, 형광등 등 빛을 통해서 비로소 사물을 볼 수 있습니다. 컴퓨터 상의 3차원 공간에서도 마찬가지로 조명이 없다면 아무것도 보이지 않을 것입니다. 또한 조명의 위치 및 특성에 따라 오브젝트가 다르게 보일 것 입니다.  VTK에서는 카메라와 마찬가지로 별도 설정을 하지 않으면 기본적으로 한개의 카메라를 따라다니는 조명이 생성됩니다. 사용자가 조명을 추가하거나 그 속성을 변경하고 싶다면, vtkLight 클래스를 사용하면 됩니다.  그 예제는 아래와 같습니다. // 코드 앞부분에 추가 #include // m_vtkWindow->Render() 앞에 추가하기vtkSmartPointer myCam = m_vtkRenderer->G..
[VTK] screen 좌표를 vtk world 좌표로 변환하기 안녕하세요. 이번에는 윈도우 좌표를 vtk world 좌표로 변환하는 방법을 알아보겠습니다. vtk의 경우 오브젝트 가시화를 위해 렌더링을 위한 다양한 기능을 제공하고 있습니다. 그 중 3차원 공간상에 위치한 물체(Object)를 어느 방향에서 어떻게 바라보는가에 따라 화면에 그려지는 결과가 달라지게 됩니다. VTK에서는 별도 설정을 하지 않으면 기본적으로 렌더러(renderer)에서 카메라를 생성하게 되며, 추가적으로 사용자가 카메라를 조작하기 위해서는 vtkCamera class를 사용하면 됩니다. 이 때, vtkCamera를 통해서 나타나는 monitor screen을 통해서 3차원 객체를 가시화하여 나타나게 됩니다. 예를 들어, 실제 공간에서 책상 위의 컵을 카메라를 통해서 본다고 하면, 실제 공..
[VTK] VTK에서 원 그리기 (C++, MFC) vtk에서 3d 원을 그리는 법을 알아보겠습니다. 원을 그리기 위해서는 vtk의 vtkSphereSource class를 사용합니다. 아래 간단한 예제입니다. // const vtkVector3d& center = {0.0, 0.0, 0.0}; // double radius = 10; vtkSmartPointer circle = vtkSmartPointer::New(); circle->SetCenter(center.GetX(), center.GetY(), center.GetZ()); circle->SetRadius(radius); circle->SetPhiResolution(20); circle->SetThetaResolution(20); circle->Update(); vtkSmartPointer ma..