やったあ

Pythonで DICOM XAに挑む編です

XA fileは動画シネ(シネには限らず USなんかもですが・・・)をコマ(= Frame)毎にパラパラ漫画のように連続して記録してあります

そして、それぞれの Frameは Huffman Code圧縮されていて、その圧縮のキーはそれぞれの Frame毎に設定されています これは圧縮効率を最大にするためなのです

そこで、これを解読するためには、Frame毎に設定されている Huffman定義テーブル = Define Huffman Table (DHT)を検出し、フレーム毎に分離する必要があります

このため、まず行っていることはフレーム毎に分離するため、DHTを検出することです これをやってみました

from defTag import jpegTag
from bitstring import ConstBitStream
from defTag import jpegTag
DHT_address = []

xa = ConstBitStream(filename='xa1.dcm')
print(list(xa.findall(jpegTag['DHT'], bytealigned=True)))

これで以下のようなリストが出力されました

10352, 5398688, 6469600, 11807904, 17146912, 22482576, 27843824, 33224096, 38652544, 44104704, 49597104, 55103072, 60640800, 66181296, 71753056, 77315744, 82880880, 88431792, 93978432, 99509264, 105038752, 110572944, 116110208, 121646512, 127184304, 132726336, 138267056, 143811248]

これは xa1.dcmという DICOM XA fileの中の DHTの位置を表していることになります これを用いて Frame毎にファイルを切り分けて暗号解読すれば良いということになりますね

ちなみに、defTag.pyは以下のように定義しました

jpegTag = {
    'TAG': '0xFF',
    'DHT': '0xFFC4',
    'SOI': '0xFFD8',
    'EOI': '0xFFD9',
    'SOF': '0xFFC3',
    'SOS': '0xFFDA'

}

if __name__ == '__main__':
    print(jpegTag)
    print(jpegTag['TAG'], jpegTag['DHT'])

何事もうまくいかないな

昨日はプックスペース栄和堂に行ってゆったりとした時間を過ごすつもりでした それで丁度 12:00頃 Cross Bikeで病院を出発し向かいました

そして店の前の自転車スペースで自転車に鍵をしてさあドアを開けようとすると何と Closedとなっていたのです

仕方なく諦め、自宅を通り過ぎて坂道の途中にあるのを認識していた別の Cafeに向かったのです 結構きつい坂道で、Cross Bikeのギアを思い切り lowにしたのですがその途端にチェーンが外れ、そのまま前ギアに挟み込み、いくら手で戻そうとしても戻りません 仕方なく、自転車を転がしながら自宅にトボトボと歩いて自転車を押して帰りました

そして自宅でドライバーなどを用いて何とか復旧しようとしたのですががっちりとギアにチェーンが挟まれ 何ともできず、修理に出さねばならない事態に陥りました この Cross Bikeは先日定期点検から戻ってきたばかりで、何となくギアに音がして、しかもチェーンの張りが問題ありそうでした 案の定こんなことになってしまいました

結果的に土曜日午後優雅にカフェで思索に耽る、その予定が全部駄目となりました 本当にこの世の中は思うようには行きません

それで、朝から MacBook Proで PyCharmを立ち上げ色々と設定していたのですが、内蔵する Terminal Windowを開くとどうも文字コードの関係なのでしょうか うまいこと動作しません 色々と探してみるとこのページに遭遇しました その通りに設定してみるとスイスイとターミナルが動作するようになりました ありがたい まあ思いどおりに行かないこともあれば 何とな解決することもありますね めげない めげない

本日密かに計画している秘密

本日は昼前後にブックスペース栄和堂に行き、豊かな時間を過ごす予定です ここを検索していたところ、このカフェのいきさつを記したブログにあたりました 非常に興味深い内容です

ますますコーヒーを飲みに行きたくなりました

密かな楽しみ

くくく ふふふ 明日は土曜日 久しぶりに開放された土曜日 ウフウフ ウフウフ

二回目となる「ブックスペース栄和堂」デビューをするのだ ここで 自由に使用できる電源を接続してFree accessの Wi-Fiに MacBook Proをつなげてゆっくりとコーヒーを飲むのです きっと至福の時が待っています

そして昼食はおいしいサンドイッチを食べるのです もしも何か必要なものが思いついたらば モノレール道を挟んである Yamaka Storeに行けばほとんど何でもあります

ブックスペース栄和堂では自転車を大切にしていて僕の自転車も店の前の自転車スペースに鍵をして立てかけておけば安全です

あー楽しみです きっときっと僕の傷ついた心も癒やされることでしょう うん? 何処が傷ついているのかな? まあ流れとしてそのようにしておきましょう

こんなことも知らなかった

Ron先生に刺激され、少しというか一ヶ月間ぐらいサボっていた Pythonのプログラミングに本日取り組みました 朝から外来診療し、その後PCIでしたが、PCIは若者に任せ自分は Pythonでした

ツールは PyCharmと、VisualStudio Codeです なかなか VisualStudio Codeが使い勝手が良いです

  • やりたいこと
    • jpeg tagを使いまわしできるように一つのファイルにまとめ、使用する時に importする
  • ファイル1 = defineTag.py
    • これは importされるファイルであり、ここにjpeg tag定義をまとめる
  • ファイル2 = test_defineTag.py
    • これがメイン・ルーチンでありここから importする
# defineTag.py

jpegTag {
    'TAG': 0xFF,
    'DHT': 0xC4,
    'SOI': 0xD8,
    'EOI': 0xD9,
    'SOF': 0xC3,
    'SOS': 0xDA
}

if __name__ == '__main__':
    print(jpegTag)
    print(jpegTag['TAG'])

そしてこれを呼び出すメインです

#test_defineTag.py


from defTag import jpegTag

print(jpegTag)
print(jpegTag['TAG'])

これをターミナルから呼び出します

$ python test_defTag.py

そうすると、以下のように応答されます

{'TAG': 255, 'DHT': 196, 'SOI': 216, 'EOI': 217, 'SOF': 195, 'SOS': 218}
255

これで使いたい時に、jpegTagを呼び出せば良いということになります ここまで来るのに数時間必要でした

ばかだばかだばかだ

何だか頭が馬鹿になっていく 明らかに頭の回転が以前より遅くなっている 明らかに頭脳の占める空間が狭くなっている

患者さんからよく「最近忘れっぽくて」と相談されます その時の僕の答えは 「忘れるって良いことですよ 長生きされていれば色々と嫌なこともあるでしょう もしもそれらを何時迄も覚えていれば楽しくないですよ 自然に任せましょう」

しかし、それはそうなのですが それにしても頭脳の回転が悪くなるのは許しがたいものです 最近自分のタイピング速度が遅くなってきていることも自覚します 特にこの 2016年モデルの MacBook Proのカチャカチャいうキーボードでは余計その傾向が目立つすのです これなんかも許しがたいことです

以前自分で書いた C++による Huffman Decodingプログラムのロジックをトレースするのに自分で時間がかかっています 頭脳空間の中に自分の書いたプログラムの論理空間をマッピングしれきないのです これは訓練で改善するのか? いな そう信じて再び挑まねばならない

あー馬鹿ですねえ 何を言っているのか支離滅裂です

ヘロヘロと光明

昨日はミヤンマー そして札幌でのTAVI 3例に引き続き、早朝から W治療を 4例実施、その間に外来診療をしながらです そして懸案の重症大動脈弁狭窄症の患者さんに対してどのように対処するか 議論の後、治療に踏み切りました

とても重症で併存疾患もありかつ救急で運び込まれてきた患者さんです 心臓血管外科、循環器内科、麻酔科、血管外科、看護師さん、技師さん、コーディネーター皆総出で 19:00から 23:00まで頑張りました

それから遅くに自宅に帰宅、一人で夕食食べながら MacBook Proを立ち上げメールを見ていたところ、Ron先生からのメールを受信、懸案の DICOM moduleなどを用いて 非圧縮DICOM XAを動画展開できそう、とのプログラムでした

素晴らしいです 漠然としていたモヤの中の色々が見えてきそうです これまでの 圧縮DICOM画像の解析と併せてもっと前に進めていければ良いですね それでこそ Pythonを勉強している甲斐があります

そして今朝は辛かったけど頑張って出勤です

今朝のツーリング

マンダレーからの便り

さっき、メールを受信し、ミャンマーでの全国ニュースの映像を受信しました

ミャンマーでの全ての日程終了

今、バンコク国際空港隣の NOVOTELで 7時間近くの羽田行きトランジットを過ごしています

マンダレーから Bangkok Airwayによりバンコクに飛びました これで今回のミャンマーでの日程の全てを終了しました 都合 2.5日間の日程でヤンゴン、マンダレーと両方の最高病院 General Hospitalを訪問しました 結局CTO 4例、非常に困難なTRI一例、診断カテーテルからTRIに移行する症例 1例の計 6例の治療を院内ライブ形式でさせて頂きました その過程で 23年間の空白が埋まりました また本当に活発に討議が行われ、お互いにとても勉強になりました

本日最後の症例は、マンダレー丘から降りてホテルで朝食をとり、 8:00AMに Manalay General Hospitalに行き、結局 9:00AM頃から開始しました 開始が遅れたのには理由がありました、それは SHIMAZUのマシンが朝立ち上がらなくなっていたのです しかし、再起動かけることにより正常に作動し奇麗な画像を見せてくれました

患者さんは 42歳男性で トレッドミル陽性のため自覚症状は無いものの、カテとなった患者さんです 診断カテーテルの結果、大きな右冠動脈#4PD近位部で 99% delay、左冠動脈回旋枝には三箇所 99%狭窄があり、左前下行枝は #7で長さ 3cmぐらいの石灰化したCTOでした すごい重症ですよね

この患者さんに対して両側TRI 7Frで臨みました どこから手を付けるか、あるいはCTO開通に不成功の場合にはコストも考え、冠動脈バイパス手術にまわすべきか 色々な議論が行われました 何しろ冠血行再建術をコストで比べれば 圧倒的に冠動脈バイパス手術の方が多枝インタベよりも安価なのです

この患者さんに関しては、親戚一同PCIを臨まれ、PCIで行うことになったのです まずは左冠動脈回旋枝に対して、分岐部でしたが、 modified Jailed balloon techniqueにより薬剤溶出性ステントで治療し、ついで左前下行枝のCTOに向かいました レトロに向いた副血行路はこの時点で見つかりませんでしたので、順行性アプローチで行いましたが、Gaia-Thirdにより通過させることができ、こちらも薬剤溶出性ステントを一本入れました そして、最後に#4PD近位部に対しても薬剤溶出性ステントを入れ、結局 3本の薬剤溶出性ステント植え込みによりこの重症三枝病変を治療することができました とても良かったです

この後、ミャンマーの先生の症例発表があり、僕がコメンテーターとして参加しましたが、11:00AM過ぎに空港に向かって病院を後にしました 今回の Mandalayでの主役は Professor Kyaw Soe Winです

Professor Kyaw Soe Win

ところでミャンマーの人々の信仰心 (大多数が仏教です)はとても強く、ヤンゴンの金のパゴダを訪れている時に見た光景ですが、若い女性が一生懸命サンスクリット語で書かれた経典を読みながらお祈りを捧げているのです とても物静かな感じの女性でした

ヤンゴンの金のパゴダで
お祈りを捧げる若い女性