[PYTHON] Lors de la lecture d'une image avec SimpleITK, il y a un problème s'il y a du japonais dans le chemin

introduction

Je pense qu'openCV et PIL sont réputés comme bibliothèques de traitement d'images pour python, mais j'ai commencé à utiliser SimpleITK parce que je veux charger directement des images dicom. Tout d'abord, j'ai écrit un code simple pour lire et afficher une image à l'aide de SimpleITK, mais je suis soudainement tombé dessus. .. .. De la conclusion, si le japonais (probablement pas l'anglais?) Est inclus dans le chemin de l'image d'entrée, cela semble inutile en raison du problème du code de caractère. Étant donné que SimpleITK lui-même est une bibliothèque mineure, peu de gens peuvent l'utiliser, mais je vais la partager pour le moment.

Environnement PC

À propos de Simple ITK

Il semble que SimpleITK (http://www.simpleitk.org/) soit une bibliothèque de traitement d'images basée sur C ++ appelée ITK (https://itk.org/itkindex.html) qui peut être utilisée avec python et Java. Il est rarement utilisé pour traiter des images médicales telles que la tomodensitométrie et l'IRM. Les images médicales étant souvent stockées dans un format appelé dicom, SimpleITK peut lire directement les images dicom. La documentation (https://simpleitk.readthedocs.io/en/master/index.html) est assez solide, il est donc facile pour les débutants de se lancer? (Eh bien, j'ai soudainement trébuché)

Installez SimpleITK

Facile à faire avec pip.

pip install SimpleITK

Chargement des images

Chargez les images exactement comme décrit dans la documentation officielle "Lecture et écriture pour les images et les transformations" (https://simpleitk.readthedocs.io/en/master/Documentation/docs/source/IO.html). Cependant, assurez-vous que le chemin de l'image d'entrée inclut le japonais. Cette fois, le code consiste à lire Lena (format png) au lieu de l'image dicom.

read_image.py


import SimpleITK as sitk

file_name="C:/Japonais/Lenna_(test_image).png "#Ça ne marche pas avec ça
#file_name="C:/Lenna_(test_image).png "#Fonctionne normalement

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" )#Affichez une image avec ImageJ.

résultat

Je reçois un message d'erreur indiquant que le fichier est introuvable, comme indiqué ci-dessous.

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:/Japonais/Lenna_(test_image).png for reading.
Reason: Illegal byte sequence

** Contre-mesure **

Si vous modifiez le chemin de l'image pour qu'elle n'inclut pas le japonais, cela fonctionne normalement.

En regardant les problèmes sur Github ...

N'utilisez pas le chinois sur votre chemin! Il semble y avoir des gens qui s'inquiètent. (https://github.com/SimpleITK/SimpleITK/issues/795 ) Le code de caractère de la chaîne python est unicode, mais le côté ITK soutient que le code de caractère est ASCII. ASCII ne prend pas en charge le japonais, donc quand il s'agit du fait que le côté ITK ne peut lire que l'ASCII, il peut être nécessaire de rendre tous les chemins alphabétiques. .. ..

Résumé

Lorsque vous utilisez SimpleITK, n'incluez pas le japonais dans le chemin de l'image. Je le mettrai à jour lorsque je trouverai la solution sous-jacente.

Recommended Posts

Lors de la lecture d'une image avec SimpleITK, il y a un problème s'il y a du japonais dans le chemin
Dans le dictionnaire python, si une clé inexistante est accédée, initialisez-la avec une valeur arbitraire
Déterminer s'il y a des oiseaux dans l'image
Créer une image avec des caractères avec python (japonais)
Si branche en fonction de l'existence ou non d'un élément spécifique dans la liste
[Pour les débutants] Comportement inattendu si "\" est inclus lors de la définition du chemin en Python
Vérifiez si la chaîne est un nombre en python
Lors de l'écriture d'une instruction if avec une expression régulière
Déterminer si un attribut est défini dans l'objet
Résolution du problème selon lequel l'image n'était pas affichée dans ROMol lors du chargement avec PandasTools.LoadSDF.
Lorsqu'une variable locale portant le même nom que la variable globale est définie dans la fonction
Résout un problème où cv2.imread () ne donne pas d'erreur lors de la tentative de lecture d'une image même si le chemin ne passe pas
Y a-t-il un biais dans les nombres qui apparaissent dans les nombres de Fibonacci?
Résolvez le problème japonais lors de l'utilisation du module CSV en Python.
L'image est Namekuji
Solution de contournement pour sys.argv non transmise lors de l'exécution d'un script Python avec uniquement le nom de fichier sur Python2.7 sous Windows
Que faire si un message d'erreur "Un problème est survenu lors de l'affichage de cette page Web" s'affiche dans le pilote Web de Chrome (Selenium)
Exécutons Fusion 360 avec Python Partie 11 Puisqu'il n'y a aucun point le long du chemin dans l'API, j'ai pensé à une alternative
Que faire lorsqu'une partie de l'image d'arrière-plan devient transparente lorsque l'image transparente est combinée avec Oreiller
Python échouera s'il y a un espace après la barre oblique inverse
Vérifiez si le fichier de paramètres est lu de manière simple à comprendre
Supprimer un caractère spécifique en Python s'il s'agit du dernier
Lisez le fichier en Python avec un chemin relatif depuis le programme
Erreur avec pip: un problème est survenu lors de la confirmation du certificat SSL
Solution lorsque json.Marshal de go renvoie un objet vide
Résolvez les problèmes de somme partielle avec une recherche complète en Python
[Golang] Vérifiez si une chaîne de caractères spécifique est incluse dans la chaîne de caractères
Une histoire quand un répertoire est bogué avec la commande django-admin start project dans un environnement virtuel utilisant Pipenv
Vérifier s'il y a un symbole spécifique dans le fichier exécutable et ses bibliothèques dépendantes (version simplifiée)
Faites attention au type lorsque vous créez un masque d'image avec Numpy
Comportement lors du retour dans le bloc with
Lorsque la cible est Ubuntu 16.04 dans Ansible
Y a-t-il NaN dans le DataFrame pandas?
Dans le tutoriel Chainer, j'obtiens une erreur lors de l'importation d'un package. (moquer)
Si vous les gars dans la cuisine de portée pouvez le faire avec une marge ~ ♪
Comment afficher dans toute la fenêtre lors de la définition de l'image d'arrière-plan avec tkinter
Si vous obtenez une longue erreur lors de la tabulation d'un shell interactif avec Anaconda
Dessinez un graphique avec des étiquettes japonaises dans Jupyter
Parler en japonais avec OpenJtalk (lire un fichier texte)
Parler en japonais avec gTTS (lire un fichier texte)
Qu'est-ce que wheezy dans l'image Docker Python?
Déterminez les nombres dans l'image prise avec la webcam
Détecter les dossiers avec la même image dans ImageHash
N'y a-t-il pas une valeur par défaut dans le dictionnaire?
Lorsqu'un fichier est placé dans le dossier partagé de Raspberry Pi, le processus est exécuté.
Une note lors de la vérification si la clé spécifiée existe dans le dictionnaire défini avec python
Je suis resté bloqué en essayant de spécifier un chemin relatif avec relative_to () en python
Convertir une chaîne de chemin qui utilise un lien symbolique au milieu en un chemin absolu
Lors de la lecture d'un fichier csv avec read_csv de pandas, la première colonne devient index
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Il y a un modèle que le programme ne s'est pas arrêté lors de l'utilisation du thread Python
[Introduction à Python] Quel est l'important "if __name__ == '__ main__':" lorsqu'il s'agit de modules?
J'ai posé le problème de la séquence tribonatch en C ++ et le nombre d'appels de fonction lors de l'écriture avec une fonction de récurrence (python est également disponible)
Lors de l'accès à une URL contenant du japonais (URL japonais) avec python3 avec urllib, elle sera encodée arbitrairement avec html et une erreur se produira, alors notez la solution de contournement