先日、web カンファレンスのために病院で内視鏡画像を cdr に焼いてもらったのですが、どういうわけか dicom ファイルで渡されました。
閲覧しようとしたのですが当然ながら viewer がないと見られません。
jpg でのエクスポートを依頼しようかとも思ったのですがとても面倒なので、chatGPT に dicom ファイルを jpg ファイルに変換する python を作ってもらいました。
python のスクリプトです。
import osimport pydicomfrom PIL import Imageimport numpy as np
dicom_folder = "/home/moheno/dicom_folder"output_folder = "/home/moheno/jpg_output"os.makedirs(output_folder, exist_ok=True)
for root, dirs, files in os.walk(dicom_folder): for file in files: dicom_path = os.path.join(root, file) try: # 拡張子に関係なく DICOM として読み込めるか試す ds = pydicom.dcmread(dicom_path)
# pixel_array がある場合だけ変換 if hasattr(ds, "pixel_array"): pixel_array = ds.pixel_array
# 16bit → 8bit に変換 if pixel_array.dtype != np.uint8: pixel_array = (pixel_array - np.min(pixel_array)) / (np.max(pixel_array) - np.min(pixel_array)) * 255 pixel_array = pixel_array.astype(np.uint8)
image = Image.fromarray(pixel_array)
# 出力パス(元のファイル名 + .jpg) relative_path = os.path.relpath(root, dicom_folder) save_dir = os.path.join(output_folder, relative_path) os.makedirs(save_dir, exist_ok=True) output_path = os.path.join(save_dir, file + ".jpg") # 拡張子なしファイルは .jpg を付ける
image.save(output_path) print(f"変換成功: {dicom_path} → {output_path}") else: print(f"pixel_array がありません: {dicom_path}")
except Exception as e: print(f"DICOM 読み込み失敗: {dicom_path} ({e})")これで一括変換できます。