# Операции сопоставления изображений

В этой главе описывается, как использовать метод сопоставления по шаблону для поиска и нажатия на элементы. 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   | Метод сопоставления        |

## Методы сопоставления

Поддерживаются методы сопоставления по шаблону и по характерным точкам. Сопоставление по шаблону подходит для случаев с четкой текстурой и фиксированной формой объекта, но оно не устойчиво к вращению, изменению масштаба и освещения. Сопоставление по характерным точкам работает путем обнаружения характерных точек изображения, таких как углы и края, описания их признаков и последующего сопоставления между двумя изображениями. Этот метод обладает высокой устойчивостью к вращению, изменению масштаба, освещения и т.д., и подходит для задач сопоставления в сложных сценах.

| Метод сопоставления      | Описание |
| ----------- | ----------- |
| 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   | Сопоставление в левом нижнем углу экрана        |