5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SimpleITKで画像を読み込むときに、pathに日本語があるとダメな問題

Last updated at Posted at 2019-11-26

#はじめに
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形式)を読み込むコードになっています。

read_image.py
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に日本語を含まないようにすること。
根本的な解決策がわかったら更新します。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?