卒業論文で何やってたか

時々卒料論文で内出血の研究をしてた話をすると興味を持ってくれる人がいてちょっとおもしろい。いつも内容を説明するのがちょっと難しいので一回文章にしてみることにしました。もちろん論文はあるけどやたら長いのでどんなことしてたのかってわかりやすくね。

タイトル
「低輝度集合解析を用いた臓器境界判定の自動化による内出血貯留検出手法の構築」

内出血?

外から血がドバドバ出てれば「こいつやばい」って分かるんだけど、中でこっそりちょこっとずつ出血されると知らないうちに死んじゃうことがあるのが怖い内出血。
救急車で搬送されると超音波で体内をチェックするんだけど、残念ながら内出血してる人のうち約57%はこのチェックをスルーしちゃう(Bala Natarajan; FAST scan:Is it worth doing in hemodynamically stable trauma patients?, 2011 Surgery)
とゆーことでもっと超音波で内出血見つけたい -> 画像解析したらいいんじゃないかってのが話の始まり。

超音波画像

超音波画像ってのはこんなやつ

6_Image57

注釈付けてみました

6_Image57

これを見るとわかりますが血管は黒いんですね。中の血液が超音波画像だと黒くなるからこうなるんです。で、内出血するとこれが臓器と臓器の間にはいってこういうところに黒い影が出来るわけです

6_Image57 2

もちろん僕は健康なので内出血なんかしてませんが、するとここに溜まってきます。(体内で血が溜まる場所は実は決まってます。詳しくはFASTで検索)

どう画像解析するか

黒いものを探せばいいんですが、そんなの画像中のどこにでもあります。臓器の間じゃないとダメなんです。そこで

  1. ただ黒いんじゃなく、明るい場所に囲まれた黒いエリアを探す
  2. 臓器を識別する

をやることにしました

黒い場所を探す

1pxだけ黒いとか、段階的に暗くなるとかじゃなくて、ある部分まで明るかったんだけど急に暗いっていうグランドキャニオンみたいになってる場所を探すのがやりたいことです。血管も中は黒いけど周りは白いもんね。基本的には微分を使うんですが、1pxの隣接する8方向との微分値を使ってさらに隣との、、、ってやるとこんな風になります。

detectBlood_hitlevel5_oya2

あんまりいいデータ残ってないのでこんななのですが、こういう感じになります。赤いのが「輝度変化の激しい境界に囲まれている輝度の低い部分」です。右下にある血管は見事に選ばれてますね。

臓器を識別する

上のやつだけだと血管がパーフェクトに見つかってしまうので、見つけたい内出血とは違います。臓器を識別して血管じゃない部分を探さないといけないです。
内出血が溜まる場所として腎臓と肝臓の間のモリソン窩をターゲットにしてますので、腎臓と肝臓がどこにあるのかが分かって、その間ってのがどこなのかがわかればいい。
で、腎臓と肝臓はそれぞれ輝度の極値調査をするとScreen Shot 2015-01-28 at 23.41.40

こういう若干気持ち悪い画像になるのですが、この白黒の出現率やパターンが違うのに気づいたのでこれを使おうと(違う理由は多分水分や鉄分の含有量だと思いますが、興味無かったので研究してないです。誰かやりたいひとどうぞ)

それとは別に境界線の情報も欲しかったのでまずmeanshiftします

Screen Shot 2015-01-28 at 23.44.25

そしてこれの微分画像を求めます

Screen Shot 2015-01-28 at 23.44.33

これでいいですね。これとさっきの気持ち悪い画像を使って肝臓を探していきます。

まず、ここは肝臓だろうという場所に最初の肝臓を描画します。
その位置ってのは画像解析じゃなくて画像の右上どこどこっていう指定方法なので、超音波プローブが違うところにあってもここに確定されます。(このへんはどうにかしたい)

Screen Shot 2015-01-28 at 23.47.04

上の赤いのがそうです。早速上すぎでずれてますが気にしない。緑はさっきのmeanshiftして微分した画像の値を緑で投影したものです。つまり強い境界線などを示しています。
あとはこの赤いのを広げていきます。コンピューターの生物シュミレーションと同じです。展開していきます。

Screen Shot 2015-01-28 at 23.46.17

こうやってね。
ただ、止まる要因が必要ですよね。それはこうします

  1. 気持ち悪い画像から計算した値が肝臓っぽくなくなってきたらその周辺が止まる
  2. 境界にぶち当たったらその周辺が止まる

それぞれのピクセルがライフカウントを持っています。境界にぶつかったりすると周辺のピクセルのライフカウント値のカウントダウンがはじまり0になると止まる仕掛けです。
Windowsのペイントで”塗りつぶす”をやるとちょっとでも隙間があると色がもれますが、もれないようにする っていうと分かりやすいかも

Screen Shot 2015-01-28 at 23.46.27

最終的にはこの辺を肝臓だと判断しました。およそ合ってます。
左や上の方は境界線で、右下は”肝臓っぽくないぞ”ってことで止まっている印象があります(まぁデータ見ないとわからないんですがね)
同じことを腎臓にもやるとこうなります。腎臓は青で色を付けてあります。
腎臓は内部の変な組織のせいでドーナツになってますね。

detectSeparation_oya2

ここまで来ると何がわかったかというと腎臓と肝臓の位置が画像の中でわかったので、
どの辺が腎臓と肝臓の”間”なのかが分かります。

ここまでくれば簡単ですね。あとはこの”間”に上のほうで求めた”黒い場所”ってのがあるのかどうかを調べればOKです。

研究だと

研究では実際に内出血画像のデータを病院にもらいにいってそれと友達の健康なエコー画像ももらって両方解析して「ほらね、精度いいでしょ」ってやって終わりでした。

当然もっとよく出来るはずで、前提条件もそれなりに多いですし。
それこそここで紹介しているのはうまく動いている場合の画像です。うまくいかないのも当然あります。この時はpapelookの法人化もしてたし、住んでた彼女の家が学校まで遠くて全然行ってなかったのですが、今思えば面白い研究だからもうちょっと取り組んでも。。まぁ時間あったら改善してオープンソースにしてみたいですね。