医師が患者を診察する際に使用される機材としてMRIスキャナーというものがあり、MRIスキャナーは磁気を用いて人体の臓器を撮影するのに用いられる。このMRIスキャナーを使用して撮影した画像をMRI画像といいMRI画像にはノイズや人体の構造上、不鮮明に撮影されてしまう場所がある。複数のMRI画像から不鮮明な箇所の形状や動きを手動で評価するのはとても手間がかかるため画像処理を用いて自動で輪郭検出を行う。
本研究の目的はMRI画像で不鮮明に撮影されてしまう場所である箇所である右心室短軸像の画像(図1の左)に対して図2の右の画像の様に緑の線で輪郭検出できるようにSnakesという手法を用いて時間的に連続するMRI画像群から右心室の短軸像の輪郭検出方法を研究する。
Snakes法というのは、輪郭を検出したい対象を輪郭で囲みこれを初期輪郭とする。そしてこの初期輪郭をあるエネルギー関数として表現する。このエネルギー関数は輪郭の形状、周長や輪郭の曲がり具合そして輪郭が画像上のエッジに沿っているかを表している関数でありこのエネルギー関数が低ければ輪郭が画像上のエッジにあることを示す。つまり輪郭の形状を評価したエネルギー関数の最小化問題を解くことで画像上の輪郭を検出する方法である。実際の画像を簡略化してSnakesの動作を示したものが図2となっており、緑色の閉曲線がSnakesの関数によって動かされる輪郭であり、水色の右心室部分が検出対象である。
Snakesは理論であり、実装する際には様々なアルゴリズムで実装することができる。比較対象として一番実装が簡単なSnakesを用いたときの問題点を挙げる。
この2つの問題点を解決するために2つの手法を提案した。
まず問題点1を解決する方法としてSnakesに用いられるエッジ画像を改良するために、通常の輪郭検出処理(Sobelフィルタ)ではなく,8方向Sobelフィルタを用いた。Snakesでは初期輪郭を与えられるため輪郭の中心がわかりその中心方向に対して垂直なエッジのみを検出するようにした。使用したフィルタは図3の8種類となっておりフィルタ位置が角度に対応している。
次に問題点2 解決する方法として画像更新時の輪郭を形成する手順を以下に示す。 数値計算を行うために輪郭は複数の頂点を結ぶ多角形として表現している。
この動作をすることで問題点1,2に対して対応できるようにした。以下の図4が参考画像である。
実験に用いる画像群は3つありいかに一番最初の画像を示す。
既存手法 | ◎ | △ |
提案手法(1) | △ | 〇 |
提案手法(2) | 〇 | 〇 |
手順を順番に説明する。最初の手順では3Dモデルデータ作成とあるがこれは3DCGモデリングソフトであるblenderを使用して作成し、それを3Dプリンタで使用できるファイル形式であるstl形式で出力してこれを3Dプリンタで出力する。
以下にある3Dモデルデータの画像が用意したものである。左の画像をモデル1,右の画像をモデル2として2つのデータに対してそれぞれ実験していく。
そしてなぜ実際に存在している物体で画像群を作成してbundlerで行わないかというと、実際の物体はデータとしてないためbundlerの出力としてできた3次元頂点群と比較ができないが、このように元のデータから物体を作ることで3次元でのデータ比較が可能になるからである。
次の手順では3Dプリンタで出力されたオブジェクトにテクスチャを貼るとあるがこれは、オブジェクトは白色の模様なしの状態であるためこのまま撮影しても特徴量が足らずあまり良い結果が得られないのは明白である。そのため画像のようなカラフルなテクスチャを用意し、その上に展開図が描かれている。そして画像がテクスチャを貼ったオブジェクトとなっていて、これを複数枚撮影してbundlerに入力する。
#ref(): File not found: "model_texture.png" at page "Snakes法による右心室短軸像輪郭検出"
そして以下の入力画像群が得られた。画像上では6枚となっているが実際にはモデル1は45枚(640x480)とモデル2は33枚(640x480)となっている。
#ref(): File not found: "input_imgs.png" at page "Snakes法による右心室短軸像輪郭検出"
以下の画像群が実験の結果である。1列目がモデル1の出力結果で2列目は出力結果画像に近い入力画像である。3列4列目 はモデル2の画像となっている。
#ref(): File not found: "output.png" at page "Snakes法による右心室短軸像輪郭検出"
実験結果の画像を見るとモデル1ではある程度3次元頂点が復元されていたと思われるが、モデル2では3次元頂点群が想像よりも得られなかった。
考えられる理由としてはモデル1はエッジが出やすい形状をしているのに対してモデル2は曲面が多くてうまく特徴量を抽出できなかったのかもしれない。両方のモデルに言えることだがやはり影が強く出るところは特徴量を抽出できず3次元頂点群が得られないことがわかるし、3次元頂点が得られても点が粗いことがわかる。
そして画像を見てもわかるとおり、対象物体以外の机などの背景の3次元頂点が復元されている。
これは不要な頂点群となるので削除する必要がある。因みに背景の頂点群が必要でないならば撮影条件を拘束する、例えば背景は一様の色(対象物が含まないような)にするなど、ことで不要な頂点群復元されなくなると考えたので実際に実験してみたところ、bundlerがエラーで止まって出力が得られない状態になった。これはおそらく背景を一様にしたため特徴点が減りカメラの初期位置が決まらなかったことが原因であると思われる。そのため今回の実験ではあえて模様のある机を背景として撮影している。
これらの考察をまとめ,問題点を挙げると
この3点になる。今後はこれらの課題に対処する必要がある。
bundlerを用いて画像群から3次元頂点群を生成して、3Dプリンタ用のモデル形成手法の研究という事で、実際に
bundlerは本当に3Dプリンタ用モデル生成に有用であるかを実験にて検証した。
実験の考察から3つの問題点が挙げられたものの、これらの問題がある程度妥協できるラインまで解消されれば3Dプリンタ用モデル生成に有用であると判断した。
今後の展開としては、以下のことを行いたいと思う。
1の課題に関して本論文では頂点データの比較がほとんどできていなく画像を見て判断していたため定量的な比較を行えるようにする必要がある。定量的な比較が出来れば様々な撮影方法や条件で実験しても定量的に検討できるからである。 次に課題は復元された3次元頂点群に対する処理のことであるが、これはpcl(point cloud library)という3次元頂点群を処理するためのC++のライブラリがあるためこれを使い実装していく。 最後の課題はつまるところ3次元頂点群から面を張るプログラムを作成するという事であるがただ面を張ればいいわけではなく、 必ず3Dモデルデータが閉じらている必要がある。3次元頂点群がうまく得られればこのプログラムは既存のプログラムで解決する。閉じられているという状態は面の法線が全て外を向き、面の裏側が見えない状態のことである。 今後はこれらの課題に取り組み、画像群から33Dプリンタ用のモデル形成手法を確立していきたいと思う。
[1]Noah Snavely,"Bundler: Structure from Motion (SfM) for Unordered Image Collections",http://www.cs.cornell.edu/~snavely/bundler/
[2]David Lowe,"Scale-invariant feature transform",http://sift.jcvi.org/
[3]徐 剛,辻 三郎 著 "3次元ビジョン "(1998年 発行 共立出版)