Image Features – Corner

Pada tutorial sebelumnya digunakan template matching dimana tidak akan berfungsi dengan baik jika template tidak sama persis dengan target.

Template yang terdistorsi secara ukuran, rotasi dan perbedaan brightness, constrast dan hue menyebabkan template matching akan gagal.

Untuk mengatasi masalah diatas, digunakan image features.

Image features adalah interest point atau key point features yang unik. Contohnya pada gambar dibawah. Interesting point menunjukan feature dari image yaitu obyek jembatan.

Contoh implementasi dari image features:

  • Image alignment, contoh panorama stitching.
  • 3D Reconstruction.
  • Robot navigation.
  • Object recognition.
  • Motion tracking.

Interesting point dapat diartikan sebagai area yang berbeda dan unik, dapat berupa perbedaan intesitas yang tinggi, corners atau edges.

Karekteristik Interesting Point:

  • Repeatable, dapat ditemukan di image yang berbeda dengan scene yang sama.
  • Distinctive, setiap fitur unik dan berbeda dengan fitur lainnya.

Corner Sebagai Fitur

Corner atau sudut merupakan salah satu feature pada image.

Corner sebagai fitur cukup toleran terhadap rotasi, translation, dan perubahan kecil photometric (contoh: brightness).

Sedangkan corner kurang bisa beradaptasi terhadap perubahan intensitas photometric yang terlalu besar dan scaling.

OpenCV menyediakan beberapa fungsi untuk melakukan corner detection seperti cornerharris dan goodFeaturesToTrack.

Harris Corner

cv2.cornerHarris(image, block_size, ksize, k)
  • image: input image.
  • block_size: ukuran neighborhood yang dipertimbankan untuk corner detection
  • ksize: parameter aperture untuk sobel derivatif.
  • k: harris detection free parameter.

Berikut contoh code mencari corner menggunakan cv2.cornerHarris().

import numpy as np
import cv2
import matplotlib.pyplot as plt

%matplotlib inline

img = cv2.imread('chess.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gray = np.float32(img_gray)

harris_corner = cv2.cornerHarris(img_gray, 3, 3, 0.05)

kernel = np.ones((7,7), np.uint8)

harris_corner = cv2.dilate(harris_corner, kernel, iterations=2)

img[harris_corner>0.025 * harris_corner.max()] = [255,0,0]

plt.imshow(img)

goodFeaturesToTrack

goodFeaturesToTrack merupakan improvement dari cornerHarris.

cv2.goodFeaturesToTrack(img, maxCorners, qualityLevel, minDistance)
  • img: image source.
  • maxCorners: jumlah maksimum corner yang akan dideteksi.
  • qualityLevel: level kualitas dari corner. Contoh, jika kualitas corner terbaik adalah 1500, dan qualityLevel adalah 0.01, maka semua corner dibawah 15 (1500 * 0.01) akan didiskualifikasi.
  • minDistance: minimum Euclidean distance antar corners.
import numpy as np
import cv2
import matplotlib.pyplot as plt

%matplotlib inline

img = cv2.imread('chess.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

corners = cv2.goodFeaturesToTrack(img_gray, 50, 0.01, 15)

for corner in corners:
  x,y = corner[0]
  x = int(x)
  y = int(y)
  cv2.rectangle(img, (x-10, y-10), (x+10, y+10), (255,0,0), 2)

plt.imshow(img)

Sharing is caring:

Leave a Comment