Cancer Imaging Archive からダウンロードしたDICOM医用画像ファイルがいくつかあります。それらをDICOMから他のいくつかの形式に変換できますが、ご覧のとおり、ほとんどの場合、変換は期待どおりに機能していません。
これらは私がこれまでに理解したさまざまな変換です:
dctopgm8 000005.dcm 000005.pbm
dctopnm -byteorder little 000005.dcm 000005.pnm
dcm2pnm +on 000005.dcm 000005.png
convert 000005.dcm 000005.png
これらのうち、.pbmのみが優れた結果をもたらすと思われます。次のようになります。
.pnmは次のようになります。これは完全に逆のイメージではありませんが、どういうわけか間違っているように見えます。
そして、両方の.png変換は次のようになります。これは、おそらくアルファチャネル、ガンマなどの問題が原因で、非常に色あせた画像です。
問題は、これらをPBMではなくPNGにする必要があることです。また、PBMからPNGへの変換を追加することもできますが、convert
を1回だけ呼び出して、1つのコマンドで完全な変換を実行したいと思います。
dcm2pnm
またはImageMagickのconvert
を呼び出して画像を期待どおりに表示するために、どのパラメーターが欠落している可能性があるかを知っている人はいますか?
編集:サンプルの.dcm画像を含める: 0005.dcm
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")