# การดำเนินการจับคู่รูปภาพ

บทนี้จะแนะนำวิธีการใช้การจับคู่แบบเทมเพลต (template matching) เพื่อค้นหาและคลิกองค์ประกอบ FIRERPA รองรับการจับคู่แบบเทมเพลตและการจับคู่แบบจุดเด่น (feature point matching - SIFT) ก่อนเริ่มต้น คุณจำเป็นต้องเข้าใจข้อมูลพื้นฐานเกี่ยวกับการจับคู่รูปภาพ ซึ่งแบ่งออกเป็นการจับคู่แบบเทมเพลตและการจับคู่แบบจุดเด่น การจับคู่แบบเทมเพลตเหมาะสำหรับอุปกรณ์ที่มีความละเอียดเท่ากันและมีประสิทธิภาพสูงกว่า การจับคู่แบบจุดเด่นเหมาะสำหรับหน้าจอที่มีความละเอียดแตกต่างกัน แต่อาจจำเป็นต้องปรับค่าเกณฑ์ (threshold) บางส่วนตามขนาดหน้าจอของอุปกรณ์ที่แตกต่างกัน

```{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   | วิธีการจับคู่        |

## วิธีการจับคู่

วิธีการจับคู่รองรับการจับคู่แบบเทมเพลตและการจับคู่แบบจุดเด่น การจับคู่แบบเทมเพลตเหมาะสำหรับกรณีที่พื้นผิว (texture) ชัดเจนและรูปร่างของเป้าหมายคงที่ แต่ไม่ทนทานต่อการหมุน, การเปลี่ยนแปลงขนาด, และการเปลี่ยนแปลงของแสง การจับคู่แบบจุดเด่นทำงานโดยการตรวจจับจุดเด่นของรูปภาพ เช่น มุม, ขอบ และอธิบายลักษณะของจุดเด่นเหล่านั้น จากนั้นจึงทำการจับคู่ระหว่างรูปภาพสองภาพ มีความทนทานสูงต่อการหมุน, การเปลี่ยนแปลงขนาด, และการเปลี่ยนแปลงของแสง เหมาะสำหรับงานจับคู่ในฉากที่ซับซ้อน

| วิธีการจับคู่      | คำอธิบาย |
| ----------- | ----------- |
| 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   | จับคู่มุมล่างซ้ายของหน้าจอ        |