Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the all-in-one-seo-pack domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the easy-fancybox domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the urvanov-syntax-highlighter domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the breadcrumb-navxt domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the advanced-ads domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Notice: 関数 _load_textdomain_just_in_time が誤って呼び出されました。lancr ドメインの翻訳の読み込みが早すぎました。これは通常、プラグインまたはテーマの一部のコードが早すぎるタイミングで実行されていることを示しています。翻訳は init アクション以降で読み込む必要があります。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 6.7.0 で追加されました) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Warning: Cannot modify header information - headers already sent by (output started at /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php:6114) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-content/plugins/all-in-one-seo-pack/app/Common/Meta/Robots.php on line 87

Warning: Cannot modify header information - headers already sent by (output started at /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php:6114) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/feed-rss2.php on line 8
ファイルを一括選択 | 診療放射線技師がPythonをはじめました。 http://radiology-technologist.info 診療放射線技師のPython日記。解析等で使えるコードを作成、アップしていきたいと思っています。その他いろいろ Wed, 20 May 2020 11:04:54 +0000 ja hourly 1 https://wordpress.org/?v=6.7.1 https://i0.wp.com/radiology-technologist.info/wp-content/uploads/2018/09/cropped-logo5.png?fit=32%2C32 ファイルを一括選択 | 診療放射線技師がPythonをはじめました。 http://radiology-technologist.info 32 32 164362728 フォルダでファイルを一括選択した時の問題点 http://radiology-technologist.info/post-652 Wed, 20 May 2020 11:04:49 +0000 http://radiology-technologist.info/?p=652 はじめに いままでの記事でファイル選択を幾度となく […]

The post フォルダでファイルを一括選択した時の問題点 first appeared on 診療放射線技師がPythonをはじめました。.]]>
はじめに

いままでの記事でファイル選択を幾度となく扱ってきましたが、フォルダを選択することでファイルを一括選択する際になぜか、画像の並び順がおかしいと気が付き調べてみました。


広告
デル株式会社

ファイルを複数選択した場合

ファイルを複数選択する方法を調べてみました。

「画像選択のプログラムを使いやすく!!」で作成したファイルを複数選択する方法で試してみました。

方法としてはファイルを複数選択し、for文を用いて一つ一つファイルパスを表示する原始的な方法です。

# -*- coding: utf-8 -*-
import fileselect as fs   
import pydicom

####ファイルを複数選択する方法########
filenames = fs.multi_fileselect()

for i in range(len(filenames)):
    print(filenames[i])

結果です。

ファイルは、順番通りに読み込まれています。


広告
HP Directplus -HP公式オンラインストア-

ファイルをフォルダで一括選択する方法

# -*- coding: utf-8 -*-
import fileselect as fs   
import pydicom

####ファイルをフォルダで選択する方法###
filenames = fs.folder_fileselect()

for i in range(len(filenames)):
    print(filenames[i])

結果です。

読み込まれている順番がファイルの数字順ではなく読み込まれていることが確認できます。ファイル名の数字を文字列として扱っているという事だと思います。(面倒で調べていません。。。)


広告
BTOパソコン・パソコン関連商品がお買い得!パソコン工房のセール

対処法を考えた。

それでは、どうすればフォルダで一括選択した時にスライス順に取り込んでいく事ができるか、image-Jで先ほどのDICOMタグを見てみました。

画像情報に関する情報はDICOM Blockでは0020に登録されていますので見てみます。

0020,0013にImageNumberというものがあります。(正式にはInstance Number)これが画像番号となりますのでこれの通りに読み込めばいいことになります。


実際にコードを書いていく。

まずはフォルダで一括ファイル選択をし、ファイル数だけの要素を持つリストを作成します。

空のリストを作成するには以下のコードで作れます。

filename_list =[]     #リストを作成
for i in range(len(filenames)): #ファイル数だけ要素を追加
    filename_list.append('')

numpyの場合、簡単に配列を作成できますが今回はリストなのでfor文で繰り返し、空の要素をファイル数だけ追加していきます。(上記コード3~4行目)

その後、filenamesを一つづつ読み込みDICOMタグを読み込みImageNumber-1の場所(リストは番号0から始まりますが、ファイル番号は1から始まりますので‐1しています。)に書き込みをしていきます。

その後、ファイルパスを表示していくコード(下のコード7~8行目)を書いて確認してみましょう。

for i in range(len(filenames)):
    dcm = pydicom.dcmread(filenames[i])
    img_no = int(dcm[0x0020,0x0013].value)
    filename_list[img_no-1] = filenames[i]

for i in range(len(filenames)):
    print(filename_list[i])

結果です。

無事にファイル番号順に読み込むことができました。

試したコードは以下となります。

# -*- coding: utf-8 -*-
import fileselect as fs   
import pydicom

filenames = fs.folder_fileselect()

filename_list =[]
for i in range(len(filenames)):
    filename_list.append('')

for i in range(len(filenames)):
    dcm = pydicom.dcmread(filenames[i])
    img_no = int(dcm[0x0020,0x0013].value)
    filename_list[img_no-1] = filenames[i]

for i in range(len(filenames)):
    print(filename_list[i])


最後に

今回、ファイルパスにて確認作業を行いましたが、実際画像処理をしていくときにはファイルパスはあまり必要としません。

必要になってくるのはピクセルデータなのでフォルダ選択が完了した段階で

0で埋めた配列を作成し、ImageNumber-1にピクセルデータを入れることで対処することができます。

例としては以下となります。

# -*- coding: utf-8 -*-
import fileselect as fs   
import pydicom
import numpy as np

filenames = fs.folder_fileselect()

pix_arr = np.zeros((len(filenames), row, columns),dtype = 'int16')

for i in range(len(filenames)):
    dcm = pydicom.dcmread(filenames[i]
    img_no = int(dcm[0x0020,0x0013].value)
    pix_arr[img_no-1] = dcm.pixel_array

いかがでしたか?

もし、フォルダでファイルを一括選択を使用される場合は参考にしていただければ幸いです。

お疲れ様でした。


環境

  • windows10
  • python3.6.1
  • Anaconda custom(64-bit)
  • PyCharm2020.2(Communication Edition)

広告
上新電機 パソコン買取サービス
The post フォルダでファイルを一括選択した時の問題点 first appeared on 診療放射線技師がPythonをはじめました。.]]>
652