web-dev-qa-db-ja.com

DICOM画像をPNGに変換する方法は?

Cancer Imaging Archive からダウンロードしたDICOM医用画像ファイルがいくつかあります。それらをDICOMから他のいくつかの形式に変換できますが、ご覧のとおり、ほとんどの場合、変換は期待どおりに機能していません。

これらは私がこれまでに理解したさまざまな変換です:

  • DICOMからnetpbm形式:dctopgm8 000005.dcm 000005.pbm
  • DICOMからpnmへのフォーマット:dctopnm -byteorder little 000005.dcm 000005.pnm
  • DICOMからpng形式:dcm2pnm +on 000005.dcm 000005.png
  • DICOMからpng形式(ImageMagick経由):convert 000005.dcm 000005.png

これらのうち、.pbmのみが優れた結果をもたらすと思われます。次のようになります。

pbm file

.pnmは次のようになります。これは完全に逆のイメージではありませんが、どういうわけか間違っているように見えます。

pnm file

そして、両方の.png変換は次のようになります。これは、おそらくアルファチャネル、ガンマなどの問題が原因で、非常に色あせた画像です。

png file

問題は、これらをPBMではなくPNGにする必要があることです。また、PBMからPNGへの変換を追加することもできますが、convertを1回だけ呼び出して、1つのコマンドで完全な変換を実行したいと思います。

dcm2pnmまたはImageMagickのconvertを呼び出して画像を期待どおりに表示するために、どのパラメーターが欠落している可能性があるかを知っている人はいますか?


編集:サンプルの.dcm画像を含める: 0005.dcm

3
Stéphane

16ビット画像を8ビットに変換しようとしているようです。これはCT画像のように見え、ピクセル値は通常-1000(空気)から0(水)、3000(密な骨)になります。

PBMプログラムは、ピクセル値を再スケーリングすることにより、16ビットを8ビットにマッピングしていると思います。 PNMバージョンは下位8ビットのみを取得し、上位8ビットを無視しているようです。PNGは16ビットデータ全体をサポートしているため、おそらくPNG画像には上位8ビットのみが表示され、下位8ビットは無視されます。 8.8。

ピクセル強度を-32768-32767から0-255に再スケーリングする必要があります(または、符号なし16ビットintとして表示する場合は0から63356)。

これは、SimpleITKを使用してPythonのように:

import SimpleITK as sitk

img = sitk.ReadImage("000005.dcm")
# rescale intensity range from [-1000,1000] to [0,255]
img = sitk.IntensityWindowing(img, -1000, 1000, 0, 255)
# convert 16-bit pixels to 8-bit
img = sitk.Cast(img, sitk.sitkUInt8)

sitk.WriteImage(img, "000005.png")
2
Dave Chen