医療用超音波診断装置の動画情報の活用～その１　３D表示のための自己製アプリ群～

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/2907a56b-a6fe-4364-83df-e35776d473f1.png)
最近の超音波診断装置には動画撮影機能が備わっている（図はARIETTA65)。
今回のターゲット臓器は胆のうである。
まず、なるべくプローブを皮膚に対し垂直を保ったまま頭足方向に数ｃｍ動かす。そこで、今回、６秒間のｍｐ４画像が得られた。
 これを、６５枚、あるいは２００枚、あるいは任意の数の.jpgファイルに分割するアプリ：　mp4_to_jpg_with_time.py　（それぞれに、動画内の時間表示） 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/e0fb8f4e-5adf-4b49-a26d-700834075c70.png)


これを直接３D表示するとどうなるか？
main_pyvista_3d.py

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/d6843cd7-d393-4966-9437-94f84b15aa69.png)


このことから、
「jpgをThreshold後、白黒２極のpngに変換」する必要があるとわかった。

その出発点として、各箇所のピクセル値をマウスのクリックで取得する：pixel_point.py

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/1ab87af4-3e64-4973-8e5e-a61e201030ee.png)


そこでわかったpixel値は　例　胆のう内12　ＰＶ34　肝70　胆のう壁１７７
（黒：0　白：255） 
それを、閾値をもうけ、たとえば30以下を黒、それ以上を白として表示するようにしたアプリ（実際はの表示は、白黒反転。そして、白は表示され、黒はみえなくなる）
threshold_mask_generator.py: 　jpg→jpg, png→png
generate_threshold_masks.py: 　すべての種類→png　　
たとえば30以下を黒（表示は白）、それ以上を白（表示は黒）として。
　

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/d2557cd1-90f0-4538-9be5-4edcb8fdcd0b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/74511672-a531-436d-8906-da57e4623712.png)

このようにgenerate_threshold_masks.pyで処理後、
再びmain_pyvista_3d.py使用すると。
多くの雑音があるが、右上の塊が胆のうとみてとれる。

次に、この３D画像をさらにきれいにするために、様々なことをおこなった。
 
①  ３D画像の表示法の工夫
3D_isovalue.py　（出発点：main_pyvista_3d.py　と同じ）
3D_addvolume.py
3D_smooth.py
3D_smooth_color.py
 
最後のアプリで、上記の色：ivory→beigeしたものが下記。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/09981393-718d-448f-80c0-9a851cd08fc4.png)


 ②  Jpg→pngにする際のthreshold を5〜20を白という狭い範囲にする：
generate_threshold_masks_maxmini.py
その後、画像を３D表示すると下記。
これによりノイズ（無関係な構造や背景の白）が明らかに減っている。
だがその一方で、胆のう自体も一部が削られているように見える（閾値調整による構造のトレードオフ）。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/2723bebe-0bef-4a0a-8acf-512c6532d22c.png)


  
③  画像の一部のみを選択して、同様のことをおこなう
cropped_resized_jpg_generator.py：「トリミング → リサイズ → 保存」

＝マウスクリックによるポリゴンで選択を１枚の画像におこない、その位置でのこのような部分選択（内部のみ）を２００枚におこなった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/161711de-4320-441b-b90f-8b9773c27dd4.png)

そして、そのcropped_resized_jpg_generator.pyにて部分選択後の２００枚の画像を、今までと同様の方法でmain_pyvista_3d.pyで３D表示した。

A. 胆のう内（15前後）、はその周囲の組織：腹側は肝臓（70前後）、背側は腹腔内で隣接する脂肪層（120-190）、と区別がつきやすかった。図では、0-30を表示。ほぼ胆のう内のみ抽出。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/7410bdc9-d053-4256-ba3d-b57f46bc66b0.png)


B.胆のう壁＝平滑筋（150前後）は、その周囲の組織：腹側は肝臓（70前後）、と区別がつきやすかったが、背側は腹腔内で隣接する脂肪層（120-190）、と区別がつきにくかった。図では、100-200を表示。わかりにくいが、内腔がない胆のう壁らしきものが中央にでている。腹腔内脂肪にうもれる胆のう壁（平滑筋）：胆のう内は空洞としてうつる。![タイトルなし.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3676736/f942315c-0719-4be3-b847-57a84a1a38c4.jpeg)


（将来への参考）　最終目標としている、大腸の描写をかんがえたとき、A.大腸内（黒傾向）、はその周囲の組織と区別がつきやすいかもしれない。だが、内腔が狭くわかりにくいかもしれない。また、B.大腸壁＝平滑筋（白傾向）は、その周囲の（筋肉は遠いが）脂肪と区別がつきにくいかもしれない。だが、うまくやればその境界にあたる「漿膜」を区別のマークにできるかもしれない。
 
（課題）
①もう少し、胆のう辺縁がスムーズにならないか？⇒今のままでは、２Dで映ったポリープがきれいにとらえられない
　＝今のところ、現状では、３Dで「見やすく患者に提示できる」ようにはなる可能性はあるが、新たな診断知見を得ることはむずかしいそう。

②周りの枠はとれないか？

③エコーを縦に動かすと垂直面からのぶれが生ずる。その補正に、プローブに、位置・角度センサーを付けて補正（研究では、新たなプローブなど高額で試作できないので、M5StickPlusなどを手持ちのプローブに固定する？）

④  縦に動かすと、肋骨にあたってすすめない。最初から、ターゲット臓器の制限はある。だが、プローブを体表に垂直にして移動させるかわりに、プローブを体の１点にあて、前後に倒す（時間軸にそって画像をならべていくと直方体ではなく、扇？のようになる）、というやり方であれば、それに沿った３D作成はできるであろう。