ITKは、画像セグメンテーションおよび画像レジストレーションプログラムの開発に広く使用されている、クロスプラットフォームのオープンソースアプリケーション開発フレームワークです。セグメンテーションとは、デジタル的にサンプリングされた表現に含まれるデータを識別し、分類するプロセスです。通常、サンプリングされた表現は、CTスキャナーやMRIスキャナーなどの医療機器から取得した画像です。レジストレーションとは、データ間の対応関係を整列または構築するタスクです。たとえば、医療環境では、CTスキャンとMRIスキャンを整列させて、両方に含まれる情報を組み合わせることがあります。
ITKは、米国国立医学図書館(NLM )の資金提供を受けて、Visible Human Projectの画像を分析するためのアルゴリズムのオープンリソースとして開発されました。ITKはThe Insight Segmentation and Registration Toolkitの略です。このツールキットは、2次元、3次元、およびそれ以上の次元における最先端のセグメンテーションおよびレジストレーションアルゴリズムを提供します。ITKは、構成プロセスを管理するためにCMakeビルド環境を使用します。ソフトウェアはC++で実装されており、 Python用にラップされています。ITKプロジェクトの派生版として、8つのプログラミング言語でITKへの簡略化されたインターフェースを提供するSimpleITKも、現在活発に開発されています。
1999年、米国国立衛生研究所(NIH )傘下の国立医学図書館(NLM)は、オープンソースの登録およびセグメンテーションツールキットの開発に関する3年間の契約を締結しました。このツールキットは後にInsight Toolkit(ITK)として知られるようになりました。ITKのNLMプロジェクトマネージャーはテリー・ユー博士で、Insight Software Consortiumを構成する6つの主要契約業者を統括しました。このコンソーシアムのメンバーには、 GE Corporate R&D、Kitware , Inc.、MathSoft(現在の社名はInsightful)の3つの商業パートナーと、ノースカロライナ大学(UNC)、テネシー大学(UT)、ペンシルベニア大学(UPenn)の3つの学術パートナーが含まれていました。これらのパートナーの主任研究者は、それぞれGE CRDのビル・ローレンセン、Kitwareのウィル・シュローダー、Insightfulのヴィクラム・チャラナ、ノースカロライナ大学のスティーブン・アイルワードとルイス・イバニェス(両者とも後にKitwareに移籍)、テキサス大学のロス・ウィテカーとジョシュ・ケイツ(両者とも現在はユタ大学)、ペンシルバニア大学のディミトリス・メタクサス(ディミトリス・メタクサスは現在ラトガース大学)であった。さらに、ブリガム・アンド・ウィメンズ病院のピーター・ラティウ、コロンビア大学のセリーナ・イミエリンスカとパット・モルホルト、ペンシルバニア大学のGrasp Labのジム・ジー、ピッツバーグ大学のジョージ・ステッテンなど、複数の下請け業者がコンソーシアムを構成した。
ITKは、位置合わせとセグメンテーションを実行するためのオープンソースのソフトウェアツールキットです。セグメンテーションとは、デジタル的にサンプリングされた表現に含まれるデータを識別し、分類するプロセスです。通常、サンプリングされた表現は、CTスキャナーやMRIスキャナーなどの医療機器から取得した画像です。位置合わせとは、データ間の対応関係を整列または構築する作業です。たとえば、医療分野では、CTスキャンとMRIスキャンを位置合わせして、両方のスキャンに含まれる情報を組み合わせることがあります。
ITKはC++で実装されています。ITKはクロスプラットフォームであり、コンパイルプロセスはCMakeビルド環境を使用して管理されます。さらに、自動ラッパープロセスによって、C++とJavaやPythonなどの他のプログラミング言語との間のインターフェースが生成されます。これにより、開発者はさまざまなプログラミング言語を使用してソフトウェアを作成できます。ITKの実装では、C++テンプレートを使用したジェネリックプログラミングの手法が採用されています。
ITKはオープンソースプロジェクトであるため、世界中の開発者がソフトウェアの使用、デバッグ、保守、拡張を行うことができます。ITKはエクストリームプログラミングと呼ばれるソフトウェア開発モデルを採用しています。エクストリームプログラミングは、通常のソフトウェア作成方法を、設計・実装・テスト・リリースという同時かつ反復的なプロセスに集約します。エクストリームプログラミングの重要な特徴は、コミュニケーションとテストです。ITKコミュニティのメンバー間のコミュニケーションは、ソフトウェアの急速な進化を管理する上で役立ちます。テストは、ソフトウェアの安定性を維持する上で不可欠です。ITKでは、CDashを使用した包括的なテストプロセスが実施されており、品質を毎日測定しています。ITKテストダッシュボードは継続的に公開され、ソフトウェアの品質を反映しています。
インサイトツールキットは当初、6つの主要組織によって開発されました。
そして3つの下請け業者
ソフトウェアは誕生後、他の機関からの貢献を受けて成長を続け、
本プロジェクトの資金は、米国国立衛生研究所(NIH)傘下の国立医学図書館(NLM)から提供されています。NLMは、NIH加盟機関からの支援を受けています(スポンサー一覧を参照)。
本プロジェクトの目標は以下のとおりです。
Insight Toolkitのソースコードは、Apache 2.0ライセンス( Open Source Initiativeによって承認済み)に基づいて配布されています。
Insight Toolkitのオープンソースの理念は、オープンサイエンスを支援するために拡張され、特に医用画像処理分野の出版物へのオープンアクセスを提供しています。これらの出版物は、Insight Journalを通じて無料で公開されています。
ITKはオープンソースシステムであるため、誰でもプロジェクトに貢献できます。ITKへの貢献に関心のある方は、以下の手順を実行してください。
誰でもパッチを提出できます。パッチをマージしたり、作者としてクレジットを保持したりするために、リポジトリへの書き込み権限は必要ありません。詳細については、ITK Bar Campのパッチ提出方法に関するドキュメントを参照してください。
ITK は、ITK のサポートに関心のある組織や個人の非営利連合である Insight Software Consortium によって著作権が保護されています。ITK バージョン 3.6 以降、ソフトウェアは BSD オープンソース ライセンスの下で配布されています。特許取得済みのディレクトリにあるコードを除き、適切な表示を条件として、あらゆる目的での使用が許可されています。著作権およびライセンスの全文は、www.itk.org/ITK/project/license.html で確認できます。バージョン4.0はApache 2.0ライセンス
ライセンスは、特許保護条項を含む最新のライセンスを採用するため、バージョン4.0でApache 2.0に変更されました。バージョン3.6から3.20までは、簡略化されたBSDライセンスが使用されていました。ITK 3.6より前のバージョンは、修正されたBSDライセンスの下で配布されていました。ITK 3.6からBSDライセンスを採用した主な理由は、OSI承認済みのライセンスを取得するためでした。
以下のセクションでは、NLMのInsight ITKツールキットの技術的特徴を要約します。設計思想 以下は、ツールキットの設計思想における主要な特徴です。
以下は、このツールキットのアーキテクチャにおける主要な特徴です。
以下は、このツールキット導入の理念における主要な特徴です。
ITKはCMake(クロスプラットフォームのmake)ビルド環境を使用します。CMakeはオペレーティングシステムやコンパイラに依存しないビルドプロセスであり、実行されるOSとコンパイラに適したネイティブビルドファイルを生成します。UnixではCMakeはメイクファイルを生成し、WindowsではCMakeはプロジェクトとワークスペースを生成します。
ITKは、広範なテスト環境をサポートしています。コードは、多数のハードウェア/オペレーティングシステム/コンパイラの組み合わせで毎日(場合によっては継続的に)テストされ、その結果はITKテストダッシュボードに毎日掲載されます。テストプロセスの管理とダッシュボードへの結果掲載には、Dartを使用しています。
ITKは多くの高度なデザインパターンと汎用プログラミングを採用しています。Insightの設計と構文を理解する上で、以下の資料が役立つでしょう。
#include "itkImage.h"int main () { using ImageType = itk :: Image < unsigned char , 3 > ; ReaderType = itk :: ImageFileReader < ImageType >を使用します。WriterType = itk :: ImageFileWriter < ImageType >を使用します。FilterType = itk :: GradientRecursiveGaussianImageFilter < ImageType , ImageType >を使用します。ReaderType :: Pointer reader = ReaderType :: New (); WriterType :: Pointer writer = WriterType :: New ();リーダー-> SetFileName ( "lungCT.dcm" );ライター-> SetFileName ( "smoothedLung.hdr" );FilterType :: Pointer filter = FilterType :: New ();filter- > SetInput ( reader- > GetOutput () ); writer- > SetInput ( filter- > GetOutput () ); filter- > SetSigma ( 45.0 );try { writer -> Update (); } catch ( itk :: ExceptionObject & excp ) { std :: cerr << excp << std :: endl ; return EXIT_FAILURE ; } }#include "itkImage.h"int main () { using InputImageType = itk :: Image < signed short , 3 > ; using OutputImageType = itk :: Image < unsigned char , 3 > ; using ReaderType = itk :: ImageFileReader < InputImageType > ; using WriterType = itk :: ImageFileWriter < OutputImageType > ; using FilterType = itk :: ConnectedThresholdImageFilter < InputImageType , OutputImageType > ;ReaderType :: Pointer reader = ReaderType :: New (); WriterType :: Pointer writer = WriterType :: New ();リーダー-> SetFileName ( "brain.dcm" );ライター-> SetFileName ( "whiteMatter.hdr" );FilterType :: Pointer filter = FilterType :: New ();filter- > SetInput ( reader- > GetOutput () ); writer- > SetInput ( filter- > GetOutput () );filter- > SetMultiplier ( 2.5 ); ImageType :: IndexType seed ; seed [ 0 ] = 142 ; seed [ 1 ] = 97 ; seed [ 2 ] = 63 ; filter- > AddSeed ( seed ); try { writer- > Update (); } catch ( itk :: ExceptionObject & excp ) { std :: cerr << excp << std :: endl ; return EXIT_FAILURE ; } }ITKについてさらに詳しく学ぶための資料は数多くあります。
ITKについて学ぶ良い方法は、それがどのように使われているかを見ることです。ITKの応用例を見つけることができる場所は4つあります。
2004年にSNAPからITK-SNAP(ウェブサイト)が開発され、ITKを使用した人気の無料セグメンテーションソフトウェアとなり、シンプルで使いやすいユーザーインターフェースを備えています。
ITKのディスカッションフォーラムにアクセスして、コミュニティからの連絡先やサポートを入手してください。