byte[]
DICOM 画像の生のピクセル データがあります。byte[]
これをImage
オブジェクトに変換したいと思います。
私は試した:
Image img = Image.FromStream(new MemoryStream(byteArray));
しかし、これは私にとってはうまくいきません。他に何を使用すればよいですか?
注意すべきことの 1 つは、dicom の「イメージ」が必ずしも単なるイメージ データではないということです。dicom ファイル形式には、生の画像データよりもはるかに多くのデータが含まれています。これは、あなたがハングアップしている場所かもしれません。dicom のウィキペディアの記事にリンクされている dicom ファイル標準を確認することを検討してください。これは、実際に関心のある情報を解析する方法を理解するのに役立ちます。
あなたは次のことをしなければなりません
GDCM を使用する必要があります。
草の根 DiCoM は、DICOM 医療ファイル用の C++ ライブラリです。自動的に python/C#/Java にラップされます (swig を使用)。RAW、JPEG 8/12/16 ビット (非可逆/可逆)、JPEG 2000、JPEG-LS、RLE、デフレート (zlib) をサポートしています。
移植性があり、ほとんどのシステム (Win32、Linux、MacOSX) で動作することが知られています。
例を参照してください。
ピクセル データは、通常 (常にではありませんが) DICOM データの最後で終了します。幅、高さ、ストライド、および色深度を把握できる場合は、(7FE0,0010) データ要素値までスキップして、後続のバイトを取得するだけで実行できるはずです。これは、ほとんどの通常の画像ビューアが DICOM 画像を表示するときに使用するトリックです。
DICOM ファイルから画像を取り出すために使用できるEvilDicom ( http://rexcardan.com/evildicom/ ) という C# ライブラリがあります。ウェブサイトでそれを行う方法に関するチュートリアルがあります。
DICOM はばかげた仕様であり、近い将来に見直されることを心から願っています。とはいえ、Offis には、さまざまな一般的なエンコーディングで dicom を変換するのにかなり優れたソフトウェア スイート「DCMTK」があります。ファイル x-bytes を先にスキップしようとするだけで、単一のファイルの場合はおそらく問題ありませんが、ボリュームまたは複数のボリュームがある場合は、より堅牢な戦略が必要です。DCMTK の変換コードを使用して、pnm に入る前にイメージ ビットを取得しました。DCMTK で探しているファイルは、エンコーディング スキームに応じて dcm2pnm または場合によっては dcmj2pnm です。
ランタイム フラグの 1 つで修正したスケール ウィンドウに問題がありました。DCMTK はオープン ソースであり、かなり単純なビルド手順が付属しています。