#はじめに
pythonの画像処理ライブラリとしてはopenCVやPILなどが有名だと思いますが、dicom画像を直接読み込みたいという理由からSimpleITKというものを使い始めました。
まずはSimpleITKを使って画像を読み込んで表示する、という単純なコードを書いたのですが、いきなりこれに躓いてしまった。。。
結論から言うと、入力画像のpathに日本語(恐らく英語以外ダメ?)が入っていると文字コードの問題でダメっぽい。
SimpleITK自体マイナーなライブラリなので使う人はほとんどいないかもしれませんが、一応共有します。
#PC環境
- OS : Windows 10 Professional
- 言語 : Python 3.7.3
- IDE : Eclipse 4.11.0
- SimpleITK 1.2.4
#SimpleITKについて
ITK(https://itk.org/itkindex.html) というC++ベースで記述された画像処理ライブラリをpythonやJavaでも使えるようにしたものがSimpleITK(http://www.simpleitk.org/) らしい。
CTとかMRIといった医用画像を処理するのに稀によく使われます。医用画像はdicomと呼ばれる形式で保存されていることが多いため、SimpleITKはdicom画像を直接読み込めるようになっています。
ドキュメント(https://simpleitk.readthedocs.io/en/master/index.html) がある程度しっかりしているので、初心者にも始めやすい?
(まぁわたしはいきなり躓いたのですが)
#SimpleITKのインストール
pipで簡単にできる。
pip install SimpleITK
#画像の読み込み
公式ドキュメントの「Reading and Writing for Images and Transforms」(https://simpleitk.readthedocs.io/en/master/Documentation/docs/source/IO.html )に書いてある通りに画像を読み込みます。
ただし、入力画像のpathに日本語を含むようにします。
今回はdicom画像ではなくレナさん(png形式)を読み込むコードになっています。
import SimpleITK as sitk
file_name="C:/日本語/Lenna_(test_image).png"#これだと動かない
#file_name="C:/Lenna_(test_image).png"#正常に動く
reader = sitk.ImageFileReader()
reader.SetImageIO("PNGImageIO")
reader.SetFileName(file_name)
image = reader.Execute();
if ( not "SITK_NOSHOW" in os.environ ):
sitk.Show( image, "image show" )#ImageJで画像を表示する。
結果
以下のように、ファイルが見つかりませんっていうエラー文が出る。
RuntimeError: Exception thrown in SimpleITK ImageFileReader_Execute: D:\a\1\sitk-build\ITK\Modules\IO\PNG\src\itkPNGImageIO.cxx:149:
itk::ERROR: PNGImageIO(000001A1C5886F00): PNGImageIO could not open file: C:/日本語/Lenna_(test_image).png for reading.
Reason: Illegal byte sequence
対策
画像のpathを変更して日本語を含まないようにすると正常に動作する。
※根本的な解決策がわかる人いたら教えてください・・・
#GithubのIssuesを見ると・・・
中国語がpathに含まれるとダメ!って悩んでいる人がいるっぽい。
(https://github.com/SimpleITK/SimpleITK/issues/795 )
pythonのstringは文字コードがunicodeだが、ITK側は文字コードがASCIIになっていることが問題とかなんとかと議論されています。ASCIIは日本語には対応していないため、ITK側がASCIIしか読めないという話になるとpathを全部アルファベットにしなきゃいけないかもですね。。。
#追記(2021/06/23)
OpenCVでも同様に日本語pathが読めないそうですね。やはりASCIIしか対応していないことが原因だそうです。
参考までに。
https://qiita.com/SKYS/items/cbde3775e2143cad7455
#まとめ
SimpleITKを使うときは画像のpathに日本語を含まないようにすること。
根本的な解決策がわかったら更新します。