Binary Editor – 0xED

まったく僕も馬鹿です 「そんな訳ないよね」ともう一度 0xEDを立ち上げたところ、問題無く 各種検索できました

例えば 先の transfer syntax : 1.2.840.10008.1.2.4.70を検索すると このようにヒットして強調されます

0xEDでヒット

そして、今度は DICOM tagの例えば DHT tagでいる 0xFFC4を検索すると このようにヒットしました これが、DHT (Define Huffman Table)の開始位置を示すタグとなり、それに引き続く数十バイトが肝腎の Huffman tableということになりますね

DHTにヒット

Binary Editor – HexFiend

HexFiendですが、バグ発見しました それはアドレス表示が decimalでしか出ないことです やはり hexで表示して欲しいのですが、decimal -> hexに切り替えると アドレス表示そのものが消えてしまうのです

まあ本質的問題ではありません

ちなみに、DICOMの Transfer Syntax: 1.2.840.10008.1.2.4.70 を検索してみました 通常 DICOM XAはこの Syntaxを用います これは、いわゆる JPEG Lossless圧縮であり、DC成分のHuffman Encodingだということが宣言されているのです こんな感じでヒットします ただ、ヒットした時の表示が色付けされたりしないのも少し不満ですね

HexFiend

何はともあれ必要なのは Binary Editor

Binary Editorとして Windows上では 超有名ソフト Starlingというのがあります これはもちろん Free Softwareなのですが秀逸の出来なので、僕も以前 DICOM解析の時には随分とお世話になりました

さて、MacOSですが、 Xcodeでもできるという話なのですが、どうやったらば binaryとしてファイルを開けるか分かりません Web検索かけてもなかなかヒットしないのです それで、色々探すと、0XEDというソフトが良い、というのが書かれています しかし実際に立ち上げてみると、肝腎の binary 部分の検索ルーチンにバグがあり、うまいこと DICOM tagを検索できません

困り果て、これは Windowsで開発せねばならないかな? と思い始めた時に、最後にヒットしたのが HexFiendというソフトです あまり魅力的なインターフェースではないのですが、きちんと使えるソフトですので、これを用いていくことに決めました

少しだけ進展 – Pydicom

少しだけ進展しました DICOM-XA解析において、何が必要か? それがなかなかつかめなかったのです 自分で C++でプログラム書いてから既に数年が経過し、色々な知識が消え失せているのです
それでも少しずつ進みましょう

IDLE

これで IDLEに入りました

>>>import dicom #これで pydicom module読み込み

>>> df = dicom.read_file("XA1.dcm")
# これにより XA1.dcmという DICOM-XA fileをdf というオブジェクトに読み込み

>>>pixel_bytes = df.PixelData
#これにより XA1.dcmの中の画像データ部分を pixel_bytesというバイト配列に読み込みしました

あとはここから 1 byteずつ読み出してそれを JPEG Lossless decodingに渡せば良いはずです

なにやってんだか

まったく何やってるんだか 一歩進み百歩戻り 色々な環境に Pythonをインストールしてきました 具体的には MaOS Sierra、Windows10 on Parallels Desktop、そして Windows10 on SurfacePro4です 同じ Python3.6なのですが、実際には微妙に環境が異なり、なかなか同じようには動かないのです

そういう違いを吸収するのが pyenvという仮想環境なのですが、それとてなかなかうまく行かないことがあるのです まあ Python本体に関しては概ね問題無いのですが、色々なライブラリをインストールする段階で問題が起こるのです

本日も IDLEを走らせて bitstringのテストしようと思ったのですが、IDLEを立ち上げると Python3.5が立ち上がり、その中で bitstringを動かそうとしてもライブラリがインストールされていない、というエラーが出ます

一方 Terminalから Pythonを立ち上げると3.6が立ち上がり、この binaryは~/anaconda/bin/に存在するのです

では Python3.5は何処にあるかと言えば、以前インストールして、既に削除したつもりであった ~/.pyenv/anaconda/bin/ に存在するのです

そして IDELはこの ~/.pyenv/anaconda/bin/の紐づけられていて、その紐をほどす方法がどうしても分からなかったのです

結局やったことは、思い切って、

$pyenv uninstall anaconda3-4.1.0

として古い Anacondaでインストールされていた Python関連 binaryをアンインストールしてから

$rm -rf ~/.pyenv

により~/.pyenv/に入っていた色々なファイルを全部削除 しかしこれだけでは駄目です bashに命令が書き込まれているからです そこで vimを立ち上げます

$vim ~/.bash_profle

そして vim(vi)の中で pyenvという単語が書き込まれている三行ほどを全部削除します そして、それを bashに教え込むために

$source ~/.bash_profile

として、ようやく作業終了 これで古い anaconda/pythonを削除しました それから、再び pyenvをインストールして、pyenvの中で新しい anacondaをインストールし、python –versionで 3.6が立ち上がること確認して

pip install bitstring

によりbitstringをインストールしました これでIDLEを立ち上げるときちんと Python3.6の下で IDLEが動作することを確認しました

まったく何回こんな作業を繰り返しているのでしょうか? まるで賽の河原で石を永遠に積み上げさせられている苦行のようですね

爛柯 (ランカ)