医師が患者を診察する際に使用される機材としてMRIスキャナーというものがあり、MRIスキャナーは磁気を用いて人体の臓器を撮影するのに用いられる。このMRIスキャナーを使用して撮影した画像をMRI画像といいMRI画像にはノイズや人体の構造上、不鮮明に撮影されてしまう場所がある。複数のMRI画像から不鮮明な箇所の形状や動きを手動で評価するのはとても手間がかかるため画像処理を用いて自動で輪郭検出を行う。
本研究の目的はMRI画像で不鮮明に撮影されてしまう場所である箇所である右心室短軸像の画像(図1の左)に対して図2の右の画像の様に緑の線で輪郭検出できるようにSnakesという手法を用いて時間的に連続するMRI画像群から右心室の短軸像の輪郭検出方法を研究する。
Snakes法というのは、輪郭を検出したい対象を輪郭で囲みこれを初期輪郭とする。そしてこの初期輪郭をあるエネルギー関数として表現する。このエネルギー関数は輪郭の形状、周長や輪郭の曲がり具合そして輪郭が画像上のエッジに沿っているかを表している関数となっていてこのエネルギー関数が低ければ輪郭が画像上のエッジにあることを示す。つまり輪郭の形状を評価したエネルギー関数の最小化問題を解くことで画像上の輪郭を検出する方法である。
画像間の対応点を求めるために必要な局所特徴量を抽出するには,対象となる画像から特徴点を検出する必要があり、bundlerも特徴点を扱っている。 そこで局所特徴量を抽出アルゴリズムはたくさんあるがSIFTを選択した。そしてSIFT特徴量の特徴は回転・スケール変化等に不変で照明変化等にも強い特徴量を記述できるアルゴリズムとなっている。
bundlerの中心部分であるSFMとは、ある同一シーンをカメラの位置を変えながら複数枚撮影した画像からカメラ位置とそのシーンの3次元形状の両方を同時に復元する手法のことである。
本研究の目的はbundlerを用いて画像群から3次元頂点群を生成しこれを3Dプリンタ用モデルにすることが最終的な目的であるが実際これを行うにあたってbundlerは本当に3Dプリンタ用モデル生成に有用であるかを検証するための実験である。
以下に実験手順を示す。
手順を順番に説明する。最初の手順では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年 発行 共立出版)