Developments

Developments/VTK

[VTK] vtkImageData 와 Dicom 좌표계

Dicom 데이터를 이용한 vtkImageData를 생성하고 Dicom의 MetaData를 적용하여 ImageData의 origin과 Slice position을 제어하고자 한다. 기본 이미지는 Dicom의 Slice 에 따라서 +Z Direction 으로 이미지를 쌓는다. 또한 vtkImageData 의 좌표계는 이미지의 좌측 하단을 원점으로 하므로 Dicom의 좌표계는 다르다. vtkImageData 좌표계 Dicom 좌표계 LPS vtkImageData -> Dicom 이미지 좌표를 변환하기 위해서는 Flip을 수행한다. var dicomSeriesList = DicomDataUtils.LoadDicomSeries(DirPath); var validSer = dicomSeriesList.First(..

Developments/VTK

[Activiz] VTK + WPF Memory leak 문제점

Activiz에서는 WPF의 자체 render control을 지원하지 않기 때문에 winform host 를 이용하여 render control을 주입하는 방식으로 사용하게 됩니다. Winform host를 이용하여 Render control을 생성하고 rendering 하는 것은 쉽습니다. 하지만, 여기에서 주의할 것은 만약에 render control을 갖는 control이 modaless 로 동작하는 경우에는 memory leak을 주의해야 합니다. WPF control을 종료할 때에 메모리 해제를 직접하지 않을 경우에는 해당 render control 이 처리하고 있는 데이터에 대한 메모리가 release 되지 않고 계속 쌓이게 됩니다. 이게 만약 여러번 modaless 로 사용되었을 경우에는 ..

Developments/VTK

Vtk 필터 분석

vtkContourFilter - SetValue 또는 GenerateValues 를 통해서 이미지에서 contour 영역을 그릴 곳을 선택해서 contour line을 만들어 낸다. vtkOutlineFilter - 입력된 source 의 extent를 정보를 이용하여 외부 경계선을 찾아낸다. vtkWindowToImageFilter - renderwindow의 render 영상을 vtkImageData로 출력한다 vtkTransformPolyDataFilter - PolyData에 transform 을 수행한다. MergePoints - PolyDataSet 에서 Sphere와 겹쳐지는 영역의 points 의 위치 정보를 빠르게 찾는 알고리즘 ImageConstantPad - Image의 Extent..

Developments/VTK

VTK Image 중첩 그리기

vtkStackImage - 이미지를 addImage로 중첩하여 한개의 imageslice로 render 하도록 한다. - 각 imageSlice의 Opacity를 조정하여 한번에 보이도록 할 수 있다. RenderWindow Layer - RenderWindow에서 표시할 layer의 갯수를 지정하고 각 render별로 그리는 layer를 지정하여 actor들을 그리도록 한다. - Layer 0 renderer가 background layer가 되고, 나머지 renderer는 background 색상이 transparent 로 작동한다. vtkImageStencil - stencil 을 이용하여 입력된 이미지에서 그릴 부분을 지정하여 image data를 표시하도록 한다. - port 0 (SetInp..

Developments/VTK

VTK Image Interpolation

vtkImageSlice Interpolation 지정하기 vtkImageSlice는 vtkImageActor 와 vtkImageStack으로 자식 클래스를 갖는다. 또한 ImageSlice는 ImageProperty를 갖는데 여기에서 interpolation 을 지정할 수 있다. Interpolation type은 아래와 같이 정의되어 있고 default는 Linear interpolation 이다. #define VTK_NEAREST_INTERPOLATION 0 #define VTK_LINEAR_INTERPOLATION 1 #define VTK_CUBIC_INTERPOLATION 2 Interpolation type 지정하기 imageSlice.GetProperty().SetInterpolationT..

Developments/VTK

[Activiz] VtkObject Custom Visualizer 구성하기

Activiz 의 경우 C++ dll을 wrapping 한 라이브러이다. 그런 이유로 vtk의 object에 대한 property 값을 확인하기 위해서는 일일이 코드로 작성을 하거나 string 값으로 나오는 전체 변수에 대한 문자열을 통해서 확인을 해야 한다. vtkActor를 예로 watch를 하게 되면 객체 정보를 쉽게 확인할 수가 없다. 모두 저 CppThis 의 HandleRef 메모리 접근을 통해서 값을 얻도록 오픈된 함수를 사용해야만한다. 그런 이유로 vtkObject 를 Dugging visualizer 로 볼 수 있도록 구성하였다. 문자열을 Node 로 Parsing 하여 object을 TreeView로 볼 수 있도록 하였다. .NetFramework 의 기준 Visualizer DLL ..

Developments/VTK

[Activiz] VTK 에러 mteIndex='4294967295'

Activiz에서 vtk 의 객체를 사용하면서 GC의 동작을 예상하지 않고 구현을 하게 되면 발생할 수 있는 에러이다. 이전에도 정리한 글이 있었으나, 의도를 제대로 파악하기 쉽지 않은 것 같아서 다시 정리한다. VTK는 command, event 를 기반으로 renderingwindow 를 제어한다. 그런데 renderwindow 의 renderwindowinteractor를 사용하여 이벤트가 발생 할 때에 참조할 vtk 객체가 Garbage collector에 의해서 메모리가 해제가 되버리는 경우에는 아래와 같이 에러가 발생한다. 구현하면서 발생했던 실제 코드를 통해서 분석해보자. 아래는 WPF에서 windowformhost를 이용하여 renderwindow를 생성하고 button 클릭할때 실행되는 ..

Developments/VTK

VTK Visualization Pipeline 분석

이번에는 VTK의 Pipeline Execution에 구조를 분석하고자 합니다. 시작하기에 앞서 VTK에서 visualization 에서 처리하는 데이터 모델 들에 대한 간단한 용어 정리가 필요합니다. 1. 용어 정리 Proecss Object : Process 객체는 입력데이터에 대해 출력 데이터를 생성하는 객체를 말하며, 입출력 구조에 따라 Source, Filter, Mapper object 로 나뉩니다. Source Object : 입력데이터 없이 출력 데이터를 만들도록 처리하는 객체 Filter Object: 한개 이상의 입력데이터를 기반으로 한개 이상의 출력데이터를 만들도록 처리하는 객체 Sink (Mapper) Object: 출력 데이터는 없이 한개 이상의 입력데이터만을 이용하여 처리하는 객..

Developments/Medical Imaging

Hounsfield Unit CT Image Window

1. Hounsfield Unit 의료 영상에서 Pixel 에 사용되는 값의 단위는 HU 라고 하였습니다. CT는 발광부에서 X-ray를 쏘고, 이를 물체에 투과하였을 때 물체가 얼마나 X-ray를 흡수하는지를 나타내는 값입니다. 물을 0 HU, 공기를 -1000HU 로 기준으로 합니다. 그리고 인체의 각 부위별로 나타내는 값이 다음과 같습니다. 이 값은 절대적인 값은 아니지만 일반적으로 나타내는 값입니다. 2. Window Level, Window Width 우리가 HU 영상을 Gray 영상으로 변환하였을 때에 전체 값을 맵핑할 경우 우리가 원하는 부위의 영상을 알아보기가 어렵습니다. 그래서 사용하는 것이 영상의 Window Level과 Width 를 적용하여 맵핑하도록 합니다. Window Level..

Developments/Medical Imaging

CT Image conversion

CT 의료 영상은 grayscale의 Hounsfield Unit (HU) 을 사용합니다. 값은 12bit 이며 -1024 ~ 3071 값의 범위를 갖습니다. Dicom TAG를 보면 2byte 메모리에서 12bits 데이터를 값으로 사용함을 알수 있습니다. Dicom 파일을 vtk 를 이용해서 이미지를 표시하면 다음과 같은 영상을 출력합니다. 보면, 그동안 보았던 영상과는 좀 다르게 보입니다. 이유는 12bit 영상을 8bit 영상으로 표현해서 그렸기 때문입니다. 이와 같이 CT영상은 우리가 영상처리에서 사용하는 값의 범위가 아닌 HU 단위의 값을 갖고 있기 떄문에 HU를 Gray pixel 값으로 변환하는 작업이 필요합니다. HU의 영역 값으로 변환할 때에는 Window width / level의 개..

RichardBang
'Developments' 카테고리의 글 목록 (4 Page)