こんにちは、イーソルエンジニアリング本部Medical課のS.Yです。
Medical課では、医療機器や研究向け製品をはじめとした医療・科学分野のエンジニアリングサービスを提供しています。
医療や科学分野において、画像認識技術は革新的なツールとして広く活用されています。医療診断や治療計画の支援、疾患の早期発見、科学研究の進展などに重要な役割を果たしています。
私たちは、上記のようなシーンで使用される、画像中から特定の物体や領域を認識する「画像認識技術」やそれに付随する基礎的な画像処理技術の勉強会を定期的に開催しています。
今回から、私たちが医療・科学分野で適用している画像認識技術を紹介するブログシリーズをスタートします。
第1、2回は、第3回以降の基礎となる下記技術の内、「テンプレートマッチング」、「エッジ検出」、「直線検出」について紹介します。
- 画像の「回転」、「合成」、「ノイズ除去」
- テンプレート画像と同じパターンを検出する「テンプレートマッチング」
- 画像に写る物体を識別し、位置を特定する「物体検出」
- 画像に写る物体の輪郭を抽出する「エッジ検出」
- 画像に写る直線を検出する「直線検出」
以下の計5回に分けて投稿予定ですので、ぜひ最後までご覧ください。
- 第2回 エッジ検出、直線検出
- 第3回 セグメンテーション
- 第4回 タイリング
- 第5回 焦点合成
1. 画像認識技術とは
画像認識技術は画像に写っているモノを認識する技術です。画像中に「何が写っているか」や、対象のモノが「どこに写っているか」を検出することができます。
人間であれば画像に写っているモノが何なのか判別がつきますが、コンピュータにとって画像は画素の集合体でしかないため、画像中のモノを認識するためには対象の形や色などの特徴から判別する必要があります。
画像認識技術を用いることで画像中から人や物体、文字などの視覚と同等の情報を得ることができるため、自動運転や自動翻訳に用いられたりするなど、様々な分野で活用されています。
私たちが関わりのある医療・科学分野においては、画像中から病変を発見したり、研究の関心領域を識別してフォーカスしたりすることなどが求められます。
こういった目的を達成するためには、様々な画像認識技術を必要に応じて組み合わせて適用していかなければなりません。
次の章からは、画像認識技術のひとつである「テンプレートマッチング」について、私たちが定期的に開催している勉強会で実装してみた結果とあわせて紹介していきます。
2. テンプレートマッチングとは
対象の画像の中からテンプレート画像と類似する場所を探索することを「テンプレートマッチング」と呼びます。
探したい物体やパターンをテンプレート画像とすることで、物体検出やパターン認識に利用することができます。
具体例として、図1-2-1では蓮の花の画像をテンプレート画像としてテンプレートマッチングを行っています。
図1-2-1 テンプレートマッチングの例
元画像に対して蓮の花のテンプレート画像を用いてテンプレートマッチングを行うと、テンプレートマッチング結果の画像が得られます。この画像の赤枠部分がマッチング箇所です。
以上のように、対象画像の中からテンプレート画像と同じサイズの領域で類似している箇所を見つけ出すことができます。
テンプレートマッチングはあらかじめテンプレート画像を用意するだけで適用が可能なため、事前に必要な準備が少なく、アルゴリズムがシンプルで実装しやすいのが特長です。
一方で、照明や視点の変化、スケールや回転などには対応できないため、撮影条件を揃えなければならないのが欠点です。
3. テンプレートマッチングの手順
テンプレートマッチングは以下の手順で行います。
- 類似度の計算
対象の画像の各位置で、テンプレート画像との類似度を計算します。
テンプレート画像のサイズに対応する領域ごとにピクセル値を比較し、差分から類似度を求めます。 - 類似度のマッピング
対象画像における座標とその位置での類似度を対応させたマップを作成します。 - マッチング位置の決定
類似度に条件を設定して、マッチング位置を決定します。
例えば、類似度が最大値となる領域を探したり、類似度にしきい値を設定してそれを上回る領域を複数マークしたりすることが可能です。
類似度の計算式にはいくつか種類があり、それぞれ正確性や計算速度が異なります。
今回はこの計算式については深堀せず、OpenCVにあるテンプレートマッチング用のメソッドを使って実装してみた結果をご紹介します。
4. テンプレートマッチングの実装
勉強会では、OpenCVのCv2.MatchTemplateメソッドを使ってテンプレートマッチングを実装しました。
このメソッドでは、対象となる画像とテンプレート画像、類似度の計算方法を指定することで類似度のマップを取得できます。
この類似度のマップから類似度が最大となる領域を探索することで、最も単純にマッチングを実現できます。
実際に、テンプレート画像との類似度が最大となる領域を探索して矩形でマークするプログラムを実装し、以下の手順でテンプレートマッチングを実行してみました。
1. 画像から一部を切り抜いてテンプレート画像とする。
画像中の一つの細胞を切り抜いてテンプレートとしました。
このテンプレート画像を使ってテンプレートマッチングを行うと、切り抜いた位置とマッチング位置が一致すると思われます。
図1-4-1 画像の切り抜き
2. 元画像とテンプレート画像を指定してテンプレートマッチングを実行し、類似度マップを取得する。
図1-4-2 のような類似度マップ(類似度が高い位置が白色で表示される)が取得できました。
図1-4-2 類似度マップ
類似度マップと元画像を重ねると図1-4-3のようになります。
類似度が高い位置にテンプレート画像と同サイズの矩形の左上が合うように置くと、確かにテンプレート画像に似た細胞がある位置で類似度が高くなっているのがわかります。
図1-4-3 類似度マップと元画像の比較
3. 類似度マップにおいて最も類似度の高い位置から矩形を描く。
類似度が最大となる位置を探索して矩形を描いたところ、図1-4-4のような結果となりました。
矩形の位置は想定通り手順1で画像を切り抜いた位置と一致しました。
図1-4-4 テンプレートマッチング結果
5. 加工したテンプレート画像でマッチング
前章では 切り抜いた画像をテンプレートとして、想定通りにマッチングすることが確認できました。
ここで、テンプレート画像が元の画像そのままではない場合にマッチングができるのか気になったため、テンプレート画像を拡大縮小してマッチング結果を調べました。
図1-5-1 はテンプレート画像を1.3倍に拡大した場合のマッチング結果や、0.4倍に縮小した場合のマッチング結果です。
こちらの結果により、テンプレート画像の大きさに応じてマッチングする箇所も変化するということがわかりました。
図1-5-1 テンプレート画像を拡大縮小してマッチング
6. 複数か所のマッチング
類似度最大を探索する手法ではマッチングする箇所を1 か所しか見つけられないため、複数か所マッチングできる方法を検討しました。
類似度が高い領域を複数探索するために、類似度のマップに対してしきい値を設定しました。
OpenCVのCv2.MatchTemplateメソッドでは類似度が0~1の間で算出されるので、しきい値もその範囲で設定し、それを超える領域をすべてマークします。
しきい値を0.1~0.95 に設定してテンプレートマッチングを実行したところ、図1-6-2のような結果になりました。
図1-6-1 元画像とテンプレート画像
図1-6-2 複数か所のテンプレートマッチング(しきい値0.10~0.95)
しきい値を下げていくとテンプレート画像とは見た目が少し異なるオブジェクトもマッチングし、マークするようになっています。
しきい値を0.10まで下げることでほぼすべての細胞をマークすることができましたが、一部が見切れている細胞(図1-6-3において黒い〇で囲んだ細胞)はマークできていません。
一部が見切れていても人間の目には同様の細胞として映りますが、機械的に類似度を計算する場合には類似度が低いと判定されることがわかりました。
図1-6-3 テンプレートマッチングでマークできないオブジェクト
一方で、画像右側では細胞の数以上に余分にマークしてしまっている箇所(図1-6-4において黒い〇で囲んだ箇所)があります。
図1-6-4 テンプレートマッチングでの余分なマーク
これは、しきい値を小さくしたことにより類似度マップでぼんやりと白くなっている部分(図1-6-5において赤い〇で囲んだ箇所)まで引っ掛けてしまっていることが原因と考えられます。
図1-6-5 テンプレートマッチングでの余分なマーク(類似度マップ該当箇所)
このように、しきい値を調整しないと探索漏れが出たり、意図しないオブジェクトをマークしてしまったりします。
そのため、実際にテンプレートマッチングを物体検出などに利用していくためには、事前にサンプル画像を用意して、目的のオブジェクトと類似度の高いテンプレート画像と、探索漏れを起こさない最大のしきい値を選定しておく必要があります。
7. 最後に
第1回ではテンプレートマッチングがどういったものなのか、実際に実装してみた結果と共にご紹介しました。
マッチする領域を1か所のみ探すのであれば容易に実装することが可能でしたが、実用化するためには探索したい対象に応じてしきい値を設定したり、テンプレート画像を選んだりする必要があるということがわかりました。
第2回では画像中の物体の輪郭を検出する「エッジ検出」と「直線検出」について取り上げます。
エッジ検出と直線検出は、画像内の輝度情報から物体の輪郭や直線を検出する手法になります。
輪郭から観察したい対象を検出する、観察プレートのグリッドを検出する等、様々な目的で用いられる基礎技術です。次回もぜひご覧ください。
また冒頭でご紹介した通り、イーソルは医療分野のエンジニアリングサービスを提供しており、豊富な実績があります。医療分野のみならず、車載・産業などの幅広い領域における開発実績で身に着けた安全性の高い開発プロセスなどの知見や技術力は、お客様の求めるお客様が目指す高性能で高品質な開発を強力に支援します。
医療分野の製品開発で課題がある、今回ご紹介したような画像認識技術に関わる開発を実施したい、エンジニアリングサービスについて詳しく知りたい、という方はぜひお気軽にイーソルにご相談ください。
Medical課 S.Y