# 画像マッチング操作

本章では、テンプレートマッチングを使用して要素を検索し、クリック操作を行う方法について説明します。FIRERPAは、テンプレートマッチングと特徴点マッチング（SIFT）をサポートしています。始める前に、画像マッチングに関する基本情報を理解する必要があります。画像マッチングは、テンプレートマッチングと特徴点マッチングに分かれます。テンプレートマッチングは、同じ解像度のデバイスに適しており、より効率的です。特徴点マッチングは、異なる解像度の画面に適していますが、一部の閾値は、デバイスの画面サイズに応じて微調整が必要になる場合があります。

```{hint}
すべてのマッチングプロセスはFIRERPAサーバー上で実行され、ローカルマシンのリソースを消費しません。ただし、モバイルデバイスのパフォーマンス制限により効率が低いため、パフォーマンス要件がある場合は、ローカルマシンでスクリーンショットを撮ってマッチングを行うことができます。
```

## マッチングインターフェース

画像マッチングインターフェースは少し複雑なインターフェースですが、ほとんどの場合、調整が必要なのは `threshold` と `distance` パラメータだけです。各パラメータの意味は、以下のパラメータ説明で確認できます。インターフェースの主な形式は以下の通りです。デフォルトでは、全画面でテンプレートマッチング方法を使用してマッチングが行われます。このインターフェースは、主にホストマシンの計算リソースを節約するために提供されています。パフォーマンスや認識結果に要件がある場合は、スクリーンショットインターフェースを使用して独自にマッチングを行うこともできます。

```python
d.find_similar_image(data, threshold=0.0, distance=250, scale=1.0, area=FindImageArea.FIA_WHOLE_SCREEN, method=FindImageMethod.FIM_TEMPLATE)
```

| フィールド      | 説明 |
| ----------- | ----------- |
| data      | マッチング対象画像のバイトデータ（切り抜き画像）       |
| threshold   | 棄却閾値（類似度）        |
| distance   | 最大特徴点距離（特徴点マッチングのみ）        |
| scale   | スケーリングマッチング（パフォーマンスを向上させますが、テンプレートマッチングには適用されません）        |
| area   | マッチング領域（領域を限定してパフォーマンスを向上）        |
| method   | マッチング方法        |

## マッチング方法

マッチング方法として、テンプレートマッチングと特徴点マッチングをサポートしています。テンプレートマッチングは、テクスチャが明確で、ターゲットの形状が固定されている場合に適していますが、回転、スケール変化、照明変化に対してはロバストではありません。特徴点マッチングは、コーナーやエッジなどの画像特徴点を検出し、その特徴を記述してから、2つの画像間でマッチングを行います。回転、スケール変化、照明変化などに対して強いロバスト性を持ち、複雑なシーンのマッチングタスクに適しています。

| マッチング方法      | 説明 |
| ----------- | ----------- |
| FindImageMethod.FIM_TEMPLATE      | テンプレートマッチング      |
| FindImageMethod.FIM_FEATURE   | 特徴点マッチング        |


## マッチング領域

マッチング領域は、主にモバイルデバイスのパフォーマンスをバランスさせるために使用されます。ほとんどの場合、マッチングが必要な項目は画面の固定領域にあります。その領域を指定することで、画像サイズを小さくし、マッチング時の計算量を削減できます。

| マッチング領域      | 説明 |
| ----------- | ----------- |
| FindImageArea.FIA_WHOLE_SCREEN      | 全画面マッチング       |
| FindImageArea.FIA_LEFT   | 画面左半分のマッチング        |
| FindImageArea.FIA_TOP_LEFT   | 画面左上のマッチング        |
| FindImageArea.FIA_TOP   | 画面上半分のマッチング        |
| FindImageArea.FIA_TOP_RIGHT   | 画面右上のマッチング        |
| FindImageArea.FIA_RIGHT   | 画面右半分のマッチング        |
| FindImageArea.FIA_BOTTOM_RIGHT   | 画面右下のマッチング        |
| FindImageArea.FIA_BOTTOM   | 画面下半分のマッチング        |
| FindImageArea.FIA_BOTTOM_LEFT   | 画面左下のマッチング        |