Mendeteksi Lingkaran dengan OpenCV dan Python

OpenCV adalah library Computer Vision yang berbasis opensource yang terbuka untuk siapa saja. Walaupun sifatnya gratis tapi fitur-fiturnya termasuk mumpuni, tidak kalah dengan yang berbayar. Dengan OpenCV ini ini kita mampu menganalisa gambar sebagai sebuah ‘data’ besar. Bahkan openCV juga mampu menganalisa gambar secara streaming melalui kamera dan mengolahnya secara real time. Jadi seakan-akan Anda akan punya ‘mata’ elektronik melalui kamera. Tapi tergantung kecepatan CPU (dan GPU) Anda juga ya dalam proses pengolahan datanya.

Baiklah, pada tutorial kali ini kita akan belajar memanfaatkan OpenCV ini untuk mendeteksi lingkaran dalam sebuah gambar. Kalau tanpa OpenCV kayaknya kok susah ya caranya padahal hanya mau mendeteksi lingkaran aja, belum yang lain, tapi kalo pake library OpenCV hanya cukup beberapa baris saja sudah jadi 😊. Ohya, untuk tutorial kali ini saya akan menggunakan Python dulu, untuk next tutorial saya akan coba pake bahasa Delphi (yang sudah diinstal komponen OpenCV for Delphi)

Untuk mendeteksi lingkaran dengan Python pada intinya cukup menggunakan function ‘Hough Circle Transform‘ aja, dengan sintaks:

cv2.HoughCircles(gambar, metode, dp, minJarak, param1, param2, minRadius, maxRadius)

gambar : file gambar yang mau dicari lingkaran di dalamnya
metode : metode deteksi lingkaran (saat ini hanya tersedia function ‘cv2.HOUGH_GRADIENT’ di library OpenCV)
dp : rasio gambar terhadap matriks
minJarak : jarak minimal antar pusat lingkaran yang ingin dideteksi
param1, param2: parameter untuk deteksi pinggir (edge) Canny
minRadius : batas radius lingkaran yang paling kecil yang ingin dideteksi
maxRadius : batas radius lingkaran yang paling besar yang ingin dideteksi

Untuk mudahnya mari kita langsung coba saja ya. Berikut adalah contoh program sederhana untuk mendeteksi lingkaran dalam sebuah gambar. Kali ini sebagai sebuah study case, kita akan mencari iris mata dari sebuah gambar. Karena pada umumnya iris mata berbentuk lingkaran, maka kita akan mencoba menggunakan algoritma Hough Circle Transform untuk mencari iris mata dari suatu gambar. Berikut contoh script Python-nya:

import cv2
import numpy as np
gambar = cv2.imread('mata.png')

output = gambar.copy()
img = cv2.cvtColor(gambar, cv2.COLOR_BGR2GRAY)
# Cari iris (lingkaran)
circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1, 500, param1 = 50, 
               param2 = 20, minRadius = 50, maxRadius = 150)
# jika ditemukan
if circles is not None:
   # cari koordinat x,y dan radius (r)
   circles = np.round(circles[0, :]).astype("int")
   print(circles)
   # cari terus dlm loop
   for (x, y, r) in circles:
      cv2.circle(output, (x, y), r, (0, 255, 0), 2)
# tampilkan gambar
cv2.imshow("deteksi iris",output)
cv2.waitKey(0)

untuk gambar ‘mata.png’ dapat Anda unduh di sini (satukan dalam folder yang sama dengan program di atas)

Hasil program di atas adalah sbb:

Tampak bahwa lingkaran iris diberi warna outline hijau sesuai baris program 17 yang menandakan bahwa lingkaran ditemukan dalam gambar, di koordinat x,y dengan radius ‘r’

Demikian sedikit tutorial tentang mendeteksi lingkaran (case study: lingkaran iris mata) dengan OpenCV dan Python. Perlu untuk Anda perhatikan bahwa settingan parameter function cv2.HoughCircles sifatnya case by case, jadi perlu di-‘tune-up’ agar sesuai untuk mendeteksi lingkaran di gambar yang berbeda. Selamat mencoba

Leave a Reply