Thị giác máy tính với OpenCV-Python Bài 5 Phần 1: Thuật toán phát hiện góc Harris

Thị giác máy tính với OpenCV-Python Bài 5 Phần 1: Thuật toán phát hiện góc Harris

Thị giác máy tính với OpenCV-Python Bài 5 Phần 1: Thuật toán phát hiện góc Harris

09:18 - 16/01/2022

Trong phần này chúng ta sẽ tìm hiểu khái niệm và cách sử dụng thuật toán phát hiện góc Harris thông qua các hàm cv2.cornerHarris() và cv2.cornerSubPix().

Thị giác máy tính với OpenCV-Python Bài 7 Phần 3: Nhận diện khuôn mặt
Thị giác máy tính với OpenCV-Python Bài 7 Phần 2: Phát hiện người đi bộ trong video
Thị giác máy tính với OpenCV-Python Bài 7 Phần 1: Phát hiện người đi bộ trong hình ảnh
Thị giác máy tính với OpenCV-Python Bài 6 Phần 2: Phép trừ nền
Thị giác máy tính với OpenCV-Python Bài 6 Phần 1: Bắt bám đối tượng với Meanshift và Camshift

Khái niệm

Quan sát hình ảnh chúng ta có thể thấy rằng các góc trong hình ảnh là những vùng có cường độ biến thiên lớn theo tất cả các hướng. Thuật toán phát hiện góc Harris được đề xuất bởi Chris Harris và Mike Stephens trong một bài báo được công bố năm 1988, là thuật toán cho phép phát hiện sự khác biệt về cường độ này.

Thuật toán Harris trong OpenCV

OpenCV cung cấp hàm cv2.cornerHarris() cho mục đích phát hiện góc. Các đối số của nó là:

  • img - Hình ảnh đầu vào ở thang độ xám và kiểu float32.
  • blockSize - là kích thước của vùng lân cận được xem xét để phát hiện góc.
  • ksize - Tham số khẩu độ của dẫn xuất Sobel được sử dụng.
  • k - Tham số tự do của bộ dò Harris trong phương trình.

Xem đoạn code minh họa dưới đây:

  1. import cv2
  2. import numpy as np
  3. filename = 'imc_log.jpg'
  4. img = cv2.imread(filename)
  5. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  6. gray = np.float32(gray)
  7. dst = cv2.cornerHarris(gray, 2, 3, 0.04)
  8. #result is dilated for marking the corners, not important
  9. dst = cv2.dilate(dst, None)
  10. # Threshold for an optimal value, it may vary depending on the image.
  11. img[dst>0.01*dst.max()] = [0,0,255]
  12. cv2.imshow('dst', img)
  13. if cv2.waitKey(0) & 0xff == 27:
  14.      cv2.destroyAllWindows()

Chúng ta có thể điều chỉnh các giá trị blockSize (2), ksize (3), k (0,04) và threshold (0,01) trong đoạn code trên so sánh sự thay đổi kết quả.

Kết quả:

 

Ở phần tiếp theo chúng ta sẽ cùng tìm hiểu về thuật toán so khớp đội tượng Brute-Force và FLANN.

 

(Sưu tầm)
VIỆN IMC
Tòa nhà IMC Tower, Số 176 Trường Chinh, Phường Khương
Thượng, Quận Đống Đa, Thành phố Hà Nội, Việt Nam
Tel/Fax : (+84) 24 3566 6232 / 24 3566 6234
Email: contact@imc.org.vn   Website: https://imc.org.vn