Developments

Developments/VTK

[VTK] vtkTransform 더 깊이 알기

vtkTransform에 대해서 작성한 내용이 이전에 있었으니, VTK 내부의 작동 방식을 보며 공부한 내용을 다시 정리하려 합니다.1. vtkTransform 개요vtkTransform 은 Homogeneous Transform 을 기반으로 이동, 회전, 크기 조절등과 같은 3차원 공간에서의 조작을 위한 기능을 제공위한 클래스이다. Homogeneous Transform 은 여러 행렬을 순차적으로 곱을 하여 최종 변형 값을 계산하게 되는데, 이를 위해서 vtkTransformConcatenation 클래스 객체로 내부에 리스트로 저장되어 있는 Transform 데이터를 설정에 따라서 행렬 곱을 수행하고 결과 값을 전달한다. 2. VTK Transform List 저장방식모든 VTK에서의 Transfor..

Developments/VTK

[VTK] vtkTransform 외부 입력 하기

1.vtkTransform Internal Matrix vtkTransform 의 내부 Matrix 의 동작 방식을 이해하기 위해서는 vtkTransform 의 상속 관계를 확인해야한다. vtkTransform 을 내부적으로 vtkTransformConcatenation 클래스를 사용한다. 이를 통해 누적된 Matrix list 를 PreMultiply 또는 PostMultiply 를 기반으로 최종 행렬을 계산한다. 그런데, vtkTransform 에는 상속 클래스인 HomogeneousTransform 의 함수인 GetMatrix 함수가 있는데 이는 지금까지의 최종 행렬의 값을 갖고 있는 Matrix를 Update call 에 따라 업데이트하여 새로운 메모리에 할당하여 전달하고 있다. 따라서 이 함수를..

Developments/VTK

[VTK] Mesh Smoothing Filters

GPT 답변vtkSmoothPolyDataFilter와 vtkWindowedSincPolyDataFilter 두 필터는 모두 VTK (Visualization Toolkit)에서 제공하는 메쉬 스무딩(정점 위치 조정을 통한 표면 평활화) 기능을 수행하지만, 각기 다른 알고리즘과 특성을 가지고 있습니다. 이들의 주요 차이점을 이해하는 것은 특정 응용 프로그램에 적합한 필터를 선택하는 데 중요할 수 있습니다.vtkSmoothPolyDataFilter알고리즘: vtkSmoothPolyDataFilter는 간단한 래플라시안 스무딩 기법을 사용합니다. 이 방법은 각 정점을 그 이웃 정점의 평균 위치로 이동시킴으로써 메쉬를 평활화합니다. 이 과정은 여러 번 반복될 수 있으며, 각 반복은 스무딩의 정도를 증가시킵니다..

Developments/VTK

[VTK] VTK File Extension

1. 개요 VTK 에서 지원하는 파일 타입을 알아본다. 2. 지원 파일 File Extension Description Data Types .vtk Legacy VTK format. Stores a wide range of data types in either ASCII or binary format. Structured and unstructured grids, polygons, images .vti VTK XML Image Data format. Stores structured points or image datasets. Structured points, images .vtp VTK XML PolyData format. Stores polygonal data. Polygons .vtu VTK XML..

Developments/VTK

[VTK] Painting Mask Image 생성하기

1. 개요 입력된 원본 이미지의 Painting 작업을 위해서는 Mask 용 이미지데이터가 필요하다. 이를 위해 원본 이미지에 맞는 Painting Mask 용 이미지 데이터를 생성하고 임의의 영역에 대한 초기값을 입력하는 것을 알아본다. 2. Painting Source 만들기 Masking 용으로 사용되는 이미지는 Compoenent가 1이며 unsigned char 타입의 scalar type을 갖는다. 원본이미지의 Spacing, Dimension, Origin만 참고하여 새로운 이미지 데이터를 만들면 된다. public void CreatePaintingSourceImageData() { paintData = vtkImageData.New(); paintData.SetOrigin(0, 0, 0)..

Developments/VTK

[VTK] Modified 심화

1. 개요 Pipeline에서 Modified 가 발생할 경우 이루어지는 내부 workflow를 분석한다. 2. 연결된 Pipeline 구성도 3. Pipeline 동작 분석 Interactor 이벤트를 통해 Mask의 픽셀을 변경하고 Modified()를 호출하면 내부적으로 RenderWindow의 Render를 실행하는데 이때 Modified 가 있는 Filter가 있으므로 다음과 같은 순서로 Pipeline이 동작한다. Mask:vtkImageCanvasSource2D에서 Modified를 호출하고 Rendering을 하면 Modified 된 Pipeline 에 영향을 받는 하위 Pipeline filter들은 Progress Start -> Progress[n] -> Progress End 순으로..

Developments/VTK

[VTK] Image Mask Filter

1. 개요 vtkImageMask Filter의 기본적인 사용 방법을 알아본다. 2. vtkImageMaskFilter Mask filter는 source image 와 mask 이미지간의 중첩되는 픽셀만을 최종 결과 값으로 출력하는 filter이다. 주의할 점은 source image의 채널은 상관없지만 mask image는 component 가 1인 1채널 이미지여야 한다. Masking 은 단순히 0이면 원본 이미지가 통과하지 못하고 0이 아닌 값이면 통과하여 원본이미지 픽셀 값이 그대로 표현된다. Mask filter에는 NotMaskOn을 설정함으로써 Mask를 invser로 적용할 수도 있다. 3. 코드 및 Pipeline 구성 구현한 테스트 코드의 중요 부분과 pipeline의 연결도이다. ..

Developments/VTK

[VTK] Tracking ImageActor2D

1. 개요 Target이 되는 Actor 을 지정하고 이를 Interaction 에 따라 변경되는 위치를 추적하여 따라다니는 Tracking 2D Actor를 구현한다. 2. Tracking Image Actor2D vtkImageMapper 에 할당된 이미지를 vtkActor2D 에 입력하고 Tracking을 위한 Interaction event 를 입력한다. public void TestTrackingImageActor2D() { EnableDrawAxes = true; AxesLength = 15; var filePath = Path.Combine(DirPath, "reconnect.png"); var imgData = VtkImageUtils.ReadImageData(filePath); vtkRe..

Developments/VTK

[VTK] vtkDataSet 분석하기 (feat. vtkLookupTable)

1. 개요 VTK를 이용한 데이터 처리를 할 때 가장 많이 사용하는 vtkImageData와 vtkPolyData의 구조를 분석하고, 특히 Scalar 값의 의미와 이를 활용하여 수행할 수 있는 vtkLookupTable을 활용한 색상 표시등의 활용도를 정리한다. 2. vtkDataSet 관계도 vtkDataSet은 추상화 클래스이며 이를 파생한 클래스 중에 vtkImageData와 vtkPolyData가 존재한다. vtkDataSet에서 중요한 데이터는 Cell, CellData, Point, PointData이다. Point : DataSet에서 기본이 되는 데이터이다. Point는 0-Dimension을 갖는 기본 구성 데이터이다. 하지만 VTK 에서는 3차원 데이터를 기본으로 하고 있어서 doub..

Developments/VTK

[VTK] Pipeline Update, Modified

1. 개요 이전글에서 VTK Pipeline의 동작에 대해서 알아봤었다. VTK Pipeline 동작방식을 간단히 정리해보면 Chain 방식과 Demand-driven 방식이다. 각 Filter 들은 SetInpuConnection 을 통해서 서로 연결을 하며, Update 요청에 따라 Upstream request 가 발생하여 각 filter마다 변경사항이 있는지를 확인하고 변경사항이 있을 경우에만 Updated 된 데이터를 반영하여 결과 값을 다음 filter에게 전달하도록 한다. 하지만, 우리는 VTK에는 Pipeline 방식 뿐만 아니라 Data 입력방식 또한 알아야 한다. 간단히 말해서 Chain 으로 연결되지 않고 일회성으로 데이터가 연결되어 Upstream request 가 전달되지 않는 상..

RichardBang
'Developments' 카테고리의 글 목록