Developments

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의 개..

Developments/QT

QMetatype moc Compile Error

QObject 클래스와 vtkCommand 를 상속한 observer 클래스를 빌드할 때 아래와 같은 에러가 발생하였습니다. class VTKUTILS_EXPORT MyWidgetObserver : public QObject, public vtkCommand { Q_OBJECT public: explicit BoxWidgetObserver(QObject* parent = nullptr); signals: void planesChanged(vtkPlanes* planes); protected: void Execute(vtkObject* caller, unsigned long eventId, void* callData); vtkSmartPointer m_planes; }; 전체적으로 문제가 될것이 없어보이나..

Developments/QT

Qt6 Cored.dll Runtime Error

QApplication을 실행하려고하면 바로 runtime 에서 다음과 같은 에러가 발생한 경우가 있습니다. 에러 메시지를 보면 QApplication 을 생성하고 난 뒤에 Widget을 만들어야 한다고 나옵니다. callStack을 찍어보면 ui 내부의 widget 객체를 생성할 때 에러가 발생하는 걸로 나옵니다. 하지만, 실제로 코드상에는 문제가 없다면, library import하는 부분을 확인해야 합니다. QTVSTools를 사용하는 경우에는 직접적인 library 를 import 하면 안되고, tools에서 관리되어 중복 import 가 되지 않도록 해야 합니다.

Developments/VTK

[QVTK] QVTKOpenGLWindow Interactor 명령어

QVTKOpenGLWindow를 생성하면 default 로 설정되는 interactorstyle은 vtkInteractorStyleTrackballCamera 입니다. 기본적으로 RenderWindow 에서 사용할 수 있는 명령어들 입니다. Surface 모드 : S Wireframe 모드 : W Zoom In/Out : Wheel , 마우스 우측클릭+drag Reset : R Pick : P

Developments/VTK

[QVTK] Visualization Pipeline

이전 글에서 Qt에 VTK를 Widget으로 구성하는 방법을 알아봤었습니다. 일반적으로 VTK 에서 활용하는 RenderWindow와 Interactor를 제어하는 방법이 Qt 의 Widget으로 대체되어 제어되는 것인데, 이것을 구조도로 구성해봤습니다. RenderWindow를 생성하고 interactor를 연결합니다. 방법1. // RenderWindow 객체 생성 vtkNew renderWindow; // Widget에 RenderWindow 객체 입력 ui->openGLWidget->setRenderWindow(renderWindow); // InteractorStyle 입력 vtkNew interactorStyle; ui->openGLWidget->interactor()->SetInteracto..

Developments/QT

Qt QObject Link 에러

qt_static_metacall, staticMetaObject 함수에 대한 링크에러가 발생할 경우 build output 경로에 QObject 파일에 대한 moc_XX.cpp 파일이 생성되었는지 확인한다. 만약에 moc 파일이 생성되지 않은 클래스가 있을 경우에는 해당 클래스의 header 파일에서 space 하나를 추가해서 파일이 변경되도록 하고, moc 파일이 생성되도록 한다. 그러고나면 link 에러가 없어짐. 일시적으로 moc 컴파일러가 작동을 안하는 경우 그렇다.

Developments/QT

Qt Custom Widget Tutorial #5 [Widget Interface]

지금까지 CustomWidget Plugin을 만들고 Application 프로그램에 만든 widget을 붙여서 실행하는 것까지 해왔습니다. 이번 시간에는 만든 widget plugin의 속성을 변경할 수 있는 interface에 대해서 알아보도록 하겠습니다. 1. QDesignerCustomWidgetInterface 2강에서 Qt Custom Widget 프로젝트를 만들 때 MyWidget 클래스와 함께 자동으로 MyWidgetPluin 클래스가 만들어졌었습니다. Plugin 클래스는 QDesignerCustomWidgetInterface 클래스를 상속한 자식 클래스입니다. 바로 이 시간에 알아볼 내용이 QDesignerCustomWidgetInterface 클래스 입니다. 짧게 interface 클..

Developments/QT

Qt Custom Widget Tutorial #4 [App 연동]

이번 강의에서는 Application 에서 plugin 을 ui 을 사용하는 방법에 대해 알아보도록 하겠습니다. 1. Application 환경 구축 Designer에서 만든 Widget을 추가해서 App ui파일에 그리는 것까지 했습니다. 하지만, 프로젝트 빌드를 해보면 컴파일 에러가 나옵니다. 기본적으로 library 를 사용하려면 header 참조를 찾아야 하는데 ui_QtMyApp.h 파일에서 우리가 만든 plugin library 의 header를 참조하지 못해서 컴파일 에러가 발생했습니다. 일반적으로 library 프로젝트와 app 프로젝트가 같은 솔루션에 있기 때문에 상대 경로를 이용해서 header를 연결하면 될 수 있지만 이런 방법은 shared dll library 를 활용하는 방법으로..

Developments/QT

Qt Custom Widget Tutorial #3 [Plugin Designer 연동]

2강에서 Qt VS Tools의 template 프로젝트를 이용하여 widget plugin프로젝트를 만들었습니다. 이번 강의에서는 Widget 프로젝트를 Qt Designer 에서 활용하는 방법과 주의점을 설명하겠습니다 1. App 프로젝트 만들기 Custom Widget을 띄울 application 프로젝트를 QtWidgetTutorial 솔루션에 추가하여 생성합니다. 그림 순서대로 따라하면 됩니다. Qt WidgetApplicaiton 에서는 Base class를 3가지 형태로 제공하는데 간단하게 QDialog 로 만들었습니다. QMainWindow나 QWidget 어느 형태여도 상관은 없습니다. 프로젝트 생성을 완료하면 다음과 같은 파일 구조를 만들게 됩니다. 2. CustomWidget 등록하기..

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