commontk / CTK

A set of common support code for medical imaging, surgical navigation, and related purposes.
https://commontk.org
Apache License 2.0
855 stars 490 forks source link
3d-slicer c-plus-plus cross-platform dicom itk medical-imaging mitk open-source osgi plugin-manager python qt vtk

Common Toolkit

Actions Status License

The Common Toolkit (CTK) is a community-driven effort, focused on providing support code for medical image analysis, surgical navigation, and related projects.

Overview

CTK covers topics not addressed by existing toolkits, catering to the mutual interests and needs of the CTK community. The current scope of CTK efforts includes the following topics: DICOM, DICOM Application Hosting, Widgets, Plugin Framework and Command Line Interfaces.

Getting Started

To work with CTK, you need to have a C++ compiler, Qt libraries, and CMake installed.

Configure

Configure the project using CMake by setting the following options:

Notes

Topics

DICOM

CTK provides high-level classes that support query and retrieve operations from PACS and local databases. It includes Qt widgets for easily setting up a server connection, sending queries, and viewing the results. The underlying toolkit used is DCMTK.

To learn more, refer to the Overview of DICOM functionality in CTK.

DICOM Application Hosting

CTK aims to create a C++ reference implementation of the DICOM Part 19 Application Hosting specifications. It provides an infrastructure to create both hosts and hosted applications. Although the project is still in alpha status, it can be useful for conformance testing and initial experimentation.

To learn more, see the DICOM Application Hosting documentation.

Widgets

CTK offers a collection of Qt Widgets for use in biomedical imaging applications.

To explore the available widgets, visit the Gallery and the associated Widgets wiki page.

Plugin Framework

CTK provides a dynamic component system for C++, modeled after the OSGi specifications. It enables a development model where applications are dynamically composed of many different reusable components, following a service-oriented approach.

To get started with the Plugin Framework, refer to the Plugin Framework documentation.

Command Line Interfaces

CTK supports the usage of algorithms written as self-contained executables in multiple programming languages. It includes a command line interface (CLI) module that simplifies the integration of command line tools into CTK-based applications. The CLI module provides a flexible and extensible framework for defining, executing, and configuring command line interfaces for algorithms.

To learn more about the CLI module, see the Command Line Interfaces documentation.

Supported Qt versions

CTK supports the following versions of Qt:

Unsupported:

Supported Python versions

CTK supports the following versions of Python:

Unsupported:

Dependency Management

CTK simplifies the process of managing dependencies by automatically handling the download, configuration, and building of required dependencies (except Qt) as part of the build process. This ensures that the necessary dependencies are readily available for building CTK-based applications without manual intervention.

To further support customization of CTK dependencies, you have the option to configure CTK by specifying options for each dependency. These options can include <Package>_DIR or CTK_USE_SYSTEM_<Package>, where <Package> represents the name of the respective dependency. For more details on the available options for each dependency, you can refer to the corresponding CTK/CMakeExternals/<Package>.cmake file.

In achieving this automatic dependency management, CTK internally integrates the Artichoke CMake module, which enhances the built-in ExternalProject CMake module.

By utilizing this integrated approach, CTK facilitates the management and customization of dependencies, providing flexibility and ease of use for developers working with CTK-based applications.

License

CTK code is licensed under Apache 2.0. This means that users of CTK are allowed to use the code for academic, commercial, or other purposes without paying license fees or being restricted in their ability to redistribute their code or keep it private.